2012-03-16 56 views
2

为什么我收到的错误代码如下:PowerShell的远程作业

Get-Job -Id 1 | Select-Object -ExpandProperty childjobs | Where-Object {$_.state -eq 'Completed'} | Select-Object -ExpandProperty id | Receive-Job 

接收-工作:输入对象不能绑定到任何参数 命令或者是因为该命令不拿管道输入或 输入及其属性与 进行流水线输入的任何参数都不匹配。在行:1 char:147 + Get-Job -Id 1 | Select-Object -ExpandProperty childjobs | Where-Object {$ _。state -eq'Completed'} |选择对象 -ExpandProperty id |接收-工作< < < <
+ CategoryInfo:InvalidArgument:(2:PSObject)[接收-作业],ParameterBindingException + FullyQualifiedErrorId:InputObjectNotBound,Microsoft.PowerShell.Commands.ReceiveJobCommand

然而,该线作品完美:

Receive-Job (Get-Job -Id 1 | Select-Object -ExpandProperty childjobs | Where-Object {$_.state -eq 'Completed'} | Select-Object -ExpandProperty id) 

任何提示或有用的意见的代码表示赞赏。我是PowerShell的新手。

感谢

回答

4

的问题是,Select-Object -ExpandProperty id正在发送System.Int32这不是什么Receive-Job期待为它的ISA/HASA结合。删除-ExpandProperty,让您保留System.Management.Automation.PSCustomObject的ID属性。

Get-Job -Id 1 | Select-Object -ExpandProperty childjobs | Where-Object {$_.state -eq 'Completed'} | Select-Object id | Receive-Job 

如果你想看到的为什么System.Int32不结合Receive-Job可以使用Trace-Command细节问题细节。此简化示例尝试将Int32(当前进程ID)绑定到Get-Process

Trace-Command -Name ParameterBinding  -Option All -Expression { $PID | Get-Process } -PSHost 

此命令的输出是冗长,但它显示了一切的PowerShell试图做到上游对象绑定到下游小命令。

+0

+1向他展示Trace-Command,教他如何钓鱼:)。 – Marlon 2014-07-25 16:46:38