PowerShell を使用してユーザー アカウントからMicrosoft 365ライセンスを削除する

この記事は、Microsoft 365 Enterprise および Office 365 Enterprise の両方に適用されます。

注意

Microsoft 365 管理センターを使用してユーザー アカウントからライセンスを削除する方法について説明します。 その他のリソースの一覧については、「 ユーザーとグループの管理」を参照してください。

Microsoft Graph PowerShell SDK を使用する

まず、Microsoft 365 テナントに接続します

ユーザーのライセンスの割り当てと削除には、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 にアクセスするようにアプリを移行する」を参照してください。

まず、Microsoft 365 テナントに接続します

次に、このコマンドを使用して、テナントのライセンス プランを一覧表示します。

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 にアクセスするようにアプリを移行する」を参照してください。

まず、Microsoft 365 テナントに接続します

組織のライセンス プラン (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. 次のように各行に 1 つのアカウントが含まれるテキスト ファイルを作成し、保存します。
akol@contoso.com
tjohnston@contoso.com
kakers@contoso.com
  1. 次の構文を使用してください。
$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 を使用したグループを管理する

PowerShell で Microsoft 365を管理する

Microsoft 365 用 PowerShell の使用を開始する