PowerShell

Aktuální verze stránky ještě nebyla zkontrolována zkušenými přispěvateli a může se výrazně lišit od verze recenzované 20. července 2021; kontroly vyžadují 16 úprav .
Windows PowerShell

Relace v prostředí Windows PowerShell
Typ Shell operačního systému
Vývojář Microsoft
Zapsáno v C# [1]
Operační systém 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
Windows Server 2019
Windows 11
Windows Server 2022
Linux
macOS
První vydání 14. listopadu 2006
Hardwarová platforma x86 , x86-64 , Itanium , ARM
Nejnovější verze 7.2.5 ( 21. června 2022 )
Testovací verze 7.3.0-preview.5 ( 22. června 2022 )
Čitelné formáty souborů Typy prostředí Windows PowerShell (UTF-8) [d] , typy prostředí Windows PowerShell [d] , formátování prostředí Windows PowerShell [d] , formátování prostředí Windows PowerShell (UTF-8) [d] , XML definice rutiny PowerShell (UTF-8) [d] a XML definice rutiny PowerShell [d]
Vygenerované formáty souborů Typy prostředí Windows PowerShell (UTF-8) [d] , typy prostředí Windows PowerShell [d] , formátování prostředí Windows PowerShell [d] , formátování prostředí Windows PowerShell (UTF-8) [d] , XML definice rutiny PowerShell (UTF-8) [d] a XML definice rutiny PowerShell [d]
Licence licence MIT
webová stránka docs.microsoft.com/en-us…
 Mediální soubory na Wikimedia Commons

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.

Pozadí

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řehled

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

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.

Dopravník

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í.

Scénáře

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):

  1. <function> <param1> <param2>: Volá funkci se dvěma argumenty.

Tyto argumenty lze svázat s parametry zadanými v deklaraci funkce. Lze k nim také přistupovat prostřednictvím pole $args.

  1. <function>(<param1>, <param2>): volá funkci s jedním argumentem, což je pole dvou prvků.

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.

PowerShell 2.0

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:

Porovnání rutin s podobnými příkazy

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

Viz také

Poznámky

  1. Powershell Open Source Project na Open Hub: Stránka jazyků - 2006.
  2. PowerShell/PowerShell . GitHub. Získáno 20. srpna 2016. Archivováno z originálu 14. května 2020.
  3. Popis rozhraní Windows Management Framework . Získáno 10. 5. 2012. Archivováno z originálu 14. 5. 2012.
  4. Zvýraznění syntaxe v reálném čase v konzole PowerShell "PowerShell a další skripty" . Staženo 2. listopadu 2009. Archivováno z originálu 11. srpna 2010.
  5. cd bez parametrů vytiskne aktuální adresář.
  6. Clear-Host je implementován jako předdefinovaná funkce PowerShellu.
  7. 1 2 Dostupné ve Windows NT4, Windows 98 Resource Kit, Windows 2000 Support Tools
  8. 1 2 K dispozici ve Windows XP Professional Edition a novějších

Literatura

Odkazy