Pierwsza porcja cennych wskazówek dla Administratorów O365 pod kątem zarządzania i automatyzacji chmury. Będę podrzucał na tym blogu ciekawe fragmenty skryptów, które mam nadzieję rozwieją większość problemów z którymi się spotkaliście rozpoczynając pracę z chmurnym officem. W tym artykule porady jak zarządzać licencjami, jak znaleźć użytkowników nie zsynchronizowanych z lokalnym AD, jak podmienić UserPrincipalName w chmurze, i inne.

Po pierwsze – podłączenie do chmury (Office 365 – nie Exchange Online):

Install and connect Microsoft Online Services Module for Windows PowerShell to Office 365

$cred = Get-Credential
Connect-MsolService -Credential $cred

Teraz możemy założyć, że nasze środowisko jest hybrydowe z wdrożonym ADFS (federacja tożasmości, czyli logowanie do chmury poświadczeniami z AD) i DirSync (synchronizacja obiektów z lokalnego AD do chmury). Co jeśli tylko część naszych użytkowników będzie federowana, a kilka kont będzie standardowych założonych w O365 i nie będą federowane? Czy możemy takie konta (w domenie “onmicrosoft.com”), które się nie synchronizują z AD łatwo znaleźć i coś z nimi zrobić (przykładowo zmienić im UPN)? Odpowiedź brzmi tak.

Ciekawostka: Warto pamiętać, że zmieniając UPN dla użytkownika w chmurze na przykładowo UPN z domeny nie federowanej (brak ADFS, czyli używamy haseł z chmury) wygenerujemy nowe haseła dla „odfederowanych użytkowników”, więc lepiej założyć sytuację, gdzie administrator w poleceniu Set-MsolUserPrincipalName wskaże hasło jawnie lub odwoła się do pliku CSV.

Get-MsolUser -MaxResults 1000000 | Where-Object {$_.LastDirSyncTime -eq $null } | Select DisplayName, UserPrincipalName, LastDirSyncTime | Export-Csv -Path C:\lista_standardUsers.csv

Za pomocą polecenia Where-Object {$_.LastDirSyncTime -eq $null } wyszukaliśmy konta w Office 365, które nie są zsynchronizowane z lokalnym AD, ponieważ wartość parametru LastDirSyncTime wskazuje, że operacja synchronizacji nigdy nie wykonała się dla takiego konta. Oczywiście warto zweryfikować DirSync, czy nie pojawiają się błędy synchronizacji obiektów.

Teraz możemy przystąpić do zrealizowania “jakiejś przykładowej operacji” na kontach onmicrosoft.com, które w ostatnim kroku przekierowaliśmy do pliku CSV. Zakładamy, że zmienimy im UserPrincipalName z domena.onmicrosoft.pl na domena.pl – w pliku CSV powinniśmy utworzyć nową kolumnę o nazwie “newUPN” i zdeklarować nowe wartości dla UPN @domena.pl (warto wykorzystać funkcję Find & Replace w Excelu).

Import-Csv C:\lista_standardUsers.csv | Where-Object {Set-MsolUserPrincipalName -UserPrincipalName $_.oldUPN -NewUserPrincipalName $_.newUPN}

Kolejny PowerShell przypisuje licencje planu A2 dla wszystkich użytkowników, którzy nie mają przypisanej licencji. Opórcz licencji trzeba użytkownikowi przypisać UsageLocation „pl-PL”. To będzie skrypt, który po utworzeniu nowych kont w AD przypisze (po synchronizacji DirSync) do kont Office 365 odpowiednie licencje. Można to oczywiście robić per jednostka organizacyjna w lokalnym AD (pobrać Get-ADUsers i później przekierować to do cmdletu chmurnego Set-MSol…, ale ta metoda jest bardziej bezpieczna, bo zadziała bezpośrednio na chmurze i nie spowoduje problemów z ewentualną synchronizacją obiektów.

Wyciagnięcie listy dostepnych licencji w O365 – przypisujemy licencję po AccountSkuID.

Get-MsolAccountSku | fl

To właściwy skrypt do przypisania licencji O365 A2 (Exchange, Lync, SharePoint) dla nowych kont założonych w AD:

$options = New-MsolLicenseOptions -AccountSkuId uclabs:STANDARDWOFFPACK_STUDENT

Get-MsolUser -UnlicensedUsersOnly | Set-MsolUser -UsageLocation "pl-PL" | set-MsolUserLicense -LicenseOptions $options

Jak do wszystkich kont użytkowników przypiąć licencję A2 (dla tych obecnych w A1)?

Get-MsolUser | Set-MsolUser -UsageLocation "pl-PL" | set-MsolUserLicense -LicenseOptions $options

Jeśli chcemy to zawęzić do kont federowanych z AD to wygląda to następująco:

Get-MsolUser -MaxResults 1000000 | Where-Object {$_.LastDirSyncTime -ne $null } | Set-MsolUser -UsageLocation "pl-PL" | set-MsolUserLicense -LicenseOptions $options

Jak wyciągnąć listę użytkowników, którzy są zsynchronizowani z lokalnym AD:

Get-MsolUser -MaxResults 1000000 | Where-Object {$_.LastDirSyncTime -ne $null } | Select DisplayName, UserPrincipalName, LastDirSyncTime | Export-Csv -Path C:\lista_standardUsers.csv

Wyciagnięcie listy administratorów Office 365:

$role = Get-MsolRole -RoleName “Company Administrator”

Get-MsolRoleMember -RoleObjectId $role.ObjectId