ITechDays [1-2].o6.2o17

konferencje ITechDay cieszyły się bardzo dużym zainteresowaniem – ostatnio 12o miejscówek rozeszło się w… 8o sec! [SIC!]. w związq z taką popularnością, organizatorzy ITD musieli pomyśleć o tych pozostałych i tak, z jednodniowego ITD odbędą się dwudniowe ITDs (: co więcej, aby nie ograniczać chętnym wstępu, konferencja odbędzie się w bardziej przestronnym miejscu…. w największym centrum konferencyjno-kongresowym w Europie Środkowej – PTAK Warsaw Expo. na szczegółową agendę trzeba jeszcze poczekać, ale już wiadomo, iż konferencja odbędzie się 1-2 czerwca, oraz znani są prelegenci.

tym razem w-files nie tylko patronuje medialnie, ale również jest w składzie prelegentów (:

eN.

compare uncomparable

*UPDATED

bardzo często korzystam z 'compare-object’ ale ma niestety jedną bardzo, bardzo poważną skazę. pomimo swojej nazwy, wcale nie potrafi porównywać obiektów, a raczej wykrywać różne obiekty w tablicy. oto przykład:

PS C:\Temp> $t1=Get-Process -Name explorer
PS C:\Temp> $t2=Get-Process -Name explorer
PS C:\Temp> $t1

Handles  NPM(K)    PM(K)      WS(K)     CPU(s)     Id  SI ProcessName
-------  ------    -----      -----     ------     --  -- -----------
   1264     115    76272      76816     694,25  15372   4 explorer


PS C:\Temp> $t2

Handles  NPM(K)    PM(K)      WS(K)     CPU(s)     Id  SI ProcessName
-------  ------    -----      -----     ------     --  -- -----------
   1264     115    76348      76832     694,25  15372   4 explorer


PS C:\Temp> compare $t1 $t2
PS C:\Temp>

$t1 i $t2 są takimi samymi obiektami, różnią się niektórymi wartościami atrybutów – np. Paged Memory [PM(K)]. compare różnicy nie widzi. oczywiście można porównać konkretne atrybuty [properties]:

PS C:\Temp> compare $t1 $t2 -Property PagedMemorySize

PagedMemorySize SideIndicator
--------------- -------------
       78180352 =>
       78102528 <=

ale kiedy poda się kilka parametrów, to compare-object traktuje je jako logiczny OR –
„czy którykolwiek z nich się różni?”:

PS C:\Temp> compare $t1 $t2 -Property PagedMemorySize,Name

PagedMemorySize Name     SideIndicator
--------------- ----     -------------
       78180352 explorer =>
       78102528 explorer <=

moje odczucie jest takie, że compare-object został napisany z myślą o tabelach, gdzie dla kolejnych wierszy pokazuje różnice w kolumnach. w przypadq obiektów jest odwrotnie – każdy wiersz jest unikalny i ma wartość. więc albo trzeba byłoby skonwertować to do tablicy i dokonać transpozycji, albo obejść się bez compare-object /: jak się okazuje nawet PowerShell ma wady i nie jest idealny. ten przypadek jest szczególnie bolesny i niezrozumiały, zarówno ze względu na obiektowość PS, jak i zwodniczą nazwę.

jeden ze scenariuszy: szukałem różnic w wartości obiektów po migracji między usługami, żeby wykryć, gdzie była zmiana. dla ułatwienia zrobiłem sobie zrzut obiektu do CSV [ale to nie ma znaczenia]. efekt był dokładnie taki jak opisywany powyżej, czyli nie pokazywał mi różnic. i trzeba było sobie to ręcznie oprogramować:

$t1.Psobject.Properties|%{ if($_.value -ne $t2.$($_.name)) { write-host "$($_.name)-> $($_.value); $($t2.$($_.name)) " } }

PS szybko rozleniwia /:

/UPDATE

okazuje się, że Tatuśkowi też zabrakło takiej funkcjonalności więc napisał piękną funkcję do jej obsługi: Compare-ObjectProperty.

dzięki Kacper za linka (:

eN.

 

 

 

URI PowerShell dla Skype Online

PowerShell zarówno dla Exchange jak Skype Online dostępny jest poprzez stworzenie sesji WinRM i zaimportowanie zdalnych komend. prosta komenda połączenia do SkypeOL to po prostu:

$sfboSession = New-CsOnlineSession -Credential (get-credential)
Import-PSSession $sfboSession

…ale ja jakoś od zawsze trafiam w nietypowe przypadki [środowiska] i połączyć się nie mogłem, ponieważ DNS nie wskazuje jeszcze na środowisko, do którego się chcę połączyć. po przeczesaniu internetów wszędzie trafiałem na 'pomoc’ aby dopisać parametr -OverrideAdminDomain “my.domain.365” . bezwartościowa, ponieważ tak jak pisałem, DNS nie jest jeszcze skonfigurowany. ale jest jeszcze jeden parametr, tym razem bardziej pomocny: -OverridePowershellUri . tylko to URI trzeba znać.

trzeba odpalić przeglądarkę na jakimś komputerze z DNS ustawionym na zewnątrz i wpisać: https://sched.lync.com . po uwierzytelnieniu zostaniemy przekierowani na URI dla naszego tenanta np: „https://webdir1f.online.lync.com/Scheduler/?AuthCookieName=RtcAuth” . dla PS będzie to: „https://webdir1f.online.lync.com/OcsPowershellLiveId”.

trochę wchodzenie przez komin, ale czasem trzeba pokombinować (; jak ktoś zna prostszy sposób to się proszę pochwalić.

eN.

unikaty i duplikaty

Duplikaty

łatwo jest przefiltrować listę tak, aby mieć tylko unikalne elementy – jest zarówno commandlet 'get-unique’ oraz parametr ’-unique’ przy select-object, ale jak wyłuskać duplikaty?

sposobów jest oczywiście wiele a ten, który mi się podoba to:

cat "<file.name>"|group |? count -gt 1

lub w hiperpoprawnym zapisie:

get-content "<file.name>"|group-object|where-object {$_.count -gt 1}

plik:

PS C:\Temp> cat .\loremipsum.txt
Lorem ipsum dolor sit amet,
consectetur adipiscing elit.
non consectetur ex aliquam a. Vestibulum ante ipsum primis
Nulla at blandit nisi. Maecenas sodales tempor ligula.
Mauris ac pharetra eros. Nam pellentesque quam purus,
non consectetur ex aliquam a. Vestibulum ante ipsum primis
in faucibus orci luctus et ultrices
posuere cubilia Curae; Maecenas
consequat velit consequat
Mauris ac pharetra eros. Nam pellentesque quam purus,
vulputate fringilla. Donec
bibendum finibus ex vel congue.
bibendum finibus ex vel congue.

a teraz sprawdźmy duplikaty:

Count Name Group
----- ---- -----
 2 non consectetur ex ali... {non consectetur ex aliquam a. Vestibulum ante ipsum primis , non consectetur ex ali...
 2 Mauris ac pharetra ero... {Mauris ac pharetra eros. Nam pellentesque quam purus, , Mauris ac pharetra eros. Na...
 2 bibendum finibus ex ve... {bibendum finibus ex vel congue. , bibendum finibus ex vel congue. }

można jeszcze upiększyć output, pozbywając się śmieci:

cat .\sfbea.txt |group -NoElement|? count -gt 1

Unikaty

powracając jeszcze do unikatów… wydawałoby się, że skoro jest oddzielne polecenie – get-unique, to powinno mieć większe możliwości i być bardziej elastyczne niż jakiś tam parametr do innego polecenia.

o dziwo jest odwrotnie. osobiście traktuję get-unique jako ciekawostkę i nie miałem scenariusza, w którym bym go użył. a to dla tego iż [msdn]:

The Get-Unique cmdlet compares each item in a sorted list to the next item, eliminates duplicates, and returns only one instance of each item. The list must be sorted for the cmdlet to work properly.

Get-Unique is case-sensitive. As a result, strings that differ only in character casing are considered to be unique.

eN.

Skype for Business bez DNS

trafiłem na ciekawy 'ficzer’ SfB, który jest bardzo przydatny podczas labów, ale może się przydać również podczas debugowania problemów.

Jak wiadomo, klient Skype for Business korzysta z odpowiednich rekordów DNS w celu zlokalizowania serwera, do którego ma się połączyć. jest fajny art, który pokazuje na diagramie sposób odpytywania.  nigdzie jednak nie znalazłem informacji, że w celu optymalizacji połączenia, tworzony jest plik cache: $env:USERPROFILE\AppData\Local\Microsoft\Office\16.0\Lync\<userSIP>\EndpointConfiguration.cache .

nie znalazłem scenariusza, w którym ten plik jest usuwany i ponawiane jest odpytywanie DNS. to ma ciekawe konsekwencje. klient łączy się bez DNSów! nie musiałem nawet odpalać network monitora – ustawiłem na lokalnej sieciówce DNS na 127.0.0.1 i odpaliłem SfB. działa (:

może to mieć pozytywne i negatywne efekty. negatywny może być wtedy, kiedy używa się lokalnego serwera SfB i dokona się zmiany adresów. nie wiem jak się zachowa, bo nie testowałem – zakładam, że ktoś to przemyślał, i jeśli nie może znaleźć wpisu z cache, sfailuje na zapytania DNS. ja natomiast, w nietypowym środowisq, przetrzymując dwa pliki cache, nadgrywam go zależnie od tego, co chcę testować i voila! mogę bez DNS łączyć się do odpowiedniego serwera, pomimo braq wpisów w DNS.

eN.

krótkie URLe…

…zniknęły.

nie wczoraj, a pół roq temu, ale może komuś umknęło to tak, jak mi. chodzi o skrócone adresy URL, które dostępne były w różnych serwisach typu OneDrive czy Google Maps. z jednej strony co za różnica czy adres jest skrócony, przecież i tak się go nie uczymy na pamięć, tylko wysyłamy mailem czy innym medium, z drugiej strony miało to ciekawy efekt psychologiczny – taki krótki adres nie straszy. kiedy widzi się długi ciąg znaków w adresie, który mamy kliknąć to budzi niepoqj, w przeciwieństwie do krótkiego, zwięzłego. no i mimo wszystko, rzadko-bo-rzadko, ale czasem taki adres trzeba przedyktować przez telefon. dziwne przypadki się zdarzają.

zastanawiałem się, czemu serwisy Google czy MS wycofały tą usługę i okazuje się, że chodzi o bezpieczeństwo. jeśli udostępnialiście kiedyś pliki lub lokalizacje z usługi chmurowej, to wiecie, że całe bezpieczeństwo opiera się w właśnie na linq – w nim zawarty jest token, upoważniający do edycji lub odczytu pliq. to samo w sobie nie jest jeszcze tragedią, bo wysyłając link mailem musimy pamiętać, że może kiedyś trafić 'gdziekolwiek’ i doqment/lokalizacja będzie mógł być pobrany lub edytowany przez przypadkową osobę. większym problemem był fakt, że token w zawartym linq, oraz uporządkowana struktura serwisu pozwala na dostęp do innych danych.

całość, wraz z raportem na podstawie odkodowanych linqw można znaleźć w tym artyqle a dla leniwych, skrócona wersja przykładowych scenariuszy ataq:

  • dla OneDrive, znalezienie katalogu z zapisem, umożliwia łatwe wstrzyknięcie wirusa/malware na komputery użytkownika, ponieważ usługa ta daje możliwość synchronizacji katalogu, która jest powszechnie wykorzystywana. statystyki z badania pokazały, że aż 7% katalogów dawało możliwość zapisu [SIC!]
  • dla GMaps, wykrycie zapisanych przez użytkownika miejsc, daje możliwość bardzo dokładnego profilowania – w skrócie dostęp do informacji kim jesteśmy, gdzie bywamy, a nawet z kim się spotykamy – co daje podstawy do bardzo dobrze sprofilowanego ataku – czy to elektronicznego, czy IRL.

to w sumie oczywiste, ale przypomina, jak olbrzymia odpowiedzialność spoczywa na dostawcach usług globalnych. taki mały niuansik – ot, skrócony link…

w epoce 'chmury’ i wszechobecnego ułatwiania sobie życia, czasem zapominamy jak niebezpieczne jest udostępnianie danych. nie jestem zwolennikiem paranoidalnego odcinania się od usług… bo są wygodne. i dużo traci się na blokowaniu wszelkich ciasteczek, korzystania z map, backupu zdjęć czy trzymania doqmentów w chmurze. poszukiwanie niszowych rozwiązań, które są rzadziej kierunkiem ataq ze względu na mniejszą popularność, może być jakimś rozwiązaniem. ale traci się wtedy na integracji – decydując się na usługi jednego dostawcy, mamy tzw. 'suite’ czyli cały pakiet usług, pomiędzy którymi łatwo wymienia się dane, co daje olbrzymią elastyczność i wygodę.

wybór należy do Ciebie – byle świadomy!

eN.