Skip to Content

IT nieuczesane.
category

Category: exchange

Send As w środowisq hybrydowym

scenariusz

przenosiny do o365 – codzienność. Hybryda Exchange – codzienność. teraz jak zaplanować migrację kont? alfabetycznie? a może lokalizacjami?

największym ogranicznikiem są uprawnienia dla skrzynek. w sfederowanej rzeczywistości nie wszystko jest przechodnie – uprawnienia nadane dla Exchange OnPrem niekoniecznie działają dla userów OnLine i vice-versa. oficjalny guide jest tu: https://technet.microsoft.com/en-us/library/jj200581(v=exchg.150).aspx . dla tego podstawowym wyznacznikiem powinny być skrzynki współdzielone, które powinny być przenoszone grupami -> skrzynka + wszyscy którzy mają do niej dostęp.

co do samego artu – pierwszą rzeczą, na którą warto zwrócić uwagę jest to, że dotyczy on wersji Exchange 2o13 i 2o16. niewprost jest zatem informacja, że Exchange 2o1o jest niewspierany. oficjalnie. ale nieoficjalnie działa tak samo – nie przetestowałem 1oo% przypadqw ale różnic nie widzę.

jest jednak ciekawe zdanie, na którym bym chciał się sqpić:

We don’t, however, support the use of the Send-As, Receive-As, or Send on behalf of mailbox permissions in hybrid deployments between on-premises Exchange and Office 365 organizations

z moich doświadczeń wynika, że jak najbardziej da się nadać SendAs dla dowolnej skrzynki. cały ambaras tkwi w tym, żeby uprawnienie nadać po dobrej stronie – tego DLA kogo są uprawnienia. zaraz pokaże na przykładzie.

jak to zrobić?

z tymi uprawnieniami to jest generalnie trochę namieszane – są aż 3 różne mechanizmy działając na różnych poziomach i do każdego jest inne polecenie. jest jak jest, i stało się tak, że jedna skrzynka jest lokalnie, druga zdalnie. co można zrobić?

środowisko:

  • testuser@w-files.pl jest na Ex 2o1o onprem
  • manager@w-files.pl jest zmigrowany do o365

przykładowe nadanie uprawnień dla skrzynki będzie wyglądało tak:

  • nadanie uprawnień Full Access, bo granularne nie działają. to uprawnienie działa na poziomie folderów w mailboxie.

  • nadanie Send on Behalf. to uprawnienie zapisywane jest dla mailboxa.

  • i na koniec uprawnienie Send As. to uprawnienie jest na poziomie obiektu Active Directory ponieważ wiąże się z delegacją uprawnienia. nie do końca rozumiem jak ten mechanizm jest obsługiwany przez Exchange, ale niewątpliwie informacja jest zapisywana dla obiektu AD. i tu jest clue dla działania SendAs dla hybrydy – ponieważ są dwa AD – OnPrem oraz OnLine, to najlepiej wykonać polecenie w obu, a na pewno musi być wykonane w AD, w którym jest obiekt korzystający z niego:

podsumowanie

no i działa.  a miało nie działać q:

eN.

 

 

nazwa katalogu ‚calendar’

exchange-logoniby trywialne… znalazłem kilka rozwiązań, ale żadne mi nie odpowiadało. to moje:

eN.

Exchange – uprawnienia do kalendarzy zasobów

exchange-logoogólnie

prosty scenariusz: trzeba założyć zasób, reprezentujący samochód firmowy tak, aby ludzie mogli go sobie rezerwować. następnie chcemy aby wszyscy widzieli kto go wypożyczył i dokąd zabrał. standardowo większość informacji jest ukryta i widać tylko ogólny wpis.

w tym celu należy nadać uprawnienia do kalendarza nie jest trudno i jest sporo linków, które szybko wskażą, że można to zrobić poleceniem:

… ale:

  • po pierwsze to nie zawsze zadziała (w Polsce można uznać, że prawie nigdy)
  • są bardziej złożone scenariusze. no i co daje ‚reviewer’?? dla tego warto wiedzieć więcej – np. jakie inne uprawnienia można nadać
  • czemu nadal nie ma wszystkich informacji
  • a co przy jeszcze bardziej wymyślnych wymaganiach dotyczących automatyki? jak jeszcze może ‚reagować’ taki obiekt na rezerwację?

lokalizacja

czemu w PL nie zadziała? ponieważ ‚calendar’ to nazwa katalogu, a ta jest zlokalizowana. żeby było śmieszniej nazwa będzie zależna od… ustawień przeglądarki w momencie tworzenia obiektu zasobu (użytkownikom definiuje się kraj). sweet. ponieważ mam główną przeglądarkę ustawiona na en-US, żeby nie oglądać raniących w oczy auto-tłumaczeń technetowych czy portalu office365 w którym ciężko się połapać, część obiektów ma ‚calendar’ a część ‚kalendarz’. zakładając z command line zawsze tworzy ‚calendar’ pomimo polskich regionalsów, więc mniemam, że ten sposób jest bardziej deterministyczny (ale trzeba by porobić więcej testów na różnie zlokalizowanych systemach).

czyli zapis ścieżki do konkretnego folderu to „roomResource@wfiles.pl:\kalendarz” . i znów – tyle dość łatwo i szybko można wyszperać na forach… ale pozostaje pytanie – jak wylistować wszystkie katalogi?? skoro jest kalendarz, to pewnie są jakieś inne foldery i może da się z nimi coś zrobić? i jak sprawdzić czy to jest ‚calendar’ czy ‚kalendarz’? ale najpierw…

uprawnienia

standardowo, po utworzeniu zasobu sali lub ekwipunq jedyne co widać w kalendarzu to ‚busy’. equipmentMBXdef

można to zmienić i umożliwić bardziej pełny widok nadając uprawnienia LimitedDetails lub Reviewer (pełna lista uprawnień tutaj). różnica jest dość poważna. ograniczone detale pozwolą na zobaczenie organizatora i lokalizacji ale nie pozwolą otworzyć zdarzenia ze względu na brak uprawnień:

equipmentMBXrevequipementMBXnoaccnadanie uprawnień podglądacza (; pozwoli otworzyć wpis w kalendarzu i w pełni mu się przyjrzeć:

equipmentMBXdetaa gdzie informacje??

na pierwszy rzut oka może wygląda dobrze, ale ktoś choć trochę bardziej spostrzegawczy zauważy, że pole tematu oraz szczegółowe informacje chyba nie dają pełnych informacji. i faktycznie – standardowo, założenie jest takie: ktoś wynajmuje salę, wysyła zaproszenie, więc w tym zaproszeniu umieszcza informacje o czym będzie rozmowa, pewnie agendę, może jakieś materiały dodatkowe itd. zasób sali dostaje to samo zaproszenie co każdy inny – a to byłby niekontrolowany wyciek informacji. nie byłoby miło, gdyby cała firma wiedziała, że właśnie dyrektorzy spotykają się, np. żeby omówić zwolnienia pracowników… dla tego standardowe opcje są ustawione restrykcyjnie i wycinają wszystkie informacje.

są jednak scenariusze, w których niektóre osoby muszą wiedzieć więcej – np. dział logistyki musi wiedzieć gdzie jest samochód i po co. wtedy trzeba wykonać następujące operacje:

  • nadać ludzikom uprawnienia ‚limitedDetails’ żeby widzieli ‚kto’ ale niewiele więcej (set-MailboxFolderPermission)
  • nadać wybrańcom uprawnienia ‚reviewer’ żeby mogli wejść i zobaczyć detale (add-MailboxFolderPermission)
  • no i skonfigurować zasób tak, żeby te informacje przyjmował a nie wycinał. (set-CalendarProcessing)

zobaczmy jakie zachowania można dla zasobu ustawić:

wszystkich nie ma sensu tłumaczyć, można przeczytać na technecie, nas interesują konkretnie DeleteSubject, DeleteComents. jak widać można również pozwolić na załączniki, kontrolować czy zatwierdzanie jest automatyczne czy wymaga ręcznego potwierdzenia, czy w polu tematu dodawana jest nazwa użytkownika… i inne. przykładowa konfiguracja zasobu:

i w takim przypadq dział logistyki może zobaczyć takie krzaczki…

equipmentMBXfulllista folderów

na koniec powrócę do listy folderów. tu niestety niespodzianka: nie da się wylistować folderów dla zasobu. ponieważ zasób jest skrzynką… ale równocześnie nią nie jest. jest – i te foldery są, ale nie jest – bo tak twierdzi system. poniżej mała zabawa – wylistowanie folderów dla regularnego mailboxa, próba wylistowania dla zasobu i dowód, że jednak wszystkie foldery są…

przy czym normalny user ma nazwy katalogów po polsq bo zakładając tak miał zdefiniowaną licencję, a zasób po ang. bo był zakładany z linii poleceń, a zasoby licencji nie posiadają. wykorzystanie ‚get-mailboxfolderpermission’ w połączeniu z intuicją to jedyny sposób jaki znalazłem, żeby sprawdzić czy dany folder istnieje dla zasobu…

eN.

 

Exchange online: przekierowanie, autoodpowiedź i blokada konta (exit procedure)

scenariusz… niemiły, ale życiowy: pracownik zostaje zwolniony z pracy, mamy skrzynki w Exchange online (wyłącznie) i synchronizację ADSync/ADFS z o365. bloqjemy konto w AD i… nadal odbiera pocztę na urządzeniach mobilnych i outlook. bloqjemy wszystkie funkcje w konfiguracji exchange online (active sync, owa etc)… i nadal może odbierać pocztę (SIC!) – odbierać, kasować etc.

jest tak, ponieważ sesja web dla Active Sync/outlook jest cały czas aktywna i uwierzytelniona. informacja jest scache’owana więc przeźroczyście będzie działać aż nie wygaśnie. dopiero po jakimś czasie wymusi powtórne uwierzytelnienie i przestanie działać. w środowisq on-prem trzeba wywalić sesje z serwerów CAS i pozamiatane. w chmurze takiej możliwości nie ma…

znalazłem jakieś porady polegająca na usunięciu mailboxa, poczekaniu 15 minut i przywróceniu mailboxa… ale w środowisq ADSync tego zrobić się nie da:

The following error occurred during validation in agent ‘Windows LiveId Agent’: ‘Unable to perform the save operation. ‘<UserName>′ is not within a valid server write scope.’ 
Click here for help…

trochę to problematyczne, bo w zasadzie aby mieć pewność, trzeba usunąć userowi licencję, co spowoduje usunięcie mailboxa. uważam, że ze względu na bezpieczeństwo to rozwiązanie pozostawia sporo do życzenia.

i taka ciekawostka dotycząca odpowiedzi automatycznej. skoro pracownik nie będzie już korzystał ze skrzynki, to:

  • chcemy aby maile były przekierowywane do przełożonego
  • nadawca ma odebrać informację zwrotną typu ‚…proszę kontaktować się z…’

należy wiedzieć, że wyzwalaczem odpowiedzi automatycznej jest zdarzenie ‚wiadomość znalazła się w skrzynce’. co oznacza, że jeśli wiadomości są przekierowywane *bez kopii* do skrzynki lokalnej, to autoodpowiedź *nie zadziała*.

eN.

podgląd eventlogu na żywo i reperacja skrzynek exchange

Windows_PowerShell_iconscenariusz

rozjechały się skrzynki na exchange. trzeba posprawdzać bazy oraz zreperować, co się da, z podglądem tego, co się dzieje w danym momencie.

podstawa

do weryfikacji i naprawy mailboxów online służy New-MailboxRepairRequest. problem polega na tym, że to polecenie nie generuje logu tylko wrzuca informacje do eventvwr. ta zmiana jest określana miałem ‚alleluja, teraz jest zajebiście’ ale przeglądanie eventvwr, zwłaszcza na żywym systemie nie jest przyjemna – ani nie wiadomo kiedy co się kończy, co zaczyna, zdarzeń jest od groma, żądanie zrobione z linii poleceń, a weryfikacja w taki sposób… no generalnie słabe.

cel

byłoby fajnie móc mieć podgląd life na konsoli tego, jak przebiegają testy. zwłaszcza, jeśli chcemy co jakiś czas zapuścić weryfikację kolejnej ‚podejrzanej’ skrzynki.

rozwiązanie

znalazłem w netcie kilka lamerskich skryptów, do podglądu eventvwr na żywo (-> keyword ‚tail eventvwr’). czemu lamerskich? ponieważ działają na zasadzie nieskończonej pętli while($true) co już samo w sobie jest bolesne. w tej pętli co 1 sek pobierane jest ostatnie zdarzenie z logu aplikacji. czyli jeśli system jest na prawdę dociążony (a exchange potrafi taki być), może się okazać, że nie zobaczymy tego, na co czekamy. krótko mówiąc – DA SIĘ LEPIEJ (:

rozwiązaniem jest zastawienie pułapki – to nie my pytamy się logu o ostatni event, tylko niech log nam powie, że takowy się pojawił. kwestie wydajności pomijam bo nie badałem – na pewno trzeba pamiętać o wyrejestrowaniu pułapki, żeby nie dociążać systemu. mechanizmem, który to realizuje jest ‚register-ObjectEvent‚, który rejestruje pułapkę na przechwycenie zdarzenia dla obiektów .NET.

oczywiście nie każde polecenie zdarzenia generuje /: aby to sprawdzić, wystarczy zwykły get-member. sprawdźmy dla get-eventlog:

no i słabo – niby jest ‚disposed’ ale to nic nie daje. a to dla tego, że obiektem, który jest zwrócony, jest konkretny ‚event’. jest jednak wywołanie polecenia, które ‚podłącza się’ do eventlogu a nie do jego zawartości:

bingo! tu pojawia się ‚entryWritten’! a więc zarejestrujmy pułapkę, przefiltrujmy zdarzenia, które nas interesują – i jeśli takowe się pojawi, wyświetlmy na ekran. opis eventów, jakie generuje new-mailboxrepairrequset można znaleźć na technecie. poniżej draft skryptu, który można sobie dowolnie rozbudować. dla czytelności zapisany w kilq linijkach.

na początq podłączamy się do konkretnego logu – logu aplikacji. następnie dla tego logu rejestrujemy pułapkę na pojawienie się nowych zdarzeń i definiujemy akcję. ponieważ na poziomie rejestracji nie ma możliwości zdefiniowania żadnych filtrów, wszystko trzeba zdefiniować wewnątrz ciała skryptu. po dokonaniu rejestracji, w konsoli będą się pokazywać wszystkie logi pomiędzy 10041-10062. oczywiście warto je ładniej wyświetlić i zrobić pełną obsługę… aby tego dokonać, kluczowym jest obiekt $event.SourceEventArgs.Entry, który jest de facto eventem pojawiającym się w logu, czyli można dostać się do wszystkich parametrów takich jak przy ‚ Get-EventLog -LogName application -Newest 1 |gm’.

na koniec trzeba pamiętać o wyrejestrowaniu!! na skróty, wyrejestrowanie wszystkich:

eN.

 

 

 

jak sprawdzić podstawowy adresy SMTP

adresy email zapisane są w atrybucie wielowartościowym proxyaddresses. adres podstawowy wyróżniony jest dużymi literami SMTP. zatem trick polega na wylistowaniu wszystkich tych wartości z tablicy, które są dużymi literami. służy do tego operator cmatch. w poniższym przykładzie dla o365:

eN.

550 5.4.1 recipient@domain.com: Recipient address rejected: (Access Denied)

taka ciekawostka: exchange online. założony nowy user… tfu! odblokowany stary user. standard nazewniczy loginów jest jakiś-tam więc każdemu userowi dodaje się imie.nazwisko@domena.com . wszystkim działa.. temu nie. serwer zwraca błąd 5.4.1 acc denied. czytam sobie linki z opisami – wszyscy sugerują zmianę typu domeny na Internal Relay czyli „domenę przekazywania wewnętrznego” [te polskie nazwy. ciągle nie mogę się połapać w tym panelu. PowerShell RZĄDZI! (: ].

co to oznacza? to oznacza, że trzebaby uznać, że adresy wewnętrzne są… adresami zewnętrznymi. no może i zaczęłoby działać, ale nie akceptuję takiej bzdury.

po wielu testach i 2o minutach później działa. rozwiązanie:

sprawdzam jakie są adresy zdefiniowane, zmieniam alias z głównym, a potem z powrotem.

…i działa. niby to samo a jednak nie to samo. cytując filmografię „noone’s perfect” ewentualnie „sowy nie są tym, czym się wydają”.

eN.

 

Exchange 2o1o, PS2.o – personal quota limits

PS2.o nie ułatwia życia… no ale czasem trafia się na takie środowisko i trzeba. szybka wrzuta, bez specjalnego tłumaczenia: sprawdzić kto ma włączone własne limity skrzynkowe oraz jaka jest obecnie zajętość skrzynki, żeby wiedzieć o ile można od razu przyciąć.

w tym celu trzeba połączyć wyniki get-mailbox i get-mailboxstatistics:

get-personalQuotaLimits.ps1

ciekawostka: commandlety Ex2o1o są dostarczane jako snapin a nie moduł… ot taki archaizm.

eN.

Exchange online, powershell, kontakty i rezerwacja sal

to, co jest piękne w PS to fakt, że kiedy się go pozna, wszystko jedno do jakiego produktu się usiądzie – chwila moment i można szybko wyciągać statystyki, tworzyć obiekty, zestawienia i co kolwiek potrzeba. z jednego miejsca i bez różnych GUI.   <3 <3 ^^

przesiadka z Exchange onPremise na Exchange onLine jest bezbolesna – ot trochę mniej poleceń. wymagania? żadne. wystraczy po prostu zestawić sesję z serwerem i zaimportować sesję i stacja zmienia się w konsolę zarządzającą Exchange. po imporcie sesji dostępny jest moduł, którego nazwa jest generowana jakimś pseudolosowym algorytmem. dostępne polecenia można wylistować przy pomocy get-command:

do założenia kontaktu [bo przecież nie będę wyklikiwał z interfejsu, fuj] jest polecenie ‚new-mailContact’. okazuje się jednak, że ma ono bardzo ograniczoną listę parametrów, nie pozwalając ustalić takich szczegółów jak organizacja, stanowisko, telefon etc. i tu znów piękno PS – polecenie to nie tylko tworzy obiekt typu ‚mailContact’ ale również go zwraca. przypomnę, że PS zwraca obiekty przez referencję dzięki czemu wszystko można ‚pajpować’. ponieważ jest drugie polecenie – ‚set-contact’, które przyjmuje wszystkie wymagane parametry a jako wskazanie może użyć zarówno ID jak bezpośredniej referencji do obiektu ‚mailContact’, można utworzyć prostego jednolinijkowca, który zrobi co trzeba:

czyli gdyby chcieć ten prosty znaczek ‚|’ zapisać na polski byłoby to mniej-więcej – ‚a następnie przekarz go przez referencję do następnego polecenia’

i jeszcze „jedna rzecza” która się przydaje – rezerwowanie sal przez osoby z zewnątrz. standardowo takiej możliwości nie ma. w ex2k13 uzyskuje się to poprzez ‚calendar processing’:

to jeszcze nie wystarczy. jeszcze jedno wymaganie i jeden ‚trick’:

  • adres dokonujący rezerwacji musi istnieć jako kontakt na serwerze [poprzedni przykład]
  • a trick polega na tym, że nie zadziała dodanie w spotkaniu pokoju tak, jak to się zwyczajowo robi na homeserwerze. należy adres wpisać tak, jak zaprasza się zwykłą osobę.

eN.

 

 

 

 

jak sprawdzić build Exchange … ten prawdziwy

po instalacji UR i sprawdzeniu wersji [build number], exchange cały czas pokazuje świeżutką wersję bez builda. wersję można sprawdzić w konsoli lub z PS:

okazuje się, że kwestia wersji nie jest taka trywialna, kiedy przyjrzeć się jej bliżej. kilka zebranych informacji:

  • różne komponenty mają różne wersje.to co się zazwyczaj sprawdza, to wersja ‚core’ czyli głównego silnika.
  • wersje zapisywane są w różnych miejscach. ta pokazywana w konsoli oraz powyższy skrypt, zaczytuje je z obiektu w AD z partycji konfiguracji. dla Ex2kd to jest:

ufff… oczywiście można tą ścieżkę wyciągnąć poleceniem:

wersja zapisana jest w atrybucie ‚serialNumber’ więc odczytać ją można:

parametr nie jest uaktualniany przy  instalacji UR – stąd rozjazd.

  • wersję można również sprawdzić w kluczu rejestru „HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\ExchangeServer\v<versionNumber>\<roleName>” – są tam klucze o nazwach ‚configuredVersion’ i ‚unpackedVersion’. te również nie są poprawiane.

sprawdzić prawdziwą wersję można na dwa sposoby:

  • z GUI – w EMC [górne menu]-> help -> about

exchangeversion

  • albo sprawdzając wersję pliq ExSetup z katalogu bin:

eN.