Powershell脚本检查服务是否正在运行,如果未运行,则停止并再次启动它

Powershell脚本检查服务是否正在运行,如果未运行,则停止并再次启动它,powershell,email,scripting,Powershell,Email,Scripting,所以我有这个脚本,我不知道为什么它不起作用。 我要讨论的部分是if语句前面的“foreach”部分 var start $email = "<Email1>, Email2" $Service = Get-Content -Path C:\temp\TextFile.txt Get-Content C:\temp\TextFile.txt | Where-Object {$_ -match $regex} | ForEach-Object { var end function F

所以我有这个脚本,我不知道为什么它不起作用。 我要讨论的部分是if语句前面的“foreach”部分

var start
$email = "<Email1>, Email2"
$Service = Get-Content -Path C:\temp\TextFile.txt
Get-Content C:\temp\TextFile.txt | Where-Object {$_ -match $regex} | 
ForEach-Object {
var end

function FuncCheckService
{
param($Service)
$arrService = Get-Service |           #vvvv this is where im having truble
Where { $Service -contains $_.Name} | foreach {

if ($Service.Status -eq “Running”){
}

if ($Service.Status -ne “Running”){
    Stop-Service $Service
    # Wait for 20 seconds before starting the service
    Start-Service $Service
    FuncMail -To $email -From “$env:COMPUTERNAME@mercantec.dk” -Subject 
“SERVERNAME $env:COMPUTERNAME : Services not started.” -Body “Service $regex 
started” -smtpServer “SMTP Ip here”
}
}
}

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)
}
FuncCheckService $Service
}
var启动
$email=“,Email2”
$Service=获取内容-路径C:\temp\TextFile.txt
获取内容C:\temp\TextFile.txt |其中对象{$\匹配$regex}|
ForEach对象{
变量端
功能检查服务
{
参数(服务)
$arrService=Get Service |#vvv这就是我要做的事情
其中{$Service-contains$u.Name}| foreach{
if($Service.Status-均衡“运行”){
}
if($Service.Status-网元“正在运行”){
停止服务$Service
#等待20秒后再开始服务
启动服务$Service
FuncMail-至$email-从“$env:COMPUTERNAME@mercantec.dk“-主题
“SERVERNAME$env:COMPUTERNAME:服务未启动。”-Body“服务$regex”
已启动“-smtpServer”SMTP Ip此处
}
}
}
功能邮件{
#参数($strTo、$strFrom、$strSubject、$strBody、$smtpServer)
参数($To、$From、$Subject、$Body、$smtpServer)
$msg=新对象Net.Mail.MailMessage
$smtp=新对象Net.Mail.SmtpClient($smtpServer)
$msg.From=$From
$msg.To.Add($To)
$msg.Subject=$Subject
$msg.IsBodyHtml=1
$msg.Body=$Body
$smtp.Send($msg)
}
FuncCheckService$服务
}

我对任何想法都持开放态度。

我本人是powershell新手,但从标题上的内容和查看脚本,您希望获得文本文件中的服务列表,查看它们是否正在运行,如果没有,则停止它们等待20秒,然后启动服务。您还添加了一些发送信息的电子邮件功能

下面是一个简单的脚本,它完成了第一部分

$content=获取内容-路径C:\testing\service.txt

foreach($content中的项目){

$getstatus=获取服务-名称$item

如果($getstatus.Status-eq'stopped'){

停止服务-名称$item

开始睡眠-s 20

启动服务-名称$item }


}

什么不起作用?你必须更具体一点,第二点foreach@Shubub第二个循环以什么方式不起作用?@shubb:编辑问题并解释什么不起作用,如果您遇到任何错误,
$service
是函数中的字符串,
$service。运行
将始终解析为
$null
。话虽如此,如果不描述您试图实现的目标,以及当前脚本如何辜负您的期望,就很难为您提供帮助。任何奇怪的行为和潜在的错误信息(全部)也应该包括在你的问题中