【发布时间】:2015-07-27 11:28:12
【问题描述】:
我是 Powershell 的新手,在学习阶段,我尝试创建一个脚本来自动执行以下任务。这个脚本没有像我预期的那样工作。能否请您检查一下并给我一些帮助。
我的任务是,
我正在尝试找出处于停止状态的 SQL 服务(多个服务器中的多个 SQL 服务)并尝试启动它,等待一分钟以完成服务启动并再次验证服务状态。如果它仍然处于停止状态,我正在尝试发送电子邮件以设置人员以执行操作。
能否请您查看以下代码并纠正错误,我试图找到它但无法做到
#Define servers & Services Variables
$Servers = GC "E:\Bhanu\SQLServer.txt"
$Services = GC "E:\Bhanu\SQLService.txt"
#Function Call
Function ServiceStatus ($Servers, $Services)
{
foreach ($Server in $Servers)
{
foreach ($Service in $Services)
{
$Servicestatus = get-service -ComputerName $Server -Name $Service
if ($Servicestatus.Status -eq "Stopped")
{
Start-service $Service
Start-Sleep -Seconds 60
$ServiceStatus1 = Get-Service -ComputerName $Server -Name $Service
if ($Servicestatus1.Status -eq "Stopped")
{
FuncMail -To “abc@gmail.com” -From “abc@gmail.com” -Subject $Server + $Service "fails to Start, Take immediate Action to avoid Impact” -Body $ServiceName "Service fails to Start, Take immediate Action to avoid Impact” -smtpServer “servername”
}
}
}
}
}
function FuncMail
{
#param($strTo, $strFrom, $strSubject, $strBody, $smtpServer)
param($To, $From, $Subject, $Body, $smtpServer)
$msg = new-object Net.Mail.MailMessage
$smtp = new-object Net.Mail.SmtpClient($smtpServer)
$msg.From = $From
$msg.To.Add($To)
$msg.Subject = $Subject
$msg.IsBodyHtml = 1
$msg.Body = $Body
$smtp.Send($msg)
}
servicestatus $Servers $Services
如果您需要我这里的任何东西,请告诉我
【问题讨论】:
-
你已经定义了 serviceStatus 函数但从未调用过它
-
您还没有告诉我们它的行为与您期望的不一样吗?
-
需要更多关于此处是否发生错误的信息。此外,如果
Send-MailMessagecmdlet 已经可用,则不需要您的 FuncMail 函数。 -
这不会影响您的代码,但我看起来您在
Start-Sleep周围有多余的大括号,不需要在那里。当我注意到它们时,我试图清理多余的间距。 -
您确定您在文本文件中使用的是实际服务名称而不是服务描述吗?例如“Windows Update”是描述,但服务的名称是“wuauserv”。您的姓名参考中的空格使我怀疑是这种情况。如果是这样,请更改文本文件以使用实际的服务名称,否则您将需要添加更多代码来查找基于描述的选择。
标签: sql-server powershell