我正在尝试在 powershell 中执行函数或脚本块并设置执行超时。
基本上我有以下(翻译成伪代码):
function query{
#query remote system for something
}
$computerList = Get-Content "C:\scripts\computers.txt"
foreach ($computer in $computerList){
$result = query
#do something with $result
}
查询的范围可以从使用 Get-WmiObject 的 WMI 查询到 HTTP 请求,并且脚本必须在混合环境中运行,其中包括不都具有 HTTP 接口的 Windows 和 Unix 机器。因此,某些查询必然会挂起或需要很长时间才能返回。在我寻求优化的过程中,我写了以下内容:
$blockofcode = {
#query remote system for something
}
foreach ($computer in $computerList){
$Job = Start-Job -ScriptBlock $blockofcode -ArgumentList $computer
Wait-Job $Job.ID -Timeout 10 | out-null
$result = Receive-Job $Job.ID
#do something with result
}
但不幸的是,工作似乎会带来很多开销。在我的测试中,在 1.066 秒内执行的查询(根据 $blockofcode 中的计时器)在作为作业执行时需要 6.964 秒才能返回结果。当然可以,但我真的很想减少开销。我也可以一起开始所有工作,然后等待它们完成,但这些工作仍然会挂起或花费大量时间来完成。
所以,关于这个问题:有没有办法执行一个语句、函数、脚本块甚至是一个超时的脚本,它不包括作业带来的那种开销?如果可能的话,我想并行运行这些命令,但这不是一个交易破坏者。
任何帮助或提示将不胜感激!
编辑:在混合 windows/unix 环境中运行 powershell V3