如何在powershell脚本超时后停止powershell块

时间:2015-11-25 14:10:58

标签: powershell wmi jobs

我想调用命令

$myArray = Get-Wmiobject -Class Win32-printer

但是,在极少数情况下,此命令有时永远不会失败也不会成功,返回可用打印机列表。

我想仅在调用时间少于几秒时分配$ myArray,假设为5.否则,我想显示一个对话框,告知此时打印机不可用。

如何使用超时启动PowerShell块?

3 个答案:

答案 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