チームとグループのレポートスクリプトの調整
PowerShellのトリックは実際の作業を完了するのに役立ちます
このブログの熱心な読者が気づいたかもしれないように、私はかなりの数のPowerShellスクリプトを作成しています。「開発」ではなく「書き込み」という言葉を使用していることに注意してください。それは、私の専門能力開発の時代が1980年代のVAX BASICとVAX COBOLの時代にあるからです。今日は、概念とプリンシパルを説明するために PowerShell を作成します。私は防弾や美しいコードは書きません。実際、私はアーキタイプハッカー(元の意味で)を表しています。
スクリプトのアップグレード
つまり、問題の解決策を探しに行くときに、常にテクニックを発見しているということです。私は常に新しいPowerShellのトリックに目を光らせていると言う人もいますが、それは要点を広げます。
Microsoft 365 のグループとチームのレポート スクリプト (図 1) を見てみましょう。私は2016年以来、このスクリプトの多くの反復に取り組んできました(最新バージョンは5.10です)。このコードは、Exchange Online コマンドレットを使用してグループ メールボックスを問い合わせることから、主に Graph API 要求に基づいており、はるかに高速な現在のバージョンに進化しました。一部の人々は、20,000を超えるグループに対してレポートを実行しました。

場合によっては、私が行う変更はニーズによって推進されます。たとえば、 Get-ExoMailboxFolderStatistics そして Get-MailboxFolderStatistics Exchange Online 管理モジュールの V3.01 のコマンドレットには、最後に受信した電子メールの日付とグループ メールボックスの受信トレイ フォルダー内のアイテム数のシステム オブジェクト (配列) を返すという厄介な習慣があります。場合によっては、コマンドレットは、グループ メールボックスに最後に受信した電子メールの日付が 2 つあることを報告します。これはクレイジーなものです。 Get-MailboxFolderStatistics コマンドレットは2006年から存在しており、Microsoftはこの時点でそれを台無しにするべきではありません。このソリューションは、PowerShellのトリックに基づいていません。代わりに、スクリプトには、Exchange Online コマンドレットの不安定な動作を処理するコードが含まれるようになりました。
メールアドレスを別々の行に出力する
それ以外の場合は、要求に応じて変更を加えます。最近のリクエストの1つは、V5.8で行ったグループ所有者の電子メールアドレスを含めることでした。次に、すべてのグループ所有者の電子メールアドレスをレポートに出力できるかどうかを尋ねられました。簡単に、スクリプトのコピーを編集して、各グループの所有者表示名を取得し、名前を文字列に結合します。しかし、データを Power BI にインポートするために各メール アドレスを別々の行に配置する必要があったため、うまくいきませんでした。
いくつかの検索は私を ジェフリー・スノーバーによって書かれた2006年5月のブログ当時、マイクロソフト内でPowerShellを広めるアーキテクトでした。その後、ジェフリーはマイクロソフトフェローになり、2022年版の序文を書いた直後の2023年の秋にGoogleに行くために去りました。 Office 365 for IT プロフェッショナル向け電子ブック.
ジェフリーのブログは、彼が「ウプトゥットフィールドスペレーター“、または OFS は、PowerShell が配列を文字列に変換するときに区切り記号として使用される文字列を含む特殊な変数として定義されます。デフォルトでは、OFS はスペースですが、変更できます。この知識といくつかの検索により、私はその方法を説明した別のブログにたどり着きました。 OFS でのエスケープ文字の使用.改行はエスケープキャラなので、プレスト、解決策が登場しました。
グループの所有者を取得し、データを配列に格納する次の例を考えてみましょう。
$GroupId = (Get-MgGroup -Filter "displayname eq 'Ultra Fans'").Id [array]$GroupData = Get-MgGroupOwner -GroupId $GroupId [array]$GroupOwners = $GroupData.AdditionalProperties.mail
これで、グループ所有者の電子メール アドレスが配列内に表示されます。
Tony.Redmond@office365itpros.com Ben.James@Office365itpros.com Chris.Bishop@office365itpros.com
配列を文字列に変換すると、出力はスペースで区切られた名前の行になります。
[string]$Owners = $GroupOwners $Owners Tony.Redmond@office365itpros.com Ben.James@Office365itpros.com Chris.Bishop@office365itpros.com
しかし、特別な$OFS変数を改行文字として定義すると、次のようになります。
$OFS="`n`n" [string]$ContactEmail = $GroupOwners $ContactEmail Tony.Redmond@office365itpros.com Ben.James@Office365itpros.com Chris.Bishop@office365itpros.com
問題が解決し、出力には別々の行に電子メールアドレスがあります。これは、インターネットで見つけることができる種類のPowerShellのトリックとテクニックの良い例です。
エクスポート CSV の制限の克服
私はよく使用します エクスポート-CSV コマンドレットを使用して、PowerShell から CSV ファイルにレポート データをエクスポートし、ユーザーが Excel などのツールを使用してデータを開いて操作できるようにします。最近、フランスの MVP は、チームとグループのアクティビティ レポート スクリプトがうまく機能したと報告しましたが、CSV 出力ではフランス語で使用されるアクセント付き文字が削除されました(éのように)グループ名などの重要な情報から。
これが起こるはずであることはまったく驚くべきことではありません。CSV ファイルは、カンマ区切りのプレーンテキスト ASCII ファイルです。書式設定と拡張文字を保持する場合は、ImportExcelモジュールの出番である、より洗練されたものが必要です。XLSXファイルにエクスポートすると、フォーマットが保持され、グループ名がすべてに表示されます。ここで学んだ教訓は、 エクスポート-CSV 良いが限られた仕事をします。非 ASCII データを使用する場合は、別の解決策を探してください。
いくつかのコードを記述し、調査するためのPowerShellのトリックをさらにいくつか発見する時が来ました!
ディスカッション
コメント一覧
まだ、コメントがありません