モズク食べる

雑食雑記

配布グループメンバー一覧取得powershell

配布グループとメンバー一覧取得スクリプト作った

 Microsoft365の配布グループの名前とメンバーを一発でリスト化したい!

えーとGet-DistributionGroupコマンドとGet-DistributionGroupMemberコマンドを…

それぞれcsvに出してExcelで何とかして…って面倒くさ!

そんな時に使えるpowershellスクリプトを作りました。

 

特徴

動作確認済みExchangePowerShellスクリプトです。

"配布グループ名","メンバーのアカウント名","メンバーのUPN"リストを出力します。

メンバーが0人の配布グループもリストに含めます。

実行中は進捗率が表示されます。

出力ファイルは、Excelで開くことを想定しています。

 

Powershell script for getting distribution groups and members.

Output also includes distribution groups with no members.

The progress rate is displayed while the script is running.

You open the output file in Excel.

 

PowerShellスクリプト初心者のためコードに改良の余地があります。

 

使い方

f:id:mozukuino:20210727202627p:plain

 

  • ExchangeOnlineに接続する。初回の場合モジュールもインストールする。powershell画面で下記3コマンドを実行
Set-ExecutionPolicy RemoteSigned
Install-Module -Name ExchangeOnlineManagement
Connect-ExchangeOnline

※確認画面が出たときは「はい」を選択。

※認証画面ではExchange管理者権限のあるアカウント情報を入力する。

 

  • 「ファイル」→「新規作成」をクリック

f:id:mozukuino:20210727202914p:plain

 

  • 新しく出現した白い方の画面にこのスクリプトをコピペする
$distributionGroups = Get-DistributionGroup -ResultSize Unlimited -RecipientTypeDetails MailUniversalDistributionGroup
$totaldistributionGroups =  $distributionGroups.count
$cnt=0
$nomember =""

foreach($distributionGroup in $distributionGroups) {

$cnt ++

    $g = $distributionGroup.PrimarySmtpAddress
    $q = Get-DistributionGroupMember $g -ResultSize Unlimited

      if ( $null -eq $q ){
        $nomember += $g + "`n"
        continue
        }

    else{
    Get-DistributionGroupMember $g -ResultSize Unlimited | 
        Select-Object @{Label="GroupName";
                        Expression={$g}},
                        DisplayName, 
                        PrimarySmtpAddress|
                        Export-Csv -Encoding UTF8 (join-path "C:\temp\" ("DistributionGroupMemberList" + (get-date).AddHours(9).ToString("yyyyMMdd") + ".csv")) -Append
    }
    $p = [Math]::Truncate($cnt/$totaldistributionGroups *100)
    $status = "$cnt / $totaldistributionGroups DistributionGroup"
    Write-Progress -activity "progress" -status $status -percentComplet $p 

}
Write-Output  $nomember| Out-file -Encoding UTF8 (join-path "C:\temp\" ("DistributionGroupMemberList" + (get-date).AddHours(9).ToString("yyyyMMdd") + ".csv")) -Append

 

  • Cドライブ直下にtempフォルダを用意する


スクリプト側を変更してもOK。フォルダパスはここで指定している

f:id:mozukuino:20210727221911p:plain

f:id:mozukuino:20210727211944p:plain

 

 出力結果

Excelで開くとこんな感じです。

f:id:mozukuino:20210727223356p:plain

test1,2,3@demo…はユーザアカウントです。

ドメイン名はダミーに置き換えています。