使用 powershell 获取服务不返回

使用 powershell 获取服务不返回

如果我将这两行代码发送到 Powershell

$sName = "ALG"
$service = Get-Service -computername db-name -Name $sName

我将获得有关该计算机上该服务的信息。如果我将名称更改为“db-nameXXX”(假名),我将收到一条错误消息,提示未找到该服务。但是,我的服务器停止接受远程桌面会话(我也无法连接到 MS SQL Manaagement Studio),并且将这些命令发送到该计算机(在出现错误时)只会挂起...脚本运行但永远不会返回。我希望有一个“超时”功能,以便在某个时候,我可以输出一条消息,说明机器没有响应。现在,脚本不让我做任何事情。我尝试了启动/处理/结束块,但只要 get-service 没有返回错误,我就无法到达任何地方。

答案1

尝试这样的操作:

$sb = [scriptblock]::create("Get-Service -computername db-name -Name $sName")
$job = Start-Job -ScriptBlock $sb | Wait-Job -Timeout 10
if($job -eq $null) {
    #timed out
}
else {
     $service = Receive-Job $job
}

这将Get-Service作为一项作业提交并等待作业完成。通过设置作业的超时时间,如果作业未能完成,则返回结果将为空。如果值为空,则执行您需要的任何错误处理,或者$service如果作业已完成,则接收作业并将结果放入变量中。这将返回一个Deserialized.System.ServiceProcess.ServiceController对象。调整-TimeoutWait-Job满足您的需求。

相关内容