当-path是变量时,没有gci的接收作业结果

时间:2013-03-01 15:23:05

标签: powershell powershell-v3.0 get-childitem powershell-jobs

这不会返回任何内容:

$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文件夹,该文件夹恰好是空的。

1 个答案:

答案 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