我正在使用这个简化的PowerShell v1脚本来收集一些服务器统计信息。该脚本从外部监视服务器(Zabbix)调用。这些统计信息的收集可能需要超过30秒(Zabbix超时),因此我开始使用相同脚本的第二个实例来收集数据。使用这种技术,脚本的第一个实例在Zabbix超时内完成,数据收集仍然在后台进行:
Param([string] $action)
$path = "\\SERVER\share\"
$file = $path + "test.txt"
switch ($action) {
'collect' {
Write-Host "collecting data, this will take a while..."
# pause the script to simulate processing time:
Start-Sleep -s 10
# for testing, create an empty testfile:
New-Item -ItemType File $file | Out-Null
break
}
'execute' {
$script = $path + "ForkedExecute.ps1 collect"
$vars = "-ExecutionPolicy ByPass"
$out = $path + "stdout.txt"
$err = $path + "stderr.txt"
# without the -Redirect[...] options, the testfile is not created:
# Start-Process $pshome\powershell.exe -ArgumentList "& `"\$script`" $vars"
# the testfile is successfully created:
Start-Process $pshome\powershell.exe -ArgumentList "& `"\$script`" $vars" -RedirectStandardOutput $out -RedirectStandardError $err
break
}
default {
Write-Host "error - no action defined"
}
}
我现在面临的问题是,如果没有-Redirect[...]
选项,脚本的第二个实例就会启动,但无法创建测试文件。使用-Redirect[...]
选项后,将创建testfile,但脚本的第一个实例必须等待第二个实例完成并最终超时。
如何修复此脚本,以便“收集”部分成功运行且脚本不会超时?