В моем командлете есть команда Get-Deal
, которая будет получать значение из конвейера:
[Cmdlet(VerbsCommon.Get, "Deal")]
public class GetDealCmdlet : InsightBaseCmdlet
{
private List<Object> _legalentities = new List<Object>();
[Parameter(Position = 0, Mandatory = true, ValueFromPipeline = true,ValueFromPipelineByPropertyName = true)]
public List<Object> Legalentity { set { _legalentities = value; } }
protected override void ProcessRecord() {...}
}
Он отлично работает, если я передал список строк или других типов. Однако, если я передал объект, созданный в Search-Deal
:
foreach (...)
{
PSObject dealValue = new PSObject();
dealValue.Properties.Add(new PSNoteProperty(Legalentity,Convert.ToInt32($deal.Properties["LegalEntityID"].Value.ToString())));
dealValue.Properties.Add(new PSNoteProperty("Name",deal.Properties["name"].Value.ToString()));
WriteObject(dealValue);
}
Я получаю сообщение об ошибке:
Вход конвейера не может быть обработан, так как невозможно получить значение по умолчанию для параметра «Законность». Исключение при получении «Легальности»: выражение должно быть читаемым. Имя параметра: выражение.
Я уверен, что search-Deal
работает нормально, потому что
$a = Search-Deal name
работает. И давая:
Get-Deal $a
возвращает точный результат, который я хочу.
Однако
$a | Get-Deal
тоже будет ошибкой.
РЕДАКТИРОВАТЬ: используя
Trace-Command -Name ParameterBinding -Expression { Search-Deal JL | Get-Deal } -PSHost
Я нашел следующее:
CALLING BeginProcessing
BIND PIPELINE object to parameters: [Get-Deal]
PIPELINE object TYPE = [System.Management.Automation.PSCustomObject]
RESTORING pipeline parameter's original values
BIND PIPELINE object to parameters: [Out-Default]
PIPELINE object TYPE = [System.Management.Automation.ErrorRecord]
Parameter [InputObject] PIPELINE INPUT ValueFromPipeline NO COERCION
BIND arg [Pipeline input cannot be processed because the default value of parameter 'LegalEntity' cannot be retrieved. Exception getting "LegalEntity": "Expression must be readable Parameter name: expression"]
Поэтому я думаю, что что-то не так с конвейером, передающим объекты.
Спасибо за любую помощь!