Почему строки в моей коллекции обрезают слова? - PullRequest
3 голосов
/ 29 декабря 2011

Я пишу приложение PowerShell специально для Office 365. Я столкнулся с проблемой.

var result = pipeline.Invoke();
// close the runspace
runspace.Close();

// convert the script result into a single string

StringBuilder stringBuilder = new StringBuilder();
stringBuilder.AppendLine("<----------------Results---------------->");
foreach (var item in result)
{
    stringBuilder.AppendLine(item.ToString());
}

Теперь все отлично работает, пока я не получу свои результаты.Проблема в том, что если я получу ответ, подобный следующему:

UserPrincipalName          DisplayName                isLicensed                
-----------------          -----------                ----------                
johnsonadmin@johnsoncom... Jack M*****                False  

Если я выполню ту же команду в Powershell, я получу те же результаты, но с немного более организованным форматированием.Вместо того, чтобы сказать «johnsonadmin @ johnsoncom ...», он фактически даст мне полный адрес электронной почты.

Я думаю, что это может быть проблемой с тем, как коллекции автоматически форматируют мою строку, но я неконечно.Это становится огромной проблемой, когда я пытаюсь разобрать этот текст для адресов электронной почты;)

Любая помощь будет признательна !!

Спасибо!

Ответы [ 3 ]

5 голосов
/ 29 декабря 2011

Если вы пытаетесь проанализировать результаты конвейера как строку, вы полностью пропускаете raison d'etre powershell: вам не нужно анализировать строки . Это так 1 января 1970 года. Awk, sed и grep находятся в доме престарелых во Флориде, когда вы сидите перед современной машиной Windows. Если вы чувствуете, что тянетесь к Cygwin, вы делаете это неправильно.

Я делаю это изо всех сил, принимая ваш сценарий в качестве отправной точки, но вы получите точку (надеюсь):

//...
// result is a Collection<PSObject>
foreach (PSObject item in result) 
{ 
     // properties are not case-sensitive
     string userPrincipalName = item.Properties["userprincipalname"].Value as string;
     string displayName = item.Properties["displayname"].Value as string;
     bool isLicensed = item.Properties["islicensed"].Value as bool;
     // ...
} 

Geddit? Кстати, причина того, что вы видите все обрезанное в выводе, заключается в том, что вы захватываете форматированный вывод, оптимизированный для узкого консольного окна.

1 голос
/ 29 декабря 2011

Вместо item.ToString() доступ к фактическим свойствам.

0 голосов
/ 30 декабря 2011

Я ценю помощь по всему объекту свойств - я понятия не имел, что смогу это сделать.

Моя последняя проблема, однако, была связана со ссылкой на объект. Я решил, что с помощью этой темы .

В сочетании с использованием другого типа Powershell, чтобы я мог дважды вызывать и подключаться к службе MSOnline через ISS, я смог получить свой список пользователей без разбора текста:)

...