【发布时间】:2017-06-20 00:19:00
【问题描述】:
在此示例中,我尝试将 Get-ChildItem 的结果传递到脚本块中,但成功率有限且出现意外结果。
C:\temp 包含 3 个文件:
- A.txt
- B.txt
- C.txt
我想要的是将$files 传递到此处的脚本块中,并维护Get-ChildItem 返回的三个文件的完整列表。换句话说,我希望$files 在脚本块内部和外部返回 A.txt、B.txt 和 C.txt。
我能够做到这一点,但我无法可靠地做到这一点,也无法解释原因。我不想依赖“虚拟”变量来使其正常工作,我想了解其中的区别。
这里的第一个示例返回所有文件:
$files = Get-ChildItem -Path "C:\temp"
$test = $files.Get(0)
Write-Host $files.Count
Start-Job -ScriptBlock {
Param($test, $files)
Write-Host $files.Count
} -ArgumentList $test, $files | Out-Null
Wait-Job * | Out-Null
$results += Get-Job | Receive-Job
第二个示例只将 A.txt 传递到脚本块中:
$files = Get-ChildItem -Path "C:\temp"
Write-Host $files.Count
Start-Job -ScriptBlock {
Param($files)
Write-Host $files.Count
} -ArgumentList $files | Out-Null
Wait-Job * | Out-Null
$results += Get-Job | Receive-Job
有人可以帮忙解释一下正确的方法吗?
【问题讨论】:
-
你应该使用 foreach 循环。并迭代每个值,最后对其进行操作。
-
@Ranadip Dutta 这里的问题是,在第二个示例中,只有一个文件传递到脚本块中,尽管在我看来它的处理方式与第一个示例相同,确实通过了所有文件。
标签: powershell parameters scriptblock