27 apr 2020

Office365 sostituire licenze con PowerShell ...

Se vi dovessero chiedere la sostituzione di licenze per molti utenti (= o > di 1K), la procedura potrebbe diventare ostica e molto lunga se gestita tramite interfaccia web.
Scriptare l'operazione tramite PowerShell aiuta non poco.

Verificare le licenze disponibili nel Ns tenant [connessione + lista licenze]:
Connect-MsolService
Get-MsolAccountSku
Ora immaginiamo di filtrare utenti in base alla loro licenza assegnata:
Get-MsolUser -All | Where-Object {($_.licenses).AccountSkuId -match "EnterprisePremium"}

Passiamo allo script vero e proprio (fonte, thanks to Bradley Wyatt).
Rispetto all'originale ho aggiunto un tipo di licenza da rimuovere ($LicenseRemove2) e modificato l'ordine delle azioni, in quanto non potevo assegnare la nuova licenza (ENTERPRISEPREMIUM_STUUSEBNFT) senza prima aver rimosso l'altra (STANDARDWOFFPACK_STUDENT)[causa impossibilità di coesistenza tra i due piani SharePoint].
Da notare che la licenza da rimuovere è la licenza di "controllo" per filtrare gli account.

Il risultato finale è circa questo:

#VARIABILI
$LicenseAdd = "ENTERPRISEPREMIUM_STUUSEBNFT"
$LicenseRemove = "OFFICESUBSCRIPTION_STUDENT"
$LicenseRemove2 = "STANDARDWOFFPACK_STUDENT"

#Richiesta credenziali per l'accesso
$UserCredential = Get-Credential

Write-Host "Connessione a Office 365..." -ForegroundColor Yellow
Connect-MsolService -Credential $UserCredentiget-msolaccal

$Session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri https://outlook.office365.com/powershell-liveid/ -Credential $UserCredential -Authentication Basic -AllowRedirection
get-msolImport-PSSession $Session -AllowClobber

$Users = Get-MSOLUser -All | Where-Object { $_.isLicensed -eq "TRUE" -and $_.Licenses.AccountSKUID -like "*$LicenseRemove*" }
Foreach ($User in $Users)
{
   
        $UPN = ($User).UserPrincipalName
        $DN = ($User).DisplayName
       
        #Get License AccountSkuId
        $License = (Get-MsolAccountSku | Where-Object { $_.AccountSkuId -like "*$LicenseAdd*" }).AccountSkuId
   
        #Get License AccountSkuId
        $RemoveLicense = (Get-MsolAccountSku | Where-Object { $_.AccountSkuId -like "*$LicenseRemove*" }).AccountSkuId

        #Get License AccountSkuId 2
        $RemoveLicense2 = (Get-MsolAccountSku | Where-Object { $_.AccountSkuId -like "*$LicenseRemove2*" }).AccountSkuId
   
        #Rimuovo Office 365 A1 per studenti licenza utente
        Write-Host "Removing Office 365 A1 per studenti license from $DN..." -ForegroundColor White
        Set-MsolUserLicense -UserPrincipalName $UPN -RemoveLicenses $RemoveLicense2
       
        #Rimuovo Microsoft 365 Apps per studenti licenza utente
        Write-Host "Removing Microsoft 365 Apps per studenti license from $DN..." -ForegroundColor White
        Set-MsolUserLicense -UserPrincipalName $UPN -RemoveLicenses $RemoveLicense

 
        #Aggiungo Office 365 A5 students use benefit licenza utente
        Write-Host "Adding Office 365 A5 students use benefit
        license for $DN..."
-ForegroundColor White
        Set-MsolUserLicense -UserPrincipalName $UPN -AddLicenses $License

}

Get-PSSession | Remove-PSSession


---

Alla fine ho fatto anche un bel giro di disattivazione Yammer per tutti gli utenti, sempre con PowerShell, ma quello lo vediamo nella prossima puntata...

0 commenti:

Posta un commento