2015-12-14 48 views
2

我在下面运行此代码作为遍历服务器列表以检查服务是否正在运行的函数。这在手动运行时有效。从计划任务运行时,代码$arrService.Status转换为服务名称。我甚至尝试过类似Get-Service -Computer $Server -display $ServiceName | Select -expandproperty Status但返回空字符串或没有值。Powershell获取服务状态不能像预定任务一样工作

任何想法为什么从一个计划任务运行状态属性不会工作?

function CheckService{ 
    param($Server, $ServiceName) 
    $arrService = Get-Service -Computer $Server -display $ServiceName 
    if ($arrService.Status -ne "Running"){ 
     Start-Service -InputObject $ServerService 
    } 
} 
+2

我怀疑你遇到了权限问题。尝试启动与计划任务一样运行的PowerShell会话。你还能够检查你的服务状态吗? – djs

+0

我无法使用我正在使用的帐户凭据登录到服务器,但我确实输入了我的NT登录凭据以进行计划任务,当然这确实有效。这似乎很奇怪,该帐户有权运行该命令,但不返回状态字段信息。接下来的问题是需要什么权限才能获得该状态,以便我可以考虑授予该帐户的权限。这将需要更新许多服务器。 – pretzelb

+0

以不同的用户身份找到运行PowerShell的链接[link] http://blogs.technet.com/b/benshy/archive/2012/06/04/using-a-powershell-script-to-run-as-a - 不同用户-AMP-ELEVATE最process.aspx [/链接] – pretzelb

回答

0

感谢@djs我找到了解决方案,虽然不是一个绝妙的解决方案。将帐户添加到每个服务器的管理员组允许执行命令。在我们的情况下,这不是一个问题,所以我们要去解决这个问题。