我有一段代码来检查特定服务的状态,以及状态是否“正在运行”以启动它。该变量似乎在if / else语句之前具有正确的数据,但即使我将其中一个测试服务器的服务设置为off,它也总是推迟到其他地方。它会将一个服务报告为正在运行,一个服务停止,但会为两者报告“It's Down”。
提前感谢您的帮助
$Servers = get-content c:\scripts\list.txt
$Servers|foreach {
$service = Get-WmiObject -ComputerName $_ -Class Win32_Service -Filter "Name='Buildbot'"
$status = Get-Service -ComputerName $_ -Name "Buildbot" | select Status
echo $status
if ($status -eq "Running") {"Its Up!"} else {"It's down"}
#$service.StartService()
#"It should be up now"}
}
答案 0 :(得分:0)
非常确定您的问题是您正在对一个对象进行字符串比较,其属性状态为假定为状态状态的字符串。像以下任一示例一样更新填充$status
的行
$status = Get-Service -ComputerName $_ -Name "Buildbot" | select -ExpandProperty Status
$status = (Get-Service -ComputerName $_ -Name "Buildbot").Status
作为辅助考虑以下两个命令的输出
PS C:\Users\mcameron> Get-Service -Name "Print Spooler" | select Status
Status
------
Running
PS C:\Users\mcameron> Get-Service -Name "Print Spooler" | select -expand Status
Running
第一个结果是具有属性Status
的对象。第二个只是一个字符串。