Történelmileg a parancssori segédprogramok a Unix rendszerekben jobban fejlődtek, mint Windows alatt, de az új megoldások megjelenésével a helyzet megváltozott.
A Windows PowerShell lehetővé teszi a rendszergazdák számára, hogy automatizálják a legtöbb rutinfeladatot. Használatával megváltoztathatók a beállítások, leállíthatók és indíthatók a szolgáltatások, valamint karbantarthatók a legtöbb telepített alkalmazás. A kék ablakot nem lenne helyes még egy parancsértelmezőként felfogni. Ez a megközelítés nem tükrözi a Microsoft által kínált innováció lényegét. Valójában a Windows PowerShell lehetőségei sokkal szélesebb körűek: egy rövid ciklusban cikkek formájában megpróbáljuk megérteni, miben különbözik a Microsoft megoldása a számunkra hagyományosabb eszközöktől.
Főbb lehetőségek
Természetesen a Windows PowerShell elsősorban egy parancssori felület, amely scripts nyelvvel rendelkezik, és kezdetben a .NET Framework platformon készült, később pedig a .NET Core-ra alapozva. A szöveges adatokat fogadó és visszaadó shell-ekkel ellentétben a Windows PowerShell a .NET osztályokkal dolgozik, amelyeknek tulajdonságai és metódusai vannak. A PowerShell lehetővé teszi a normál parancsok végrehajtását, és hozzáférést biztosít a COM, WMI és ADSI objektumokhoz. Különféle tárolókat használ, mint például a fájlrendszer vagy a Windows rendszerleírója, amelyekhez úgynevezett szolgáltatók (providers) készültek. Érdemes megjegyezni, hogy a PowerShell végrehajtható komponensek beágyazása más alkalmazásokba lehetőséget biztosít különböző műveletek végrehajtására, például grafikus felhasználói felületen keresztül. Hasonlóképpen, sok Windows alkalmazás a PowerShell-en keresztül biztosítja a vezérlőfelületeikhez való hozzáférést.
A Windows PowerShell lehetővé teszi:
- A operációs rendszer beállításainak megváltoztatását;
- Szolgáltatások és folyamatok kezelését;
- A szerver szerepeinek és összetevőinek beállítását;
- Szoftver telepítését;
- A telepített szoftverek kezelését speciális felületeken keresztül;
- Futtatható komponensek integrálását harmadik féltől származó programokba;
- Automatizálási feladatokhoz szkriptek létrehozását;
- Dolgozni a fájlrendszerrel, a Windows rendszerleírójával, a tanúsítványtárolóval stb.
A shell és fejlesztői környezet
A Windows PowerShell létezése két formában van: a parancssori környezet emulátora mellett egy integrált szkriptnyozó környezet (Integrated Scripting Environment – ISE) is elérhető. A parancssori felülethez elég, ha kiválasztja a megfelelő parancsikont a Windows menüben, vagy elindítja a powershell.exe fájlt a „Futtatás” menüből. A képernyőn megjelenik egy kék ablak, amely lehetőségeiben jelentősen eltér az elavult cmd.exe-től. Itt van autocompletion és más trükkök, amelyek a Unix-alapú parancssori környezetek felhasználóinak ismerősek.

A shell használatához meg kell jegyezni néhány billentyűkombinációt:
- A fel- és lefelé mutató nyilak a korábban beírt parancsok ismétlésére szolgálnak;
- A jobb nyíl a sor végén a korábbi parancsot karakterről karakterre ismétli;
- Ctrl+Home törli a beírt szöveget a kurzor pozíciójától a sor elejéig;
- Ctrl+End törli a szöveget a kurzortól a sor végéig.
Az F7 megjeleníti a korábban beírt parancsokat tartalmazó ablakot, és lehetőséget ad egy közülük választani. A konzolon a szöveg egérrel történő kijelölése, másolás-beillesztés, a kurzor pozicionálása, törlés és backspace is működik – mind úgy, ahogy szeretjük.

A Windows PowerShell ISE egy teljes értékű fejlesztői környezet, amely támogatja a füles nézetet és a szintaxis kiemelést, kódszerkesztőt, parancsépítőt, beépített hibakeresőt és más programozói örömöket kínál. Ha a fejlesztői környezet szerkesztőjében a parancs neve után egy kötőjelet ír, akkor megkapja a legördülő listában az összes elérhető paramétert az típussal együtt. A PowerShell ISE elindítható akár a rendszer menüjéből származó parancsikonon, akár a powershell_ise.exe futtatható fájllal.

Parancslettek
A Windows PowerShell-ben megjelentek az ún. parancsletek (cmdlet). Ezek speciális .NET osztályok, amelyekben különféle funkciók vannak rejtve. A nevük a "Cselekvés-Objektum" (vagy "Ige-Főnév", ha Önnek ez tetszik) elvén alapul, és az kötőjellel elválasztott összekötő szerkezet a természetes nyelvekben a mondatok alanyának és állítmányának megfelelője. Például a Get-Help szó szerint "Kapni-Segítséget" jelent, vagy a PowerShell kontextusában: "Mutasson-Meg-Hátteret". Ez lényegében az analógiája a man parancsnak Unix-rendszerekben, és a PowerShell dokumentációkat így kell kérni, nem pedig parancslettek előhívásával a --help vagy \/? kulccsal. Ne feledkezzen meg arról sem, hogy a PowerShell online dokumentációja a Microsofttól meglehetősen részletes.
A Get-hez hasonlóan a parancsokban más igék (és nemcsak igék) is használatosak. Az alábbiakban bemutatunk néhány példát:
Ezután adja meg az Amazon S3-hoz való hozzáféréshez szükséges fiókot — válassza ki a meglévőt a listából, vagy kattintson — hozzáadni;
Tisztít — tisztítani;
Engedélyez — bekapcsolni;
Letilt — letiltani;
Új — létrehozni;
Eltávolít — eltávolítani;
Beállít — beállítani;
osztályának — elindítani;
Megállít — megállítani;
Export — exportálni;
Importálás — importálni.
Vannak rendszer-, felhasználói és opcionális parancsok: a végrehajtás eredményeként mindegyik visszaad egy objektumot vagy objektumok tömbjét. Az érzékeny a kis- és nagybetűkre, tehát a parancsértelmező szempontjából nincs különbség a Get-Help és a get-help között. A parancsok elválasztásához a ‘;’ karaktert használjuk, de csak abban az esetben szükséges, ha egy sorban több parancs kerül végrehajtásra.
A Windows PowerShell parancsok modulokba (NetTCPIP, Hyper-V stb.) vannak csoportosítva, és a Get-Command parancs segítségével lehet rákeresni egy objektumra és egy műveletre. A segítségét így lehet megjeleníteni:
Get-Help Get-Command 
Alapértelmezés szerint a parancs rövid segítséget mutat, de a parancsokhoz paramétereket (argumentumokat) is meg lehet adni. Ezek segítségével például részletes (a -Detailed paraméter) vagy teljes (a -Full paraméter) segítséget lehet kapni, és példákat is meg lehet jeleníteni (a -Examples paraméter):
Get-Help Get-Command -ExamplesA Windows PowerShell segítsége az Update-Help parancs segítségével frissül. Ha a parancssor túl hosszú, a parancsargumentumok a következő sorra helyezhetők, ha beírjuk a „`” szimbólumot, majd megnyomjuk az Entert — csak az egy sorban történő írás befejezése és a következő sorra való folytatás nem lehetséges.
Az alábbiakban bemutatunk néhány elterjedt parancsot:
Get-Process — megjeleníti a rendszerben futó folyamatokat;
Get-Service — megjeleníti a szolgáltatásokat és azok állapotát;
Get-Content — kiírja a fájl tartalmát.
A Windows PowerShell-ben a gyakran használt parancsoknak és külső eszközöknek rövid szinonimái vannak — aliasok. Például a dir — alias a Get-ChildItem-hoz. A szinonimák listájában találhatóak a Unix rendszerek parancsainak megfelelői is (ls, ps stb.), a Get-Help parancs pedig a help parancs hívásával érhető el. A szinonimák teljes listáját a Get-Alias parancs segítségével lehet megnézni:

A szkriptek, függvények, modulok és a PowerShell nyelv
A Windows PowerShell szkriptek sima szövegfájlok formájában vannak tárolva .ps1 kiterjesztéssel. Őket nem lehet dupla kattintással elindítani: a jobb egérgombbal kell megnyitni a helyi menüt, és választani a „Futtatás PowerShell-ben” opciót. A konzolban vagy meg kell adni a szkript teljes útvonalát, vagy át kell lépni a megfelelő könyvtárba, és be kell írni a fájl nevét. A szkriptek futtatása a rendszerpolitikával is korlátozott, a jelenlegi beállítások ellenőrzéséhez pedig a Get-ExecutionPolicy parancsmagot lehet használni, amely az alábbi értékek egyikét adja vissza:
Korlátozott — a szkriptek futtatása tilos (alapértelmezetten);
Minden aláírt — csak a megbízható fejlesztő által aláírt szkriptek futtatása engedélyezett;
Távollét alatt aláírt — aláírt és saját szkriptek futtatása engedélyezett;
Korlátozások nélküli — bármilyen szkript futtatása engedélyezett.
Az adminisztrátornak két lehetősége van. A legbiztonságosabb opció a szkriptek aláírása, de ez igencsak bonyolult feladat — ezzel a következő cikkekben fogunk foglalkozni. Jelenleg a legkisebb ellenállás útján haladunk, és megváltoztatjuk a politikát:
Set-ExecutionPolicy RemoteSigned 
Ehhez a PowerShellt rendszergazdaként kell elindítani, habár speciális paraméterrel a jelenlegi felhasználó politikája is megváltoztatható.
A szkriptek objektumorientált programozási nyelven íródnak, amelynek parancsai ugyanazon elv szerint neveződnek, mint a korábban tárgyalt parancsmagok: „Cselekvés-Objektum” („Ige-Főnév”). Fő célja az adminisztrációs feladatok automatizálása, de egy teljes értékű értelmezett nyelv, amelyben minden szükséges szerkezet megtalálható: feltételes elágazások, ciklusok, változók, tömbök, objektumok, hibakezelés stb. Bármely szövegszerkesztő alkalmas a szkriptek írására, de a legkényelmesebb a Windows PowerShell ISE elindítása.
A szkriptbe paramétereket lehet átadni, kötelezővé lehet őket tenni, és alapértelmezett értékeket lehet beállítani. Ráadásul a Windows PowerShell lehetővé teszi funkciók létrehozását és azok hívását pontosan úgy, mint a parancsmagoknál: ehhez a Function konstrukciót és a kapcsos zárójeleket használjuk. A funkciókkal rendelkező szkriptet modulnak hívjuk, és .psm1 kiterjesztése van. A moduloknak a PowerShell környezeti változóiban meghatározott könyvtárakban kell tárolódniuk. Ezeket a következő parancs segítségével tekinthetjük meg:
Get-ChildItem Env:PSModulePath | Format-Table -AutoSizeSzűrők
Az előző példában a Unix rendszerek felhasználói számára ismerős felépítést alkalmaztunk. A Windows PowerShell-ben a függőleges vonal szintén lehetővé teszi, hogy egy parancs kimenetét egy másik parancsnak átadjuk, de a csővezeték megvalósításában lényeges eltérés van: itt már nem karakterek halmazáról vagy valamilyen szövegről van szó. A beépített parancsmódszerek vagy a felhasználói funkciók objektumokat vagy objektumok tömbjeit adnak vissza, és ezeket be is fogadhatják. A Bourne shellhez és számos követőjéhez hasonlóan a PowerShell-ben a csővezetékkel leegyszerűsödik a bonyolult feladatok végrehajtása.
A csővezeték legegyszerűbb példája így néz ki:
Get-Service | Sort-Object -property Status 
Először a Get-Service parancsmódszer hajtódik végre, majd minden megszerzett szolgáltatás átkerül a Sort-Object parancsmódszerbe, ahol a Status tulajdonság szerint rendezik őket. Hogy a csővezeték előző szakaszának kimenete pontosan melyik argumentumba kerül átadásra, az a típustól függ — általában ez az InputObject. A kérdést részletesebben a PowerShell programozási nyelvvel foglalkozó cikkben tárgyaljuk.
Szükség esetén a láncot folytathatjuk, és a Sort-Object munkafolyamatának kimenetét egy másik parancsmódszerhez is átadhatjuk (az utasítások balról jobbra fognak végrehajtódni). Bocsánatot kérek, a Windows felhasználói számára rendelkezésre áll az ismerős Unix-stílusú lapozás is:
Get-Service | Sort-Object -property Status | moreFeladatok futtatása háttérben
Gyakran szükséges egy parancs háttérben történő futtatása, hogy ne kelljen megvárni annak végrehajtását a shell munkamenetében. A Windows PowerShell-ben több parancsmódszer is rendelkezésre áll ilyen esetekre:
Start-Job — háttérfeladat indítása;
Stop-Job — háttérfeladat leállítása;
Get-Job — háttérfeladatok listájának megtekintése;
Receive-Job — a háttérfeladat végrehajtásának eredményeinek megtekintése;
Remove-Job — háttérfeladat eltávolítása;
Wait-Job — háttérfeladat visszakerülése a konzolra.
Háttérfeladat indításához a Start-Job parancsmódszert használjuk, és a kapcsos zárójelek között megadjuk a parancsot vagy parancsok halmazát:
Start-Job {Get-Service} 
A Windows PowerShell-ben háttérfeladatokat a nevük ismeretében kezelhetünk. Először tanuljuk meg őket listázni:
Get-Job 
Most bemutatjuk az Job1 feladat eredményét:
Receive-Job Job1 | more 
Minden elég egyszerű.
Távoli parancsok végrehajtása
A Windows PowerShell lehetővé teszi parancsok és szkriptek futtatását nemcsak helyi, hanem távoli számítógépeken és akár egész gépcsoportokon is. Ehhez több módszer is létezik:
- Sok parancsi modul rendelkezik a
-ComputerNameparaméterrel, de ezzel a módszerrel például nem lehet csővezetéket létrehozni; - A parancsi modul
Enter-PSSessioninteraktív munkamenetet hoz létre a távoli gépen; - A parancsi modullal
Invoke-Commandparancsokat vagy szkripteket lehet futtatni egy vagy több távoli számítógépen.
A PowerShell verziói
Az első kiadás óta 2006-ban a PowerShell jelentősen megváltozott. Az eszköz számos rendszeren elérhető, amelyek különböző hardverplatformokon futnak (x86, x86-64, Itanium, ARM): Windows XP, Windows Server 2003, Windows Vista, Windows Server 2008/2008 R2, Windows 7, Windows 8, Windows 8.1, Windows RT, Windows RT 8.1, Windows Server 2012/2012 R2, Windows 10, Windows Server 2016, GNU/Linux és OS X. A legutolsó, 6.2-es verziót 2018. január 10-én adták ki. A korábbi verziókhoz készült szkriptek nagy valószínűséggel működni fognak az újabb verziókban, ám a visszafelé kompatibilitás problémákba ütközhet, mivel az évek során a PowerShell-ben számos új parancsi modul jelent meg. Az aktuálisan telepített parancssor verzióját a PSVersion tulajdonság segítségével tudhatjuk meg a beépített $PSVersionTable változóból:
$PSVersionTable.PSVersion 
Ezen kívül a következő parancsi modullal is ellenőrizhetjük:
Get-Variable -Name PSVersionTable –ValueOnly 
Ugyanezt a Get-Host parancsi modullal is megtehetjük. Valójában számos lehetőség létezik, de ezek alkalmazásához meg kell tanulni a PowerShell programozási nyelvet, amivel a .
Összegzés
A Microsoftnak sikerült valóban erőteljes parancssort létrehoznia egy kényelmes, integrált környezettel a szkriptek fejlesztéséhez. A Unix világában megszokott eszközöktől eltérően mély integrációval rendelkezik a Windows operációs rendszerekkel és azok szoftvereivel, valamint a .NET Core platformmal. A PowerShell-t objektumorientált környezetnek tekinthetjük, mivel a parancsi modulok és a felhasználói funkciók objektumokat vagy objektummátrixokat adnak vissza, és ezek fogadhatók be bemeneti paraméterként. Úgy gondoljuk, hogy ezt az eszközt minden Windows szerveradminisztrátornak ismernie kell: elmúltak azok az idők, amikor meg lehetett elégedni parancssor nélkül. A fejlettebb konzolos környezet különösen szükséges a , de ez már egy teljesen másik történet.
Csak a regisztrált felhasználók vehetnek részt a szavazáson. , kérem.
Milyen témákat érdemes elsőként érinteni a következő cikksorozatban?
53,2%Programozás PowerShell-ben
42,4%PowerShell funkciók és modulok
22,1%Hogyan írhatjuk alá saját szkripteinket?
12,1%Munkavégzés tárolókkal szolgáltatókon keresztül
57,6%Számítógépek adminisztrálásának automatizálása PowerShell-lel
30,7%Szoftverek kezelése és PowerShell végrehajtható összetevőinek integrálása harmadik fél termékeibe
231 felhasználó szavazott. 37 felhasználó tartózkodott.
Forrás: habr.com
