使用 powershell 获取服务不返回

1 powershell

如果我将此两行发送到 Powershell

$sName = "ALG"
$service = Get-Service -computername db-name -Name $sName
Run Code Online (Sandbox Code Playgroud)

我将在该计算机上获取有关该服务的信息。如果我将名称更改为“db-nameXXX”(虚假名称),我将收到找不到该服务的错误消息。但是,我有一个服务器停止接受远程桌面会话(我也无法与 MS SQL 管理工作室连接)并将这些命令发送到该机器(在错误情况下)只是挂起......脚本运行但从未返回。我想要一个“超时”功能,以便在某个时刻,我可以输出一条消息,说机器没有响应。现在,脚本不允许我做任何事情。我尝试了 start/process/end 块,但只要 get-service 没有出现错误,我就无法到达任何地方。

rtf*_*rtf 6

尝试这样的事情:

$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
}
Run Code Online (Sandbox Code Playgroud)

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