Skip to Content

IT nieuczesane.
author

Author: nExoR

MTS tata PowerShell (:


 

1oo WGUiSW – 1o lat!

już wkrótce SETNE [1oo] spotkanie WGUiSW. 1o lat spotkań. zacna liczba. chętnie podzielę się zaproszeniem, które otrzymałem (:

każdy, kto uczestniczy w spotkaniach – aktywnie, czy jako słuchacz – jest ważną częścią społeczności. o tym, że ta działalność jest ważna świadczy fakt, że niestrudzenie funkcjonuje od dekady i wciąż nie braqje ani słuchaczy ani prezenterów.

serdecznie zapraszam na kolejne, setne już spotkanie, na którym znajdzie się czas na wspominki i celebrację tej znakomitej rocznicy!

PS. nie zapomnijcie zapisać się na meetup żeby nie mieć problemów z wejściem!

eN.

przekazanie zmiennych

przekazanie zmiennej

to w jaki sposób przekazywane są zmienne – przez wartość, czy przez referencję – znacząco wpływa na to, jak łatwo/trudno będzie potem pisać skrypt, oraz żeby nie zrobić sobie krzywdy. oto jak to działa w PS.

najpierw najprostszy możliwy przykład:

co pojawi się na ekranie? będzie to:

czyli zmienna była przekazana przez wartość – $a i $b są niezależnymi zmiennymi, modyfikacja jednej, nie wpływa na drugą.

ALE

inny przykład – tym razem zmienną jest tablica:

i na ekranie pojawi się:

a to oznacza, że $b=$a jest przekazaniem referencji a nie kopią zmiennej. to hiper ważne, bo może zarówno pomóc ale i nieźle rozwalić całą logikę skryptu.

bardziej złożony scenariusz, gdzie takie przekazanie jest przydatne: „jest długa lista elementów. dla tych elementów, które nie mają wartości, trzeba wykonać jakąś [czasochłonną] operację, następnie trzeba wyeksportować całą listę”

przykładowa lista [list.csv]

prosty kawałek skryptu [test-reference.ps1]

podstawowe pytanie: co zwróci $data?

cały myk polega na tym, że:

  • importuję wszystkie dane.
  • tworzę zmienną stanowiącą ich podzbiór czyli elementy bez wartości [$data przefiltrowane -not $_.value]
  • wykonuję operacje na podzbiorze – foreach($d in $partialData)
  • i na końcu chcę wszystkie wartości, a nie tylko część, wyeksportować.

pomimo, że na końcu nie ma nigdzie przepisania $partialData z powrotem do $data, wynik jest:

dzięki temu, że $partialData tylko wskazuje na elementy tej samej tablicy, operacje wykonywały się bezpośrednio. nie muszę nic kombinować i mogę teraz zrobić po prostu „$data|export-csv”.

czasem jednak scenariusz może być zupełnie odwrotny – chcemy zrobić kopię danych i na nich się pobawić, nie wpływając na ‚master copy’. w takim przypadq można użyć kilq metod – np. klonowania:

eN.

 

search and replace

…taki drobny dowcip przed Prima Aprilis: search and replace w OneNote.

eN.

czy OneDrive ma skanowanie antywirusowe?

krótko – tak, ma. zarówno OD jak i SP. tutaj można znaleźć kilka szczegółów.

to, co jest dodatkowo ciekawe, to kwestie prywatności… skoro działa skaner antywirusowy, to znaczy że eMeS może zajrzeć do zawartości pliqw? w zasadzie to indexer też działa – przecież jest search, który dokładnie to robi – skanuje [‚zagląda’] do pliqw po to, żeby pomóc je wyszukiwać.

poza politykami prywatności i zapewnieniami ze strony Microsoft, że żaden pracownik nie ma wglądu w treści klientów bez ich wiedzy i zgody, nie udało mi się znaleźć technicznego ‚dowodu’ że tak faktycznie jest. w końcu usługi działają w zupełnie innym kontekście. pozostaje zaufanie, poparte również tym, że jeśli choćby jeden taki przypadek wyciekł publicznie, odbyłby się globalny lincz i utrata zaufania.

eN.

Exchange hybrid – niespójność informacji

ogólnie synchronizacja jest jednostronna – z onprem do online. obiektami środowiska hybrydowego najlepiej zarządza się z onprem, ponieważ w o365 są tylko do odczytu… ale są pewne wyjątki, powodujące niespójność. przykładem może być konwersja skrzynki User<>Shared.

od momentu, kiedy skrzynka jest już w ExOL, o statystyki czy operacje na skrzynce, trzeba sięgać bezpośrednio. o ile get-recipient można uruchomić również onprem, o tyle np. konwersję typu należy przeprowadzić w ExOL. dodajmy do tego fakt, że synchronizacja jest w jedną stronę i…

…po konwersji skrzynki, jeśli uruchomimy get-recipient lokalnie, to pokaże nam typ z przed konwersji. w efekcie, jeśli takie operacje są wykonywane często, statystyki będą przekłamywane. należy więc po dokonaniu konwersji ręcznie zmodyfikować atrybuty w AD tak, aby odpowiadały obecnemu stanowi. trzeba przy tym uważać, bo nazwy są bardzo podobne i łatwo je pomylić:

 SharedMailbox UserMailbox
msExchRemoteRecipientType 100 6
msExchRecipientTypeDetails 34359738368 2147483648
msExchRecipientDisplayType -2147483642 -2147483642

szczegółowy opis parametrów tutaj

przykładowy link do dalszej lektury: http://jetzemellema.blogspot.co.uk/2016/02/convert-user-mailbox-to-shared-in.html

eN.

Fixes and Workarounds

coś, co warto sobie dodać do bookmarków – Fixes or workarounds for recent Office issues. na tej stronie znajdują się aktualne informacje dotyczące znanych błędów wraz z rozwiązaniami. w moim przypadq – nagle przestało mi działać uwierzytelnienie ADAL/MFA w outlook. w części windows/outlook/other issues można znaleźć, że ostatni fix coś uszkodził i na razie obejściem jest wyłączenie ADAL. albo poczekanie na fixa do fixa (;

Unable to create second profile with different account on ADAL enabled tenant. [WORKAROUND]

Last Updated: February 7, 2018

ISSUE

When you try to configure a secondary account from the same Office 365 tenant in Outlook 2016 (Current Channel) with ADAL enabled, you receive the following error: „An encrypted connection to your mail server is not available. Click Next to attempt using an unencrypted connection.”

STATUS: WORKAROUND

To workaround this issue, you can disable ADAL on the client. To do this, follow these steps to Disable modern authentication on devices.

**********

warto mieć link pod ręką!

eN.

role AzureAD – jak zacząć pracę z graphAPI

Customized Administrator

czy zauważyliście, że zależnie od interfejsu, widać inne role w AAD? jeśli zajrzymy z Office Admin Center to:

kiedy tworzy się ‚Customized Admin’ z portalu Admin, to już ilościowo widać, że jest coś więcej:

a tak na prawdę, jak nie trudno się domyślić, jest ich jeszcze więcej.  scenariusz ‚po co?’ zostawię sobie na kiedy indziej a tymczasem – jak sprawdzić te role i jak do nich przydzielić? jakich braqje?

jak sprawdzić wszystkie role

najkrócej: za pomocą Microsoft Graph. zakładam, że używanie tego mechanizmu dla wielu osób nie jest oczywiste, dla tego krótka instrukcja. po wejściu stronę, należy się uwierzytelnić do swojego tenanta [po lewej stronie ‚microsoft sign-in’]. w innym przypadq będziemy w testowym tenancie Microsoftu.

w oknie akcji widać trzy podstawowe elementy – okno zapytania, ‚request body’ uzupełniające zapytanie oraz ‚response body’ gdzie będą się pojawiać wyniki.

dla sportu można sobie kliknąć ‚run query’ i zobaczyć wynik w ‚response body’. szybko można się zorientować, że wszędzie widzimy legendarnego Dżejsona, a zapytania są w stanie spoczynq [REST]. jak nie rozumiesz – na razie nie szkodzi, ale warto uzupełnić sobie informacje o zapytania REST oraz format JSON. w odpowiedzi dowiemy się paru rzeczy o własnym koncie.

można się również szybko zorientować w dostępnych metodach rozwijając listę ‚GET’ gdzie widać jeszcze ‚PUT’, ‚POST’, PATCH’ oraz ‚DELETE’. widać również, że są dwie wersje Microsoft Graph – v1.0 oraz beta.

pierwsza niespodziewajka – czytając i przeglądając artykuły zaczniecie trafiać na wersje 1.5 czy 1.6… a to dla tego że oprócz Microsoft Graph jest jego poprzednia wersja – AzureAD graph. trzeba zatem uważać przy stosowaniu przykładów, do której są wersji.

dostępne role dla Customized Administrator – bo taki jest cel niniejszego zadania – widoczne są w części ‚directoryRoles’. i tu widać pełną listę, m.in. niedostępnego z interfejsu ‚CRM Service Administrator’, ‚Power BI Service Administrator’ i kilka innych.

jak dodać rolę

pomimo, że w naszym świecie rolę przydziela się użytkownikowi, tutaj to roli przydziela się użytkownika. czyli operację trzeba wykonać dla pożądanej roli a nie dla użytkownika. to, co będzie nas interesować to ‚ID’ roli. zanim coś przypiszemy najpierw sprawdźmy członków ‚Global Admins’. tutaj nazywa się to ‚Company Administrator’ … pewnie dla ułatwienia (; spisujemy ID i wykonujemy GET dla https://graph.microsoft.com/v1.0/directoryRoles/<ID Company Amdministrator/members -> Run Query. pojawią się wszyscy GA dla tenanta.

aby kogoś dodać, należy wysłać żądanie [POST] a w treści zamieścić opis obiektu zapisany jako JSON.

polecenie HTTP:

POST v1.0 https://graph.microsoft.com/v1.0/directoryRoles/<ID Company Amdministrator/members/ref$

oraz request body, gdzie zamieszczamy opis obiektu:

wykonujemy request i….

dostajemy błąd o braq uprawnień. pomimo, że jesteśmy adminami?

uprawnienia dla GraphExplorera

Graph Explorer działa jako proxy i standardowo ma tylko uprawnienia odczytu. należy aplikacji nadać uprawnienia, aby mogła wykonać operacje zapisu. zwróć uwagę, że tam, gdzie było ‚Sign In’, teraz pod loginem jest ‚modify permissions’ oraz ‚sign out’. dla nadania roli wymagane są dwa uprawnienia:

  • Directory.AccessAsUser.All
  • Directory.ReadWrite.All

zostaniemy zapytani, czy nadać aplikacji odpowiednie uprawnienia i voila. wykonanie wcześniej opisanego query – doda userowi pożądaną rolę.

eN.

user@tenant.onmicrosoft.com w hybrydzie

każdy obiekt użytkownika w o365 w hybrydzie ma standardowo zakładane dwa adresy email:

  • user@tenant.mail.onmicrosoft.com – który służy jako email routingowy. EXO jest de facto oddzielnym środowiskiem, oddzielną organizacją Exchange, a więc jeśli jest email user@w-files.pl, musi istnieć sposób na przesłanie maila do konkretnego serwera – wtedy wykorzystywany jest ten adres.
  • user@tenant.onmicrosoft.com – który jest tworzony na podstawie standardowej polityki adresowej EXO. czy użytkownik jest synchronizowany, czy założony bezpośrednio – jest nadal mailboxem i podlega polityce.

istnieją różne scenariusze, w których chcielibyśmy zmienić istniejący adres – np. chcemy go zwolnić tak, aby mógł być wykorzystany dla innego obiektu. ale….

w środowisq hybrydowym wszystkie zmiany muszą być zrobione w on-prem. próba dokonania adresu bezpośrednio w EXO skończy się Acc Denied. ale…

jeśli wykonamy polecenie

to zobaczymy adres routingowy user@tenant.mail.onmicrosoft.com ale nie będzie na liście adresu EXO /:

jak zatem go zmienić?

da się, ale wymaga nieco gimnastyki. skoro nie da się zmienić dla konta synchronizowanego to trzeba je uczynić na chwilę kontem lokalnym o365. a więc kroki są następujące:

  • przesunąć obiekt w on-prem AD do OU, które nie jest synchronizowane
  • wymusić/poczekać na synchronizację
  • konto w AAD zostanie usunięte wraz z mailboxem
  • odzyskać konto w AAD [np. restore-msolUser]
  • zmienić adres w EXO
  • przywrócić pierwotną lokalizację obiektu w AD
  • poczekać na synchronizację

jeśli konto zniknie przy pierwszym cyklu, może to wynikać z niepełnym sync w domenie on-prem. najlepiej wykonywać operacje na AD, z którego jest robiony sync do AAD.

eN.

ITechDay 2o18

konferencja ITD zyskała już swoje miejsce na mapie ciekawych wydarzeń edukacyjnych. wkrótce, wtorek 2o.o2.2o18, tegoroczna odsłona. tematyka jak zwykle będzie oscylować w okół produktów Microsoft, nie tylko na produktach BackOffice ale zgodnie z trendem – również chmurze:

•    Windows Server 2016,
•    Windows 10,
•    Office 365,
•    Microsoft Azure,
•    PowerShell,
•    bezpieczeństwo i ochrona danych w środowiskach Microsoft.

szczegółowa agenda oraz lista prelegentów wkrótce.

stay tuned!

eN.