如何将值传递给嵌套的ForEach?

时间:2011-03-11 23:16:35

标签: powershell

我试图在内部ForEach循环中使用在外部ForEach循环中创建的变量。该值不会像我预期的那样通过,并且始终为null。

注意$ server的值总是为null你能告诉我为什么以及如何修复?

$Srvrs = "SVR1";
$Srvrs | ForEach-Object {


    $server = $_;
    Write-Host "Server value in outer Foreach:" $server;

    $sourceFilesLoc = "D:\Test\SetupSoftwareAndFiles"
    $sourceFiles = Get-ChildItem -LiteralPath $sourceFilesLoc;

    $sourceFiles | ForEach-Object  {
        Start-Job -InputObject $server -ScriptBlock     {
            Write-Host "Server value in inner Foreach:" $server;
            }
        }
}

2 个答案:

答案 0 :(得分:9)

通过-ArgumentList参数传递参数,例如:

Start-Job -InputObject $server -ScriptBlock {param($svr)
    Write-Host "Server value in inner Foreach:" $svr;
} -ArgumentList $server

以下是使用-ArgumentList的简单示例:

PS> $server = 'acme'
PS> $job = Start-Job {param($svr) "server is $svr"} -ArgumentList $server
PS> Receive-Job $job
server is acme

答案 1 :(得分:2)

问题是没有访问嵌套foreaches中的变量..如果你在内部foreach中做了变量的写主机,那就没问题了。它是将变量传递给作业的问题。作业是在后台运行的不同过程。