Skip to Content

IT nieuczesane.
category

Category: tips’n’tricks

port ping

repairjak szybko sprawdzić czy dostępna jest już konkretna usługa/aplikacja na hoście? najlepiej sprawdzić czy port jest otwarty. można użyć telnetu ale jeśli czekamy na usługę i chcemy wykonywać testy co jakiś czas, aż do sqtq – będzie to bardzo denerwujące, ponieważ telnet jest bardzo siermiężny.

lepiej jest pingować port – co można uzyskać np, przy pomocy psping z sysinternalsowych narzędzi.

eN.

dopełnienie zerami

Windows_PowerShell_iconprzykładowy scenariusz: mamy notację nazewniczą serwerów ze stałym prefixem ‚server’ oraz jego kolejny numer – liczba z dopełnieniem zerami do trzech znaków. np. server001, server002[…],server011[…],server12o[…]

problem: jak skryptem łatwo wygenerować takie nazwy?

rozwiązanie: i na to oczywiście jest skrót/automat w PS (: potrafi to funkcja ‚toString’ – wystarczy jako parametr podać ilość zer odpowiadająca dopełnieniu.

eN.

 

 

hurtowe pobranie mediów z doqmentów office

dziś ponownie goszczę na blogu Adriana, który zasila WF systemowymi tips’n’tricks (:

.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.

Jak szybko „wyciągnąć” wszystkie zdjęcia i video z pliku Powerpoint , Word lub Excel?

Niejednokrotnie spotkałem się z prośbą lub pytaniem znajomych o szybki sposób na hurtowy eksport obiektów z plików pakietu Office. Oczywiście, można to zrobić ręcznie, eksportując każde ze zdjęć, ale nie o to przecież chodzi.

Otóż jest pewien sposób na dość szybkie wydobycie z naszych prezentacji lub dokumentów wszystkich mediów – zdjęć, dźwięków lub Video – w formie oddzielnych plików.

Jak to zrobić ?

Wystarczy zmienić rozszerzenie pliku np. powerpoint’a z PPTx na zip:

media02media01


po dokonaniu zmiany wystarczy dwukrotnie kliknąć na archiwum i w strukturze folderów wyszukać folder Media w którym to będą pliki których szukamy.

media03

Adrian Szwejkowski

.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.

eN.

Windows 1o: run as different user

repairdzisiejszy wpis przygotowany jest przez Adriana. ostatnio zrobiło się mocno PowerShellowo, a dzięki takim wpisom udaje się wrócić do pierwotnej formuły W-F, ponieważ pomimo, iż pojawiają się fragmenty kodu, to temat jest czysto systemowy (:

„Jako priority number uno przyjmuję udowadnianie jak bardzo wizerunek człowieka związanego z branżą IT różny jest względem przyjętych stereotypów (podobno czasem się udaje) . Jestem pasjonatem technologii Microsoft, a szczególnie rodziny produktów System Center, nie zapominam jednak o innych dobrych rozwiązaniach. Architekt , Analityk, Administrator (AAA?) – a gdy się ściemni PowerShell Ninja. Słowem nieco udomowiony Geek zarażający swoją pasją Syna. I odpowiadając na pytanie – Nie, do snu nie czytam mu dokumentacji technicznej ;-)

.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.

Pracując od dłuższego czasu na najnowszym systemie operacyjnym ze stajni Microsoftu- Windowsie 10 coraz to bardziej doskwierał mi brak bezpośredniej możliwości uruchomienia programu w kontekście innego użytkownika z poziomu GUI a konkretnie z wyszukanych aplikacji w Menu Start.  Administratorom systemowym niejednokrotnie potrzebna będzie możliwość uruchomienia danej aplikacji nie tylko przy pomocy zwiększonych uprawnień (elevated rights) ale również przy wykorzystaniu zupełnie innego konta.

Niestety funkcjonalność ta domyślnie nie jest dostępna  w Menu Start – opcje które widzimy ograniczają się do poniższej listy

image1

Zanim powiemy sobie w jaki sposób dodać tutaj magiczny „Run as different user” powiedzmy w jaki sposób na szybko możemy spróbować obejść ten problem nie rozpisując się zbytnio nad każdym z nich

  1. Możemy wyszukać aplikacje i przypiąć ja do TaskBar’u po czym użyć dobrze nam znanej kombinacji
    Shift + prawy przycisk myszy na skrócie i wybór opcji „Run as a different user”  – tadam
    unnamed
  2. Dla oldschoolowców znających ścieżkę aplikacji lub posiadających ścieżkę do niej w zmiennej typu path możemy wykorzystać  Command Line i opcje Runas z przysłowiowego palca
    Najprostszy syntax wygląda następująco  :

    unnamed02
    Więcej na temat dodatkowych opcji i samego syntaxu aplikacji Runas znajdziecie tutaj – https://technet.microsoft.com/en-us/library/bb490994.aspx
  3. Oczywiście można by wykorzystać tez powershella który jak zwykle daje nam „nieco” więcej możliwości Commandlet który może przyjść nam z pomocą to „start-process” z przełącznikiem credentials (lub jak kto woli „runas”)

unnamed03Więcej na temat dodatkowych opcji i samego syntaxu commandletu Start-Process znajdziecie tutaj – https://technet.microsoft.com/library/hh849848.aspx lub za pomocą komendy „get-help start-process” (pamiętajcie o aktualizacji „helpa” ;) )

 

Ale przecież nie o to nam chodzi – mimo całej wspaniałości jaka niewątpliwie jest powershell lub możliwość klikania jednak fajnie by było dorzucić sobie opcje uruchomienia w kontekście innego użytkownika bezpośrednio z GUI

Jak więc to zrobić? –  z pomocą przyjdzie nam pewna drobna modyfikacja rejestru – aby nie dawać uprawnienia każdemu polecam dokonać edycji w hive Current User

GUI version  – Regedit

Uruchamiamy Menu start i wpisujemy Regedit – uruchamiamy  i przechodzimy do ścieżki

HKEY_CURRENT_USER\SOFTWARE\Policies\Microsoft\Windows

Tworzymy nowy klucz (Key) o nazwie Explorer  jeżeli jeszcze nie istnieje

W nowo powstałym kluczu tworzymy wartość typu Dword o nazwie ShowRunasDifferentuserinStart i zmieniamy jej wartość na 1

Restart i gotowe ;)

GUI Version – Gpedit

Uruchamiamy Menu start i wpisujemy gpedit  – uruchamiamy

W nowo otwartym oknie przechodzimy do „user Configuration” -> Administrative Templates -> “Start Menu and Taskbar” – następnie wyszukujemy ustawienie „Show ‘Run as Different user’ command on Start”  – przestawiamy ustawienie na Enabled ;)

No Restart Needed!

PS version 

Odpalamy Powershella I

Lazy Version

Chcemy mieć to z głowy ? Pobieramy plik Reg i uruchamiamy go dwukrotnie klikająć

http://1drv.ms/1MjsSaT

Restart i gotowe ;)

Jezli opcja konfiguracji która wybraliśmy wymaga restartu to po jego dokonaniu powinniśmy widzieć już dodatkowa opcje w menu kontekstowym po kliknięciu prawym przyciskiem myszy na aplikacji w menu start tadam.

image5

.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.

eN.

 

jak przeszukiwać Internet przy pomocy PowerShell (;

800px-Mucha-jobdzisiejszy wpis jest przygotowany gościnnie przez Kacpra. Kacper jest specjalistą SCCM i szeroko rozumianej automatyzacji/orkiestracji, co tłumaczy odwołanie się do metod zakrawających na developerkę, gdy UI w postaci formatek dostarczanych przez dostawcę nie wystarczyło. jest to też bardzo ciekawy przykład tego, jak uniwersalny jest PS…

.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.

Nie znasz dnia, ani godziny kiedy może się przydać PowerShell. Szukałem ostatnio lodówki z kostkarką i trafiłem w ten sposób na stronę w http://www.liebherr.aged.com.pl/. Niestety twórca filtra produktów nie przewidzał, że ktoś mógłby szukać lodówki ze wspomnianą kostkarką. Mogłem oczywiście znaleźć sobie jakąś inną stronę czy sklep internetowy. Jednak mój wewnętrzny nerd został podrażniony, nie było już odwrotu. :) Postanowiłem zaprząc PowerShella do tego zadania, jak to mam w zwyczaju. Trzeba było napisać małego crawlera, który znajdzie to czego mi się nie chciało samemu szukać. Efektem postanowienia jest poniższy skrypt:

O dwóch rzeczach należy wspomnieć. Cmdlet Invoke-WebRequest i wykomentowanej linii na końcu. Invoke-WebRequest wywołuje uczucia ambiwalentne. Z jednej strony ma kilka fajnych funkcjonalności jak np. użyta właściwość Links zwracanego obiektu. Zawiera ona tablicę linków które znajdują się na stronie, więc nie trzeba się bawić w regexy i szukać ich samodzielnie. Jest też kilka innych ciekawych właściwości jak np. Images czy InputFields. niestety Invoke-WebRequest ma też jedną wadę, która może być w pewnych sytuacja dosyć uciążliwa. Mianowicie dosyć słabo sobie radzi z kodowaniem UTF8 bez BOMa. A w zasadzie to w ogóle sobie nie radzi i zwraca po prostu krzaki jeśli na stronie są np. polskie znaki diaktryczne. I niestety nic się nie da z tym zrobić w zasadzie, a przynajmniej mi się nie udało. Jako obejście można skorzystać z klas .NET Net.WebRequest i Net.WebResponse, ale tracimy wtedy opisane wcześniej zalety Invoke-WebRequesta.

Natomiast wykomentowana linia to pierwsza wersja pętli, która znajduje się bezpośrednio nad nią. Korzystając z Select-Stringa nie da się pobrać zawartości znacznika title, bez samego znacznika. Ponownie trzeba się odwołać do klasy .NET Regex, która zwraca grupy dopasowań, a dzięki nim mamy także dostęp do samej zawartości znacznika.

Kacper.

.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.

eN.

Praca po nocy

Dziś wpis o niskim współczynniku zawartości power shella i twardej administracji, ale mam nadzieje, że nie mniej pomocny.
Po nocy przed monitorem siedzi każdy z nas, może nie z taką częstotliwością jak na studiach #goodoldtimes, ale przynajmniej okna serwisowe wypadają gdy słońce już dawno zaszło. Kiedyś, pisząc kolejne projekty na zaliczenie zwracałem uwagę na zbyt jasne oświetlenie monitora, szczególnie tła kartki w Wordzie. W nowych Windowsach, (tak gdzieś od 7) nie mogłem znaleźć tego ustawienia, a tu z pomocą przychodzi dedykowany program F.lux.
https://justgetflux.com/
Narzędzie automatycznie dostosowuje temperaturę kolorów monitora po zachodzie słońca. Sprawdziłem wczoraj w nocy – działa perfekcyjnie. Małe, proste, łatwo w razie czego wyłączyć na chwilę.
Polecam.

Dodatkowo jak już siedzimy po nocy, można zajrzeć na stronę o zdrowym śnie, sygnowaną przez Uniwersytet Harwarda: http://healthysleep.med.harvard.edu/portal/.

zmiana hasła użytkownika w kontexcie innego użytkownika

repairprzykładowy scenariusz:

dostęp do sieci klienta via VPN. nie ma możliwości zmiany hasła podczas połączenia VPN, ponieważ to niekoszerne rozwiązanie. hasło wygasło. inny pracownik ma swoje konto nadal aktywne – czy da się zmienić szybko hasło, zamiast czekać aż helpdesk przetrawi ticket?

dostępne opcje(, które raczej nie zadziałają):

  • połączyć się RDP do DC. w przeciwieństwie do połączenia do member servera, podczas połączenia do DC jest możliwość zmiany wygasłego hasła. warunek jest taki, że trzeba mieć uprawnienia do logowania na DC, czyli zazwyczaj – być Domain Adminem.
  • w starym wpisie na stronach Technet znajdujemy opis, że można zmienić hasło przy pomocy ‚net user * /domain’. jest to niekompetencja osoby piszącej KB, ponieważ nie odróżnia ona ‚reset password’ od ‚change password’. przy pomocy net user można hasło wyłącznie zresetować, co wiąże się z posiadaniem odpowiednich uprawnień do konta, na którym wykonuje się operację. dalszy opis w tym KB jest również bzdurą, ponieważ uprawnienia domain admina nie są wymagane – można to skonfigurować nawet dla pojedynczych kont.

rozwiązanie

jest oczywiście sposób skuteczny, działający i niewymagający żadnych specjalnych uprawnień. i oczywiście przy pomocy PowerShell, a konkretnie commandleta Set-ADAccountPassword:

sprawdzałem dla PS 2.o i wystarczy.

eN.

default output

Windows_PowerShell_icondefault output

po napisaniu skryptu dobrze jest móc z niego korzystać zarówno z konsoli jak dodać go do np. do schedulera. w końcu to automatyzacja. taka uniwersalność wiąże się z odpowiednim oprogramowaniem tego, gdzie trafia output. PS daje wiele możliwości tego gdzie możemy wysłać dane… ale nie na przedefiniowanie ‚output-default’. w związq z tym pisze się nadmiarowy kod ‚jeśli ekran to wywal na ekran, jeśli log, to wywal do logu’. zazwyczaj pisałem funkcję wspierającą, która to załatwia. coś w tym rodzaju:

to nie jest w pełni działający kod i ma tyle wad, że ciężko zliczyć. zależnie od przekazywanej zmiennej zachowa się inaczej w porywach do ‚nie zadziała’.

jak to zrobić PowerShell-way

są dwa mechanizmy, które pozwalają na uproszczenie całej procedury: aliasy oraz możliwość przedefiniowania standardowej wartości parametru dla commandletu. sam alias nie wystarczy bo o ile out-host nic nie potrzebuje o tyle przekierowanie do pliq wymaga co najmniej nazwy tego pliq…

w skrócie:

w zależności od przełącznika ‚log’ tworzony jest alias ‚out-my’ wskazujący albo na out-host albo na out-file. ponieważ out-file wymaga podania nazwy pliq, aby można było użyć aliasu bez parametru, ustawiona jest standardowa wartość poprzez $PSDefaultParameterValue

eN.

 

WMI vs CIM w praktyce

Windows_PowerShell_iconzakładam, że wszyscy wiedzą czym jest WMI i CIM – to jest abecadło dla każdego inżyniera systemowego. a [IMHO] podstawowa różnica w implementacji to możliwość tworzenia sesji CIM. czego dla WMI zrobić się nie dało. daje to niesamowite możliwości w przypadq hurtowych zapytań. podam trywialny przykład, gdzie zysk z zastosowania sesji nie jest wielki, ale osoby z wyobraźnią powinny poczuć moc, drzemiącą w takim zastosowaniu.

założeniem przykładu jest sztywna notacja nazewnicza dla hostów: ta sama nazwa ‚HOST’, zakończona inkrementowaną liczbą. ale równie dobrze można użyć ‚cat lista.txt | %‚ . niemniej chciałem przy okazji przemycić jeszcze jedną sztuczkę – w jaki sposób dopełniać liczby z dopełnieniem zerami.

cel: odpytanie 2o hostów o podstawowe informacje o BIOS – np. numer seryjny – oraz volumeny.

dla WMI

teraz zmierzmy czas dla wykonania tej sekwencji [ja robiłem dla siedmiu hostów]:

 

dla CIM

wydaje się być bardziej skomplikowane. odrobinę jest – trzeba najpierw założyć sesje, a następnie wykonać zapytanie wskazując na nie. sprawdźmy ekonomiczność zapytania [również dla 7 hostów]:

1331 vs 263  ms czyli 5cio krotnie szybciej [SIC!]. oczywiście można się przyczepić, że nie wliczyłem czasu utworzenia samej sesji ale…

wnioski

przy pojedynczym zapytaniu lub do niewielkiej ilości hostów – nie ma znaczenia czego użyjemy, bo czy co się wykona w 4oms czy w 1ooms jest dla człowieka pomijalne. jednak możliwość tworzenia sesji zwraca się przy seryjnych odpytaniach oraz jeśli do odpytania jest wiele hostów.

warto zauważyć, że przy dłuższej pracy zapis się upraszcza – ponieważ zamiast na iteracjach czy listingach, pracujemy na liście sesji.

eN.

 

 

Hyper-v replication – Critical

repairHyper-v Replica – problemy

Hv Replica jest dobrą ideą – jednak wykonanie szwanqje. wiele operacji, jakie jest wykonywane w ramach HvR jest zabójcze dla niego samego. do tego zachowanie jest bardzo nieprzejrzyste – do powodu błędów trzeba mocno dociekać, opisy są zwodnicze, braqje narzędzi do bezpośredniego debugowania. mówiąc w skrócie – mechanizm zaprojektowany jest jako samograj, a niestety jest na tyle niestabilny, że ciągle trzeba przy nim grzebać i jest to ciężka systemówka.

replikacja przerzuca pliki wektorów zmian [.hrl]. kiedy zostanie przerzucony plik, następuje… łączenie [merge] plików vhd. o ile w przypadq małej zmiany i małego pliq wszystko sobie działa dobrze, o tyle przewalenie kilq GB pliq do zmerdżowania z np. 1TB dyskiem, jest operacją zabijającą mechanizm – nie ma możliwości skończyć się ani w 5min [standardowy czas przerzucania zmian HvR] ani w 15min [max. jaki można ustawić] a zdarza się, że i godzina byłoby za mało, jeśli dyski są na prawdę duże. operacja jest wykonywana po stronie odbiorcy i jest to operacja bloqjąca – w czasie, kiedy jest wykonywana, z maszyną nie da się nic zrobić, a nadawca dostaje informację, że replikacji nie można wykonać.

dodatkowym problemem jest fakt, iż operacja łączenia dysków nie jest w żaden sposób pokazywana przez interfejs. błędy wyglądają następująco:

serwer wysyłający

log Hyper-V-VMMS/Admin, Event ID: 32552,

 

log Hyper-V-VMMS/Admin, Event ID: 32315,

 

serwer odbierający

log Hyper-V-VMMS/Admin, Event ID: 15268 [nie występuje zawsze]

log Hyper-V-VMMS/Storage, Event ID: 27000,

ponadto jest możliwość szybkiej weryfikacji przy pomocy PowerShell, weryfiqjąc status maszyny na serwerze odbierającym:

statusy wyraźnie pokazują – ‚InService’ oraz ‚ModifyingUpVirtualMachine’ – być może taki status jest również w innych scenariuszach, ale regularnie powtarzający się – może oznaczać tylko jedno. dyski się łączą.

dalsze konsekwencje

to za chwilę prowadzi to zmiany statusu repliki na ‚critical’ i ustawienia wymuszenia resynchronizacji w następnym cyklu [standardowo chyba raz dziennie o 18.oo – godzinę można sobie ustawić]. jeśli ręcznie wymusi się powtórną próbę replikacji po zakończeniu operacji ‚merge’, to wszystko powinno być ok i maszyna powinna się zacząć replikować. jeśli jednak zostawi się na automat, to do cyklu resync może minąć zbyt wiele czasu, a to będzie oznaczało faktyczny resync.

i tu dochodzimy do kolejnej maskrycznej operacji – resynchronizacja. jest to kolejna operacja bloqjąca, podczas trwania której sypią się backupy [lockowany jest VSS], a biorąc pod uwagą ile trwa czasu dla dużych dysqw, potrafi spowodować lawinowe błędy.

jak uniknąć części błędów

różnymi automatami – trzeba monitorować replikację i oskryptować całe rozwiązanie. można to zrobić w bardziej wyrafinowany sposób, można po prostu co jakiś czas wymuszać resync dla wszystkich maszyn.

jest też ciekawostka, która nigdzie nie jest opisana – w każdym razie nie trafiłem – podeślijcie linka, jeśli się mylę. póki co – wisienka na torcie, exclusive dla w-filesowiczów (;

kiedy poobserwuje się replikację, można zauważyć, że w pewnym momencie taski ‚zawisają’. jeśli z powodów opisanych powyżej wykonuje się kilka resynchronizacji, nagle okazuje się, że pozostałe maszyny co i rusz, również wchodzą w stan ‚critical’. ograniczeniem jest opcja definiująca ilość równoczesnych ‚storage migration’, ustawiana we właściwościach Hyper-V. standardowo są to dwie operacje. nawet jeśli maszyny rozłożone są na kilq węzłach klastra, może okazać się, że jakieś dwie długie synchronizacje lub resynchronizacje, będą blokować pozostałe maszyny. dla tego warto ten parametr zwiększyć. to znacząco obniża ilość problemów!

ponoć w Windows 1o Server, mechanizm replikacji ma być wymieniony – ale również nie mogę znaleźć artykułu potwierdzającego ten fakt /:

będę wdzięczny za linki (:

eN.