Blog (65)
Komentarze (4.8k)
Recenzje (2)

Windows 8 - PowerShell (część 1)

Strona główna@bachusWindows 8 - PowerShell (część 1)
20.11.2012 12:38

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.

PowerShell
PowerShell

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
Windows 8 - uruchomienie PowerShell
Windows 8 - uruchomienie 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]

Windows 8 - PowerShell 3.0
Windows 8 - PowerShell 3.0

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]

Windows 8 - PowerShell 2.0
Windows 8 - PowerShell 2.0

Dla wygody proponuję utworzyć sobie skrót na pulpicie:

Windows 8 - skrót do PS 2.0
Windows 8 - skrót do PS 2.0

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:

Windows 8 - PowerShell 2.0 (administrator)
Windows 8 - PowerShell 2.0 (administrator)

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]

Windows 8 - PS 3.0
Windows 8 - PS 3.0

"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"

Udostępnij:
Wybrane dla Ciebie
Komentarze (16)