Windows 8 - PowerShell (część 1)
Wstęp
PowerShell - dla jednych zmora nowszych Windowsów, dla drugich rozwiązanie, na które czekali latami. Odpowiedź na zarzuty, że systemy operacyjne ze stajni Microsoft są tylko "klikane", nastawione na pewne ścieżki postępowania a wbudowane intepretery poleceń (commad.com, czy cmd.exe) ograniczone do minimum. Jest to niestety faktem: w przypadku użytkownika domowego nie jest to szczególnym utrudnieniem, jednak administratorzy serwerów mający pewne rutynowe czynności, czy skomplikowane zmiany dotyczące np. tysięcy użytkowników w Active Directory brak elastycznego rozwiązania był zawsze utrudnieniem. Operacje te są możliwe za pomocą różnych trików, jak korzystanie z wbudowanego prostego intepretera (obecnie cmd.exe), protez basha dla Windows, czy skryptów VBA.Co to jest PowerShell
W roku 1996 Microsoft wydał MSH: pierwszą wersję rozbudowanego command.com pod nazwą kojarzącą się z Linuksowym sh. Idea była zacna:
- dać użytkownikowi rozbudowany intepreter poleceń,
- dać użytkownikowi możliwość wykonania wszystkich czynności (i więcej...) za pomocą linii poleceń (co w roku 2008 stało się standardem).
Najprościej za Wikipedią:
PowerShell jest zintegrowany z .NET Framework i dostarcza środowisko do wykonywania zadań administracyjnych wykonywanych poleceniami cmdlets.
.
Co jest takiego potęgą i co czyni go niezbędnym obecnie narzędziem administratora Windows według praktykującego "wyznawcy" PS?:
- możliwość wykorzystania obiektów .NET,
- potoki,
- formatowanie wyjścia,
- tranakcje,
- debugowanie skryptów,
- grid z możliwością sortowania (skrypt "wyrzuca" wyniki w osobnych oknach),
- przechwytywanie wyjątków,
- wszelkie "dobprocie" rozbudowanych intepreterów, jak pętle foreach,
- działa w starszych wersjach Windows, łącznie z WindowsXP (SP2).
Możliwości jest oczywiście dużo więcej - dla mnie, osoby wychowanej na systemach Unix PowerShell tchnął nowe życie w produkty Microsoft. Od wprowadzenia tego intepretera mogę korzystać ze starych nawyków, wykorzystania metod i właściwości zwróconego obiektu. Świetnym przykładem (via Wikipedia) jest polecenie Get-Childitem (znany użytkownikom jako dir ), zwracające listę plików i katalogów (z bierzącej lokalizacji):
Z otrzymanej przez Get‑ChildItem | Get‑Member listy, widać jednak, że można łatwo zastosować metodę Delete, bądź sięgnąć do właściwości LastAccessTime czy Attributes.
Ortodoksyjny Linuksowiec westchnie złośliwie: wooow, w Windowsie też można? W *nix od zawsze
Są też wady, nikt nie twierdził, że w życiu będzie łatwo: w skryptach trzeba sporo korzystać z WMI, co jest powoli poprawiane. Administrator Windows musi znać podstawy PS. To tak, jakby zaawansowany Linuksowiec na rozmowie kwalifikacyjnej zrobił wielkie oczy na dźwięk słów "sed", "awk", czy "grep".
PowerShell w Windows 8
Zobaczmy, jak prezentuje się PS w W8: aby uruchomić intepreter, należy wykonać w wierszu poleceń polecenie:
PowerShell
Dla wygodny można utworzyć sobie na pulpicie skróty do intepretera cmd.exe, lub bezpośrednio do PowerShell (o tym za chwilę).
Zobaczmy z jaką wersją PS jest dostarczany Windows 8:
[code=PowerShell]$PSVersionTable[/code]
Jak widać, jest to PS w wersji 3.0 - posiada on dużo nowości, już w czasie testowania moich podstawowych skryptów (PS 2.) sporo z nich wymaga dostowania do 3.0. W przypadku prostych zmian (jak np. skrypty logowania i nowości przy mapowaniu dysków sieciowych (New-PSDrive i dodatkowy paramentr -Persist) w moim przypadku zadziałało dopiero:
[code=PowerShell]New-PSDrive -Name Z -PSProvider FileSystem -Root \\SERVER\UZYSZKODNICY\$username -Persist[/code]
Mogą też być oczywiście inne powody takiego stanu rzeczy, jak np. "System error 2148073478," "extended error," or "Invalid Signature" er..., czy całkowite wyłącznie UAC. Problem jest natomiast w przypadku rozbudowanych skryptów PS, lub setek firmowych maszyn (Windows XP, Vista, 7) mających "pod spodem" wersję 2.0 - sam projekt aktualizacji do 3.0 jest do przejścia, ale w przypadku korporacji może to trwać długimi miesiącami (procedury, procedury, procedury...). Na szczęście Microsoft dostarcza w Win8 także wersję 2.0 - uruchomienie jest banalnie proste, należy dodać parametr dotyczący wersji:
[code=PowerShell]PowerShell –Version 2[/code]
Dla wygody proponuję utworzyć sobie skrót na pulpicie:
Ja jeszcze dla wygody robię kopię takiego skrótu, nadając intepreterowi poleceń uprawnienia administratora - przy testach warto sprawdzić, jak się np. "zachowa" skrypt uruchomiony na koncie z ograniczonymi prawami:
Można oczywiście za każdym razem klikać skrót "Uruchom jako" - ale jak można sobie ułatwić życie, to czemu tego nie robić? Od strony GPO (dla np. setek stacji roboczych w AD) można to wymusić np. za pomocą tego rozwiązania.
Przykład użycia: [item]cmdlet uruchomiony bez uprawnień administratora:[/item][img=Windows8_GetWindowsOptionalFeature_noadmin]
[item]z uprawnienami administratora:[/item][img=Windows8_PowerShell_admin_GetWindowsOptionalFeatur]
Zobaczmy teraz (z poziomu PS), jakie komponenty dostarcza nam Microsoft w Windows 8, wykorzystając wcześniej poznany cmdlet Get-WindowsOptionalFeature :
[code=PowerShell]Get-WindowsOptionalFeature -Online | where state -eq enabled | ft –a[/code]
"NetFx3" (.NET 3.5 ?) dodałem najprawdopodobniej ja, instalując Logmein (wymagany komponent).
Jak widać na prostym przykładzie: PS to przecudna "piaskownica" dla geeka:
- Get-WindowsOptionalFeature -Online (wyszukaj komponenty będące "Online")
- | .... gdzie stan jest równy "uruchomiony" (potok "filtrujący")
- | ... formatuj tabelę (Format-Table)
Podsumowanie
Nie chcę się powtarzać, ale z mojego punktu widzenia z PowerShell to krok milowy w produktach Microsoft. Już teraz dużo czynności administracyjnych wymaga znajomości PS. W przypadku np. Exchange (w tym Office365) niektórych czynności nie ma możliwości wykonać bez tego interpretera poleceń! Pewnego dnia "opiekun systemu" będzie zmuszony bezrozumnie przeklejać z google wyszukane gotowe skrypty mając nadzieję, że nie zawierają one np. poleceń usunięcia dysków logicznych.
---‑------------------------------------------------ [ źródla i dodatkowe linki do poczytania ] ---‑------------------------------------------------ http://pl.wikipedia.org/wiki/Windows_PowerShell http://ss64.com/ps/ - komendy PowerShell 2.0 technet.microsoft.com - Windows PowerShell Owner's Manual http://www.gfi.com - źródło obrazka "PowerShell"