удаленные задания PowerShell - PullRequest
2 голосов
/ 16 марта 2012

Почему я получаю сообщение об ошибке для кода ниже:

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

Receive-Job: объект ввода не может быть привязан ни к каким параметрам команды, так как команда не принимает конвейерinput или input и его свойства не соответствуют ни одному из параметров, принимающих конвейерный ввод.В строке: 1 символ: 147 + Get-Job -Id 1 |Select-Object -ExpandProperty childjobs |Where-Object {$ _. State -eq 'Завершено'} |Select-Object -ExpandProperty id |Receive-Job <<<< <br>+ CategoryInfo: InvalidArgument: (2: PSObject) [Receive-Job], 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.

Спасибо

1 Ответ

4 голосов
/ 16 марта 2012

Проблема в том, что 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 (текущий идентификатор процесса) с Get-Process.

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

Вывод этой команды слишком длинный, но он показывает вам все, что PowerShell пытался сделать, чтобы связать вышестоящий объект с нижестоящим командлетом.

...