今回はライセンスに含まれている特定のサービスプランが有効なユーザーの情報を一覧として取得する方法についてご紹介したいと思います。
下記公開情報の [1. Microsoft Graph PowerShell のインストール] を参考に、Microsoft Graph PowerShell 用モジュールのインストールをしてから実行してください。
※ すでに本モジュールのインストールが完了している場合、再インストールは不要ですので、後述の <Windows PowerShell への接続> の手順からご実施ください。
jpazureid.github.io
Microsoft Graph PowerShell 用モジュールのインストールが完了したら、以下の手順にて、Windows PowerShell へ接続してください。
1. Windows PowerShell を右クリックして [管理者として実行] で起動します。
2. 以下のコマンドレットを実行し、管理者ユーザーの ID とパスワードを入力します。
【コマンドレット】
Connect-MgGraph -Scopes "Organization.Read.All","User.ReadWrite.All"
3. 以下のコマンドレットを実行し、モジュールをインポートします。
【コマンドレット】
Import-Module -Name Microsoft.Graph.Users
テナントに紐づくライセンス情報を確認する
以下のコマンドレットを実行し、ご契約中のライセンスの SkuId を確認します。
【コマンドレット】
Get-MgSubscribedSku | ft Id, SkuId, SkuPartNumber -Wrap
出力例
Id SkuId SkuPartNumber
-- ----- --------
a818a9d9-4bf7-4316-b8bb-e0f1a52ce5ea_6fd2c87f-b296-42f0-b197-1e91e994b900 6fd2c87f-b296-42f0-b197-1e91e994b900 ENTERPRISEPACK
説明
・ 上記出力例は、[Office 365 E3/ENTERPRISEPACK] のライセンスのみを契約している場合の例です。
・ テナントにて複数のライセンスを所有している場合には所得しているすべてのライセンスが表示されます。
learn.microsoft.com
ライセンス内のサービスを確認する
以下のコマンドレットを実行し、ライセンスに含まれるサービス プランの情報を確認します。
【コマンドレット】
Get-MgSubscribedSku -SubscribedSkuId "<Get-MgSubscribedSku コマンドで確認した、サービス プランを確認したいライセンスの Id>" | Select-Object -ExpandProperty ServicePlans | ft ServicePlanId, ServicePlanName
【実行例】
Get-MgSubscribedSku -SubscribedSkuId "a818a9d9-4bf7-4316-b8bb-e0f1a52ce5ea_6fd2c87f-b296-42f0-b197-1e91e994b900" | Select-Object -ExpandProperty ServicePlans | ft ServicePlanId, ServicePlanName
説明
上記実行例では、[Office 365 E3] に含まれるサービスプランを確認してます。
特定のサービス プランが有効なユーザー情報を出力する
以下のコマンドレットを実行することで、特定のサービス プランが有効なユーザーを CSV ファイルに出力することが可能です。
ライセンスを指定するコマンドレット例
【コマンドレット】
$users | ForEach {$user = $_ ; Get-MgUserLicenseDetail -UserId $user.UserPrincipalName | Select-Object SkuPartNumber,SkuId -ExpandProperty ServicePlans | Select @{n="UserPrincipalName"; e={%{$user.UserPrincipalName}}}, SkuPartNumber,SkuId,ProvisioningStatus,ServicePlanId,ServicePlanName}|Where{($_.SkuId -eq "<対象ライセンスの skuId>") -and ($_.ServicePlanId -eq "<対象サービス プランの ServicePlanId>") -and ($_.ProvisioningStatus -ne "Disabled") } | Export-csv "<出力する CSV ファイル名>" -NoTypeInformation -Encoding UTF8
【実行例】
$users | ForEach {$user = $_ ; Get-MgUserLicenseDetail -UserId $user.UserPrincipalName | Select-Object SkuPartNumber,SkuId -ExpandProperty ServicePlans | Select @{n="UserPrincipalName"; e={%{$user.UserPrincipalName}}}, SkuPartNumber,SkuId,ProvisioningStatus,ServicePlanId,ServicePlanName}|Where{($_.SkuId -eq "6fd2c87f-b296-42f0-b197-1e91e994b900") -and ($_.ServicePlanId -eq "efb87545-963c-4e0d-99df-69c6916d9eb0") -and ($_.ProvisioningStatus -ne "Disabled") } | Export-csv "C:\temp\EXOUser.csv" -NoTypeInformation -Encoding UTF8
ライセンスを指定しないコマンドレット例
【コマンドレット】
$users | ForEach {$user = $_ ; Get-MgUserLicenseDetail -UserId $user.UserPrincipalName | Select-Object SkuPartNumber,SkuId -ExpandProperty ServicePlans | Select @{n="UserPrincipalName"; e={%{$user.UserPrincipalName}}}, SkuPartNumber,SkuId,ProvisioningStatus,ServicePlanId,ServicePlanName}|Where{($_.ServicePlanId -eq "<対象サービス プランの ServicePlanId>") -and ($_.ProvisioningStatus -ne "Disabled") } | Export-csv "<出力する CSV ファイル名>" -NoTypeInformation -Encoding UTF8
【実行例】
$users | ForEach {$user = $_ ; Get-MgUserLicenseDetail -UserId $user.UserPrincipalName | Select-Object SkuPartNumber,SkuId -ExpandProperty ServicePlans | Select @{n="UserPrincipalName"; e={%{$user.UserPrincipalName}}}, SkuPartNumber,SkuId,ProvisioningStatus,ServicePlanId,ServicePlanName}|Where{($_.ServicePlanId -eq "efb87545-963c-4e0d-99df-69c6916d9eb0") -and ($_.ProvisioningStatus -ne "Disabled") } | Export-csv "C:\temp\EXOUser.csv" -NoTypeInformation -Encoding UTF8
説明
・ 対象の全ユーザーを取得するには、 Get-MgUser のすぐ後ろに -All オプションを指定します。-All を指定しない場合は、100 ユーザーなど一部の結果のみが返されます。
・ PowerShell 7 を利用している場合、環境によって文字化けする可能性があります。出力されたファイルに文字化けが発生している場合は、コマンドレット内の [-Encoding UTF8] を [-Encoding UTF8BOM] に書き換えて実行し、文字化けの回避が可能かお試しください。