我试图在内部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;
}
}
}
答案 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中做了变量的写主机,那就没问题了。它是将变量传递给作业的问题。作业是在后台运行的不同过程。