如果我将此两行发送到 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 没有出现错误,我就无法到达任何地方。
尝试这样的事情:
$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
对象。调整-Timeout
上Wait-Job
,以满足您的需求。
归档时间: |
|
查看次数: |
3530 次 |
最近记录: |