PowerShell je open source rozšiřitelný automatizační nástroj od společnosti Microsoft [2] , který se skládá z prostředí s rozhraním příkazového řádku a doprovodného skriptovacího jazyka . Jazyk byl poprvé veřejně demonstrován na konferenci Professional Developers Conference (PDC) v září 2003 s kódovým označením Monad. Tento nástroj byl původně vydán jako funkce Windows s názvem Windows PowerShell . Open source byl vydán se začátkem vývoje PowerShell Core v srpnu 2016 .
Windows PowerShell 2.0 byl vydán s Windows 7 , Windows 8 a Windows Server 2008 R2 a také Windows Server 2012 R2 jako nedílná součást systému. Kromě toho je druhá verze k dispozici také pro další systémy, jako je Windows XP SP3, Windows Server 2003 SP2, Windows Vista SP1, Windows Vista SP2, Windows Server 2008 [3] a Windows Server 2012.
PowerShell byl původně postaven a integrován s Microsoft .NET Framework a později .NET . PowerShell navíc poskytuje pohodlný přístup k COM , WMI a ADSI a také možnost spouštět běžné příkazy příkazového řádku k vytvoření jednotného prostředí, kde mohou správci provádět různé úkoly na místních i vzdálených systémech.
Tyto administrativní úkoly se obvykle provádějí pomocí rutin (původně „cmdlets“ ), což jsou specializované třídy .NET . Uživatel je může kombinovat ve skriptech (skriptech) pomocí různých konstrukcí, utilit příkazového řádku a volání běžných .NET tříd, objektů WMI nebo COM . Kromě toho můžete využít různá úložiště dat, jako je souborový systém nebo registr Windows , které PowerShell poskytuje prostřednictvím providerů ( anglicky providers ).
PowerShell také poskytuje mechanismus vkládání, jehož prostřednictvím lze spustitelné soubory PowerShellu vkládat do jiných aplikací. Tyto aplikace pak mohou využívat funkce prostředí PowerShell k implementaci různých operací, včetně těch, které jsou poskytovány prostřednictvím grafického rozhraní. Tento přístup je použit v Microsoft Exchange Server 2007 k implementaci funkcí správy ve formě rutin PowerShell a grafických nástrojů pro správu ve formě prostředí PowerShell, které vyvolávají potřebné rutiny. Grafické rozhraní pro správu je tedy nad mezivrstvou – PowerShell. Další aplikace společnosti Microsoft, včetně Microsoft SQL Server 2008 , System Center Operations Manager a System Center Data Protection Manager , také poskytují přístup ke svým rozhraním pro správu prostřednictvím rutin PowerShell.
PowerShell má k dispozici vlastní rozšiřitelnou nápovědu (včetně z příkazového řádku) prostřednictvím Get-Help.
Každá vydaná verze MS-DOS a Microsoft Windows pro osobní počítače obsahovala nástroj, který poskytoval rozhraní příkazového řádku. Jednalo se COMMAND.COMo (na systémech založených na MS-DOS, včetně Windows 9x ) a cmd.exe(na systémech rodiny Windows NT ). Jednalo se o běžné tlumočníky příkazového řádku s pouze několika základními příkazy. Jiné úlohy vyžadovaly samostatné konzolové aplikace, které byly volány z těchto shellů. Měli také skriptovací jazyk ( dávkové soubory ), pomocí kterého automatizovali různé úkoly. Tyto interprety však nebyly vhodné pro plnou automatizaci - jednak proto, že postrádaly ekvivalenty mnoha GUI operací, a také kvůli slabé funkčnosti skriptovacího jazyka, který neumožňoval popis dostatečně složitých algoritmů. Ve Windows Server 2003 se situace zlepšila, ale podpora skriptování byla stále považována za nedostatečnou.
Microsoft se pokusil vyřešit některé z těchto nedostatků pomocí Windows Script Host , vydaného v roce 1998 s Windows 98 , a nástroje příkazového řádku cscript.exe. Integruje se s Active Script a umožňuje skriptování v kompatibilních jazycích, jako jsou JScript a VBScript , pomocí rozhraní API poskytovaných aplikacemi prostřednictvím Component Object Model (COM). Toto řešení má však své nevýhody. Windows Script Host není integrován s prostředím, neexistuje žádná vestavěná dokumentace. Různé verze systému Windows také poskytují speciální prostředí (například netsh.exeWMIC ) s vlastními sadami příkazů. Nejsou integrovány s shellem a neposkytují interoperabilitu.
V roce 2003 začal Microsoft vyvíjet nový shell nazvaný Monad (také známý jako Microsoft Shell nebo MSH). Monad měl být nový, rozšiřitelný shell příkazového řádku se svěžím designem, který by automatizoval celou řadu administrativních úkolů. Microsoft vydal první veřejnou beta verzi Monad 17. června 2005. Druhá a třetí beta verze byly vydány 11. září 2005 a 10. ledna 2006, resp. 25. dubna 2006 bylo oznámeno, že Monad byl přejmenován na Windows PowerShell, aby se stal významnou součástí jejich technologií správy. Zároveň byl vydán Release Candidate 1. Release Candidate 2 následoval 26. září 2006. Finální verze (Release to Web, RTW) byla vydána 14. listopadu 2006 pro Windows XP SP2 a Windows 2003. Finální verze pro Windows Vista byla k dispozici až 30. ledna 2007.
Nejnovější verze komunitní technologie Windows PowerShell verze 2.0 byla vydána v prosinci 2008. Finální verze druhé verze PowerShellu byla vydána na Windows 7 a Windows Server 2008 R2 ve stejnou dobu, kdy byly vydány. Pro ostatní systémy (Windows XP, Windows Server 2003, Windows Vista, Windows Server 2008) byl PowerShell 2 k dispozici jako součást Windows Management Framework 27. října 2009. Kromě Windows PowerShell verze 2 obsahuje tento balíček také WinRM verze 2.0 a BITS 4.0 (poslední jmenovaný je k dispozici pouze pro Windows Vista a Windows 2008; je integrován do Windows 7 a Windows Server 2008 R2).
Příkazy spouštěné v prostředí Windows PowerShell mohou být ve formě rutin, což jsou specializované třídy .NET navržené k poskytování funkcí v prostředí PowerShell jako skripty prostředí PowerShell ( .PS1), nebo to mohou být běžné spustitelné soubory . Pokud je příkaz spustitelný soubor, PowerShell jej spustí v samostatném procesu; pokud se jedná o příkaz, pak se provede v procesu PowerShell. PowerShell poskytuje rozhraní příkazového řádku, kde můžete zadávat příkazy a zobrazovat jejich výstup jako text. Toto uživatelské rozhraní, které je založeno na standardním mechanismu konzoly Windows , poskytuje přizpůsobitelný mechanismus dokončování příkazů, ale neposkytuje zvýraznění syntaxe, i když jej lze v případě potřeby poskytnout [4] . V PowerShellu můžete také vytvářet aliasy ( angl. alias ) pro rutiny, které se po zavolání převedou na původní příkazy. Kromě toho jsou pro rutiny podporovány poziční a pojmenované parametry. Když spustíte rutinu, práci s navázáním hodnot argumentů na parametry provádí samotné PowerShell, ale když zavoláte externí spustitelné soubory, argumenty se jim předají k analýze.
Dalším konceptem používaným v PowerShellu je potrubí . Stejně jako potrubí v UNIXu jsou navrženy tak, aby kombinovaly více příkazů předáním výstupu jednoho příkazu na vstup druhého příkazu pomocí . Na rozdíl od svého protějšku v UNIXu je však potrubí PowerShell zcela objektové , to znamená, že data mezi rutinami jsou přenášena jako plnohodnotné objekty příslušných typů, nikoli jako proud bajtů. Když jsou data předána jako objekty, prvky, které obsahují, si zachovají svou strukturu a typy napříč rutinami, aniž by bylo nutné data serializovat nebo rozebírat znak po znaku. Objekt může také obsahovat některé funkce určené pro práci s daty. Jsou také zpřístupněny rutině, která je přijímá. Výstup poslední rutiny v potrubí PowerShell je automaticky předán rutině , která vytvoří textovou reprezentaci objektů a dat, která obsahují, a zobrazí ji na obrazovce. |Write-Host
Protože všechny objekty PowerShellu jsou objekty .NET, obsahují metodu .ToString(), která vrací textovou reprezentaci dat objektu. PowerShell používá tuto metodu k převodu objektu na text. Navíc umožňuje určit pravidla formátování, aby bylo možné upravit textovou reprezentaci objektů. Z důvodů kompatibility však platí, že pokud je externí spustitelný soubor použit v kanálu, přijímá textový proud představující objekt a neintegruje se se systémem typu PowerShell.
Extended Type System (ETS) PowerShell je založen na systému typu .NET, ale implementuje některé doplňky . Umožňuje například vytvářet různé reprezentace objektů, zobrazující pouze některé z jejich vlastností a metod, a také používat speciální mechanismy formátování a řazení. Tyto pohledy jsou svázány s původními objekty pomocí konfiguračních souborů ve formátu XML .
Rutiny jsou specializované příkazy prostředí PowerShell, které implementují různé funkce . Toto jsou vestavěné příkazy v PowerShellu. Rutiny jsou pojmenovány například podle pravidla , aby byl z názvu jasný jejich účel. Výsledky výstupu rutin jako objekty nebo kolekce objektů. Kromě toho mohou rutiny přijímat vstup ve stejné podobě, a proto mohou být použity jako přijímače v potrubí. Zatímco PowerShell umožňuje spojovat pole a další kolekce, rutiny vždy zpracovávají objekty jeden po druhém. U kolekce objektů je obslužná rutina rutiny vyvolána postupně u každého objektu v kolekci. Глагол-СуществительноеGet-ChildItem
Instance objektů se vytvářejí v prostředí PowerShell a spouštějí se při vyvolání. Rutiny se dědí z Cmdletnebo z PSCmdlet, přičemž rutina se používá , když rutina potřebuje interagovat se spustitelnou částí PowerShellu ( PowerShell runtime ) . Tyto základní třídy určují některé metody – a alespoň jednu z nich musí implementace rutiny přepsat, aby poskytla svou funkčnost. Při každém spuštění rutiny jsou tyto metody postupně volány prostředím PowerShell. Nejprve se nazývá , pak, pokud jsou data předávána rutině potrubím, pro každý prvek a na samém konci - . Třída, která implementuje, musí mít jeden atribut .NET , , který určuje sloveso a podstatné jméno tvořící název rutiny. Populární slovesa jsou prezentována ve formě výčtu ( eng. enum ). BeginProcessing()ProcessRecord()EndProcessing()BeginProcessing()ProcessRecord()EndProcessing()CmdletCmdletAttribute
Implementace rutin mohou volat jakékoli dostupné rozhraní .NET API a mohou být napsány v libovolném jazyce .NET. PowerShell také poskytuje některá další rozhraní API, jako je WriteObject(), která jsou nutná pro přístup k funkcím specifickým pro PowerShell, jako je výstup výsledných objektů do kanálu. Rutiny mohou používat rozhraní API k přímému přístupu k datům nebo mohou používat rámec poskytovatele PowerShellu k přístupu k úložištím dat prostřednictvím jedinečných cest. Datová úložiště jsou reprezentována písmeny jednotek a hierarchickou adresářovou strukturou v nich. Windows PowerShell přichází s poskytovateli pro systém souborů , registr Windows , úložiště certifikátů a aliasy příkazů, proměnných a funkcí. Jiné aplikace mohou přidávat své vlastní rutiny a poskytovatele pro přístup ke svým datovým úložištím.
PowerShell 2.0 přidal možnost vytvářet rutiny v samotném prostředí PowerShell bez použití jazyků .NET.
PowerShell, stejně jako UNIX/Linux shelly, má kanál. Toto potrubí se používá k propojení výstupu jedné rutiny do vstupu jiné rutiny. Konkrétně může uživatel odeslat výsledky rutiny Get-Processdo rutiny Sort-Object(například seřadit procesy podle úchytů), poté Where-Objectodfiltrovat procesy, které například zabírají méně než 1 MB paměti stránky , a nakonec předat Select-Object. _ Koncept pipeline se původně používá na systémech podobných UNIX (viz Pipeline (UNIX) ), koncept PowerShellu se od tohoto liší. V systémech podobných UNIXu je výstup jednoho příkazu předán do další fáze pipeline v binární podobě, to znamená, že je to vlastně datový tok. Příklad: dd if=/dev/zero bs=1M count=1M | bzip2 -z9 -c > ex.bz2kde se proud "nul" v blocích po 1 MB v množství 1 milionkrát (ze zařízení /dev/zero) příkazem dd(kopírováním speciálních souborů) přenese na vstup příkazu Bzip2, který je maximálně zkomprimuje (z pohledu kompresního algoritmu bzip2volba -z9) a výsledný tok se přenese do stdout(volba -с), který je zase přesměrován na ex.bz2. Výsledkem provedení takto relativně krátkého příkazu bude vytvoření archivu, uvnitř kterého bude proud nula bajtů o velikosti 1 terabajt. Proces vytváření takového archivu v tomto případě používá 2 sekvenční potrubí.
PowerShell obsahuje skriptovací jazyk s dynamickými typy , které lze použít k implementaci složitých operací pomocí rutin. Skriptovací jazyk podporuje proměnné, funkce, větvené konstrukce ( if-then-else), cykly ( while, do, fora foreach), strukturované zpracování chyb a mnoho dalších funkcí, včetně integrace .NET. Proměnné v PowerShellu jsou označeny předponou $před názvem; lze je nastavit na libovolnou hodnotu, včetně výstupu rutin. Přestože jazyk sám o sobě není silně typován , jsou interně proměnné uloženy s jejich typy, což mohou být primitivní typy nebo objekty . Řetězce mohou být uzavřeny v jednoduchých nebo dvojitých uvozovkách: použití dvojitých uvozovek nahradí proměnné obsažené v řetězci jejich hodnotami. Podle syntaxe proměnné, pokud je cesta k souboru uzavřena ve složených závorkách, před kterými je znak dolaru (tj. ), bude to odkaz na obsah souboru. Vše, co bude takové proměnné přiřazeno, se zapíše do souboru a naopak - při přístupu k jeho obsahu se zobrazí obsah souboru. ${C:\foo.txt}
K vlastnostem a metodám objektu můžete přistupovat pomocí tečky ( .) jako v syntaxi C# . PowerShell poskytuje speciální proměnné, jako je $args, která obsahuje pole všech nepojmenovaných argumentů příkazového řádku předávaných funkci nebo $_které odkazuje na aktuální objekt v kanálech a dalších konstrukcích. PowerShell má také pole a asociativní pole . PowerShell navíc automaticky vyhodnocuje aritmetické výrazy zadané na příkazovém řádku a rozumí oblíbeným zkratkám, jako jsou GB (GB), MB (MB) a KB (KB).
V PowerShellu můžete vytvářet své vlastní funkce, které přebírají parametry pomocí function. Problém pro mnoho začátečníků je, že funkce neberou argumenty oddělené čárkami, ale mezerami (jako nástroje příkazového řádku nebo rutiny):
Tyto argumenty lze svázat s parametry zadanými v deklaraci funkce. Lze k nim také přistupovat prostřednictvím pole $args.
PowerShell vám umožňuje volat libovolné metody .NET uzavřením jejich oboru názvů do hranatých závorek ( []) a poté pomocí dvojice dvojteček ( ::) k určení statické metody . Například [System.Console]::WriteLine("PowerShell"). Objekty se vytvářejí pomocí rutiny New-Objecta pomocí rutiny k nim můžete přidávat nové vlastnosti Add-Member.
Pro zpracování chyb poskytuje PowerShell mechanismus založený na .NET. V případě chyby Exceptionjsou vráceny objekty obsahující informaci o chybě ( object ), které jsou zachyceny klíčovým slovem trap. Chybové chování je však konfigurovatelné. Můžete například nakonfigurovat PowerShell tak, aby v případě chyby tiše pokračoval v provádění, aniž by došlo k zachycení chyby. Druhá verze PowerShellu také přidala Try Catch Finally.
Skripty napsané v PowerShellu lze ukládat mezi relacemi v .PS1. Z něj pak můžete použít celý skript nebo jednotlivé funkce. Skripty a funkce se používají jako rutiny, to znamená, že to mohou být příkazy v potrubí a můžete jim předávat parametry. Objekty lze transparentně předávat mezi skripty, funkcemi a rutinami v kanálu. Spouštění skriptů PowerShellu je však ve výchozím nastavení zakázáno a musí být povoleno pomocí rutiny Set-ExecutionPolicy. Skripty PowerShellu lze digitálně podepsat , aby se ověřila jejich integrita.
Společnost Microsoft vydala PowerShell 2.0 jako součást Windows 7 a Windows Server 2008 R2. V těchto systémech je předinstalovaný Windows PowerShell 2.0. Výjimkou je režim instalace systému Windows Server 2008 R2 v režimu Core, kde lze PowerShell 2.0 ručně přeinstalovat. Pro starší platformy je k dispozici jako součást Windows Management Framework. PowerShell 2.0 kromě 240 nových rutin přináší některé změny ve skriptovacím jazyce a rozhraní API pro vkládání.
Částečný seznam nových funkcí zahrnutých v PowerShell 2.0:
Následující tabulka obsahuje výběr rutin dodávaných s prostředím PowerShell s příkazy, které jsou co nejpodobnější z jiných známých prostředí příkazového řádku.
Je třeba poznamenat, že tato tabulka je určena pro povrchní seznámení, nepokrývá všechny možnosti prezentovaných skořápek.
Windows PowerShell (rutina) |
Windows PowerShell (alias) |
cmd.exe / COMMAND.COM (MS-DOS, Windows, OS/2 atd.) |
Bash (Unix, BSD, Linux, Mac OS X atd.) |
Popis |
---|---|---|---|---|
Získat polohu | gl, pwd | cd [5] | pwd | Zobrazí aktuální pracovní adresář |
Nastavte umístění | sl, cd, chdir | cd , chdir | CD | Změní aktuální adresář |
clear-host | cls, jasné | cls | Průhledná | Vymaže obrazovku [6] |
Kopírovat položku | cpi, kopie, cp | kopírovat | cp | Zkopíruje jeden nebo více souborů nebo strom adresářů (v PowerShellu můžete také kopírovat objekty od jiných poskytovatelů dat) |
Získejte pomoc | pomoci člověku | Pomoc | muž | Nápověda k příkazu |
Odebrat položku | ri, del, vymazat, rmdir, rd, rm | del , vymazat , rmdir , rd | rm , rmdir | Odstraní soubor/adresář (nebo jinou položku v poskytovatelích dat PowerShellu). |
Přejmenovat položku | rni, ren | ren , přejmenovat | mv | Přejmenuje soubor/adresář |
Přesunout položku | mi, pohyb, mv | přestěhovat se | mv | Přesune soubor/adresář do nového umístění |
Get-ChildItem | gci, dir, ls | dir | ls | Zobrazí seznam všech souborů/adresářů v aktuálním adresáři |
Zapsat výstup | echo, pište | echo | echo | Tiskne řetězce, proměnné na standardní výstup |
Pop umístění | popd | popd | popd | Změní aktuální adresář na ten, který byl naposledy umístěn v zásobníku |
Push umístění | tlačený | tlačený | tlačený | Vloží aktuální adresář do zásobníku |
Nastavit proměnnou | sv, set | soubor | soubor | Nastavení hodnoty proměnné / vytvoření proměnné |
Získejte obsah | gc, typ, kat | typ | kočka | Získá obsah souboru |
Select-String | sls | najít , najít str | grep | Zobrazí řádky odpovídající podmínce |
GetProcess | gps, ps | tlist, [7] tasklist [8] | ps | Vypisuje všechny běžící procesy |
Zastavit proces | spps, zabít | zabít , [7] taskkill [8] | zabít | Zastaví běžící proces |
Tee-Object | tričko | n/a | tričko | Předá vstup do souboru nebo proměnné a poté jej předá dále v kanálu |
.SÍŤ | |
---|---|
Implementace | |
Architektura | |
Infrastruktura | |
jazyky Microsoft | |
Jiné jazyky | |
Základy Windows | |
Komponenty | |
Srovnání |
|
Budoucí technologie | |
Informační zdroje |
Bezplatný a otevřený software společnosti Microsoft | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
obecná informace |
| ||||||||||||
Software _ |
| ||||||||||||
licence | |||||||||||||
související témata |
| ||||||||||||
Kategorie |