PowerShell

Zdalne wyszukiwanie aktualizacji na serwerach i stacjach

Posted on Updated on

logo-powershell

Rozpoczynam dziś nową sekcję, w której będę umieszczał skrypty, których używam dla organizacji codziennej pracy. Wszystkie skrypty publikuję w postaci takiej jakie są, z prawem do ich pobierania, dowolnej modyfikacji. Nie biorę też odpowiedzialności za skutki ich działań.

Jeśli skryptów używasz, i uważasz, że chciałbyś coś zmienić – skontaktuj się ze mną.
Jeśli skrypt modyfikujesz samodzielnie – proszę bardzo, chciałbym jednak Cię prosić o pozostawienie informacji o pierwotnej lokalizacji skryptu i autorze. Dziękuję 🙂

Na początek – mój ulubiony skrypt – wyszukiwanie aktualizacji na serwerach i stacjach – Get-Updates.ps1

Jeśli posiadasz rozbudowane środowisko z wieloma serwerami, ale nie posiadasz narzędzi do automatyzacji aktualizacji, to zapewne co jakiś czas zastanawia Cię jak dużo poprawek „wisi” na komputerach i serwerach.

Aby szybko zrobić raport poprawek przygotowałem mały skrypt w PowerShell. Skrypt można uruchomić ręcznie na żądanie, można również dodać go sobie do Harmonogramu Zadań (Task Scheduler) i otrzymywać raporty dziennie prosto na skrzynkę pocztową.

Skrypt nie jest może bardzo rozbudowany – ale w moim przypadku się sprawdza 🙂

https://getupdates.codeplex.com/

PS – usuwanie vmguest ze wszystkich maszyn zarządzanych przez VMM

Posted on

Po aktualiacji sterowników Hyper-V trzeba posprzątać – tj. usunąć dysk ISO podłączony do każdej z aktualizowanych maszyn.

Aby zrobić to szybko – wykorzystaj PowerShell for SCVMM

((Get-SCVirtualMachine | Where {$_.VirtualDVDDrives.ISO.Name  -like 'vmguest'})).VirtualDVDDrives|Set-SCVirtualDVDDrive -NoMedia -RunAsynchronously

	

Visual Studio Code – darmowy edytor na Win, Mac, Ubuntu

Posted on Updated on

Visual-Studio-Logo

Huh, po decyzji by .Net był dostępny w ramach Open Source zabrakło narzędzi do developerki kodu na systemy inne niż Windows.

Visual-Studio-Code

Microsoft już to „naprawił”. Visual Studio Code to lekki edytor kodu z intellisense, debugowaniem dostępny zarówno dla Windows jak i Linux czy OSX.

Witryna projektu: https://code.visualstudio.com

Chwilowo dostęp do strony jest uniemożliwiony – podaję poniżej linki do pobrania programu:

Proszę pamiętać, że to wczesna wersja preview – o numerze 0.1.0 🙂

Powershell czy Bash

Posted on Updated on

PowerShell-Hero

Na co dzień administruję zarówno systemami Windows Server jak i Linux, w obu przypadkach często wspieram się skryptami, które piszę do różnych potrzeb. W przypadku Linuxa proste skrypty programuję w Bash korzystając z gotowych poleceń i funkcji typu awk, sort, uniq, xargs itp… W Windows Server oczywiście posługuję się PowerShell.

Jeszcze parę lat temu by ułatwiać sobie pracę w Windows obowiązkowym narzędziem był Cygwin – który dodawał do Windows zestaw poleceń znanych z Linux.

Obecnie sytuacja się odwraca… brakuje mi PowerShell w Linux. Zdrajca pomyślicie… cóż, Bash w Linux jest świetny, a jeszcze programowanie w VI – po prostu master 🙂

Ale …

Ale PowerShell naprawdę jest lepszy… jego składnia jest uporządkowana, jest w zasadzie C-podobny, ma wygodny edytor (ISE).

Przykład – aktualizowałem dziś jeden z serwerów, na którym musiałem usunąć kilkanaście plików, z różnych lokalizacji. W Bash wyglądało to mniej więcej tak:

find / -type f -name "*.bak" -exec rm -f {} \;

Natomiast w  PowerShell wygląda to tak:

Get-ChildItem -Path C:\ -Filter *.bat -Recurse | Remove-Item

Procedura w PowerShell korzysta z funkcji, których nazwy łatwo zapamiętać (są one logiczne), zaś konstrukcja jest zawsze taka sama – pierwsza funkcja w tym przypadku zwróciła zbiór elementów (obiektów, które zawierają wszystkie dane dotyczące znalezionych plików), druga zaś usunęła pliki na podstawie zawartości elementu.

W Linux w tym przypadku otrzymaliśmy również zbiór ale ścieżek do plików i poprzez -exec usunęliśmy je.

Inny przykład. Chcemy jednym poleceniem pobrać listę rekordów typu A dla wybranej domeny, niech to będzie blog.polewiak.pl
W przypadku Bash mamy oczywiście polecenie:

host -t A blog.polewiak.pl

Sęk w tym, że wynik polecenia wygląda mniej więcej tak:

blog.polewiak.pl has address 104.28.6.55
blog.polewiak.pl has address 104.28.7.55

Aby zatem „wyciągnąć” z tego adresy IP trzeba się posłużyć jakąś funkcją, która przetworzy ten ciąg znaków – np: cut

host -t a blog.polewiak.pl | cut -d' ' -f 4

Podzieliliśmy wcześniejszy ciąg znaków na części wykorzystując znak spacji jako „dzielnik”, następnie zwróciliśmy element z pozycji 4-tej…
Sytuacja się skomplikuje jeśli wynik polecenia host ulegnie zmianie. To ważne, bo w Linux za każde polecenie czy to systemowe czy z dodatkowych modułów może odpowiadać inna osoba, więc istnieje ryzyko, że nasza funkcja nie zawsze będzie zwracać takie same wyniki…

A jak to wygląda w PowerShell. W PowerShell funkcje na ogół zwracają obiekty lub tablice obiektów. Każdy z obiektów ma z góry określone elementy, które można łatwo pobrać po nazwie.

Resolve-DnsName blog.polewiak.pl -Type A

zwróci nam:

Name Type TTL Section IPAddress
---- ---- --- ------- ---------
blog.polewiak.pl A 299 Answer 104.28.6.55
blog.polewiak.pl A 299 Answer 104.28.7.55

To są dwa obiekty z polami o nazwach Name, Type, TTL, Section, IPAddress

Jeśli chcemy w wyniku posiadać tylko adresy IP – jak w analogicznym przykładzie z Linux to wywołamy polecenie:

(Resolve-DnsName blog.polewiak.pl -Type A).IPAddress

To nic innego jak wyświetlenie dla każdego z obiektów tylko elementu o nazwie IPAddress

Podsumowując
Plusy PowerShell:

  • przewidywalna konstrukcja poleceń
  • nazwy poleceń zawsze składają się z dwóch członów – operacji jaką wykonujemy (Get, Set, Add, Test), oraz typu danych na których wykonujemy operację.
  • Funkcje zwracają obiekty, które łatwo interpretować – bez potrzeby przetwarzania ciągu znaków

Minusy:

  • Brak kompatybilności wstecznej – skrypty pisane w środowisku Windows 8/Windows Server 2012 mogą nie działać na starszych systemach
  • Nie ma wersji dla Linux (jest port http://pash.sourceforge.net/), i raczej nie będzie, bowiem PS jest mocno zintegrowany z systemem operacyjnym (WMI, .Net itp)

 

Jeśli masz jakieś pytania odnośnie PowerShell – odezwij się, czekam na Wasze komentarze i opinie.

PowerShell mówi :)

Posted on

Coś na rozluźnienie… jeśli chcemy by nasz skrypt przemówił to możemy za pomocą PowerShell przekazać treść do systemowego syntezatora mowy wbudowanego w Windows.

Skrypt pobierzemy z tego adresu: https://gallery.technet.microsoft.com/scriptcenter/Out-Speech-298142d3