Korábban a Unix rendszerek parancssori segédprogramjai jobban fejlettek, mint a Windowson, de egy új megoldás 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. Ezzel módosíthatja a beállításokat, leállíthatja és elindíthatja a szolgáltatásokat, valamint karbantartást is végezhet a legtöbb telepített alkalmazáson. Rossz lenne a kék ablakot egy másik parancsértelmezőnek tekinteni. Ez a megközelítés nem tükrözi a Microsoft által javasolt újítások lényegét. Valójában a Windows PowerShell lehetőségei sokkal szélesebbek: egy rövid cikksorozatban megpróbáljuk kitalálni, miben tér el a Microsoft megoldása az általunk jobban ismert eszközöktől.
Főbb jellemzők
Természetesen a Windows PowerShell elsősorban egy parancsfájl-héj, amely eredetileg a .NET-keretrendszerre, majd később a .NET Core-ra épült. A szöveges adatokat elfogadó és visszaadó parancsértelmezőkkel ellentétben a Windows PowerShell tulajdonságokkal és metódusokkal rendelkező .NET-osztályokkal működik. A PowerShell lehetővé teszi általános parancsok futtatását, valamint hozzáférést biztosít a COM, WMI és ADSI objektumokhoz. Különféle tárolókat használ, például a fájlrendszert vagy a Windows registry-t, amelyek eléréséhez ún. szolgáltatók. Érdemes megjegyezni a PowerShell végrehajtható komponensek más alkalmazásokba való beágyazásának lehetőségét, hogy különféle műveleteket hajtsanak végre, pl. grafikus felületen keresztül. Ennek a fordítottja is igaz: sok Windows-alkalmazás a PowerShell-en keresztül biztosít hozzáférést felügyeleti felületeihez.
A Windows PowerShell lehetővé teszi a következőket:
- Az operációs rendszer beállításainak módosítása;
- Szolgáltatások és folyamatok kezelése;
- Szerver szerepkörök és összetevők konfigurálása;
- Telepítő program;
- A telepített szoftverek kezelése speciális interfészeken keresztül;
- Futtatható összetevők beágyazása harmadik féltől származó programokba;
- Szkriptek létrehozása az adminisztrációs feladatok automatizálásához;
- Dolgozzon a fájlrendszerrel, a Windows rendszerleíró adatbázissal, a tanúsítványtárolóval stb.
Shell és fejlesztői környezet
A Windows PowerShellnek két formája van: a parancshéjjal rendelkező konzolemulátoron kívül van egy Integrated Scripting Environment (ISE). A parancssori felület eléréséhez egyszerűen válassza ki a megfelelő parancsikont a Windows menüből, vagy futtassa a powershell.exe fájlt a Futtatás menüből. Egy kék ablak jelenik meg a képernyőn, amely jelentősen eltér az özönvíz előtti cmd.exe képességeitől. Vannak automatikus kiegészítés és egyéb funkciók, amelyeket a Unix rendszerek parancshéjainak felhasználói ismernek.
A shell használatához emlékeznie kell néhány billentyűparancsra:
- A fel és le nyilak görgetik az előzményeket a korábban begépelt parancsok megismétléséhez;
- A sor végén lévő jobbra nyíl karakterről karakterre írja be újra az előző parancsot;
- A Ctrl+Home törli a beírt szöveget a kurzor helyétől a sor elejéig;
- Ctrl+End törli a szöveget a kurzortól a sor végéig.
Az F7 egy ablakot jelenít meg a beírt parancsokkal, és lehetővé teszi az egyik kiválasztását. A konzol működik az egérrel történő szövegkijelöléssel, másolás-beillesztéssel, kurzor pozicionálással, törléssel, visszalépéssel – mindennel, amit szeretünk.
A Windows PowerShell ISE egy komplett fejlesztői környezet füles és szintaxis-kiemelt kódszerkesztővel, parancskészítővel, beépített hibakeresővel és egyéb programozási örömökkel. Ha a fejlesztőkörnyezet-szerkesztőben a parancs neve után kötőjelet írunk, akkor a legördülő listában minden elérhető opció megjelenik a típus megjelölésével. A PowerShell ISE elindítható a rendszermenü parancsikonjával vagy a powershell_ise.exe végrehajtható fájl használatával.
Parancsmagok
A Windows PowerShellben az ún. parancsmagok. Ezek speciális .NET-osztályok, amelyek számos funkciót biztosítanak. Ezek neve Action-Object (vagy Ige-Főnév, ha úgy tetszik), és a kötőjellel elválasztott hivatkozás hasonlít a természetes nyelvi mondatok állítmányára és alanyára. Például a Get-Help szó szerint azt jelenti, hogy "Súgó kérése", vagy PowerShell-kontextusban: "Show-Help". Valójában ez a man parancs analógja a Unix rendszerekben, és a PowerShellben a kézikönyveket így kell kérni, nem pedig a --help vagy /? billentyűvel parancsmagok meghívásával. Ne feledkezzünk meg az online PowerShell dokumentációról: A Microsoft elég részletesen ismerteti.
A Get mellett a parancsmagok más igéket is használnak a műveletek jelölésére (és nem csak igéket, szigorúan véve). Az alábbi listában mutatunk néhány példát:
Add
- hozzá;
Clear
- egyértelmű;
Enable
- bekapcsolni;
Disable
- kikapcsol;
New
- létrehozni;
Remove
- törölni;
Set
- kérdezni;
Start
- fuss;
Stop
- állj meg;
Export
- export;
Import
- import.
Vannak rendszer-, felhasználói és opcionális parancsmagok: a végrehajtás eredményeként mindegyik egy objektumot vagy objektumok tömbjét ad vissza. Nem érzékenyek a kis- és nagybetűkre, pl. a parancsértelmező szempontjából nincs különbség a Get-Help és a get-help között. Az elválasztáshoz a ';' karaktert használjuk, de csak akkor kötelező elhelyezni, ha több parancsmag fut ugyanabban a sorban.
A Windows PowerShell-parancsmagok modulokba vannak csoportosítva (NetTCPIP, Hyper-V stb.), és van egy Get-Command parancsmag az objektum és művelet szerinti kereséshez. A súgót így jelenítheti meg:
Get-Help Get-Command
Alapértelmezés szerint a parancs rövid súgót jelenít meg, de a paraméterek (argumentumok) szükség szerint átadódnak a parancsmagoknak. Segítségükkel például részletes (paraméter -Részletes) vagy teljes (paraméter -Teljes) súgót kaphat, illetve példákat is megjeleníthet (paraméter -Példák):
Get-Help Get-Command -Examples
A Windows PowerShell súgóját az Update-Help parancsmag frissíti. Ha a parancssor túl hosszúnak bizonyul, a parancsmag argumentumait áthelyezheti a következőre a '`' szolgáltatáskarakter beírásával és az Enter lenyomásával - ha az egyik sorban befejezi a parancsot, és folytatja a másik sorban, az nem fog működni.
Íme néhány példa a gyakori parancsmagokra:
Get-Process
- megjeleníteni a rendszerben futó folyamatokat;
Get-Service
— a szolgáltatások és állapotuk megjelenítése;
Get-Content
- megjeleníti a fájl tartalmát.
A gyakran használt parancsmagokhoz és külső segédprogramokhoz a Windows PowerShell rövid szinonimákkal rendelkezik - álnevek (az angolból. Alias). Például a dir a Get-ChildItem álneve. A szinonimák listája a Unix rendszerekből származó parancsok analógjait is tartalmazza (ls, ps stb.), és a Get-Help parancsmagot a help parancs hívja meg. A szinonimák teljes listája megtekinthető a Get-Alias parancsmag segítségével:
Szkriptek, függvények, modulok és a PowerShell nyelv
A Windows PowerShell-szkriptek egyszerű szöveges fájlokként vannak tárolva .ps1 kiterjesztéssel. Nem indíthatja el őket dupla kattintással: jobb egérgombbal kattintson a helyi menü előhívásához, és válassza ki a „Futtatás a PowerShellben” elemet. A konzolról vagy meg kell adnia a szkript teljes elérési útját, vagy a megfelelő könyvtárba kell lépnie, és meg kell írnia a fájl nevét. A szkriptek futtatását a rendszerházirend is korlátozza, és az aktuális beállítások ellenőrzéséhez használhatja a Get-ExecutionPolicy parancsmagot, amely a következő értékek egyikét adja vissza:
Restricted
— a szkriptek indítása le van tiltva (alapértelmezés szerint);
AllSigned
- csak megbízható fejlesztő által aláírt szkriptek indítása engedélyezett;
RemoteSigned
- aláírt és saját szkriptek futtatása;
Unrestricted
- bármilyen szkript futtatása engedélyezett.
Az adminisztrátornak két lehetősége van. A legbiztonságosabb a szkriptek aláírása, de ez elég komoly varázslat – a következő cikkekben foglalkozunk vele. Most lépjünk a legkisebb ellenállás útján, és változtassuk meg a politikát:
Set-ExecutionPolicy RemoteSigned
Ehhez a PowerShellt rendszergazdaként kell futtatni, bár egy speciális beállítással módosíthatja az aktuális felhasználó házirendjét.
A szkriptek objektum-orientált programozási nyelven íródnak, amelynek parancsai ugyanazon elv szerint vannak elnevezve, mint a korábban tárgyalt parancsmagok: "Action-Object" ("Ige-Noun"). Fő célja az adminisztrációs feladatok automatizálása, de egy teljes értékű értelmezett nyelv, amely minden szükséges konstrukcióval rendelkezik: feltételes ugrás, ciklusok, változók, tömbök, objektumok, hibakezelés stb. Bármely szövegszerkesztő alkalmas a szkriptek készítésére, de a legjobb a Windows PowerShell ISE futtatása.
Paramétereket adhat át a szkriptnek, kötelezővé teheti őket, és beállíthat alapértelmezett értékeket. Ezenkívül a Windows PowerShell lehetővé teszi a függvények létrehozását és meghívását a parancsmagokhoz hasonlóan, a függvénykonstrukció és a kapcsos zárójelek használatával. A függvényekkel rendelkező szkriptet modulnak nevezzük, és .psm1 kiterjesztéssel rendelkezik. A modulokat a PowerShell környezeti változókban meghatározott könyvtárakban kell tárolni. Ezeket a következő paranccsal tekintheti meg:
Get-ChildItem Env:PSModulePath | Format-Table -AutoSize
Szállító
Az utolsó példában a Unix shell-felhasználók számára ismerős konstrukciót használtunk. A Windows PowerShellben a függőleges sáv azt is lehetővé teszi, hogy az egyik parancs kimenetét átadjuk egy másik parancs bemenetének, de jelentős különbség van a folyamat megvalósításában: már nem egy karakterkészletről vagy valamiféle karakterkészletről beszélünk. szöveg. A beépített parancsmagok vagy a felhasználó által definiált függvények objektumokat vagy objektumtömböket adnak vissza, és bemenetként is fogadhatják azokat. A Bourne-héjhoz és számos utódjához hasonlóan a PowerShell is egyszerűbbé teszi az összetett feladatokat egy folyamattal.
A legegyszerűbb csővezeték-példa így néz ki:
Get-Service | Sort-Object -property Status
Először a Get-Service parancsmagot hajtják végre, majd az általa fogadott összes szolgáltatást átadják a Sort-Object parancsmagnak a Status tulajdonság szerinti rendezés céljából. Az, hogy a folyamat előző szakaszának eredménye melyik argumentumhoz kerül átadásra, annak típusától függ – általában az InputObject. Ezt a problémát részletesebben a PowerShell programozási nyelvnek szentelt cikk tárgyalja.
Ha szeretné, folytathatja a láncot, és átadhatja a Sort-Object művelet eredményét egy másik parancsmagnak (balról jobbra hajtják végre). A Windows-felhasználók egyébként hozzáférhetnek az összes Unixoid számára ismert oldalszámozási konstrukcióhoz is:
Get-Service | Sort-Object -property Status | more
Feladatok futtatása a háttérben
Gyakran előfordul, hogy egy bizonyos parancsot a háttérben kell futtatni, hogy ne várjuk meg a végrehajtás eredményét a shell-munkamenetben. A Windows PowerShell számos parancsmagot tartalmaz erre az esetre:
Start-Job
- háttérfeladat indítása;
Stop-Job
— állítsa le a háttérfeladatot;
Get-Job
— a háttérfeladatok listájának megtekintése;
Receive-Job
— a háttérfeladat végrehajtásának eredményének megtekintése;
Remove-Job
— háttérfeladat törlése;
Wait-Job
- a háttérfeladat visszaadása a konzolra.
Egy háttérfeladat elindításához a Start-Job parancsmagot használjuk, és kapcsos zárójelben adunk meg egy parancsot vagy parancskészletet:
Start-Job {Get-Service}
A Windows PowerShell háttérfeladatai a nevük ismeretében manipulálhatók. Először is tanuljuk meg, hogyan jelenítsük meg őket:
Get-Job
Most pedig mutassuk meg a Job1 feladat eredményét:
Receive-Job Job1 | more
Minden nagyon egyszerű.
Távoli parancsvégrehajtás
A Windows PowerShell nem csak a helyi számítógépen, hanem egy távoli számítógépen, sőt a gépek egész csoportján is lehetővé teszi parancsok és parancsfájlok végrehajtását. Ennek többféle módja van:
- Sok parancsmag rendelkezik paraméterekkel
-ComputerName
, de így nem fog működni például egy szállítószalag létrehozása; - Cmdlet
Enter-PSSession
lehetővé teszi interaktív munkamenet létrehozását egy távoli gépen; - A cmdlet használatával
Invoke-Command
parancsokat vagy parancsfájlokat futtathat egy vagy több távoli számítógépen.
A PowerShell verziói
A PowerShell sokat változott 2006-os első kiadása óta. Az eszköz számos különböző hardverplatformon (x86, x86-64, Itanium, ARM) futó rendszerhez elérhető: 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 6.2 legújabb kiadása 10. január 2018-én jelent meg. A korábbi verziókhoz írt szkriptek valószínűleg működni fognak a későbbi verziókban, de a háttérportolás problémás lehet, mivel a PowerShell számos új parancsmagot vezetett be a fejlesztési évek során. A számítógépre telepített parancshéj verzióját a $PSVersionTable beépített változó PSVersion tulajdonságával találhatja meg:
$PSVersionTable.PSVersion
Használhatja a parancsmagot is:
Get-Variable -Name PSVersionTable –ValueOnly
Ugyanez történik a Get-Host parancsmaggal is. Valójában sok lehetőség van, de használatukhoz meg kell tanulni a PowerShell programozási nyelvet, amit meg is fogunk tenni
Eredményei
A Microsoftnak sikerült egy igazán hatékony héjat létrehoznia kényelmes integrált környezettel a szkriptek fejlesztéséhez. A Unix világában nálunk megszokott eszközöktől a Windows család operációs rendszereivel, valamint a hozzájuk tartozó szoftverekkel és a .NET Core platformmal való mély integrációban tér el. A PowerShell objektumorientált héjnak nevezhető, mivel a parancsmagok és a felhasználó által definiált függvények objektumokat vagy objektumtömböket adnak vissza, és bemenetként vehetik fel azokat. Úgy gondoljuk, hogy ennek az eszköznek minden Windows szerveradminisztrátornak rendelkeznie kell: eltelt az idő, amikor nélkülözhette a parancssort. A fejlett konzolhéj különösen szükséges
A felmérésben csak regisztrált felhasználók vehetnek részt.
Milyen témákkal kell először foglalkozni a sorozat következő cikkeiben?
-
53,2%Programozás a PowerShellben123
-
42,4%PowerShell98 függvények és modulok
-
22,1%Hogyan írhat alá saját szkripteket?51
-
12,1%Adattárak kezelése szolgáltatókon (szolgáltatókon) keresztül28
-
57,6%Számítógép-felügyelet automatizálása a PowerShell segítségével133
-
30,7%Szoftverkezelés és PowerShell végrehajtható fájlok beágyazása harmadik féltől származó termékekbe71
231 felhasználó szavazott. 37 felhasználó tartózkodott.
Forrás: will.com