zmieniłeś nazwę kanału Teams? możesz go stracić

jest w MS Teams bug – jeśli kiedykolwiek zmieniłeś nazwę kanału, może ci go 'rozpiąć’ od katalogu biblioteki SharePoint. same pliki nie są gubione, można się do nich dostać poprzez widok SharePoint.

problem dodatkowy jest taki, że nie ma jak takiego problemu zaudytować – logi nic nie powiedzą. nie dość, że akcja jest w tle, i po prostu nagle znika kanał na Teams, to nawet samej zmiany kanału się nie zaudytuje, bo logi są max 9o dni a zmiana kanału mogła się wydarzyć dawno – w moim przypadq był to luty O_o

dobre informacje

  • jak zostałem zapewniony, fix będzie wkrótce rolloutowany. nie zmapuje z powrotem rozłączonych katalogów, ale zabezpieczy przed takimi incydentami
  • w private preview jest opcja trzymania logów audytowych przez rok – funkcja ma być dostępna w planie E5 i w jakimś add-onie dla E3. i to jest super wiadomość, bo te 9o dni to stanowczo na mało!

eN.

Migracja w hybrydzie – zakończenie pojedynczej skrzynki w zadaniu synchronizacji

ciekawostka, bo wszyscy piszą, że się nie da… a się da.

jeśli założy się zadanie migracyjne Ex-EXO w którym jest wiele kont, to można potem usunąć pojedynczą skrzynkę użytkownika, ale nie bardzo jest sposób na to, żeby tylko jedną skończyć. jeśli jednak się przyjrzeć w jaki sposób działa parametr 'AutoComplete’ dla wsadu migracji, sprawa okazuje się oczywista.

korzystając z PowerShell, jeśli chcemy zsynchronizować skrzynki ale ręcznie ustalić kiedy mają się przełączyć wygląda to np tak:

$binBatch=[System.IO.File]::ReadAllBytes($bPath)
$mbParam=@{
    name="transza01";
    AutoComplete=$false;
    AutoStart=$true;
    badItemLimit='50';
    CSVData=$binBatch;
    SourceEndpoint='MigrationEndPoint';
    TargetDeliveryDomain='w-files.pl'
} 
New-MigrationBatch @mbParam

gdzie opisywanym parametrem jest oczywiście 'AutoComplete’. ale kiedy podejrzy się potem takie zadanie – gdzie to sobie siedzi? jeśli posłużymy się get-migrationUser żeby to znaleźć – nie bardzo się uda. parametr jest dziedziczony z całego wsadu, stąd może wydawać się niemożliwe ukończenie pojedynczej skrzynki. jeśli jednak wyświetli się i sprawdzi w jaki sposób jest to de facto zrealizowane, to rozwiązanie nasuwa się samo. tak na prawdę dla całego zadania ustawiany jest atrybut 'completeAfter’ na jakąś chorą datę – w tym przypadq wyjątkowo szybko:

PS C:\_scriptZ> Get-MigrationBatch -Identity transza01|select completeAfter*

CompleteAfter CompleteAfterUTC
------------- ----------------
01.01.4501 00:00:00 01.01.4501 00:00:00

wyjątkowo szybko, bo zazwyczaj widzę 31.12.9999 . z jakiegoś powodu tym razem czas został kapkę skrócony, ale i tak jestem zbyt niecierpliwy, żeby czekać tyle czasu (;

…a zatem aby skończyć pojedynczą synchronizację wystarczy ustawić jej czas 'completeAfter’ na obecny. korzystam z jednej z dwóch metod:

set-migrationUser <user-email> -CompleteAfter ((get-date).ToUniversalTime())

lub

set-migrationUser <user-email> -CompleteAfter ((get-date).AddDays(-1))

ustawiając datę z przeszłości – jeśli chcę mieć 1oo%, że to nie chodzi o UTC. nie porównywałem czy efekt jest identyczny. przez jakiś czas nic się nie dzieje (statystyki nie pokazują statusu jako 'completing’), ale po ok 1h skrzynka jest 'completed’.

eN.

Uruchamianie usług chmurowych w hybrydzie

Usługi czyli EXO (Exchange Online) i SOL (Skype for Business Online). Problem w hybrydzie polega na tym, że nie można skorzystać z interfejsu portal.office.com – należy konta założyć w środowisq onprem. i oczywiście prostą odpowiedzią byłoby skierowanie do commandletów Exchange i SfB w onprem… ale po co wtedy byłby wpis?

Scenariusz

zakładamy konto użytkownika i chcemy aby od razu miał skrzynkę w EXO i uruchomione usługi SOL. można założyć całość w onprem a potem migrować… ale to straszna strata czasu i wysiłq.

Standardowo

niemniej zacznę od standardowej metody, ponieważ tak to się robi oficjalnie.

po założeniu konta w AD, należy wykonać enable-RemoteMailbox – opis polecenia oraz doqmentacja do hybrydy. następnie trzeba włączyć konto SOL poleceniem enable-CSUser, a sztuczka polega na dodaniu parametru  „-HostingProviderProxyFqdn sipfed.online.lync.com”.

problem z tym rozwiązaniem jest taki, że żeby założyć konto potrzebne są aż trzy różne moduły: Active Directory, Exchange oraz Skype for Business. Prawidłowo administracja powinna być tak zorganizowana, że administratorzy logują się na stację zarządzającą, gdzie mają wszystkie narzędzia zainstalowane – w szczególności te wymienione. i oczywiście sugerowałbym aby tak to się odbywało. jednak… życie pisze własne scenariusze, np. taki, że jest sobie system HR, z którego wypływają dane o użytkownikach. i jak developer ma sobie z tym poradzić? do LDAP dość łatwo się dostać i są do tego standardowe biblioteki w samym frameworq, a do Ex czy SfB już tak różowo nie jest.

HACKED

….podam sposób, jak można założyć mailbox i włączyć SIP, wyłącznie przy pomocy modułu Active Directory/dostępu do LDAP. zaletą takiego rozwiązania jest brak konieczności instalacji pozostałych – i to właśnie był czynnik, który zmusił mnie do zrobienia takiego rozwiązania. zacznę od przestrogi:

zaprezentowane rozwiązanie nie jest wspierane, a konsekwencje użycia mogą być ciężkie do przewidzenia – dla tego przetestuj dokładnie, upewnij się, że rozumiesz co robisz i jak to działa tak, aby w razie co być w stanie naprawić. pełne commandlety wykorzystują mechanizmy sprawdzające poprawność ustawianych wartości, czy nie występują duplikaty w domenie, i wiele innych, których tutaj nie ma – a więc można namieszać. korzystasz na własną odpowiedzialność.

no to jak już się przestraszył[ae]ś, to teraz rozwiązanie.

w zasadzie najważniejszym trikiem jest zrozumienie jak działa hybryda – wszystkie zmiany wprowadzane są w onprem i synchronizowane do chmury. czyli wskazane polecenia – enable-RemoteMailbox czy enable-CSUser – wbrew temu co możesz sądzić, w żaden sposób nie łączą się z Office365. jedyne co robią, to modyfiqją wartości atrybutów w AD. w związq z tym można napisać skrypt, który dokładnie to zrobi.

nie będę zamieszczał całego skryptu – są w nim elementy specyficzne dla konkretnego klienta – ale wszystko co niezbędne znajdziesz poniżej.

Exchange

atrybuty, które należy zmodyfikować mogą się różnić, zależnie od klienta – wiadomo, różne firmy mają różne wymagania. poniżej zestaw atrybutów 'podstawowych’:

    $EXOattributes=@{
        'mail'=$oUser.UserPrincipalName
        'mailNickname'              =$oUser.SamAccountName
        'msExchPoliciesExcluded'    =@('26491cfc-9e50-4857-861b-0cb8df22b5d7') #disable automatic email address creation
        'msExchRecipientDisplayType'='-2147483642'
        'msExchRecipientTypeDetails'='2147483648'
        'msExchRemoteRecipientType' ='1'
        'msExchUMDtmfMap'           ="" 
        'msExchVersion'             ="44220983382016" #Ex2010 ; Ex13 = "88218628259840" ; Ex16 = "1125899906842624"
        'proxyAddresses'            ="" 
        'showInAddressBook'         ='CN=Default Global Address List,CN=All Global Address Lists,CN=Address Lists Container,CN=LOGICUNION,CN=Microsoft Exchange,CN=Services,CN=Configuration,DC=LOGICUNION,DC=LAB'
        'targetAddress'             ="SMTP:$($oUser.SamAccountName)@LogicUnion.mail.onmicrosoft.com"
    }

to, co widać powyżej, to oczywiście zestaw atrybutów obiektu User w AD, niezbędnych do założenia skrzynki.

  • mail: $oUser to obiekt użytkownika, pobrany wcześniej jako „$oUser=get-aduser <name> -properties *”. tutaj założenie jest, że podstawowy email jest taki sam jak UPN
  • mailNickname: standardowo jest taki sam jak SAM
  • msExchPoliciesExcluded: jeśli chcę ustawiać adresy email ręcznie to wskazana polisa (GUID taki sam dla każdego Ex) jest odpowiednikiem odznaczenia 'Automatically update email addresses…’ . jeśli adresy będą się wypełniały standardowymi polisami, to można pominąć
  • msExchangeRecipient*: wskazują na typ skrzynki. szczegóły tutaj. ogólnie – wskazuje, że skrzynka typu RemoteUserMailbox ma być założona
  • msExchUMDtmfMap: będzie za chwilę wypełnione – funkcja poniżej. de facto chodzi o konwersję na cyferki z cyferblatu telefonu, fragment UC.
  • msExchVersion: jest zawsze taka sama, i pochodzi z onpremowego Exchange. można sobie zweryfikować z jakimś lokalnym kontem
  • proxyAddresses: to oczywiście aliasy. jeśli ustawiamy inne niż podstawowy, warto nie zapomnieć wyłączyć polisy msExchPoliciesExcluded…
  • showInAddressBook: to CN list adresowych, w których ma się pojawić. tutaj standardowa lista globalna. ten CN można odczytać z innego użytkownika.
  • targetAddress: bardzo ważne pole, wskazujące na przekierowanie do chmury. na jego podstawie robiony jest routing do chmury na connectorze.

zmienna jest typu hashtable, można więc sobie powyliczać np. proxyaddresses, poustawiać co potrzeba. np. DTMF. funkcja, która konwertuje ciągi do DTMF:

function convert-str2dtmf {
    param(
        [char[]]$str
    )
    $dtmfCodes=@{
        "a"=2;
        'b'=2;
        'c'=2;
        'd'=3;
        'e'=3;
        'f'=3;
        'g'=4;
        'h'=4;
        'i'=4;
        'j'=5;
        'k'=5;
        'l'=5;
        'm'=6;
        'n'=6;
        'o'=6;
        'p'=7;
        'q'=7;
        'r'=7;
        's'=7;
        't'=8;
        'u'=8;
        'v'=8;
        'w'=9;
        'x'=9;
        'y'=9;
        'z'=9;
    }

    $dtmfOut=""

    foreach($letter in $str) {
        $letter=([string]$letter).ToLower()
        if($dtmfCodes.ContainsKey($letter) ) { $dtmfOut+=$dtmfCodes[$letter] }
    }
    return $dtmfOut
}

i fragment kodu, który ustawia DTMF:

    $dtmfEmail=convert-str2dtmf -str $oUser.SamAccountName
    $dtmfLNFN=convert-str2dtmf -str "$($oUser.sn)$($oUser.givenName)"
    $dtmfFNLN=convert-str2dtmf -str "$($oUser.givenName)$($oUser.sn)"
    $EXOattributes.msExchUMDtmfMap=@("emailAddress:$dtmfEmail","lastNameFirstName:$dtmfLNFN","firstNameLastName:$dtmfFNLN")

zmienna jest tablicą zawierającą zazwyczaj trzy elementy w zapisie DTMF – adres email [a w zasadzie nazwa użytkownika – bez domeny], nazwa użytkownika 'lastNameFirstName’ oraz 'firstNameLastName’. a więc wyliczam przy pomocy funkcji konwertującej i paqję do zmiennej $EXOattributes.

kiedy $EXOAttributes zawiera wszystko to, co potrzebne, pozostaje pchnięcie tego do AD. i tutaj piękno i prostota PS:

 Set-ADUser -Identity $oUser.SamAccountName -replace $EXOattributes

i już. atrybuty są wypełniane, zsynchronizuje się do o365, a ten podejmie odpowiednie działania – czyli założy skrzynkę.

SOL

całość wykonuje się analogicznie – buduję hashtable, który potem pchnę do AD, a poniżej niezbędne atrybuty dla Skype for Business Online:

    $SOLAttributes=@{
        'msRTCSIP-DeploymentLocator'    ="sipfed.online.lync.com"
        'msRTCSIP-FederationEnabled'    =$True
        'msRTCSIP-InternetAccessEnabled'=$True
        'msRTCSIP-OptionFlags'          ='257'
        'msRTCSIP-PrimaryHomeServer'    ='CN=Lc Services,CN=Microsoft,CN=1:1,CN=Pools,CN=RTC Service,CN=Services,CN=Configuration,DC=LogicUnion,DC=Lab'
        'msRTCSIP-PrimaryUserAddress'   ="sip:$($oUser.UserPrincipalName)"
        'msRTCSIP-UserEnabled'          =$true
    }

te zbudowane są dla środowiska sfederowanego, gdzie po stronie OnPrem stoi Lync 2o13. to może mieć znaczenie dla atrybutu msRTCSIP-PrimaryHomeServer – ponieważ nie wiem czy tak samo wygląda CN usługi SfB.

dla 'OptionFlags’ link z wyjaśnieniem wartości można znaleźć tutaj.

Set-ADUser -Identity $oUser.SamAccountName -Replace $SOLAttributes

zakończenie

jak wspomniałem, nie publiqję całego skryptu, ponieważ logika wyliczania czy to proxyaddresses czy innych elementów jest dla konkretnego środowiska i każdy musi sam to oprogramować. celem wpisu jest tak na prawdę pokazanie na czym polega 'od spodu’ założenie konta w EXO czy SOL w środowisq hybrydowym. niby każdy wie, że zmiany synchronizują się w jedną stronę, a jednak podczas rozmów, okazuje się, że wszyscy spodziewają się jakiejś dodatkowej komunikacji pomiędzy systemami. a tu nic takiego nie ma – jest tylko synchronizacja i tyle.

nie jest to zalecany sposób tworzenia… ale na pewno fajna zabawa (;

eN.

SSPR vs contact info

ciekawy case dotyczący uruchamiania Self-Service Password Reset (SSPR) i zarazem lekcja – workaround to nie solution q:

zgłosił się do mnie zapłakany klient, że uruchamiają SSPR i muszą jakoś dostarczyć dane użytkowników do portalu. do niedawna nie było to możliwe (uservoice z 2o18), ale od jakiegoś czasu Microsoft w swojej wielkości dostarczył… no właśnie, co dostarczył? obejście problemu opisane tutaj. 'czemu obejście?’ zapyta ktoś, kto uważnie przestudiuje, sprawdzi i stwierdzi że działa…

…ano problem polega na tym, że informacje do SSPR brane są z atrybuty 'StrongAuthenticationUserDetails’. ten atrybut ma kilka cech odróżniających go od zwykłego atrybutu np. 'telephoneNumber’ a jednym z nich jest fakt… że nie wypełnia wizytówki użytkownika. jest niewidzialny.

i teraz taki myk…

tak wygląda użytkownik, który wszedł na portal i wypełnił sobie dane do MFA/SSPR:

PS> get-msoluser -UserPrincipalName testuser01@w-files.pl|select -ExpandProperty strongauthenticationuserdetails


ExtensionData : System.Runtime.Serialization.ExtensionDataObject
AlternativePhoneNumber :
Email : moj@email.com
OldPin :
PhoneNumber : +48 2323232323
Pin :

i wyświetlmy sobie właściwości w AAD:

PS > Get-AzureADUser -SearchString testuser01@w-files.pl|select othermails,mobile,telephonenumber

OtherMails Mobile TelephoneNumber
---------- ------ ---------------
{}

a teraz, za artykułem, prepopuluję (dziś super po polsq) atrybuty:

Set-AzureADUser -ObjectId testuser02@w-files.pl -OtherMails @('innymail@wtf.com') -Mobile '+48 666232323' -TelephoneNumber '+48 999999999'

no i output takiej operacji:

PS > Get-AzureADUser -SearchString testuser02@w-files.pl|select othermails,mobile,telephonenumber

OtherMails Mobile TelephoneNumber
---------- ------ ---------------
{innymail@wtf.com} +48 666232323 +48 999999999

get-msoluser -UserPrincipalName testuser02@w-files.pl|select -ExpandProperty strongauthenticationuserdetails
<empty>

co się dzieje dalej? hasło dla testuser02 resetuję i działa. kiedy próbuję dostać się do portalu o365, dostaję standardowe pytanie o uzupełnienie obligatoryjnych pól do zabezpieczenia konta (czyli te do MFA, które zapisują się w StrongAuthenticationUserDetails).

a więc to …’rozwiązanie’ nie działa dla MFA, jest obejściem dla SSPR, i dane 'zabezpieczające’ stają się *publicznie* dostępne dla wszystkich w organizacji ROTFLMAO.

eN.

SkypeOnlinePowershell wywala się błędem o braku VC++ redistributable

exploruję tamat BOTów (super sprawa pod kontem obniżenia kosztów HelpDesk!) i aby zarejestrować BOTa w SfB dla tenanta trzeba zainstalować bohatera tytułowego – Skype for Business Online Connector. pomimo spełnienia wszystkich warunków (prerequisites), instalator wywala się z informacją, że brakuje VS C++ Redistributable. trochę się z tym pomęczyłem, nic nie udało mi się znaleźć na forach, więc trzeba grzebnąć samemu.

główny log nic powiedział, ale w logu *_TenantPowerShell.msi.txt jest coś takiego:

MSI (s) (08:10) [23:39:07:026]: Note: 1: 2262 2: Signature 3: -2147287038 
MSI (s) (08:10) [23:39:07:026]: Note: 1: 1402 2: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\14.0\VC\Runtimes\x64 3: 2 
MSI (s) (08:10) [23:39:07:026]: Note: 1: 2262 2: Signature 3: -2147287038 
MSI (s) (08:10) [23:39:07:026]: PROPERTY CHANGE: Adding PROPERTY_POWERSHELL_V51_INSTALLED property. Its value is '1.0, 2.0, 3.0, 4.0, 5.0, 5.1'.
MSI (s) (08:10) [23:39:07:027]: Skipping action: SetReinstallMode (condition is false)
MSI (s) (08:10) [23:39:07:027]: Doing action: FindRelatedProducts
Action ended 23:39:07: AppSearch. Return value 1.
Action start 23:39:07: FindRelatedProducts.
MSI (s) (08:10) [23:39:07:028]: Doing action: LaunchConditions
Action ended 23:39:07: FindRelatedProducts. Return value 1.
Action start 23:39:07: LaunchConditions.
MSI (s) (08:10) [23:39:09:307]: Product: Skype for Business Online, Windows PowerShell Module -- Skype for Business Online, Windows PowerShell Module installation or uninstallation requires that Microsoft Visual C++ 2017 x64 Minimum Runtime - 14.10.25008 Package is already installed.

no to już blisko rozwiązania… bo wskazana ścieżka nie istnieje. znalazłem wpisy od innych paczek VS redist i na tej podstawie zrobiłem nowy plik reg do obecnej wersji:

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\14.0\VC\Runtimes\x64]
"Version"="v14.16.27012.01"
"Installed"=dword:00000001
"Major"=dword:0000000e
"Minor"=dword:00000010
"Bld"=dword:00006984
"Rbld"=dword:00000001

instalator łyknął. gra i buczy (:

eN.

 

 

Group Based Licensing dla o365

GBL

możliwość zarządzania licencjami przez grupy AD to nieoceniona pomoc w każdym większym środowisq. co prawda spędziłem kilka ładnych godzin nad fajnym skryptem, którym można masowo zarządzać licencjami wraz z poszczególnymi planami serwisowymi, jednak możliwość ułatwienia administracji jest bezcenna. trzeba zatem było z łezką w oq wrzucić skrypt do projektów wymarłych i zająć się okiełznaniem grup.

ogólnie, GBL pozwala na przypisanie licencji (niemal) dowolnej grupie AAD, dzięki czemu zarządzanie licencjami sprowadza się do prostych operacji zmiany członkostwa. pomimo, że funkcjonalność jest jeszcze w public preview, uważam, że warto się mocno zainteresować, bo operacje licencyjne przeważnie są realizowane albo przez 1szą linię, gdzie korzystanie ze skryptów nie koniecznie jest mile widziane, albo przez automatyczne systemy zarządzania tożsamością, jako część procesu nowego użytkownika.

ponieważ jest to świetnie udokumentowane, nie będę się rozpisywał o podstawach, ale przedstawić ciekawe przypadki i problemy.

[info: art opisuje środowisko hybrydowe]

gdzie jest haczyk?

pierwszy i podstawowy haczyk, pojawia się już na poziomie projektowania grup. rzadko kiedy zdarza się, żeby wykorzystywany był pojedynczy typ licencji, czy nawet dwa-trzy. zazwyczaj jest wiele różnych wyjątków, wynikających z różnorodności zapotrzebowania – niektórzy będą mieli E3, inni E5, jeszcze inni będą potrzebować pojedynczych planów (np. PowerBI, AudioConferencing) jako uzupełnienie niższej licencji. są też dodatkowe produkty takie jak Visio czy Project, które też raczej wszystkim użytkownikom się nie qpuje.

okazuje się, że ilość wyjątków może być całkiem spora, warto zastanowić się więc nad modelem hybrydowym – np. używać grup do zaspokojenia przyjętych standardów, co zrealizuje 9o%, i to tych, przy których normalnie trzeba użyć jakiegoś skryptu. wyjątki natomiast obsłużyć ręcznie 'wykliqjąc’. jednolite rozwiązania są dużo łatwiejsze w zarządzaniu, i ogólnie jestem przeciwnikiem mieszania metod zarządzania tym samym fragmentem jednak w tym przypadq:

  • funkcja jest nadal w preview. public, bo public, i testowana jest już ok ok. 2 lat, jednak nie ma gwarancji co się zmieni w finalnej wersji. zakładam że nic, w porywach do niewiele, ale trzeba mieć z tyłu głowy ew. poprawki co całego projektu, lepiej więc go póki co nie komplikować
  • braqje na razie dobrych artyqłów z praktyki [co staram się załatać (: ], który pokazywały by realne bolączki i ryzyka.

mechanizm trzeba najpierw dobrze poznać i zrozumieć niuanse i konflikty, zanim wdroży się go globalnie. a więc pomimo, że docelowo najlepiej mieć czyste zarządzanie GBL, sugeruję zacząć od podejścia ewolucyjnego. dać sobie trochę czasu na nauczenie się zachowania mechanizmu i rozwiązywania problemów… o których może uda mi się kiedyś napisać.

double-trouble

z technicznego punktu widzenia, największym problemem są plany powiązane. niektóre plany są od siebie zależne i nie uda się przypisać jednego-bez-drugiego. przykłady:

  • plan 'Office Online’ wymaga planu 'SharePoint’
  • plan 'AudioConferencing’ wymaga planu 'Skype/Teams’

zależnie od implementacji, albo osoby nie będą miały oczekiwanej licencji, bo nie spełniają kryterium, albo w ogóle nie uda się utworzyć grupy licencyjnej. przykładowy scenariusz:

  • osoby posiadają licencje o365 E3 ale potrzebują tworzyć spotkania z opcją call-in. czyli trzeb im dodać plan 'Audio Conferencing’.

nie da się utworzyć grupy licencyjnej zawierającej wyłącznie ten plan, ponieważ nie ma gwarancji spełnienia warunq posiadania Skype/Teams. obejściem jest dodanie do grupy zarówno planu AC oraz Skype z licencji E3, trzeba się oczywiście upewnić, że nie więcej scenariuszy w firmie – np. trzeba będzie założyć grupę AC wraz z Skype E1 – co bardzo skompliqje zarządzanie.

trouble-double

…czyli to samo ale odwrotnie. usuwamy osoby z grupy licencyjnej, ba! usuwany całą grupę licencyjną. grupy w AD nie ma, wchodzimy do AAD… i grupa nadal jest, zawiera wszystkich członków, licencje nadal są przypisane, nie ma błędów synchronizacji… to czemu u licha grupa została??

otóż może tak się zdarzyć, że usuwamy grupę zawierająca licencję 'nadrzędną’ a gdzieś, wedle algorytmu, może zostać podrzędna. czyli np. usuwamy licencje zawierająca SharePoint, a są  grupie osoby które maja Office Online. AAD stwierdza, że to doprowadzi do konfliktu, więc bloqje całą operację.

jeśli usuwamy grupę licencyjna – zalecam zacząć od usunięcia wszystkich członków, synchronizacji, a potem dopiero usunięcie grupy.

konflikty licencyjne

przy złożonej strukturze grup mogą wystąpić konflikty licencji. taka sytuacja zdarza się w momencie, kiedy wedle grup użytkownik będzie miał przypisane plany z różnych grup. nie zapisałem niestety przykładowych przypadqw, ale miałem okazję oglądać sytuację, w której licencja nie została przypisana, ponieważ pomieszane były poziomy planów z różnych licencji – czyli jakiś plan z licencji E3 kolidować z innym planem, z E1.

podczas projektowania grup GBL lepiej przypisywać możliwie pełne licencje – zbytnie kombinowanie na poziomie planów szybko doprowadzi do scenariuszy konfliktowych.

podsumowanie

mechanizm GBL oceniam rewelacyjnie. AAD świetnie pokazuje komunikaty błędów, pomaga w debugowaniu i ogólnie całość jest bardzo fajnie przemyślana. nie jest jednak pozbawiony limitów, i nie zawsze będzie się nadawał. należy zapoznać się z niuansami działania, przemyśleć scenariusze użycia licencji w firmie i sprawdzić czy nie ma przypadqw na tyle skomplikowanych, że nie opłaca się go używać. stworzenie zbyt dużej ilości grup, dających możliwości granularnego zarządzania planami może albo posqtkować niezłym misz-maszem i wcale nie ułatwić życia, albo w specyficznych przypadkach być niemożliwe.

podsumowując 'KEEP IT SIMPLE’. znalezienie środka może być wyzwaniem jeśli scenariuszy licencyjnych jest wiele.

eN.

aplikacje o365 w licencji Business Premium

tak się jakoś składa, ze względu na klientów z którymi współpracuję, że nabywane są licencje Enterprise – czy to E3 czy E5. do tej pory żyłem w przekonaniu, że to najbardziej wypasione licencje, więc jest w nich już wszystko.

na wczorajszym WGUiSW zobaczyłem podczas prezentacji Marka o Office365 aplikację 'bookings’, która mnie mocno zaskoczyła, ponieważ sądziłem, że znam wszystkie. po krótkim śledztwie okazuje się, że licencja Business Premium zawiera pakiet aplikacji dla SMB, w którym są:

Niedostępność aplikacji w planach Enterprise Microsoft tłumaczy faktem, iż ich architektura nie jest w tej chwili wystarczająco skalowalna. niestety na roadmapie nie widzę, aby apki miały się pojawić się w tych planach.

po co w Enterprise aplikacje SMB? dla zaspokojenia małych, lokalnych projektów. często niezależne grupy projektowe potrzebują tanich narzędzi. np. firma korzysta z SalesForce jako CRM ale pewien dział potrzebuje wewnętrznie zarządzać swoimi klientami. a więc czasem warto pomieszać planami…

eN

konsola EXO z MFA

PowerShell dla EXO to porażka, zwłaszcza z włączonym MFA. już sam fakt, że należy jej szukać w części 'hybrid’ nie jest logicznie wyjaśnialny. podstawowym problemem jest jednak zaszyty hard-limit czasu sesji na 15 min. teoretycznie to czas bez aktywności (idle), ale zdarza mi się, że działający skrypt się sypie… najbardziej doqczliwe było jednak to, że za każdym razem trzeba się uwierzytelniać i przy każdym kolejnym połączeniu ponownie importowane są commandlety, a dodając do tego MFA… zaczyna się robić na prawdę nieprzyjemnie.

szukałem po forach i po doqmentach i miałem na prawdę dziwne pomysły jak to rozwiązać… aż w końcu znalazłem rozwiązanie. dodam, że trywialne.

jeśli uruchomi się po prostu 'Connect-EXOPSSession’ … nie da się żyć. a wystarczy uruchomić z parametrem:

Connect-EXOPSSession -UserPrincipalName admin@w-files.onmicrosoft.com

i owszem, sesja nadal jest zrywana po 15 min ale następuje automatyczne ponowne uwierzytelnienie, bez konieczności wpisywania hasła czy potwierdzania drugiego składnika. nie są również ponownie importowane commandlety. w skrócie – w końcu da się pracować.

być może to tak oczywiste, że nikt o tym nie pisze. być może to było wielką czcionką na 'pierwszej stronie’. ale być może uratuję kogoś tym wpisem przed całkowitą utratą nerwów, czego byłem już kilka razy bliski przygotowując raporty z EXO.

eN.