我写了一个脚本,告诉我,如果SEP主服务正在运行的文件中列出的所有计算机,启动服务,如果其停止,并让我知道,如果它不存在。它似乎工作与启动服务,但我有问题,看到输出的状态在每台计算机上。如果该服务在列表中的每台计算机上运行,它将显示输出。如果其中一台计算机没有运行该服务,则会启动该服务,但对于已经运行该服务的计算机,我看不到第一个if语句的write-output消息。我想看到的是输出显示运行状态的所有机器与服务运行,当服务是在机器上启动它被停止,并希望看到消息告诉我什么机器上的服务是不。
$computers = Get-Content -Path "C:\temp2\generic_service2.bat"
$serivce = Get-Service -name SepMasterService -computername $computer
foreach ($computer in $computers) {
$ServiceStatus = $serivce.Status
$ServiceDisplayName = $serivce.DisplayName
if ($ServiceStatus -eq 'Running') {
Write-Output "Service OK - Status of $ServiceDisplayName is $ServiceStatus on $computer"
}
elseif ($ServiceStatus -eq 'stopped') {
Start-Service -Name SepMasterService -PassThru
}
else {
Write-Output "Service doesn't exist"
}
}
字符串
1条答案
按热度按时间m1m5dgzv1#
第2行中的变量拼写错误为
$serivce
。虽然这不会影响脚本的工作,但最好不要在代码中留下这样的东西。它完全要求别人沿着,只在一个地方“修复”它,然后你的剧本就坏了。另外,我猜那条线属于foreach内部而不是外部?
由于语句的顺序,只有在检查时服务正在运行时,才会看到
Service OK
消息。如果你在elseif
中启动它,当你测试它时,它是not启动的,所以从你的代码中可以预料到,如果你必须重新启动它,你不会看到任何写在屏幕上的东西。如果你想在重新启动时在屏幕上写入一些内容,可以像这样在Start-Service
之后添加它:字符串