PowerShell を使用してユーザー アカウントからMicrosoft 365ライセンスを削除する
この記事は、Microsoft 365 Enterprise および Office 365 Enterprise の両方に適用されます。
注意
Microsoft 365 管理センターを使用してユーザー アカウントからライセンスを削除する方法について説明します。 その他のリソースの一覧については、「 ユーザーとグループの管理」を参照してください。
Microsoft Graph PowerShell SDK を使用する
ユーザーのライセンスの割り当てと削除には、User.ReadWrite.All アクセス許可スコープまたは「ライセンスの割り当て」Graph API参照ページに一覧表示されている他のアクセス許可のいずれかが必要です。
テナントで使用可能なライセンスを読み取るには、Organization.Read.All アクセス許可スコープが必要です。
Connect-Graph -Scopes User.ReadWrite.All, Organization.Read.All
組織内のライセンス プラン情報を表示するには、次のトピックを参照してください。
ユーザー アカウントからのライセンスの削除
既存のユーザー アカウントからライセンスを削除するには、次の構文を使用します:
Set-MgUserLicense -UserId "<Account>" -RemoveLicenses @("<AccountSkuId1>") -AddLicenses @{}
この例では、ユーザー BelindaN@litwareinc.com からSPE_E5 (Microsoft 365 E5) ライセンス プランを 削除します。
$e5Sku = Get-MgSubscribedSku -All | Where SkuPartNumber -eq 'SPE_E5'
Set-MgUserLicense -UserId "belindan@litwareinc.com" -RemoveLicenses @($e5Sku.SkuId) -AddLicenses @{}
既存のライセンスユーザーのグループからすべてのライセンスを削除するには、次の構文を使用します。
$licensedUsers = Get-MgUser -Filter 'assignedLicenses/$count ne 0' `
-ConsistencyLevel eventual -CountVariable licensedUserCount -All `
-Select UserPrincipalName,DisplayName,AssignedLicenses
foreach($user in $licensedUsers)
{
$licencesToRemove = $user.AssignedLicenses | Select -ExpandProperty SkuId
$user = Set-MgUserLicense -UserId $user.UserPrincipalName -RemoveLicenses $licencesToRemove -AddLicenses @{}
}
別の方法として、ユーザー アカウントを削除してライセンスを解放することもできます。 詳細については、「 PowerShell を使用したユーザー アカウントの削除と復元」を参照してください。
Graph 用 Azure Active Directory PowerShell モジュールを使用する
Set-AzureADUserLicense コマンドレットは廃止される予定です。 上記のように、スクリプトを Microsoft Graph SDK のSet-MgUserLicense コマンドレットに移行してください。 詳細については、「Microsoft Graphからライセンス管理 API にアクセスするようにアプリを移行する」を参照してください。
次に、このコマンドを使用して、テナントのライセンス プランを一覧表示します。
Get-AzureADSubscribedSku | Select SkuPartNumber
次に、ライセンスを削除するアカウントのサインイン名 (ユーザー プリンシパル名 (UPN) とも呼ばれます) を取得します。
最後に、ユーザー サインイン名とライセンス プラン名を指定し、"<" 文字と ">" 文字を削除して、次のコマンドを実行します。
$userUPN="<user sign-in name (UPN)>"
$planName="<license plan name from the list of license plans>"
$license = New-Object -TypeName Microsoft.Open.AzureAD.Model.AssignedLicenses
$license.RemoveLicenses = (Get-AzureADSubscribedSku | Where-Object -Property SkuPartNumber -Value $planName -EQ).SkuID
Set-AzureADUserLicense -ObjectId $userUPN -AssignedLicenses $license
特定のユーザー アカウントのすべてのライセンスを削除するには、ユーザー サインイン名を指定し、"<" 文字と ">" 文字を削除して、次のコマンドを実行します。
$userUPN="<user sign-in name (UPN)>"
$userList = Get-AzureADUser -ObjectID $userUPN
$Skus = $userList | Select -ExpandProperty AssignedLicenses | Select SkuID
if($userList.Count -ne 0) {
if($Skus -is [array])
{
$licenses = New-Object -TypeName Microsoft.Open.AzureAD.Model.AssignedLicenses
for ($i=0; $i -lt $Skus.Count; $i++) {
$licenses.RemoveLicenses += (Get-AzureADSubscribedSku | Where-Object -Property SkuID -Value $Skus[$i].SkuId -EQ).SkuID
}
Set-AzureADUserLicense -ObjectId $userUPN -AssignedLicenses $licenses
} else {
$licenses = New-Object -TypeName Microsoft.Open.AzureAD.Model.AssignedLicenses
$licenses.RemoveLicenses = (Get-AzureADSubscribedSku | Where-Object -Property SkuID -Value $Skus.SkuId -EQ).SkuID
Set-AzureADUserLicense -ObjectId $userUPN -AssignedLicenses $licenses
}
}
Windows PowerShell 用 Microsoft Azure Active Directory モジュールを使用する
注意
Set-MsolUserLicenseおよびNew-MsolUser (-LicenseAssignment) コマンドレットは廃止される予定です。 上記のように、スクリプトを Microsoft Graph SDK のSet-MgUserLicense コマンドレットに移行してください。 詳細については、「Microsoft Graphからライセンス管理 API にアクセスするようにアプリを移行する」を参照してください。
組織のライセンス プラン (AccountSkuID) 情報を表示する方法については、以下のトピックをご覧ください。
-All パラメーターなしで Get-MsolUser コマンドレットを使用する場合、最初の 500 個のアカウントだけが返されます。
ユーザー アカウントからのライセンスの削除
既存のユーザー アカウントからライセンスを削除するには、次の構文を使用します:
Set-MsolUserLicense -UserPrincipalName <Account> -RemoveLicenses "<AccountSkuId1>", "<AccountSkuId2>"...
注意
PowerShell Core は、Windows PowerShell 用 Microsoft Azure Active Directory モジュールと、名前に Msol が含まれるコマンドレットをサポートしていません。 これらのコマンドレットを引き続き使用するには、Windows PowerShell から実行する必要があります。
この例では、ユーザー アカウント BelindaN@litwareinc.com から litwareinc:ENTERPRISEPACK (Office 365 Enterprise E3) ライセンスを削除します。
Set-MsolUserLicense -UserPrincipalName belindan@litwareinc.com -RemoveLicenses "litwareinc:ENTERPRISEPACK"
注意
このコマンドレットを Set-MsolUserLicense 使用して、 キャンセルされた ライセンスからユーザーの割り当てを解除することはできません。 これは、Microsoft 365 管理センターのユーザー アカウントごとに個別に行う必要があります。
既存のライセンスユーザーのグループからすべてのライセンスを削除するには、次のいずれかの方法を使用します。
- 既存のアカウント属性に基づいてアカウントをフィルターする これを行うには、次の構文を使用します。
$userArray = Get-MsolUser -All <FilterableAttributes> | where {$_.isLicensed -eq $true}
for ($i=0; $i -lt $userArray.Count; $i++)
{
Set-MsolUserLicense -UserPrincipalName $userArray[$i].UserPrincipalName -RemoveLicenses $userArray[$i].licenses.accountskuid
}
次の使用例は、米国の営業部門のすべてのユーザー アカウントからすべてのライセンスを削除します。
$userArray = Get-MsolUser -All -Department "Sales" -UsageLocation "US" | where {$_.isLicensed -eq $true}
for ($i=0; $i -lt $userArray.Count; $i++)
{
Set-MsolUserLicense -UserPrincipalName $userArray[$i].UserPrincipalName -RemoveLicenses $userArray[$i].licenses.accountskuid
}
- 特定のライセンスの特定のアカウントの一覧を使用する これを行うには、次の手順に従います。
- 次のように各行に 1 つのアカウントが含まれるテキスト ファイルを作成し、保存します。
akol@contoso.com
tjohnston@contoso.com
kakers@contoso.com
- 次の構文を使用してください。
$x=Get-Content "<FileNameAndPath>"
for ($i=0; $i -lt $x.Count; $i++)
{
Set-MsolUserLicense -UserPrincipalName $x[$i] -RemoveLicenses "<AccountSkuId1>","<AccountSkuId2>"...
}
次の使用例は、テキスト ファイル C:\My Documents\Accounts.txtで定義されているユーザー アカウントから litwareinc:ENTERPRISEPACK (Office 365 Enterprise E3) ライセンスを削除します。
$x=Get-Content "C:\My Documents\Accounts.txt"
for ($i=0; $i -lt $x.Count; $i++)
{
Set-MsolUserLicense -UserPrincipalName $x[$i] -RemoveLicenses "litwareinc:ENTERPRISEPACK"
}
既存のすべてのユーザー アカウントからすべてのライセンスを削除するには、次の構文を使用します。
$userArray = Get-MsolUser -All | where {$_.isLicensed -eq $true}
for ($i=0; $i -lt $userArray.Count; $i++)
{
Set-MsolUserLicense -UserPrincipalName $userArray[$i].UserPrincipalName -RemoveLicenses $userArray[$i].licenses.accountskuid
}
別の方法として、ユーザー アカウントを削除してライセンスを解放することもできます。 詳細については、「 PowerShell を使用したユーザー アカウントの削除と復元」を参照してください。
関連項目
Microsoft 365 ユーザー アカウント、ライセンス、PowerShell を使用したグループを管理する