这不会返回任何内容:
$x = "C:\temp"
Start-Job -ScriptBlock {get-childItem -path $x} | Wait-Job | Receive-job
但是提供没有变量的path参数,就像这样......
Start-Job -ScriptBlock {get-childItem -path C:\temp} | Wait-Job | Receive-job
...返回该临时文件夹的内容,在这种情况下为durrr.txt。这是在Windows Server 2008R2 SP1上,Powershell $ host.version输出如下:
Major Minor Build Revision
----- ----- ----- --------
3 0 -1 -1
怀疑Powershell的v3,我尝试将Windows 7 SP1桌面从v2更新到v3,但没有运气重新创建问题。在升级的桌面上,$ host.version输出现在与上面的匹配。
发生了什么事?
编辑/发生了什么?
被破坏的工作似乎相当于
Start-Job -ScriptBlock {get-childItem -path $null} | Wait-Job | Receive-job
因此gci返回后台作业当前目录的结果,即Documents文件夹,该文件夹恰好是空的。
答案 0 :(得分:1)
您需要将参数传递给scriptblock
$x = "C:\temp"
Start-Job -ScriptBlock {get-childItem -path $args[0]} -argumentlist $x | Wait-Job | Receive-job
在powershell V3中,你可以这样做:
$x = "C:\windows"
Start-Job -ScriptBlock {get-childItem -path $using:x} | Wait-Job | Receive-job