Select-Object с System.Management.Automation не возвращает выбранные свойства - PullRequest
0 голосов
/ 08 декабря 2018

Я использую System.Management.Automation.dll для извлечения почтовых ящиков в c # с помощью Select-Object, чтобы вернуть только те поля, которые мне нужны.К сожалению, возвращаемый результат представляет собой список объектов PSO с одним свойством и нулевым значением.Свойства не отображаются правильно на возвращенные объекты PSObjects.

Настройка конвейера Runspace:

var o365ConnectionUri = "https://outlook.office365.com/powershell-liveid/";
var exchangeModuleUri = "http://schemas.microsoft.com/powershell/Microsoft.Exchange";
var connectionInfo = new WSManConnectionInfo(new Uri(o365ConnectionUri), exchangeModuleUri, credentials)
{
    AuthenticationMechanism = AuthenticationMechanism.Basic
};
var runspace = RunspaceFactory.CreateRunspace(connectionInfo);
runspace.Open();
var pipeline = runspace.CreatePipeline()

Выполнение команды:

var getMailboxesCmd = new Command("Get-Mailbox");
getMailboxesCmd.Parameters.Add("ResultSize", "unlimited");

var fieldsToSelect = new[]
{
    "RecipientTypeDetails",
    "PrimarySmtpAddress",
    "DisplayName"
};
var sparseMailboxesCmd = new Command("Select-Object");
sparseMailboxesCmd.Parameters.Add("Property", string.Join(",", fieldsToSelect));

pipeline.Commands.Add(getMailboxesCmd);
pipeline.Commands.Add(sparseMailboxesCmd );

var result = pipeline.Invoke();

Теперь я ожидаю, что результатбыть списком объектов PSO со свойствами RecipientTypeDetails, PrimarySmtpAddress и DisplayName.Однако, как я упоминал выше, возвращается одно свойство с именем RecipientTypeDetails,PrimarySmtpAddress,DisplayName с нулевым значением.

Properties Not Returned

Насколько я могу судить, это должно бытьошибка в System.Management.Automation.dll, кто-нибудь еще имел дело с этим или нашел решение?

1 Ответ

0 голосов
/ 08 декабря 2018

Команда Select-Object при использовании с параметром Property принимает одно имя свойства в виде строки или строковый массив имен свойств в качестве аргумента.

В вашем случае вы объединяете три свойства в одно целоеодну строку, выполнив string.Join(",", fieldsToSelect).Это сводится к тому, чтобы запросить Select-Object найти одно-единственное свойство с именем "RecipientTypeDetails, PrimarySmtpAddress, DisplayName" и, конечно, которого не существует (возвращает null).

Чтобы это исправить, просто добавьте массив имен свойств для команды:

var sparseMailboxesCmd = new Command("Select-Object");
sparseMailboxesCmd.Parameters.Add("Property", fieldsToSelect);

Что касается вашего последнего комментария:
Select-Object вернет PSObject (s), где каждый объект содержит свойства, которые вы добавили вкоманда.

Чтобы получить (развернуть) фактические значения из этих объектов PSO, ваше решение, использующее .ToString, будет работать, поскольку все свойства в этом случае имеют строковый тип.Хотя я не особо разбираюсь в C #, я думаю, что это также поможет получить значения свойств из объектов PSObjects:

object.Properties["RecipientTypeDetails"].Value
object.Properties["PrimarySmtpAddress"].Value
object.Properties["DisplayName"].Value
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...