PowerShell 循环问题

PowerShell loop issue

我有一段代码可以检查特定服务的状态,如果状态不是 "running" 则启动它。该变量似乎在 if/else 语句之前具有正确的数据,但即使我将其中一个测试服务器的服务设置为关闭,它也总是遵从 else。它会将一项服务报告为 运行,将一项服务报告为已停止,但两者都会回显 "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"}
}

很确定您的问题是您正在对具有 属性 状态的对象进行字符串比较,假设是状态状态的字符串。像以下任一示例一样更新填充 $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 的对象。第二个只是一个字符串。