2015-02-05 116 views
0

我有一段代码来检查特定服务的状态,以及状态是否“运行”以启动它。这个变量似乎在if/else语句之前有适当的数据,但即使我将其中一个测试服务器的服务设置为关闭,它也总是遵循其他规则。它会报告一个服务正在运行,一个服务正在停止,但会对两者报告“It's Down”。PowerShell循环问题

在此先感谢您的帮助

$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"} 
} 
+1

你改变什么?选择状态“到”|“ select -expand Status' – Matt 2015-02-05 16:12:52

+0

按照来自@Matt的建议或使用'$ status.status -eq'运行“',目前'$ status'是一个对象,而不是一个字符串。 – arco444 2015-02-05 16:13:55

+0

PS U:\> C:\脚本\ buildbotsvc_check.ps1 状态 ----------- 运行 它的下跌 停止 它的下跌 – mdjohnson 2015-02-05 16:14:46

回答

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的对象。其次只是一个字符串。