Я написал простой командлет C #, назовем его Get-Data
, который возвращает массив объектов.
protected override void ProcessRecord() {
base.ProcessRecord();
DummyClass[] refs = new DummyClass[2];
refs[0] = new DummyClass("A", "big");
refs[1] = new DummyClass("B", "small");
base.WriteObject(refs);
return;
}
Это определение DummyClass
:
public class DummyClass {
public string Name { get; set; }
public string Type { get; set; }
public DummyClass(string name, string type) {
this.Name = name;
this.Type = type;
}
}
Когда я запускаю командлет отдельно, я получаю ожидаемый результат - одну строку с заголовками столбцов и дополнительную строку для каждого элемента массива.
PS> Get-Data Name Type ---- ---- A big B small
Однако, когда я передаю вывод в Select-Object
, я вижу заголовки столбцов, но не строки данных.
PS> Get-Data | Select-Object -Property Name,Type Name Type ---- ----
Я даже попытался указать количество строк, но безуспешно:
PS> Get-Data | Select-Object -Property Name,Type -Last 2
Проверка типа Get-Data
возвращает тип данных DummyClass[]
, чего я и ожидал.
(Get-Data).GetType().FullName
Есть ли у кого-нибудь мысли о том, почему при использовании Select-Object
нет строк данных? Не знаю, имеет ли это значение, но этот командлет наследуется от System.Management.Automation.PSCmdlet
.
Get-Data | Select-Object -Property *
? - person Lee_Dailey   schedule 18.11.2019Name
илиType
... это означает, что в вашем объекте есть что-то странное. Я рекомендую вам сохранить объект в $ Var, а затем посмотреть, что$Var.GetType()
покажет вам. - person Lee_Dailey   schedule 18.11.2019