如何在 powershell 脚本超时后停止 powershell 块
How to stop a powershell block after a timeout for powershell script
我想调用命令
$myArray = Get-Wmiobject -Class Win32-printer
但是,在极少数情况下,此命令有时既不会失败也不会成功,并返回可用打印机的列表。
我想仅在调用时间少于几秒时分配 $myArray,比方说 5 秒。否则,我想显示一个对话框,告知此时打印机不可用。
如何使用超时启动 powershell 块?
您可以为此使用一份工作:
$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
}
我会说使用类型转换和本机 .NET 提供程序创建您自己的自定义 WMI 查询。这样,工作仍在同一个打开的控制台中完成,并且您可以对超时进行物理控制。
我基本上和你一样沮丧。我会整天查询服务器,直到找到 WMI 损坏的服务器。经过这么多,我开始研究如何创建我自己的 WMI 函数来解决这个问题。那是我解决问题的方法。一路上学到了很多东西。
这里有一篇文章可以为您提供帮助。
http://stevenmurawski.com/powershell/2009/01/dealing-with-wmi-timeouts/
补充一下——powershell 还有一个内置的秒表诊断超时功能。
https://technet.microsoft.com/en-us/magazine/2009.03.heyscriptingguy.aspx
我想调用命令
$myArray = Get-Wmiobject -Class Win32-printer
但是,在极少数情况下,此命令有时既不会失败也不会成功,并返回可用打印机的列表。
我想仅在调用时间少于几秒时分配 $myArray,比方说 5 秒。否则,我想显示一个对话框,告知此时打印机不可用。
如何使用超时启动 powershell 块?
您可以为此使用一份工作:
$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
}
我会说使用类型转换和本机 .NET 提供程序创建您自己的自定义 WMI 查询。这样,工作仍在同一个打开的控制台中完成,并且您可以对超时进行物理控制。
我基本上和你一样沮丧。我会整天查询服务器,直到找到 WMI 损坏的服务器。经过这么多,我开始研究如何创建我自己的 WMI 函数来解决这个问题。那是我解决问题的方法。一路上学到了很多东西。
这里有一篇文章可以为您提供帮助。
http://stevenmurawski.com/powershell/2009/01/dealing-with-wmi-timeouts/
补充一下——powershell 还有一个内置的秒表诊断超时功能。
https://technet.microsoft.com/en-us/magazine/2009.03.heyscriptingguy.aspx