2011-12-29 11 views
3

Office 365 전용 PowerShell 응용 프로그램을 작성 중이며 문제가 발생했습니다.왜 내 컬렉션의 문자열이 단어를 잘리지 않습니까?

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     
-----------------   -----------    ----------     
[email protected] Jack M*****    False 

내가 PowerShell에서 동일한 명령, 내가하지만 조금 더 조직 형식과 같은 결과를 얻을 수 있음을 실행하면

. "johnsonadmin @ johnsoncom ..."이라고 말하는 대신 실제로 전체 전자 메일 주소를 제공합니다.

콜렉션이 자동으로 문자열을 포맷하는 방식에 문제가있을 수 있다고 생각 합니다만 확실하지 않습니다. 이것은 이메일 주소에 대한 텍스트를 구문 분석하려고 할 때 큰 문제가됩니다.)

어떤 도움을 주시면 감사하겠습니다 !!

감사합니다.

+2

을 구문 분석하지 않고 사용자의 내 목록을 얻을 수 있었다 .com/questions/978777/powershell-output-column-width 도움 말? –

+0

관련 객체의 유형은 무엇입니까? PowerShell은 표현과 관련하여 흥미 진진한 작업을 수행하지만, ToString()을 호출하는 중일뿐입니다. 특정 개체에 대한 C# ToString 구현으로 되돌아갑니다. 그게 문제가 될 수 있습니다. (또한 다른 코멘트에 게시 된 링크를보십시오). – driis

답변

1

item.ToString() 대신 실제 속성에 액세스하십시오. 당신이 문자열로 파이프 라인의 결과를 분석하려는 경우

+0

다음은 객체 참조 오류가 발생하는 이유입니다. 문자열 userprincipalname = item.Properties [ "UserPrincipalName"] 값 (문자열)(); 중요한지는 모르겠지만 전체 내용은 "AddCommand"대신 "AddScript"로 표시됩니다. 관계없이, item.ToString()을 수행하면 원래 질문에서 얻은 결과를 얻습니다. –

5

, 당신은 완전히 존재 이유를 PowerShell의이 누락 : 당신은 문자열을 구문 분석 할 필요가 없습니다. 그래서 1970 년 1 월 1 일입니다. 요즘은 현대 Windows 머신 앞에 앉아있을 때 Awk, sed 및 grep은 플로리다의 은퇴 가정에 있습니다. Cygwin에 도달했다고 생각하면 잘못하고있는 것입니다.

나는 출발점으로 스크립트를 가지고 내 머리 위로 떨어져이 일을 해요,하지만 당신은 점 (I 희망) 얻을 것이다 :

//... 
// 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를? Btw, 당신이 출력에서 ​​잘리는 모든 것을보고있는 이유는 좁은 콘솔 창에 맞게 최적화 된 디스플레이 친화적 인 형식화 된 출력을 캡처한다는 것입니다.

+0

저는 C#에서 PowerShell을 사용하기 시작했습니다. 그래서 PSObject에서 속성 정보를 얻을 수 있을지 전혀 몰랐습니다. 그것은 아주 멋지다!그러나, 나는 지금 객체의 인스턴스로 설정되지 않은 객체 참조를 가지고있다 ... 나는 userprincipalname이 올바른 속성인지 확인하기 위해 Google을 거쳤다. 조사를 계속하는 것 외에 다른 곳으로 가야할 곳이 어디인지 확실하지 않습니다. (내가 할 것입니다.) 그런데 도움에 감사드립니다! 나는 잠시 동안 프로그래밍 장면을 벗어났다. 그리고 나의 지식은 상당히 제한적이다. –

0

전체 속성 조각에 대한 도움을 주시면 감사하겠습니다.

그러나 가장 최근의 문제는 객체 참조 문제입니다. 나는 this thread을 사용하여 그것을 해결했다. // 유래 : 두 번 내가 호출 할 수 파워 쉘의 다른 종류를 사용하고 ISS를 통해 MSOnline 서비스에 연결과 함께

, 나는 HTTP를합니까 텍스트를 :)

관련 문제