2011-12-29 74 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

是否HTTP://計算器.com/questions/978777/powershell-output-column-width help? – 2011-12-29 00:20:27

+0

涉及的對象有哪些類型? PowerShell使用表示來做一些常規的事情,但是你只需調用ToString(),就可以回到特定對象的C#ToString實現。這可能是問題所在。 (也請看另一條評論中發佈的鏈接)。 – driis 2011-12-29 00:27:47

回答

1

而不是item.ToString(),訪問實際屬性。

+0

以下是我給出的對象參考錯誤: 'string userprincipalname = item.Properties [「UserPrincipalName」]。Value as string();' 我不知道它是否重要,但我有整個事情作爲「AddScript」而不是「AddCommand」。無論如何,如果我做item.ToString(),我會從我原來的問題中得到結果。 – 2011-12-30 17:13:50

5

如果你試圖解析管道的結果作爲一個字符串,你完全錯過了存在的理由的PowerShell你不必解析字符串。那就是1970年1月1日。現在,當你坐在現代Windows機器的前面時,Awk,sed和grep正在佛羅里達退休的家中。如果你覺得自己到達Cygwin,那麼你做錯了。

我這樣做了我的頭把你的腳本爲出發點的頂部,但你明白了吧(我希望):

​​

Geddit?順便說一句,你看到輸出中所有內容都被截斷的原因是你正在捕獲顯示友好的格式化輸出,這個輸出是針對狹窄的控制檯窗口而優化的。

+0

我真的剛剛開始在C#中使用PowerShell的東西,所以我不知道我只能從PSObject獲取屬性信息。這太棒了!但是,我現在有一個對象引用未設置爲對象的實例...我已經通過Google確保userprincipalname是正確的屬性。不知道從哪裏去除了繼續研究(我會這樣做)去哪裏。) 感謝您的幫助,順便說一下!我已經脫離了編程場景並開啓了一段時間,而且我的知識相當有限。 – 2011-12-30 15:47:11

0

我很欣賞整個屬性的幫助 - 我不知道我能做到這一點。

但是我最近的問題是在對象引用問題中。我最終通過使用this thread來解決這個問題。

在使用不同類型的PowerShell的,所以我可以調用兩次,並連接到通過ISS的MSOnline服務組合,我能得到我的用戶列表,而不解析文本:)

相關問題