A PowerShell a Microsoft által fejlesztett, parancssori héjból és a megfelelő programozási nyelvből álló feladatautomatizáló és konfigurációkezelő program. Korábban csak a Windows része volt Windows PowerShell néven, 2016. augusztus 18-án a Microsoft megnyitotta a forráskódját és több platformra elérhetővé tette a PowerShell Core bevezetésével. Előbbi a .NET keretrendszeren alapul, utóbbi a .NET-en (korábban .NET Core).

A Windows 10 build 14971-től a PowerShell felváltotta a parancssort, és alapértelmezett parancsbeviteli alkalmazássá vált a Fájlkezelőben.

A PowerShellben a kezelési feladatokat általában cmdletek végzik, melyek egy adott műveletet elvégző speciális .NET osztályok. Ezek különböző adattárakban lévő adatok elérésével működnek, és szolgáltatók teszik elérhetővé. Harmadik felek is hozzáadhatnak cmdleteket és szolgáltatókat a PowerShellhez. A cmdleteket használhatják szkriptek, melyek modulokba csomagolhatók. A cmdletek a .NET API-val működnek együtt.

A PowerShell .NET Remoting-, WS-Management-, CIM- és SSH-támogatása lehetővé teszi a rendszergazdáknak a helyi és távoli rendszereken való munkavégzést. A PowerShell host-API-val is rendelkezik, így beágyazható más alkalmazásokba. Ez felhasználható bizonyos, akár grafikus felhasználói felület által látható műveletekhez is. Ezt használta a Microsoft Exchange Server 2007 kezelési funkcióinak PowerShell-cmdletekkel és -szolgáltatókkal, kezelőeszközeinek a szükséges cmdleteket meghívó PowerShell-hostokkal való megvalósításával. Más Microsoft-alkalmazások, például a Microsoft SQL Server 2008 is cmdleteket használ a felületén.

A PowerShell része saját konzolalapú segítsége (a Unix-héjak man-oldalaihoz hasonlóan), melyet a cmdlettel lehet felhasználni. Frissülő segítségeket az cmdlet révén lehet az internetről szerezni. Ezenkívül a „-online” váltójával lehet frissülő segítséget egyes esetekre kapni.

Háttér A parancssorelemző (CLI) a Microsoft legtöbb operációs rendszerének része volt. Az MS-DOS és a Xenix szinte teljesen CLI-n alapultak (az MS-DOS 5 kiegészítő grafikus DOS héjjal is rendelkezett). A Windows 9x család a COMMAND.COM-mal, a DOS parancssoros környezetével rendelkezett. A Windows NT és Windows CE családok a COMMAND.COM-hoz nagyban hasonlító cmd.exe-vel rendelkeztek. Mindkét környezet támogat alapvető belső parancsokat és egy egyszerű programozási nyelvet (kötegfájlok), mely bizonyos feladatok automatizálására használható. Azonban nem képes a Windows GUI minden részének automatizálására, mivel a parancssori műveletek korlátozottak, és a nyelv alapszintű.

A Microsoft megkísérelte e hibák javítását a Windows Script Host és annak parancssoros hosztjának () bevezetésével 1998-ban a Windows 98-ban. Az Active Script motorral integráltan jelent meg, és lehetővé tette szkriptek kompatibilis nyelveken, például JScriptben és VBScriptben való írását, befolyásolja a komponensobjektum-modell (COM) által mutatott API-t. Azonban hiányosságai is voltak: dokumentációja nehezen érhető el, és hamar hírhedtté vált sérülékenységei miatt, miután néhány nagy károkat okozó vírus kihasználta biztonsági hiányosságait. A különböző Windows-verziók speciális célú interpretereket is biztosítottak (például netsh-t vagy WMIC-et) saját parancskészlettel, de ezek nem voltak egymással kompatibilisek. A Windows Server 2003 próbált ezen javítani, de a szkripttámogatás nem volt kielégítő.

Kermit Az 1990-es évek végére az Intel segítséget kért a Microsofttól a későbbi processzorokhoz megfelelő rendszer készítéséhez. Ekkor az Intel processzorok gyártását Sun Microsystems számítógépen végezték, melyek Solarist (egy Unix-változatot) használtak RISC architektúrájú CPU-n. A számos KornShell automatizációs program futtatása Windowson fontosnak bizonyult. A Microsoft elkezdett egy KornShell-portot készíteni Windowsra Kermit kódnéven. Az Intel végül Linux-alapú fejlesztési platformra tért át, így a Kermit projekt fölös lett. Azonban a Microsoft programmenedzsere, Jeffrey Snover észrevette egy általánosabb célú megoldás lehetőségét az adminisztratív feladatok automatizálásáera.

Monad 2002-re a Microsoft új megközelítést fehlesztett ki a parancssorkezelésre, például a Monad (más néven Microsoft Shell (MSH)) CLI-t. Az ötletek 2002 augusztusában jelentek meg a „Monad Kiáltványnak” nevezett vázlatban. Egy 2017-es interjúban Snover a PowerShell létrejöttéről beszélt, elmondta, hogy megpróbált Unix-eszközöket elérhetővé tenni Windowson, ami „a Windows és Linux alapvető különbségei” miatt nem sikerült. Például megjegyezte, hogy a Linux mindent szöveges fájlként kezel, míg a Windows mindent „strukturált adatot visszaadó API-ként”. Ezek így nem voltak kompatibilisek, más megközelítéshez vezetve.

A Monad új bővíthető CLI lett volna új tervezéssel, és sok feladat automatizálásának képességével. A Microsoft először a Monadot 2003 októberében mutatta be a Los Angeles-i Professional Development Conference-en. Néhány hónappal később megjelent a belső, majd a nyilvános béta. Az első nyilvános Monad-béta 2005. június 17-én, a második szeptember 11-én, a harmadik 2006. január 10-én jelent meg.

PowerShell 2006. április 25-én, a Monad bejelentése után nem sokkal, a Microsoft bejelentette a Monad átnevezését Windows PowerShellre, azt kezelési technológia jelentős tagjaként elhelyezve. Az első kiadásjelölt (RC1) is e napon jelent meg. A névváltoztatás és az RC is jelezte, hogy ez Windows-komponens volt, nem kiegészítő.

A PowerShell RC2K 2006. szeptember 26-án jelent meg, a webre való kiadás (RTW) november 14-én történt. A korábbi verziókra 2007. január 30-án lett kiadva. A PowerShell 2.0 fejlesztése az 1.0 kiadása előtt kezdődött. Fejlesztése során 3 community technology preview (CTP) jelent meg. A kiadások nyilvánosan elérhetők lettek. Az utolsó CTP 2008 decemberében jelent meg.

bélyegkép|Ubuntu 22.10-en futó PowerShell for Linux 7.3.1 A PowerShell 2.0 2009 augusztusában készült el és jelent meg a Windows 7 és a Windows Server 2008 R2 részeként. A PowerShell Windows XP, Windows Server 2003, Windows Vista és Windows Server 2008 rendszerekre 2009 októberében jelent meg 32 és 64 bites platformokra. A TechNet 2009. októberi számában a Microsoft a PowerShell-ismereteket „a jövőben a Windows-rendszergazda által igényelt legfontosabb képességnek” nevezte.

A Windows 10-ben a PowerShellhez tesztkeretrendszer jelent meg.

2016. augusztus 18-án a Microsoft bejelentette, hogy a PowerShell nyílt forrású és platformfüggetlen lett a Windows mellett macOS-, CentOS- és Ubuntu-támogatással. A forráskód elérhető lett a GitHubon. A nyílt forrásra való áttérés miatt létrejött egy újabb változat, a .NET Core-t használó PowerShell Core. Ez eltér a teljes .NET-en futó PowerShelltől. Az 5.1 verziótól a PowerShell Core a Windows Server 2016 Nano Server része.

Tervezés Fontos volt a tervezésben a Windows, a Windows Management Instrumentation, a .NET keretrendszer stb. sok API-jának használatának megkönnyítése. A cmdletek a létező funkciókat „csomagolják be”. Ennek célja rendszergazdabarát, egységes felület biztosítása a rendszergazda és sok funkció között. A PowerShell révén nem kell ismerni a .NET-et, a WMI-t vagy az API-kódolást, hanem csak a cmdleteket kell használni. A PowerShellben nincs sok új funkció, hanem a meglévő funkciók hozzáférhetőbbek egy bizonyos csoportnak.

Nyelvtan A PowerShell alapnyelvtana a POSIX 1003.2 KornShellen alapul.

Azonban a PowerShell nyelvét befolyásolták a PHP, a Perl és sok más nyelv.

Elnevezett parancsok A PowerShell négyféle parancsot tud végrehajtani: cmdletek (PowerShell-lel működő .NET-programok) PowerShell-szkriptek (.ps1 kiterjesztéssel) PowerShell-függvények Önálló végrehajtható programok Az önálló végrehajtható programokat a PowerShell önálló folyamatban, a cmdleteket a PowerShell folyamatában hajtja végre. A PowerShell interaktív parancssoros felület, ahol a parancsok bevihetők, kimenetük megjeleníthető. A felület beállítható parancskiegészítéssel is rendelkezik. A PowerShell lehetővé teszi cmdletek álneveinek létrehozását, melyek esetén az átalakítja az eredeti parancsok meghívására. A PowerShell az elnevezett és számozott paramétereket is támogatja a parancsokhoz. Egy cmdlet végrehajtásában az argumentum értékének a paraméterrel való összekapcsolását a PowerShell végzi, de külső végrehajtható programok esetén az argumentumokat a külső program a PowerShelltől függetlenül értelmezi.

Extended Type System A PowerShell Extended Type System (ETS) a .NET típusrendszeren alapul kiterjesztett szemantikával (például propertySetek és harmadik fél általi bővíthetőség). Például lehetővé teszi objektumok különböző nézeteit csak az adatmezők, tulajdonságok és metódusok egy részének megjelenítésével, valamint egyéni rendezési viselkedés megadásával. Ezek az eredeti objektumhoz XML-alapú fájlokkal vannak rendelve.

Cmdletek A cmdletek a PowerShell környezet speciális parancsai adott funkciókhoz. Nevük Ige-Főnév alakú (például Get-ChildItem), így öndokumentáló. A cmdletek objektumként adják ki eredményeiket, így megfelelő futószalag-recipiensek. Ha egy cmdlet több objektumot ad ki, mindegyik végighalad a futószalagon a következő objektum feldolgozása előtt.

A cmdletek speciális .NET osztályok, melyeket a PowerShell futásidőben hoz hajt végre. Ezek a Cmdlet vagy a PSCmdlet osztályból származnak, utóbbi akkor használatos, ha a cmdletnek a PowerShell-lel kell kommunikálni. Ezen osztályok bizonyos metódusokat (BeginProcessing(), ProcessRecord() és EndProcessing()) határoznak meg, melyeket a cmdlet megvalósítása a működés biztosításához felülír. Egy cmdlet futásakor a PowerShell ezeket sorban hívja meg, a ProcessRecord() hívása a futószalag-bemenet érkezésekor történik. Ha a futószalagon objektumgyűjtemény van, a metódus minden objektumra meghívatik. A cmdletet megvalósító osztálynak szüksége van a CmdletAttribute attribútumra, mely a cmdlet nevét alkotó igét és főnevet határozza meg. A gyakori igék enumerált típusként vannak megadva.

Ha egy cmdlet futószalag- vagy parancssorbemenetet kap, az osztályban kell megfelelő tulajdonság mutátormegvalósítással. A PowerShell ezt a paraméterrel vagy a futószalag-bemenettel hívja meg, melyet a mutátor az osztályokban elment. Ezen értékekre a funkciót biztosító metódusok hivatkoznak. A parancssori paraméterekre hivatkozó paramétereket a ParameterAttribute jelzi, beállításuk a BeginProcessing-hívás előtt történik. A futószalag-bemenetre képező paramétereket is a ParameterAttribute jelzi, de a ValueFromPipeline attribútummal.

E cmdletosztályok megvalósítása bármilyen .NET API-ra hivatkozhat, és jelen lehet bármilyen .NET nyelvben. Ezenkívül a PowerShell elérhetővé tesz bizonyos API-kat, például a WriteObjectet, mely PowerShell-specifikus funkciókhoz, például eredmények futószalagra való kiírásához. A cmdletek használhatnak .NET adathozzáférési API-kat közvetlenül vagy szolgáltatón keresztül, lehetővé téve a tárak címzését egyedi utakkal. Az adattárak a meghajtóbetűkkel, a bennük lévő hierarchiák a könyvtárakkal jelennek meg. A PowerShell a fájlrendszerhez, a rendszerleíráshoz, a tanúsítványtárhoz és a parancsnevekhez, változókhoz és függvényekhez tartozó névterekhez tartozó szolgáltatókkal jelent meg.

A cmdletek száma a PowerShell alapváltozatában általában nőtt: Verzió Cmdletek Windows PowerShell 1.0129Windows PowerShell 2.0632Windows PowerShell 3.0mintegy 1000Windows PowerShell 4.0 Windows PowerShell 5.0mintegy 1300Windows PowerShell 5.1PowerShell Core 6.0 PowerShell Core 6.1 PowerShell Core 6.2 PowerShell 7.0PowerShell 7.1 PowerShell 7.2 A héjba snapinekkel (a 2.0-tól elavult) és modulokkal is hozzáadhatók cmdletek.

Futószalag A PowerShell a futószalag fogalmát használja, mely lehetővé teszi egy cmdlet kimenetének egy másik bemenetekénti használatát.