如果我把这两行代码发送给Powershell
$sName = "ALG" $service = Get-Service -computername db-name -Name $sName
我会在那台电脑上找回有关该服务的信息。 如果我将名称更改为“db-nameXXX”(假名称),则会收到错误消息,指出找不到该服务。 但是,我有一个服务器,停止接受远程桌面会话(我也不能连接到MS SQLpipe理工作室),并发送这些命令(该机器在错误的情况下),只是挂起…脚本运行,但从来没有回报。 我想有一个“超时”的function,以便在某个时候,我可以输出一条消息,说机器没有响应。 现在,剧本不让我做任何事情。 我尝试了一个启动/进程/结束块,但只要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 }
这将提交Get-Service
作为工作,并等待工作完成。 通过在作业上设置超时,如果未能完成返回将为空。 如果值为null,则执行所需的任何error handling,或者接收作业并将结果放在$service
variables中(如果已完成)。 这将返回一个Deserialized.System.ServiceProcess.ServiceController
对象。 调整 – Wait-Job
-Timeout
,以适应您的需求。