我想调用命令
$myArray = Get-Wmiobject -Class Win32-printer
但是,在极少数情况下,此命令有时永远不会失败也不会成功,返回可用打印机列表。
我想仅在调用时间少于几秒时分配$ myArray,假设为5.否则,我想显示一个对话框,告知此时打印机不可用。
如何使用超时启动PowerShell块?
答案 0 :(得分:9)
您可以使用这项工作:
$job = Start-Job { Get-Wmiobject -Class Win32-printer }
$job | Wait-Job -Timeout 5
if ($job.State -eq 'Running') {
# Job is still running, cancel it
$job.StopJob()
} else {
# Job completed normally, get the results
$myArray = $job | Receive-Job
}
答案 1 :(得分:1)
我想说使用类型转换和本机.NET提供程序创建自己的自定义WMI查询。这样,工作仍然在同一个打开的控制台中完成,并且您可以对超时进行物理控制。
我基本上和你一样受挫。我会整天查询服务器,直到我遇到WMI损坏的服务器。经过这么多,我开始研究如何创建自己的WMI函数来解决这个问题。这是我解决问题的方法。一路上学到了很多东西。
这是一篇可以帮助您的文章。
http://stevenmurawski.com/powershell/2009/01/dealing-with-wmi-timeouts/
答案 2 :(得分:0)
只是添加到上面 - powershell还有一个内置的秒表诊断超时功能。
https://technet.microsoft.com/en-us/magazine/2009.03.heyscriptingguy.aspx