Strona używa cookies (ciasteczek). Dowiedz się więcej o celu ich używania i zmianach ustawień. Korzystając ze strony wyrażasz zgodę na używanie cookies, zgodnie z aktualnymi ustawieniami przeglądarki.    X

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:$PSVersionTable

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:New-PSDrive -Name Z -PSProvider FileSystem -Root \\SERVER\UZYSZKODNICY\$username -PersistMogą też być oczywiście inne powody takiego stanu rzeczy, jak np. "System error 2148073478," "extended error," or &q..., 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:PowerShell –Version 2

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:

  • cmdlet uruchomiony bez uprawnień administratora:
  • z uprawnienami administratora:
  • Zobaczmy teraz (z poziomu PS), jakie komponenty dostarcza nam Microsoft w Windows 8, wykorzystając wcześniej poznany cmdlet Get-WindowsOptionalFeature:Get-WindowsOptionalFeature -Online | where state -eq enabled | ft –a
    "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_PowerShellhttp://ss64.com/ps/ - komendy PowerShell 2.0technet.microsoft.com - Windows PowerShell Owner's Manualhttp://www.gfi.com - źródło obrazka "PowerShell" 

    windows oprogramowanie porady

    Komentarze

    0 nowych
    AL|EN   2 #1 20.11.2012 15:03

    Od niedawna korzystam z PS i uważam, że skoro to jest jedyne narzędzie admina windows to trzeba je dobrze poznać. I mój pierwszy poważny skrypt ma 1000 lini i automatycznie tworzy 7 typów userów w AD odczytując i odpowiednio wybierając akcję w zależności od np: pola "Department" z pliku *.csv. Czytałem trochę o nowościach w Windows Server 2012 oraz PS 3.0 i co za cuda tam będzie można robić to hoho

    bachus   19 #2 20.11.2012 15:25

    @AL|EN: jak pisałem, ja wychowałem się na Linuksach. PS dał mi ogromne możliwości, 3.0 dostarcza nowych wrażeń ;-) Sma także używam 'czytania' z CSV (troszkę prościej, niż z XLS) i niektóre prace zajmują mi 30sekund, zamiast np. całego dnia.
    Jestem także pod wrażeniem informacji, które mogę wyłuskać do celów monitoringu... Używam kilku rozwiązań np. monitoring od IBM (Tivoli), czy mój ulubiony Nagios - dzięki PS mogę zrobić rzeczy, które wcześniej były możliwe przedziwnymi kombinacjami, instalowaniem dodatkowego softu, etc.
    Na jednym z serwerów zapasowych (tj. 'trzymającym' snapshoty serwerów z ostatnich 15minut) zdarzał się problem fragmentacji systemu plików - mimo dysków SAS + akceleratora sprzętowego w przypadku zbyt dużej fragmentacji dysków powstaje uciążliwe wąskie gardło. Można to oczywiście monitorować dodatkowym oprogramowaniem, ale czemu nie wbić w PS:
    Get-WmiObject -Class Win32_Volume -Filter "DriveLetter = 'D:'"
    I uzyskać masę przydatnych informacji, w tym:
    AverageFileSize :
    AverageFragmentsPerFile :
    AverageFreeSpacePerExtent : 850398435345
    ClusterSize : 4096
    ExcessFolderFragments : 1
    FilePercentFragmentation : 0
    FragmentedFolders : 2
    FreeSpace : 12345667
    reeSpacePercent : 91
    FreeSpacePercentFragmentation : 437
    LargestFreeSpaceExtent : 11111112222222
    MFTPercentInUse : 100
    Jeżeli kogoś temat interesuje: mogę wrzucić więcej wpisów o PS.

      #3 20.11.2012 16:46

    Czy da w PS uruchamiać *z palca* złożone polecienia np. utworzenie katalogów/folderów od 1 do 100 ?
    W bashu takie polecienie ma postać "for((a=1;a<=100;a++))do mkdir $a;done;"

    bachus   19 #4 20.11.2012 17:16

    @Alfredo_Martino: W jakim sensie x10 VHD? W czasie tworzenia maszyny:
    New-VM -Name NazwaMaszyny –MemoryStartupBytes 2GB -NewVHDPath D:\Maszyna1.vhd -NewVHDSizeBytes 45GB
    Co do samych VHD, wspomniane jest o tym: http://blogs.technet.com/b/heyscriptingguy/archive/2012/11/09/automatically-crea...
    Jak długo trzeba się uczyć? Nie wiem, bym musiał zapytac kogoś, kto zna ;-) Jak coś potrzebuję oskryptować - to przeglądam polecenia, przełączniki. Bardzo pomaga mi myślenie *nixowe, tj. potoki, obiekty, filtrowanie itd.). Zawsze w cmd.exe, czy VBA pisałem na zasadzie "jak to zrobić w Windowsie", z PS jest już dużo łatwiej.
    Jak kogoś interesuje temat, to mogę opisać tworzenie VM (i zarządzenie) z poziomu krok po kroku.

    Autor edytował komentarz.
    mjarosz   2 #5 20.11.2012 18:15

    Fajnie, że w końcu ktoś napisał o ps ;)
    @_spinlock oczywiście, że się da, utworzenie katalogów od 1 do 100 w najkrótszej postaci będzie wyglądać jakoś tak 1..100 | %{ mkdir $_ }

    bachus   19 #6 20.11.2012 18:19

    @mjarosz: jeżeli temat jest interesujący, mogę 'klepnąć' kilka ciekawostek. Nie wiem jednak, czy pisać o podstawach, czy bardziej skomplkowane użycie cmdletów + np. linki do opcji w użytych poleceniach...

    AL|EN   2 #7 20.11.2012 18:44

    Pisz najpierw o podstawach, potem o trudniejszych rzeczach a na końcu o hardkorowych trikach ;-]

    mjarosz   2 #8 20.11.2012 18:47

    Trudno powiedzieć co może zainteresować innych, ale myślę, że większość osób nawet nie zdaje sobie sprawy z istnienia czegoś takiego jak PowerShell w ich ulubionym systemie :) także może warto by było 'klepnąć' coś dla początkujących :) Na mnie na początku spore wrażenie zrobiła obsługa xmli w powershellu, chyba prościej się tego nie dało zrobić.
    Ja sam administratorem nie jestem, raczej zajmuje się programowaniem głównie w .necie ale tutaj znajomość podstaw powershella też się przydaje - obecnie chyba każdy instaluje pakiety za pomocą nugeta, są też narzędzia do budowania projektów takie jak psake, które korzystają z dobrodziejstw powershella :)

    AL|EN   2 #9 20.11.2012 18:50

    @Alfredo_Martino: Ucze się na razie 3 miesiące i niby coś tam już wiem ale wciąż mało ...

    AL|EN   2 #10 20.11.2012 18:52

    @mjarosz: Przy pisaniu skryptów w PS można korzystać z CAŁEGO .NET'a :-] Czyli to czego nie oskryptujemy to możeby oprogramować. Wychodzi na to, że w PS można zrobić ... WSZYSTKO :D

    Druedain   13 #11 20.11.2012 19:27

    Czy jest dostępny na Windowsa cmatrix? Bez tego nawet nie ruszam tematu :P

    A tak serio, czemu piszesz, że PS to dla niektórych zmora nowszych Windowsów? Co do treści kolejnych wpisów, na pewno trafisz na grono osób nie znających PS, dla których podstawy mogą się okazać ciekawym tematem :)

    bachus   19 #12 20.11.2012 22:48

    @Druedain: wiem, że jest ezoteryczny 'Whitespace' ;-)
    Co do "zmory" - widzę to na codzień... jak już pisałem, dla mnie zmorą zawsze były ograniczenia Windowsa (intepretera cmd.exe, czy konieczności klepania w VBA, którego nie trawię).
    Jest jednak bardzo duża ilość "administratorów Windows" bazujących tylko na 'okienowej' konfiguracji, dla których wyzwaniem jest wpisanie w skrypcie logowania warunków (if / else), a co dopiero użycie potoku - widziałem zaawansowanych administratorów, którzy oblewali się zimnym potem, przeklejając znalezione w google polecenia (przypominam, że już sporo rzeczy 'zrobi' się tylko w PS).

    _qaz7   6 #13 21.11.2012 13:42

    Jest kilka rzeczy które w PowerShellu MS solidnie spaprał i trzyma się tego w imię kompatybilności ze starymi PS - 1.0 i 2.0, np:

    http://connect.microsoft.com/PowerShell/feedback/details/436533/square-bracket-r...

    bachus   19 #14 21.11.2012 14:36

    @_qaz7: oj, mogę wymieniać godzinami, co jest spaprate, co musi zostać poprawione i co zostało zrobione "na opak", poza standardami. Inna sprawa, że nadal w stosunku do SH (czy innego ZSH) logika PS pozostawia wiele do życzenia.

    maciek1972   1 #15 16.01.2016 09:07

    Szukałem materiałów "na start" do PowerShell. Trafiłem na to miejsce - i bardzo fajnie że go znalazłem - dzięki. Mimo, że trochę wody w Wiśle upłynęło to warto było skorzystać. Dla wszystkich, którzy teraz chcą być na bieżąco (a trochę się zmieniło). Polecam nowy podręcznik "Windows PowerShell 5.0 Krok po kroku". Jej opis tutaj: http://www.novatech.com.pl/windows-powershell-50-krok-po-kroku,katalog,2,1,4,1,,...

      #16 13.04.2016 10:12

    a nie da sie bez skrotu?