Skip to Content

IT nieuczesane.
category

Category: DevOps/Scripting

skrypty, programy, command line i inne

PS ISE – cudowny trick

windows-powershell-ise-iconostatnio odkryłem cudowny trick w PowerShell Integrated Scripting Environment:

przytrzymać shift+alt i teraz:

  • poruszając się strzałkami góra/dół oraz lewo/prawo można zaznaczyć blok
  • a teraz jeszcze lepszy: poruszając się strzałkami góra/dół rysuje się pionowa linia. i teraz kiedy zaczyna się pisać we wszystkich liniach pojawiają się znaki =^.^’=  tak samo można kasować.

przydatne w wielu scenariuszach – np. w hurtowym komentowaniu fragmentu kodu.

eN.

pliki nieistniejących użytkowników

CubanCigarNonExistentFSRM [File Server Resource Manager] to całkiem przydatne narzędzie, jednak braqje w nim jednego, bardzo ważnego raportu – wyszukiwanie plików należących do kont, które już nieistnieją. nie będę zamieszczał Skryptu – pokażę tylko sposób. taki PoC. tym razem potrzebowałem to zrobić na szybko. za jakiś czas pewnie ubiorę to w porządny kod bo zostało mi jeszcze kilka serwerów a póki co ‚sposób na szybko’:

 wyjaśnienie

wylistuj całą strukturę rekursywnie. dla każdego elementu z listy zapamiętaj nazwę elementu, rozmiar i pobierz ownera. ownera można sprawdzić przy pomocy polecenia get-ACL. get-ACL automatycznie rozwiązuje nazwy SID na nazwy kont. zatem jeśli nie rozwiąże nazwy [czyli pokaże się jakieś ‚S-1-5-21…’] – user nieistnieje.

całość jest bardzo niedoskonała – to, że nazwa nie została rozwiązana, nie gwarantuje, że konto nieistnieje. mogą być np. problemy z siecią, trustami, nie pamiętam jak się zachowuje dla uprawnień nadanych dla SIDHistory… w środowisq, w którym z tego korzystam takie problemy mnie nie interesują i dopuszczalny jest margines błędu na tego rodzaju scenariusze. całość i tak idzie do analizy biomaszynowej [czyt. istotę żywą].

aby utworzyć z tego skrypt… o to jeszcze sporo roboty. kod jest pasqdnie tymczasowy – braqje parametrów, obsługi błędów a finalnie powinna być zwracana tablica obiektów, żeby można było sobie dalej robić selecty czy inne wynalazki.

uwaga na zaokrąglenia

w pierwszej wersji nie podobało mi się, że wielkość zwracana jest w bytach. w końcu MB są wygodniejsze. i tu pojawia się pytanie – gdzie wstawić zaokrąglenie? ze względów na optymalizację zapytania, wszelkie operacje matematyczne należy umieszczać jak najdalej. ponieważ w kodzie są filtry, to aby liczyć jak najmniej, warto liczyć na minimalnej liczbie obiektów. zmieniłem zatem ‚$($size)’ na ‚$([math]::round($size,2))’. zapytanie zwróciło ok. 25o.ooo wyników. po zsumowaniu wartości liczbowych wyszło mi, że te pliki zajmują w sumie 1.2GB. mało. podejrzanie mało. wpadłem w pułapkę zaokrągleń. postanowiłem zatem nie zaokrąglać, zsumować bajty i dopiero ostateczną wielkość przekonwertować na GB. że będzie różnica to byłem pewny, niemniej skala mnie powaliła. wynik wyszedł powyżej 52GB (SIC!).

eN.

 

przeszukiwanie logów aplikacyjnych

chaoschciałem zrobić szybką wrzutę na temat odczytywania zdarzeń z logu ‚applications and services logs’… i okazuje się, że to całe małe universum XMLowe…

najważniejsze informacje: logi systemowe można czytać łatwo i przyjemnie przy pomocy ‚get-EventLog’. jednak kiedy chce się odczytać coś z logów aplikacji zaczynają się schody. jest polecenie ‚Get-WinEvent‚, jednak mechanizm za nim się kryjący jest okrutnie nieprzyjemny. cała architektura oparta jest na XMLu, w związq z czym jakiekolwiek przeszukiwanie albo jest pop(*^@#!@ne albo niewydajne. przykłady filtrów XML – standardowy i xPath ze strony technet:

w dużym skrócie – jest to zupełnie nieprzydatne w zastosowaniu codziennej administracji ponieważ:

  • trzeba nie tyle ‚znać’ obsługę XML ale ‚mieć ją wkompliowaną w mózg’. jak ktoś z tego korzysta dzień w dzień, to może trzepnie taki kodzik na kolanie, ale jak raz na jakiś czas trzeba coś wyszukać…
  • nie da się na stałe zrobić zapytania, ponieważ zdarzenia mają różną strukturę – składają się z różnych elementów. jak to w XML – trzeba ‚crawlować’  po elementach, bo ich struktura nie jest z góry znana
  • dwie różne metody, dwa totalnie różne zapisy, do tego w żaden sposób nie przystające do reszty PS

a przecież XML można przedstawić za pomocą obiektu… czemu ten wynalazek nie zwraca normalnego, ludzkiego obiektu z atrybutami?

polecam art, w którym można poczytać jak się przez to przegryźć.

a na szybko, bez developerki, może niewydajnie, ale działa:

scenariusz: znaleźć logi hyper-v, w których są wpisy dotyczące maszyny o nazwie ‚VMNAME’

inne pomocnicze polecenia na początek to ‚get-WinEvent -listProvider *’ oraz ‚get-WinEvent -listLog *’. trzeba jakiś list otwarty do scripting guy’a napisać, żeby ponaciskał na uczłowieczenie dostępu do logów aplikacyjnych… ahhh.. żeby tak czas pozwolił to można własny moduł napisać… /:

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.

listing przypisań ProtectionGroup-DataSource

dziś na szybko, bez tłumaczenia. skrypt get-DPMGroupToDataAssociation.ps1:

i potem można np:

get-DPMGroupToDataAssociation | select PGname,computer

eN.

Powershell i dyski maszyn wirtualnych w klastrze – kontynuacja

druga część o raportowaniu dysków na Technet

eN.

Powershell i dyski maszyn wirtualnych w klastrze

tym razem na Technet – zapraszam do lektury (:

http://blogs.technet.com/b/plitpromicrosoftcom/archive/2014/10/16/storage-capacity-report-statystyki-dysk-243-w-na-klastrze-hyper-v-i-powershell.aspx

eN.

jak sprawdzić przypisania wirtualnych kart sieciowych

klaster ma swoje wymagania co do sieci – potrzebuje kilku interfejsów do LM, HB, iSCSI, VLANy i tak dalej. jeśli tylu sieciówek nie ma, a zdarza się, że po prostu braqje portów na switchu (; i w kilq innych scenariuszach – czasem warto jest utworzyć wirtualne interfejsy. na stronach technetu można znaleźć ładną instrukcję więc nie będę kopiował. tutaj chciałem podać tylko mały trik. po założeniu owych wirtualnych interfejsów chciałoby się podejrzeć który jest dowiązany do którego wirtualnego switcha. trzeba przyznać, że konstrukcja wirtualnych switchy jest nieco zamota, a w połączeniu z VMM gdzie dochodzą jeszcze sieci logiczne staje się to na prawdę nieprzyjemne przy rozwiązywaniu problemów.

  • teoretycznie switche widać w hyper-v managerze… ale nie widać tak wirtualnych interfejsów.
  • interfejsy – czy to fizyczne czy wirtualne, widać w systemie – czy to z GUI ‚ncpa.cpl’ czy z powershell ‚get-netAdapter’. ale nawet wyświetlając wszystkie właściwości konkretnego interfejsu nie widać ich powiązań z VMSwitch
  • standardowo polecenie get-VMNetworkAdapter pokazuje powiązania z maszynami wirtualnymi……

..ale to już bardzo blisko rozwiązania. jest jeden magiczny przełącznik, który stanowi rozwiązanie:

po wykonaniu tej komendy pokazywane są nazwy switchy wirtualnych. teraz wystarczy sprawdzić który switch powiązany jest z która kartą fizyczną i voila:

idąc jeszcze krok dalej: nazwy kart z poziomu systemu znów są inne.. kolejna warstwa. więc jeszcze informacja jaka jest nazwa interfejsu z poziomu systemu:

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.

 

 

 

 

zdalne odinstalowanie agentów VMM

automationscenariusz: upgrade VMM 2o12 -> 2o12 R2. nie ma inplace upgrade, więc stawiany obok. agentów również nie chce zainstalować z automatu na hostach bo ‚version is not supported’. trzeba więc w pierwszym kroq odinstalować wszystkie agenty na wszystkich hostach. jeśli tylko jest dobra [czyli skrypto-przyjazna] notacja nazewnicza, to można to zrobić szybko, sprawnie i bez bólu. taki przykład – dla dziewięciu hostów o nazwach hvhosto1-o9. wymaganie: skonfigurowane winRM:

eN.