Skip to Content

IT nieuczesane.

transformacja listy do csv

dane przekazywane są w różny, czasem dość dziwny sposób. ostatnio potrzebowałem danych do migracji w office365 i dane zostały przedstawione jako spis, gdzie jedynym wiążącym elementem była ilość wpisów dla każdego obiektu. coś takiego (example.txt):

takich wpisów było prawie 1oo a w efekcie chodziło o stworzenie tabeli, i dokonanie transpozycji:

nazwa parametr coś linia bez znacznika
jakaś nazwa wartość parametru tutaj jakaś wartość a tutaj kolejna wartość
inna nazwa inna wartość parametru coś i tu znów wartość
nazwa 3 parametr 3 tralalala blablabla
znów coś ciągle coś innego przykadowy ciąg znaków a tutaj kolejna wartość

 

jak widać zapis wygenerowany na stronie był dość luźny w stosunq do tego, co chciałbym mieć na końcu. tutaj poradziłem sobie przepisując ręcznie, ale przy dużej ilości wpisów…

wszystkiego nie ma sensu automatyzować, ale podstawowym zadaniem będzie owa transpozycja. w sumie to dwie linijki kodu:

pierwsza linijka to po prostu odczytanie zawartości pliq do zmiennej. a cała ‚transpozycja’ to de facto zauważenie, że:

  • każdy obiekt zapisany jest na 5 liniach
  • następnie jest pusta linia oddzielająca
  • kiedy sklei się wszystkie 5 linii średnikami.. to w zasadzie już

cały myk jak ładnie skleić wartości tabeli do stringa? wystarczy wskazać tabelę, i użyć ‚join’. ot – PowerShell. nie trzeba żadnych pętli ani wynalazków, wszystko zrobi za nas (; dodajmy do tego, że substrakt tabeli można uzyskać wskazując konkretne elementy, a jeśli są w zapisie ciągłym to wystarczy użyć ‚..’ . czyli tak:

inkrementując w pętli $i+=6 – to przeskakiwanie co 6 kolejnych linii.

‚podtabela’ma natomiast podane $i+5 aby ominąć ostatnią, pustą wartość.

…teraz wystarczy otworzyć w excelu i sobie resztę doklikać i uporządkować. voila.

eN.

 

Teams i grupy o365

taka drobna ciekawostka… większość aplikacji o365 opiera się na ‚Office 365 groups‚. ciekawe jest to, że zależnie od aplikacji to nie zawsze jest dokładnie ta sama grupa, a raczej zawartość jest synchronizowana do kopii grupy dla aplikacji. podobnie jak grupa w AD onprem jest synchronizowana do grupy AAD w o365.

efekt jest dość zaskaqjący. jeśli manipuluje się przynależnością do Teamu w Teamsach, z poziomu aplikacji, jako właściciel danego Teamu/grupy, to zamiany są odzwierciedlane natychmiast. ale jeśli dokonuje się manipulacji na grupie od strony office 365 [np. dodanie/usunięcie członka], jako administrator, to zmiany w Teams zostaną zsynchronizowane… w ciągu 24h [SIC!]. jest to trochę dziwne. np. w tym samym czasie SharePoint widział zmianę od razu.

dwa wnioski:

  • lepiej unikać zarządzania administracyjnego – lepiej zostawić to właścicielom Teamów
  • trzeba pamiętać, że ‚sowy nie są tym czym się wydają’

eN.

Misja na Marsa

pół żartem, pół serio, przed chwilą pisałem, że moim marzeniem jest wziąć udział w projekcie interplanetarnym. a tu proszę – Misja na Marsa.

eN.

ITechDays – rejestracja i agenda

od wczoraj można się już zapisywać na konferencję ITechDays 2o17. Dostępna jest już pełna agenda.

spóźniony news… ale ostatnio z pustą taczką latam (;

eN.

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:

$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]:

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

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ć:

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:

…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:

lub w hiperpoprawnym zapisie:

plik:

a teraz sprawdźmy duplikaty:

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

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.

Działanie polityki haseł GPO

na ostatnim WGUiSW prezentowałem krótkiego snacka dotyczącego polis haseł GPO. q mojemu zaskoczeniu nagrania znalazły się na channel9, znalazło się i moje (:

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.