www.SAMURAJ-cz.com 

02.05.2024 Zikmund Translate to English by Google     VÍTEJTE V MÉM SVĚTĚ

Články

PowerShell pro Azure AD, Exchange Online, práce s licencemi

Čtvrtek, 22.10.2020 09:07 | Samuraj - Petr Bouška |
Tento článek jsou pouze moje poznámky. Obsahuje stručné informace o použití PowerShellu pro získání informací o uživatelích v Azure AD a schránkách v Exchange Online (EXO). Dále se věnuje práci s licencemi a různým hromadným operacím. Popisuje možnost odebrání (zablokování) určité služby, jako je Exchange Online nebo Teams. Na závěr jsou tyto informace použity k vyřešení problému, kdy uživatel se schránkou v on-premises má druhou schránku v EXO.

Pozn.: Nejsem odborník na tuto oblast a další postupy nemusí být optimální, ale jsou funkční. Nestudoval jsem, zda je vhodnější využití Azure Active Directory PowerShell for Graph (AzureAD) nebo Microsoft Azure Active Directory Module for Windows PowerShell (MSOnline). Nebo něco jiného a používám oboje. Podobně pro Exchange Online doporučené využití EXO V2 module cmdletů.

PowerShell informace o účtech

Určité informace nám poskytnou PowerSehll dotazy do Active Directory. Více užitečné jsou rozšíření pro Exchange. Příkazy jsou stejné pro on-premises Exchange i Exchange Online (EXO), ale některé parametry a nastavení jsou pouze pro jedno prostředí. Pro Exchange Online (EXO) Microsoft doporučuje používat pro většinou příkazů novou variantu s předponou EXO, například Get-EXOMailbox.

on-premises PowerShell ActiveDirectory

Active Directory module for Windows PowerShell

U uživatele v Active Directory si můžeme zobrazit Exchange atributy.

Get-ADUser novy -Properties * | FL UserPrincipalName, msExch*, proxyAddresses

Online PowerShell AzureAD

Azure Active Directory PowerShell

Pomocí AzureAD příkazů moc atributů ohledně pošty neuvidíme.

Install-Module -Name AzureAD
Connect-AzureAD

Get-AzureADUser -ObjectId bouska@firma.cz | FL UserPrincipalName, Mail, ProxyAddresses
Get-AzureADUserExtension -ObjectId bouska@firma.cz

Azure Active Directory (MSOnline) 

Install-Module -Name MSOnline
Connect-MsolService

Get-MsolUser -UserPrincipalName bouska@firma.cz

on-premises Exchange Management Shell

Exchange Server PowerShell (Exchange Management Shell)

Get-Mailbox -Identity novy@firma.cz | FL PrimarySmtpAddress, ExchangeGuid, Database, RecipientType
Get-Recipient -Identity novy@firma.cz | FL PrimarySmtpAddress, ExchangeGuid, Database, RecipientType
Get-MailboxLocation -Identity novy@firma.cz | FL MailboxGuid, MailboxLocationType, DatabaseLocation
Get-RemoteMailbox
Get-MailUser
Get-User pokus@firma.cz | Select Name, *Recipient*

Exchange Online Management

Connect to Exchange Online PowerShell

Install-Module -Name ExchangeOnlineManagement -RequiredVersion 1.0.1
Import-Module ExchangeOnlineManagement
Connect-ExchangeOnline -UserPrincipalName admin@firma.cz -ShowProgress $true

Get-User pokus@firma.cz | Select Name, *Recipient*
Get-Mailbox -Identity pokus@firma.cz | FL PrimarySmtpAddress, ExchangeGuid, Database, RecipientType
Get-EXOMailbox -Identity pokus@firma.cz
Get-EXORecipient | FT Name, Reci*

Microsoft 365 a práce s licencemi

Jak pracovat s přiřazováním a odebíráním licencí, nebo jen služeb/aplikací, se můžeme inspirovat v různých článcích.

Častěji se v příkladech využívá Microsoft Azure Active Directory Module for Windows PowerShell (MSOnline), i když je možné využít oboje.

Install-Module -Name MSOnline
Connect-MsolService

Předplatné, licenční plány a služby

Microsoft 365 Subscription (předplatné) obsahuje licenční plány (Licensing plans), které definují služby dostupné pro uživatele. Služby (Services), nebo také plány služeb (Service Plans), jsou produkty (aplikace), funkce a schopnosti dostupné v licenčním plánu. Každý licenční plán obsahuje určitý počet koupených licencí (Licenses). Ty přiřazujeme jednotlivým uživatelům.

V příkazech využíváme SkuPartNumber (LicensingPlan). Kompletní seznam, spolu se jmény licenčních plánů, se nachází v tabulce Product names and service plan identifiers for licensing (se kterou se dost těžko pracuje). Některé rozšířené příklady jsou

  • ENTERPRISEPACK - Office 365 E3
  • ENTERPRISEPREMIUM_NOPSTNCONF - Office 365 E5 without Audio Conferencing
  • O365_BUSINESS_PREMIUM - Microsoft 365 Business Standard
  • O365_BUSINESS_ESSENTIALS - Microsoft 365 Business Basic
  • SPE_E3 - Microsoft 365 E3
  • SPE_E5 - Microsoft 365 E5

Někde se pracuje s AccountSkuId, což je jméno tenantu (organizace) spolu s licenčním plánem, např. firma:ENTERPRISEPACK.

licenčním plánu se nachází služby, nebo plány služeb, jako je

  • TEAMS1 - Microsoft Teams
  • EXCHANGE_S_STANDARD - Exchange Online Plan 1
  • EXCHANGE_S_ENTERPRISE - Exchange Online Plan 2
  • MCOSTANDARD - Skype for Business Online
  • OFFICESUBSCRIPTION - Microsoft 365 Apps for enterprise
  • INTUNE_A - Microsoft Intune
  • INTUNE_O365 - Mobile Device Management for Office 365

Informace o licencích, službách a uživatelích

Seznam dostupných licenčních plánů (Licensing plans) a počty licencí (Licenses)

PS C:\> Get-MsolAccountSku

AccountSkuId                    ActiveUnits WarningUnits ConsumedUnits
------------                    ----------- ------------ -------------
firmatest:ENTERPRISEPACK        0           25           0            
firmatest:O365_BUSINESS_PREMIUM 25          0            6            
firmatest:TEAMS_EXPLORATORY     100         0            1            

Seznam přiřazených licencí uživateli

PS C:\> (Get-MsolUser -UserPrincipalName bouska@firma.cz).Licenses

ExtensionData          : System.Runtime.Serialization.ExtensionDataObject
AccountSku             : Microsoft.Online.Administration.AccountSkuIdentifier
AccountSkuId           : firmatest:O365_BUSINESS_PREMIUM
GroupsAssigningLicense : {}
ServiceStatus          : {Microsoft.Online.Administration.ServiceStatus, Microsoft.Online.Administration.ServiceStatus,
Microsoft.Online.Administration.ServiceStatus...}

PS C:\> (Get-MsolUser -UserPrincipalName bouska@firma.cz).Licenses.Accountsku.Skupartnumber
O365_BUSINESS_PREMIUM

Seznam služeb v daném licenčním plánu firmy

PS C:\> (Get-MsolAccountSku | where {$_.AccountSkuId -eq "firma:ENTERPRISEPACK"}).ServiceStatus

ServicePlan                  ProvisioningStatus
-----------                  ------------------
POWER_VIRTUAL_AGENTS_O365_P2 Success           
CDS_O365_P2                  Success           
PROJECT_O365_P2              Success           
DYN365_CDS_O365_P2           Success           
MICROSOFTBOOKINGS            Success           
KAIZALA_O365_P3              Success           
MICROSOFT_SEARCH             Success           
WHITEBOARD_PLAN2             Success           
MIP_S_CLP1                   Success           
MYANALYTICS_P2               Success           
BPOS_S_TODO_2                Success           
FORMS_PLAN_E3                Success           
STREAM_O365_E3               Success           
Deskless                     Success           
FLOW_O365_P2                 Success           
POWERAPPS_O365_P2            Success           
TEAMS1                       Success           
PROJECTWORKMANAGEMENT        Success           
SWAY                         Success           
INTUNE_O365                  Success           
YAMMER_ENTERPRISE            Success           
RMS_S_ENTERPRISE             Success           
OFFICESUBSCRIPTION           Success           
MCOSTANDARD                  Success           
SHAREPOINTWAC                Success           
SHAREPOINTENTERPRISE         Success           
EXCHANGE_S_ENTERPRISE        Success           

Seznam služeb, ke kterým má daný uživatel přístup

PS C:\> (Get-MsolUser -UserPrincipalName bouska@firma.cz).Licenses.ServiceStatus

ServicePlan                     ProvisioningStatus 
-----------                     ------------------ 
POWER_VIRTUAL_AGENTS_O365_P2    Success            
CDS_O365_P2                     Success            
PROJECT_O365_P2                 Success            
DYN365_CDS_O365_P2              Success            
MICROSOFT_SEARCH                PendingProvisioning
WHITEBOARD_PLAN1                Success            
MYANALYTICS_P2                  Success            
DYN365BC_MS_INVOICING           Success            
KAIZALA_O365_P2                 Success            
STREAM_O365_SMB                 Success            
Deskless                        Success            
BPOS_S_TODO_1                   Success            
MICROSOFTBOOKINGS               Success            
FORMS_PLAN_E1                   Success            
FLOW_O365_P1                    Success            
POWERAPPS_O365_P1               Success            
O365_SB_Relationship_Management Success            
TEAMS1                          Success            
PROJECTWORKMANAGEMENT           Success            
SWAY                            Success            
INTUNE_O365                     PendingActivation  
SHAREPOINTWAC                   Success            
OFFICE_BUSINESS                 Success            
YAMMER_ENTERPRISE               Success            
EXCHANGE_S_STANDARD             Success            
MCOSTANDARD                     Success            
SHAREPOINTSTANDARD              Success     

Seznam uživatelů, kteří mají přiřazenu licenci Office 365 E3 (ENTERPRISEPACK)

Get-MsolUser | Where-Object {$_.Licenses.AccountSku.SkuPartNumber -eq "ENTERPRISEPACK" -and $_.IsLicensed -eq $True}

Seznam dostupných licenčních plánů a jejich služeb

foreach($sku in (Get-MsolAccountSku)) { 
  foreach($sp in $sku.ServiceStatus) { 
    New-Object -TypeName PSObject -Property @{"AccountSkuId"=$sku.AccountSkuId;"ServicePlan"=$sp.ServicePlan.ServiceName} 
  }
}

Seznam dostupných licenčních plánů, kde se nachází určitá služba

PS C:\> foreach($sku in (Get-MsolAccountSku)) { 
  foreach($sp in $sku.ServiceStatus | where {$_.ServicePlan.ServiceName -like "INTUNE*"}) { 
    New-Object -TypeName PSObject -Property @{"AccountSkuId"=$sku.AccountSkuId;"ServicePlan"=$sp.ServicePlan.ServiceName} 
  }
}

ServicePlan AccountSkuId                         
----------- ------------                         
INTUNE_O365 firma:ENTERPRISEPREMIUM_NOPSTNCONF
INTUNE_A    firma:SPE_E5                      
INTUNE_O365 firma:SPE_E5                      
INTUNE_A    firma:SPE_E3                      
INTUNE_O365 firma:SPE_E3                      
INTUNE_O365 ccfirma:O365_BUSINESS_ESSENTIALS    

Přiřazování a odebírání licencí

Přiřazení licence uživateli

Set-MsolUserLicense -UserPrincipalName bouska@firma.cz -AddLicenses "firma:ENTERPRISEPREMIUM_NOPSTNCONF"

Aby bylo možno přiřadit uživateli licenci, tak musí mít účet nastavenu UsageLocation na validní kód země

Set-MsolUser -UserPrincipalName bouska@firma.cz -UsageLocation CZ

Odebrání licence uživateli

Set-MsolUserLicense -UserPrincipalName bouska@firma.cz -RemoveLicenses "firma:ENTERPRISEPREMIUM_NOPSTNCONF"

Nahrazení jedné licence jinou (proběhne jako jedna operace)

Set-MsolUserLicense -UserPrincipalName bouska@firma.cz -AddLicenses "firma:ENTERPRISEPREMIUM_NOPSTNCONF" `
 -RemoveLicenses "firma:ENTERPRISEPACK"

Odstranění služby z licence

Můžeme vytvořit speciální licenční objekt, kde vypneme určitou službu

$lic = New-MsolLicenseOptions -AccountSkuId "firma:ENTERPRISEPACK" -DisabledPlans "EXCHANGE_S_ENTERPRISE"

Vypnout můžeme i více služeb (někdy je to podmínka, protože mají služby vzájemnou vazbu)

$lic = New-MsolLicenseOptions -AccountSkuId "firma:ENTERPRISEPREMIUM_NOPSTNCONF" `
 -DisabledPlans "EXCHANGE_S_ENTERPRISE", "THREAT_INTELLIGENCE", "EXCHANGE_ANALYTICS"

Ten pak můžeme nastavit na uživatele

Set-MsolUserLicense -UserPrincipalName bouska@firma.cz -LicenseOptions $lic

Pokud chceme opět všechny služby povolit

$lic = New-MsolLicenseOptions -AccountSkuId "firma:ENTERPRISEPACK"
Set-MsolUserLicense -UserPrincipalName bouska@firma.cz -LicenseOptions $lic

Hromadné operace - seznam uživatelů

Abychom provedli stejné nastavení pro více uživatelů, tak potřebujeme získat jejich seznam. Můžeme si uživatele vypsat dle určitých společných parametrů a aplikovat nějaký příkaz. Nebo můžeme vytvořit textový soubor, ať nějakým výstupem nebo ručně, kde můžeme kontrolovat jeho obsah.

Seznam uživatelů podle oddělení

Get-MsolUser -All -Department "správa IS" | Select UserPrincipalName

Seznam uživatelů s přiřazenou licencí (Office 365 E3) synchronizovaných z on-premises do cloudu

Get-MsolUser -Synchronized | Where-Object {$_.Licenses.AccountSku.SkuPartNumber -eq "ENTERPRISEPACK" -and $_.IsLicensed -eq $True} |
 Sort-Object UserPrincipalName | Select-Object UserPrincipalName

Seznam uživatelů se schránkou v cloudu synchronizovaných z on-premises

Get-User | Where-Object {$_.RecipientTypeDetails -eq "UserMailbox" -and $_.IsDirSynced } | Sort-Object UserPrincipalName |
 Select-Object UserPrincipalName

Seznam uživatelů se schránkou v cloudu, přiřazenou licencí (Office 365 E5 without Audio Conferencing), synchronizovaných z on-premises

Get-MsolUser -Synchronized | Where-Object {$_.Licenses.AccountSku.SkuPartNumber -eq "ENTERPRISEPREMIUM_NOPSTNCONF" `
 -and $_.IsLicensed -eq $True -and (Get-User $_.UserPrincipalName).RecipientTypeDetails -eq "UserMailbox" } |
 Sort-Object UserPrincipalName | Select-Object UserPrincipalName

Hromadné operace s licencemi nad uživateli

Pokud si seznam uživatelů (jejich UserPrincipalName) uložíme do textového souboru accounts.txt, tak jej můžeme využít v různých příkazech a nastavení aplikovat na všechny uživatele v seznamu.

Pouze výpis obsahu souboru (po řádcích)

Get-Content "d:\accounts.txt" | foreach {$_}

Informace o typu příjemce (zda má schránku)

Get-Content "d:\accounts.txt" | foreach {Get-User $_ | Select Name,*Recipient*}

Nastavení licenčního objektu (odebrání služby) na uživatele ze souboru

Get-Content "d:\accounts.txt" | foreach {Set-MsolUserLicense -UserPrincipalName $_ -LicenseOptions $lic}

Seznam uživatelů a jejich přiřazených licencí

Get-Content "d:\accounts.txt" | foreach {$_; (Get-MsolUser -UserPrincipalName $_).Licenses.Accountsku.Skupartnumber}

Nastavení UsageLocation a přiřazení licence (mohli bychom zadat v jednom příkazu)

Get-Content "d:\accounts.txt" | foreach {Set-MsolUser -UserPrincipalName $_ -UsageLocation CZ}
Get-Content "d:\accounts.txt" | foreach {Set-MsolUserLicense -UserPrincipalName $_ -AddLicenses "firma:ENTERPRISEPACK"}

Odebrání licence

Get-Content "d:\accounts.txt" | foreach {Set-MsolUserLicense -UserPrincipalName $_ -RemoveLicenses "firma:STREAM"}

Oprava účtu, kdy se odstraní duplicitní schránka v cloudu

Podrobně bude tento problém popsán v dalším článku. Pokud se stalo to, že má uživatel schránku na on-premises Exchange serveru a zároveň mu vznikla (nepoužívaná) schránka na Exchange Online. Tak aby vše správně fungovalo, potřebujeme cloudovou schránku odebrat a účet napojit na interní schránku.

Připravíme licenční objekt, kde z dané licence odstraníme službu Exchange Online

$lic = New-MsolLicenseOptions -AccountSkuId "firma:ENTERPRISEPREMIUM_NOPSTNCONF" `
 -DisabledPlans "EXCHANGE_S_ENTERPRISE", "THREAT_INTELLIGENCE", "EXCHANGE_ANALYTICS"

Nastavíme na uživatele ze souboru

Get-Content "d:\accounts.txt" | foreach {Set-MsolUserLicense -UserPrincipalName $_ -LicenseOptions $lic}

Uživatelům odstraníme informaci o předchozí schránce (bez potvrzování)

Get-Content "d:\accounts.txt" | foreach {Set-User $_ -PermanentlyClearPreviousMailboxInfo -Confirm:$false}

Vrátíme uživatelům službu Exchange Online

$lic = New-MsolLicenseOptions -AccountSkuId "firma:ENTERPRISEPREMIUM_NOPSTNCONF"
Get-Content "d:\accounts.txt" | foreach { Set-MsolUserLicense -UserPrincipalName $_ -LicenseOptions $lic }

Mezi jednotlivými kroky je dobré si vypisovat informace o typu příjemce, abychom další krok provedli, až dojde k uplatnění změn. Hlavně při odebrání služby Exchange docela dlouho trvá, než se uživatel změní z UserMailbox na MailUser. Celý proces může vypadat následně (nespouštíme najednou).

Get-Content "d:\accounts.txt" | foreach { Get-User $_ | Select Name,*Recipient* }
$lic = New-MsolLicenseOptions -AccountSkuId "firma:ENTERPRISEPACK" -DisabledPlans "EXCHANGE_S_ENTERPRISE"
Get-Content "d:\accounts.txt" | foreach { Set-MsolUserLicense -UserPrincipalName $_ -LicenseOptions $lic }
Get-Content "d:\accounts.txt" | foreach { Get-User $_ | Select Name,*Recipient* }
Get-Content "d:\accounts.txt" | foreach { Set-User $_ -PermanentlyClearPreviousMailboxInfo -Confirm:$false }
Get-Content "d:\accounts.txt" | foreach { Get-User $_ | Select Name,*Recipient* }
$lic = New-MsolLicenseOptions -AccountSkuId "firma:ENTERPRISEPACK"
Get-Content "d:\accounts.txt" | foreach { Set-MsolUserLicense -UserPrincipalName $_ -LicenseOptions $lic }
Get-Content "d:\accounts.txt" | foreach { Get-User $_ | Select Name,*Recipient* }
zobrazeno: 6074krát | Komentáře [0]

Autor:

Související články:

Azure, Microsoft 365, Office 365, Cloud

Různá populární témata ohledně veřejného cloudu. Více zaměřeno na služby Microsoft, tedy IaaS, PaaS, SaaS Azure, adresářové služby Azure AD a hostované služby Microsoft 365 / Office 365.

PowerShell

Články týkající se Microsoft skriptovacího jazyku PowerShell, který se používá ve všech nových verzích MS OS a aplikací.

Pokud se chcete vyjádřit k tomuto článku, využijte komentáře níže.

Komentáře

Zatím tento záznam nikdo nekomentoval.

Přidat komentář

Vložit tag: strong em link

Vložit smajlík: :-) ;-) :-( :-O

Nápověda:
  • maximální délka komentáře je 2000 znaků
  • HTML tagy nejsou povoleny (budou odstraněny), použít se mohou pouze speciální tagy (jsou uvedeny nad vstupním polem)
  • nový řádek (ENTER) ukončí odstavec a začne nový
  • pokud odpovídáte na jiný komentář, vložte na začátek odstavce (řádku) číslo komentáře v hranatých závorkách