A PowerShell a Microsoft nyílt forráskódú, bővíthető automatizálási eszköze [2] , amely egy parancssori felülettel rendelkező shellből és egy hozzá tartozó szkriptnyelvből áll . A nyelvet először a 2003. szeptemberi Professional Developers Conference - en (PDC) mutatták be nyilvánosan Monad kódnéven. Az eszközt eredetileg Windows PowerShell nevű Windows -szolgáltatásként adták ki . A nyílt forráskód a PowerShell Core fejlesztésének megkezdésével 2016 augusztusában jelent meg .
A Windows PowerShell 2.0 a Windows 7 , Windows 8 és Windows Server 2008 R2 , valamint a Windows Server 2012 R2 rendszer szerves összetevőjeként jelent meg. Ezenkívül a második verzió más rendszerekre is elérhető, mint például a Windows XP SP3, a Windows Server 2003 SP2, a Windows Vista SP1, a Windows Vista SP2, a Windows Server 2008 [3] és a Windows Server 2012.
A PowerShell eredetileg a Microsoft .NET-keretrendszerre , majd később a .NET -re épült, és azzal integrálódott . Ezenkívül a PowerShell kényelmes hozzáférést biztosít a COM -hoz , a WMI -hez és az ADSI -hez , valamint általános parancssori parancsok végrehajtását, hogy egyetlen környezetet hozzon létre, ahol a rendszergazdák különféle feladatokat hajthatnak végre helyi és távoli rendszereken.
Ezeket az adminisztrációs feladatokat általában parancsmagok (eredetileg "cmdletek" ) segítségével hajtják végre, amelyek speciális .NET - osztályok . A felhasználó ezeket szkriptekben (scriptekben) kombinálhatja különféle konstrukciók, parancssori segédprogramok és normál .NET osztályok, WMI vagy COM objektumok hívásai segítségével . Ezenkívül használhat különféle adattárakat, például a fájlrendszert vagy a Windows rendszerleíró adatbázisát , amelyeket a PowerShell szolgáltatókon keresztül ( angol szolgáltatók ) biztosít.
A PowerShell egy beágyazási mechanizmust is biztosít, amelyen keresztül a PowerShell végrehajtható fájlok beágyazhatók más alkalmazásokba. Ezek az alkalmazások ezután a PowerShell-funkciókat használhatják különféle műveletek végrehajtására, beleértve a grafikus felületen keresztül biztosítottakat is. Ezt a megközelítést alkalmazza a Microsoft Exchange Server 2007 a felügyeleti funkciók PowerShell-parancsmagok és grafikus felügyeleti segédprogramok formájában való megvalósításához PowerShell-héjak formájában, amelyek meghívják a szükséges parancsmagokat. Így a grafikus kezelőfelület a köztes réteg - PowerShell - tetején található. Más Microsoft-alkalmazások, köztük a Microsoft SQL Server 2008 , a System Center Operations Manager és a System Center Data Protection Manager szintén hozzáférést biztosítanak felügyeleti felületeikhez PowerShell-parancsmagokon keresztül.
A PowerShell saját bővíthető súgóval rendelkezik (beleértve a parancssorból is) a Get-Help.
Az MS-DOS és a Microsoft Windows személyi számítógépekre kiadott minden verziója tartalmazott egy segédprogramot, amely parancssori felületet biztosított. Ezek voltak COMMAND.COM(MS-DOS alapú rendszereken, beleértve a Windows 9x -et ) és cmd.exe( Windows NT családrendszereken ). Ezek közönséges parancssori értelmezők voltak, csak néhány alapvető paranccsal. Más feladatokhoz külön konzolalkalmazásokra volt szükség, amelyeket ezekről a shellekből hívtak meg. Volt egy szkriptnyelvük ( kötegelt fájlok ), amellyel különféle feladatokat automatizáltak. Ezek a tolmácsok azonban nem voltak alkalmasak a teljes automatizálásra - egyrészt azért, mert hiányoztak belőlük számos GUI-művelet megfelelője, másrészt a szkriptnyelv gyenge funkcionalitása miatt, amely nem tette lehetővé kellően összetett algoritmusok leírását. A Windows Server 2003 rendszerben a helyzet javult, de a szkriptek támogatása továbbra is elégtelennek bizonyult.
A Microsoft a Windows 98 rendszerrel 1998-ban kiadott Windows Script Host programmal és egy parancssori segédprogrammal próbált orvosolni e hiányosságok egy részét . Integrálódik az Active Script -el, és lehetővé teszi a kompatibilis nyelveken, például a JScript -en és a VBScript -en a szkriptek futtatását az alkalmazások által a Component Object Model (COM) által biztosított API -k használatával . Ennek a megoldásnak azonban megvannak a maga hátrányai. A Windows Script Host nincs integrálva a héjjal, nincs beépített dokumentáció. A Windows különféle verziói saját parancskészletekkel is rendelkeznek speciális célú shellekkel (például WMIC ) . Nincsenek integrálva a héjjal, és nem biztosítanak átjárhatóságot. cscript.exenetsh.exe
2003-ban a Microsoft elkezdte fejleszteni a Monad nevű új shellt (más néven Microsoft Shell vagy MSH). A Monad egy új, bővíthető parancssori shell lett volna, friss kialakítással, amely az adminisztrációs feladatok teljes skáláját automatizálná. A Microsoft 2005. június 17-én adta ki a Monad első nyilvános bétaverzióját. A második és harmadik bétaverzió 2005. szeptember 11-én, illetve 2006. január 10-én jelent meg. 2006. április 25-én bejelentették, hogy a Monadot átnevezték Windows PowerShellre, hogy a felügyeleti technológiáik jelentős részét képezze. Ezzel egy időben megjelent a Release Candidate 1. A Release Candidate 2 2006. szeptember 26-án következett. A végleges verzió (Release to Web, RTW) 2006. november 14-én jelent meg Windows XP SP2 és Windows 2003 rendszerekhez. A Windows Vista végleges verziója csak 2007. január 30-án vált elérhetővé.
A Windows PowerShell 2.0-s verziójának legújabb közösségi technológiai előzetes verziója 2008 decemberében jelent meg. A PowerShell második verziójának végleges verziója Windows 7 és Windows Server 2008 R2 rendszeren a megjelenésükkel egy időben jelent meg. Más rendszerek (Windows XP, Windows Server 2003, Windows Vista, Windows Server 2008) számára a PowerShell 2 a Windows Management Framework részeként 2009. október 27-én vált elérhetővé. A Windows PowerShell 2-es verziója mellett ez a csomag tartalmazza a WinRM 2.0-s verzióját és a BITS 4.0-t is (utóbbi csak Windows Vista és Windows 2008 esetén érhető el; a Windows 7-be és a Windows Server 2008 R2-be van beépítve).
A Windows PowerShellben futó parancsok lehetnek parancsmagok formájában, amelyek speciális .NET -osztályok, amelyeket arra terveztek, hogy PowerShell-parancsfájlokként ( ) funkcionalitást biztosítsanak a PowerShellben .PS1, vagy lehetnek szokásos végrehajtható fájlok . Ha a parancs egy végrehajtható fájl, akkor a PowerShell külön folyamatban futtatja azt; ha ez egy parancs, akkor a PowerShell folyamaton belül kerül végrehajtásra. A PowerShell parancssori felületet biztosít, ahol parancsokat adhat meg, és szövegként jelenítheti meg a kimenetüket. Ez a felhasználói felület, amely a szabványos Windows konzolmechanizmuson alapul , testreszabható parancskiegészítő mechanizmust biztosít, de nem biztosít szintaktikai kiemelést, bár kívánság szerint ez is biztosítható [4] . A PowerShellben álneveket ( eng. alias ) is létrehozhat a parancsmagokhoz, amelyek meghívásakor eredeti parancsokká alakulnak. Ezenkívül a helymeghatározó és a névvel ellátott paraméterek támogatottak a parancsmagokhoz. Amikor futtat egy parancsmagot, az argumentumértékek paraméterekhez való kötését maga a PowerShell végzi, de amikor külső végrehajtható fájlokat hív meg, az argumentumokat a rendszer átadja nekik elemzés céljából.
A PowerShellben használt másik fogalom a folyamat . A UNIX csővezetékeihez hasonlóan úgy tervezték, hogy több parancsot kombináljanak úgy, hogy az egyik parancs kimenetét a második parancs bemenetére adják át a parancs segítségével . De a UNIX-beli megfelelőjétől eltérően a PowerShell folyamat teljesen objektum , azaz a parancsmagok közötti adatok a megfelelő típusú teljes értékű objektumokként, nem pedig bájtfolyamként kerülnek átvitelre. Amikor az adatokat objektumként adjuk át, a benne lévő elemek megtartják struktúrájukat és típusukat a parancsmagokon keresztül, anélkül, hogy szükség lenne sorozásra vagy az adatok karakterenkénti elemzésére. Az objektum tartalmazhat néhány adatkezelésre tervezett függvényt is. Az őket fogadó parancsmag számára is elérhetővé teszik őket. A PowerShell-folyamat utolsó parancsmagjának kimenete automatikusan átadásra kerül a parancsmagnak , amely létrehozza az objektumok és a bennük lévő adatok szöveges megjelenítését, és megjeleníti azt a képernyőn. |Write-Host
Mivel minden PowerShell-objektum .NET-objektum, olyan metódust tartalmaznak, amely .ToString()az objektum adatainak szöveges megjelenítését adja vissza. A PowerShell ezt a módszert használja az objektumok szöveggé alakítására. Ezenkívül lehetővé teszi formázási szabályok megadását, így az objektumok szöveges megjelenítése testreszabható. Azonban kompatibilitási okokból, ha külső végrehajtható fájlt használnak egy folyamatban, akkor az objektumot képviselő szövegfolyamot kap, és nem integrálódik a PowerShell típusú rendszerrel.
Extended Type System (ETS) A PowerShell a .NET típusú rendszeren alapul, de néhány kiegészítést is megvalósít . Lehetővé teszi például az objektumok különböző reprezentációinak létrehozását, amelyek csak bizonyos tulajdonságaikat és metódusaikat jelenítik meg, valamint speciális formázási és rendezési mechanizmusok alkalmazását. Ezek a nézetek XML formátumú konfigurációs fájlokkal vannak az eredeti objektumokhoz kötve .
A parancsmagok speciális PowerShell-parancsok, amelyek különféle funkciókat valósítanak meg . Ezek a PowerShell beépített parancsai. A parancsmagok elnevezése például a szabály szerint történik , hogy céljuk egyértelmű legyen a névből. A parancsmagok az eredményeket objektumokként vagy ezek gyűjteményeként adják ki. Ezenkívül a parancsmagok ugyanabban a formában fogadhatnak bemenetet, és ennek megfelelően vevőként használhatók a folyamatban. Míg a PowerShell lehetővé teszi tömbök és egyéb gyűjtemények csővezetékét, a parancsmagok mindig egyesével dolgozzák fel az objektumokat. Egy objektumgyűjtemény esetén a parancsmag-kezelő a gyűjtemény minden egyes objektumán sorra kerül meghívásra. Глагол-СуществительноеGet-ChildItem
Az objektumpéldányok a PowerShellben jönnek létre, és meghívásakor az fut. CmdletA parancsmagok innen vagy innen öröklődnek PSCmdlet, és ez utóbbi akkor használatos, ha a parancsmagnak interakcióba kell lépnie a PowerShell végrehajtható részével ( PowerShell-futásidejű ) . Ezek az alaposztályok meghatároznak néhány metódust – és ezek közül legalább az egyiket a parancsmag-megvalósításnak felül kell írnia, hogy biztosítsa a funkcionalitását. A parancsmag minden egyes futtatásakor ezeket a metódusokat a PowerShell felváltva hívja meg. Először a -t hívják meg, majd, ha adatokat továbbítanak a parancsmagnak a folyamaton keresztül, minden elemhez, és a legvégén - . Az implementáló osztálynak rendelkeznie kell egy .NET attribútummal , amely meghatározza a parancsmag nevét alkotó igét és főnevet. A népszerű igék felsorolás ( eng. enum ) formájában jelennek meg. BeginProcessing()ProcessRecord()EndProcessing()BeginProcessing()ProcessRecord()EndProcessing()CmdletCmdletAttribute
A parancsmag-megvalósítások bármelyik elérhető .NET API -t meghívhatják , és bármilyen .NET nyelven írhatók. A PowerShell néhány további API-t is biztosít, például WriteObject(), amelyek a PowerShell-specifikus funkciók eléréséhez szükségesek, például az eredményobjektumok folyamatba való kimenetéhez. A parancsmagok API-kat használhatnak az adatok közvetlen eléréséhez, vagy használhatják a PowerShell szolgáltatói keretrendszerét az adattárak egyedi elérési utakon keresztüli eléréséhez . Az adattárakat meghajtóbetűjelek és a bennük lévő hierarchikus könyvtárstruktúra képviselik. A Windows PowerShellhez szolgáltatók tartoznak a fájlrendszerhez , a Windows rendszerleíró adatbázishoz , a tanúsítványtárolóhoz , valamint a parancs-, változó- és funkcióálnevekhez. Más alkalmazások saját parancsmagokat és szolgáltatókat adhatnak hozzá az adattárolóik eléréséhez.
A PowerShell 2.0 hozzáadta a parancsmagok létrehozásának lehetőségét magában a PowerShellben, .NET-nyelvek használata nélkül.
A PowerShellnek, akárcsak a UNIX/Linux rendszerhéjaknak, van egy folyamata. Ez a folyamat arra szolgál, hogy egy parancsmag kimenetét egy másik parancsmag bemenetére irányítsa. Konkrétan a felhasználó kiadhatja a parancsmagok eredményeit Get-Processegy parancsmagba Sort-Object(például a folyamatok fogantyúk szerinti rendezéséhez), majd Where-Objectkiszűrheti azokat a folyamatokat, amelyek például kevesebb, mint 1 MB oldalmemóriát foglalnak el , és végül átadhatja a az eredményeket a parancsmagba Select-Object, hogy csak az első 10 folyamatot válassza ki (a leírók száma szerint). A folyamatot eredetileg UNIX-szerű rendszereken használták (lásd Pipeline (UNIX) ), a PowerShell koncepció eltér ettől. A UNIX-szerű rendszerekben az egyik parancs kimenete bináris formában kerül át a folyamat következő szakaszába, vagyis tulajdonképpen egy adatfolyam. Példa: dd if=/dev/zero bs=1M count=1M | bzip2 -z9 -c > ex.bz2ahol a "nullák" folyama 1 MB-os blokkokban 1 millió alkalommal (az eszközről /dev/zero) a parancs által dd(speciális fájlok másolása) továbbítódik a parancs bemenetére Bzip2, amely a lehető legnagyobb mértékben tömöríti azokat (a tömörítési algoritmus szempontjából bzip2opció -z9), és az így létrejövő adatfolyam továbbítódik stdout(opció -с), ami viszont átirányul egy ex.bz2. Egy ilyen viszonylag rövid parancs végrehajtásának eredménye egy archívum létrehozása lesz, amelyben egy 1 terabájt méretű nulla bájtos adatfolyam lesz. Az archívum létrehozásának folyamata ebben az esetben 2 egymást követő folyamatot használ.
A PowerShell dinamikus típusú szkriptnyelvet tartalmaz, amely összetett műveletek végrehajtására használható parancsmagok használatával. A szkriptnyelv támogatja a változókat, függvényeket, elágazó konstrukciókat ( if-then-else), ciklusokat ( while, do, forés foreach), strukturált hibakezelést és sok más szolgáltatást, beleértve a .NET integrációt is. A PowerShell változóit $a név előtti előtag jelöli; tetszőleges értékre állíthatók, beleértve a parancsmagok kimenetét is. Bár maga a nyelv nem erősen tipizált , a belső változók típusaikkal együtt vannak tárolva, amelyek lehetnek primitív típusok vagy objektumok . A karakterláncok szimpla vagy dupla idézőjelbe zárhatók: a dupla idézőjelek használata a karakterláncban lévő változókat az értékükre cseréli. A változó szintaxisa szerint, ha egy fájl elérési utat kapcsos kapcsos zárójelek közé zárnak egy dollárjel (azaz ), akkor az egy hivatkozás lesz a fájl tartalmára. Minden, ami egy ilyen változóhoz lesz hozzárendelve, a fájlba lesz írva, és fordítva - a tartalmához való hozzáféréskor a fájl tartalma jelenik meg. ${C:\foo.txt}
Egy objektum tulajdonságait és metódusait a pont ( .) használatával érheti el, mint a C# szintaxisban . A PowerShell speciális változókat biztosít, például $args, amely egy függvénynek átadott összes névtelen parancssori argumentum tömbjét tartalmazza, vagy $_amely folyamatokban és egyéb konstrukciókban az aktuális objektumra hivatkozik. A PowerShellnek vannak tömbjei és asszociatív tömbjei is . Ezenkívül a PowerShell automatikusan kiértékeli a parancssorban beírt aritmetikai kifejezéseket, és megérti az olyan népszerű rövidítéseket, mint a GB (GB), MB (MB) és KB (KB).
A PowerShellben létrehozhat saját függvényeket, amelyek paramétereket vesznek fel a function. Sok kezdő számára az a probléma, hogy a függvények nem vesszővel, hanem szóközzel elválasztott argumentumokat vesznek fel (például parancssori segédprogramok vagy parancsmagok):
Ezek az argumentumok a függvénydeklarációban megadott paraméterekhez köthetők. Egy tömbön keresztül is elérhetők $args.
A PowerShell lehetővé teszi bármely .NET-metódus meghívását úgy, hogy a névterüket szögletes zárójelekbe ( []), majd kettőspont ( ::) segítségével statikus metódussal határozhatja meg . Például, [System.Console]::WriteLine("PowerShell"). Az objektumok a parancsmag segítségével jönnek létre New-Object, és a parancsmag segítségével új tulajdonságokat adhat hozzájuk Add-Member.
A hibakezeléshez a PowerShell .NET-alapú mechanizmust biztosít. Hiba esetén a hibáról információt tartalmazó objektumok ( objektum Exception) kerülnek visszaadásra, amelyeket a kulcsszó elfog trap. A hiba viselkedése azonban konfigurálható. Például beállíthatja a PowerShellt, hogy hiba esetén csendben folytassa a végrehajtást, anélkül, hogy a hibát elkapná. A PowerShell második verziója szintén hozzáadta a Try Catch Finally.
A PowerShellben írt szkriptek a munkamenetek között menthetők .PS1. Ezután használhatja a teljes szkriptet vagy az egyes függvényeket. A parancsfájlok és a függvények a parancsmagokhoz hasonlóan használatosak, azaz lehetnek parancsok egy folyamatban, és paramétereket adhatunk át nekik. Az objektumok transzparens módon adhatók át a parancsfájlok, függvények és parancsmagok között egy folyamatban. A PowerShell-szkriptek futtatása azonban alapértelmezés szerint le van tiltva, és engedélyezni kell a parancsmag használatával Set-ExecutionPolicy. A PowerShell-szkriptek digitálisan aláírhatók integritásuk ellenőrzésére.
A Microsoft kiadta a PowerShell 2.0-t a Windows 7 és a Windows Server 2008 R2 részeként. A Windows PowerShell 2.0 előre telepítve van ezeken a rendszereken. A kivétel a Windows Server 2008 R2 Core módban történő telepítési módja, ahol a PowerShell 2.0 manuálisan újratelepíthető. Régebbi platformok esetén a Windows Management Framework részeként érhető el. A PowerShell 2.0 240 új parancsmag mellett néhány változtatást hoz a szkriptnyelvben és a beágyazási API-ban.
A PowerShell 2.0 új funkcióinak részleges listája:
A következő táblázat a PowerShell-lel együtt szállított parancsmagok válogatását tartalmazza, olyan parancsokkal, amelyek a lehető leghasonlóbbak más jól ismert parancssori shellekből.
Megjegyzendő, hogy ez a táblázat felületes ismerkedésre szolgál, nem fedi le a bemutatott héjak minden lehetőségét.
Windows PowerShell (Cmdlet) |
Windows PowerShell (alias) |
cmd.exe / COMMAND.COM (MS-DOS, Windows, OS/2 stb.) |
Bash (Unix, BSD, Linux, Mac OS X stb.) |
Leírás |
---|---|---|---|---|
Hely megszerzése | gl, pwd | cd [5] | pwd | Megjeleníti az aktuális munkakönyvtárat |
Hely beállítása | sl, cd, chdir | cd , chdir | CD | Módosítja az aktuális könyvtárat |
tiszta-gazda | cls, világos | cls | egyértelmű | Törli a képernyőt [6] |
Elem másolása | cpi, másolás, cp | másolat | cp | Egy vagy több fájlt vagy könyvtárfát másol (a PowerShellben más adatszolgáltatóktól származó objektumokat is másolhat) |
Kaphat segítséget | segítsen ember | Segítség | Férfi | Command Help |
Elem eltávolítása | ri, del, törlés, rmdir, rd, rm | del , törlés , rmdir , rd | rm , rmdir | Töröl egy fájlt/könyvtárat (vagy más elemet a PowerShell adatszolgáltatókban). |
Elem átnevezése | rni, ren | ren , nevezd át | mv | Átnevez egy fájlt/könyvtárat |
Elem áthelyezése | mi, mozgás, mv | mozog | mv | Áthelyez egy fájlt/könyvtárat egy új helyre |
Get-ChildItem | gci, rendező, ls | dir | ls | Felsorolja az összes fájlt/könyvtárat az aktuális könyvtárban |
Kimenet írása | visszhangozni, írni | visszhang | visszhang | A karakterláncokat, változókat szabványos kimenetre nyomtatja |
Pop hely | popd | popd | popd | Az aktuális könyvtárat arra módosítja, amelyik utoljára volt a veremben |
Push hely | lökött | lökött | lökött | Az aktuális könyvtárat a verembe helyezi |
Változó beállítása | sv, set | készlet | készlet | Változó értékének beállítása / változó létrehozása |
Szerezzen tartalmat | gc, típus, kat | típus | macska | Lekéri egy fájl tartalmát |
Select-String | sls | talál , talál str | grep | Feltételnek megfelelő sorokat jelenít meg |
GetProcess | gps, ps | tlista, [7] feladatlista [8] | ps | Felsorolja az összes futó folyamatot |
Állítsa le a folyamatot | spps, ölj | kill , [7] taskkill [8] | megöl | Leállítja a futó folyamatot |
Tee-Object | póló | n/a | póló | A bemenetet átadja egy fájlnak vagy változónak, majd továbbadja a folyamatban |
.HÁLÓ | |
---|---|
Megvalósítások | |
Építészet | |
Infrastruktúra |
|
Microsoft nyelvek | |
Más nyelvek | |
Windows alapok | |
Alkatrészek | |
Összehasonlítások |
|
Jövő technológiái | |
Információs források |
Ingyenes és nyílt forráskódú Microsoft szoftver | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Általános információ |
| ||||||||||||
Szoftver _ |
| ||||||||||||
Licencek | |||||||||||||
Kapcsolódó témák |
| ||||||||||||
Kategória |