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
的对象。第二个只是一个字符串。
我有一段代码可以检查特定服务的状态,如果状态不是 "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
的对象。第二个只是一个字符串。