如果没有-Redirect [...]选项,则相同脚本的Start-Process启动第二个实例不起作用

时间:2017-03-20 10:48:37

标签: powershell

我正在使用这个简化的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,但脚本的第一个实例必须等待第二个实例完成并最终超时。

如何修复此脚本,以便“收集”部分成功运行且脚本不会超时?

0 个答案:

没有答案