使用 PowerShell 從使用者帳戶移除Microsoft 365授權

本文適用於 Microsoft 365 企業版和 Office 365 企業版。

使用 Microsoft Graph PowerShell SDK

首先,連線到您的Microsoft 365租使用者

指派和移除使用者的授權需要 User.ReadWrite.All 許可權範圍或 [指派授權] 圖形 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 Cmdlet 已排定淘汰。 請將您的腳本移轉至 Microsoft Graph SDK 的 Set-MgUserLicense Cmdlet,如上所述。 如需詳細資訊,請參閱移轉您的應用程式以從 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) Cmdlet 已排定淘汰。 請將您的腳本移轉至 Microsoft Graph SDK 的 Set-MgUserLicense Cmdlet,如上所述。 如需詳細資訊,請參閱移轉您的應用程式以從 Microsoft Graph 存取授權管理 API

首先,連線到您的Microsoft 365租使用者

若要檢視貴組織中 accountSkuID) 資訊 (授權方案,請參閱下列主題:

如果您使用 Get-MsolUser Cmdlet,而不使用 -All 參數,則只會傳回前 500 個帳戶。

從使用者帳戶移除授權

若要從現有的使用者帳戶移除授權,請使用下列語法:

Set-MsolUserLicense -UserPrincipalName <Account> -RemoveLicenses "<AccountSkuId1>", "<AccountSkuId2>"...

注意

PowerShell Core 不支援適用於 Windows PowerShell 的 Microsoft Azure Active Directory 模組和名稱有 Msol 的 Cmdlet。 若要繼續使用這些 Cmdlet,您必須從 Windows PowerShell 執行。

本範例會從使用者帳戶 BelindaN@litwareinc.com 移除 litwareinc:ENTERPRISEPACK (Office 365 企業版 E3) 授權。

Set-MsolUserLicense -UserPrincipalName belindan@litwareinc.com -RemoveLicenses "litwareinc:ENTERPRISEPACK"

注意

您無法使用 Cmdlet 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
  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 企業版 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 刪除和還原使用者帳戶

另請參閱

以 PowerShell 管理 Microsoft 365 使用者帳戶、授權和群組

使用 PowerShell 管理 Microsoft 365

開始使用適用於 Microsoft 365 的 PowerShell