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                
-----------------          -----------                ----------                
johnsonadmin@johnsoncom... Jack M*****                False  

同じコマンドを Powershell で実行すると、同じ結果が得られますが、書式が少し整理されます。「johnsonadmin@johnsoncom...」と言う代わりに、実際にはメールアドレス全体が表示されます。

これは、コレクションが文字列を自動的にフォーマットする方法に問題があるのではないかと考えていますが、よくわかりません。そのテキストを解析して電子メール アドレスを取得しようとすると、これは大きな問題になります ;)

どんな助けでも大歓迎です!!

ありがとう!

4

3 に答える 3

5

パイプラインの結果を文字列として解析しようとしている場合、powershell の存在理由が完全に失われています:文字列を解析する必要はありません。1970 年 1 月 1 日です。最近、フロリダの老人ホームで最新の Windows マシンの前に座っていると、awk、sed、grep がいます。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;
     // ...
} 

ゲディット?ところで、出力ですべてが途切れているのは、狭いコンソール ウィンドウ用に最適化された、表示しやすい形式の出力をキャプチャしているためです。

于 2011-12-29T03:48:10.333 に答える
1

の代わりにitem.ToString()、実際のプロパティにアクセスします。

于 2011-12-29T00:31:50.193 に答える
0

プロパティ全体のヘルプに感謝します-それができるとは思いもしませんでした。

しかし、私の最近の問題は、オブジェクト参照の問題にありました。このスレッドを使用して解決しました。

別の種類の Powershell を使用して 2 回起動し、ISS を介して MSOnline サービスに接続することと組み合わせて、テキストを解析せずにユーザーのリストを取得することができました :)

于 2011-12-30T17:57:56.327 に答える