PowerShell

Den aktuella versionen av sidan har ännu inte granskats av erfarna bidragsgivare och kan skilja sig väsentligt från versionen som granskades den 20 juli 2021; kontroller kräver 16 redigeringar .
Windows PowerShell

Session i Windows PowerShell
Sorts Operativsystem skal
Utvecklaren Microsoft
Skrivet i C# [1]
Operativ system 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
Första upplagan 14 november 2006
Hårdvaruplattform x86 , x86-64 , Itanium , ARM
senaste versionen 7.2.5 ( 21 juni 2022 )
Testversion 7.3.0-preview.5 ( 22 juni 2022 )
Läsbara filformat Windows PowerShell-typer (UTF-8) [d] , Windows PowerShell-typer [d] , Windows PowerShell-formatering [d] , Windows PowerShell-formatering (UTF-8) [d] , PowerShell Cmdlet Definition XML (UTF-8) [d] och PowerShell Cmdlet Definition XML [d]
Genererade filformat Windows PowerShell-typer (UTF-8) [d] , Windows PowerShell-typer [d] , Windows PowerShell-formatering [d] , Windows PowerShell-formatering (UTF-8) [d] , PowerShell Cmdlet Definition XML (UTF-8) [d] och PowerShell Cmdlet Definition XML [d]
Licens MIT-licens
Hemsida docs.microsoft.com/en-us...
 Mediafiler på Wikimedia Commons

PowerShell är ett  utbyggbart automatiseringsverktyg med öppen källkod från Microsoft [2] som består av ett skal med ett kommandoradsgränssnitt och ett tillhörande skriptspråk . Språket demonstrerades först offentligt vid Professional Developers Conference (PDC) i september 2003  , med kodnamnet Monad. Verktyget släpptes ursprungligen som en Windows -funktion som heter Windows PowerShell . Öppen källkod släpptes när PowerShell Core- utvecklingen startade i augusti 2016 .

Windows PowerShell 2.0 släpptes med Windows 7 , Windows 8 och Windows Server 2008 R2 , samt Windows Server 2012 R2 som en integrerad systemkomponent. Dessutom finns den andra versionen även tillgänglig för andra system som Windows XP SP3, Windows Server 2003 SP2, Windows Vista SP1, Windows Vista SP2, Windows Server 2008 [3] och Windows Server 2012.

PowerShell byggdes ursprungligen på och integrerades med Microsoft .NET Framework och senare på .NET . Dessutom ger PowerShell bekväm åtkomst till COM , WMI och ADSI , samt möjligheten att köra vanliga kommandoradskommandon för att skapa en enda miljö där administratörer kan utföra olika uppgifter på lokala och fjärrsystem.

Dessa administrativa uppgifter utförs vanligtvis med hjälp av cmdlets (ursprungligen "cmdlets" ), som är specialiserade .NET- klasser . Användaren kan kombinera dem i skript (skript) med olika konstruktioner, kommandoradsverktyg och anrop till vanliga .NET-klasser, WMI- eller COM - objekt . Dessutom kan du använda olika datalager, som filsystemet eller Windows-registret , som tillhandahålls av PowerShell genom leverantörer ( engelska leverantörer ).  

PowerShell tillhandahåller också en inbäddningsmekanism genom vilken PowerShell körbara filer kan bäddas in i andra applikationer. Dessa applikationer kan sedan använda PowerShell-funktionalitet för att implementera en mängd olika operationer, inklusive de som tillhandahålls via ett grafiskt gränssnitt. Detta tillvägagångssätt används i Microsoft Exchange Server 2007 för att implementera hanteringsfunktionalitet i form av PowerShell-cmdlets och grafiska hanteringsverktyg i form av PowerShell-skal som anropar de nödvändiga cmdlets. Således är det grafiska hanteringsgränssnittet ovanpå mellanskiktet - PowerShell. Andra Microsoft-program, inklusive Microsoft SQL Server 2008 , System Center Operations Manager och System Center Data Protection Manager , ger också åtkomst till deras hanteringsgränssnitt via PowerShell-cmdlets.

PowerShell har sin egen utökningsbara hjälp tillgänglig (inklusive från kommandoraden) via Get-Help.

Bakgrund

Varje släppt version av MS-DOS och Microsoft Windows för persondatorer inkluderade ett verktyg som gav ett kommandoradsgränssnitt. Dessa var COMMAND.COM(på MS-DOS-baserade system, inklusive Windows 9x ) och cmd.exe(på Windows NT -familjen ). Dessa var vanliga kommandoradstolkar med bara ett fåtal grundläggande kommandon. Andra uppgifter krävde separata konsolapplikationer som anropades från dessa skal. De hade också ett skriptspråk ( batchfiler ) för att automatisera olika uppgifter. Dessa tolkar var dock inte lämpliga för full automatisering – dels för att de saknade motsvarigheter till många GUI-operationer, och även på grund av den svaga funktionaliteten hos skriptspråket, som inte gjorde det möjligt att beskriva tillräckligt komplexa algoritmer. I Windows Server 2003 förbättrades situationen, men skriptstöd ansågs fortfarande vara otillräckligt.

Microsoft försökte åtgärda några av dessa brister med Windows Script Host , som släpptes 1998 med Windows 98 , och ett kommandoradsverktyg cscript.exe. Det integreras med Active Script och tillåter skript på kompatibla språk som JScript och VBScript med API :er som tillhandahålls av applikationer via Component Object Model (COM). Denna lösning har dock sina nackdelar. Windows Script Host är inte integrerat med skalet, det finns ingen inbyggd dokumentation. Olika versioner av Windows tillhandahåller även skal för specialändamål (som netsh.exeWMIC ) med sina egna kommandouppsättningar. De är inte integrerade med skalet och ger inte interoperabilitet.

2003 började Microsoft utveckla ett nytt skal som heter Monad (även känt som Microsoft Shell eller MSH). Monad skulle vara ett nytt, utbyggbart kommandoradsskal, med en fräsch design som skulle automatisera en hel rad administrativa uppgifter. Microsoft släppte den första offentliga betaversionen av Monad den 17 juni 2005. Den andra och tredje betaversionen släpptes den 11 september 2005 respektive 10 januari 2006. Den 25 april 2006 tillkännagavs att Monad hade bytt namn till Windows PowerShell för att positionera den som en betydande del av deras hanteringsteknologier. Samtidigt släpptes Release Candidate 1. Release Candidate 2 följde den 26 september 2006. Den slutliga versionen (Release to Web, RTW) släpptes den 14 november 2006 för Windows XP SP2 och Windows 2003. Den slutliga versionen för Windows Vista blev inte tillgänglig förrän den 30 januari 2007.

Den senaste förhandsversionen av gemenskapsteknik av Windows PowerShell version 2.0 släpptes i december 2008. Den slutliga versionen av den andra versionen av PowerShell släpptes på Windows 7 och Windows Server 2008 R2 samtidigt som de släpptes. För andra system (Windows XP, Windows Server 2003, Windows Vista, Windows Server 2008) blev PowerShell 2 tillgängligt som en del av Windows Management Framework den 27 oktober 2009. Förutom Windows PowerShell version 2 innehåller detta paket även WinRM version 2.0 och BITS 4.0 (den senare är endast tillgänglig för Windows Vista och Windows 2008; den är inbyggd i Windows 7 och Windows Server 2008 R2).

Översikt

Kommandon som körs i Windows PowerShell kan vara i form av cmdlets, som är specialiserade .NET -klasser utformade för att tillhandahålla funktionalitet i PowerShell som PowerShell-skript ( .PS1), eller så kan de vara vanliga körbara filer . Om kommandot är en körbar fil, kör PowerShell det i en separat process; om det är ett kommando, så exekveras det i PowerShell-processen. PowerShell tillhandahåller ett kommandoradsgränssnitt där du kan ange kommandon och visa deras utdata som text. Det här användargränssnittet, som är baserat på standardmekanismen för Windows -konsollen , tillhandahåller en anpassningsbar mekanism för att slutföra kommandon, men tillhandahåller inte syntaxmarkering, även om den kan tillhandahållas om så önskas [4] . I PowerShell kan du också skapa alias ( eng.  alias ) för cmdlets som, när de anropas, konverteras till originalkommandon. Dessutom stöds positionella och namngivna parametrar för cmdlets. När du kör en cmdlet görs arbetet med att binda argumentvärden till parametrar av PowerShell själv, men när du anropar externa körbara filer skickas argumenten till dem för analys.

Ett annat koncept som används i PowerShell är en pipeline .  Liksom pipelines i UNIX är de designade för att kombinera flera kommandon genom att skicka utdata från ett kommando till inmatningen av ett andra kommando med hjälp av . Men, till skillnad från sin motsvarighet i UNIX, är PowerShell-pipelinen helt objekt , det vill säga data mellan cmdlets överförs som fullvärdiga objekt av lämpliga typer, och inte som en ström av byte. När data skickas som objekt, behåller elementen den innehåller sin struktur och sina typer över cmdlets, utan behov av någon serialisering eller tecken-för-tecken-tolkning av data. Objektet kan också innehålla vissa funktioner som är utformade för att arbeta med data. De görs också tillgängliga för den cmdlet som tar emot dem. Utdata från den sista cmdleten i PowerShell-pipelinen skickas automatiskt till cmdleten , som skapar en textrepresentation av objekten och den data de innehåller och visar den på skärmen. |Write-Host

Eftersom alla PowerShell-objekt är .NET-objekt innehåller de en metod .ToString()som returnerar en textrepresentation av objektets data. PowerShell använder den här metoden för att konvertera ett objekt till text. Dessutom låter den dig ange formateringsregler så att textrepresentationen av objekt kan anpassas. Men av kompatibilitetsskäl, om en extern körbar fil används i en pipeline, tar den emot en textström som representerar objektet och integreras inte med PowerShell-systemet.

Extended Type System (ETS) PowerShell är baserat på systemet av typen .NET, men implementerar några tillägg .  Till exempel låter det dig skapa olika representationer av objekt, bara visa några av deras egenskaper och metoder, samt tillämpa speciella formaterings- och sorteringsmekanismer. Dessa vyer är bundna till originalobjekten med hjälp av konfigurationsfiler i XML - format .

Cmdlets

Cmdlets är specialiserade PowerShell-kommandon som implementerar olika funktioner .  Dessa är inbyggda kommandon i PowerShell. Cmdlets namnges enligt regeln , till exempel så att deras syfte framgår av namnet. Cmdlets matar ut resultat som objekt eller samlingar av dem. Dessutom kan cmdlets ta emot input i samma form och följaktligen användas som mottagare i pipeline. Medan PowerShell låter dig röra arrayer och andra samlingar, bearbetar cmdlets alltid objekt ett i taget. För en samling objekt anropas cmdlet-hanteraren på varje objekt i samlingen i tur och ordning. Глагол-СуществительноеGet-ChildItem

Objektinstanser skapas i PowerShell och körs av den när de anropas. Cmdlets ärvs från Cmdleteller från PSCmdlet, och det senare används när cmdleten behöver interagera med den körbara delen av PowerShell ( PowerShell runtime ) .  Dessa basklasser specificerar några metoder - och åtminstone en av vilka cmdlet-implementeringen måste skriva över för att tillhandahålla dess funktionalitet. Varje gång cmdleten körs anropas dessa metoder av PowerShell i sin tur. Först anropas , sedan, om data skickas till cmdleten genom pipelinen, för varje element, och i slutet - . En klass som implementerar måste ha ett .NET-attribut , , som anger verbet och substantivet som utgör namnet på cmdleten. Populära verb presenteras i form av en uppräkning ( eng. enum ). BeginProcessing()ProcessRecord()EndProcessing()BeginProcessing()ProcessRecord()EndProcessing()CmdletCmdletAttribute 

Cmdlet-implementationer kan anropa alla tillgängliga .NET API och kan skrivas på vilket .NET-språk som helst. PowerShell tillhandahåller också några ytterligare API:er, till exempel WriteObject(), som krävs för att få åtkomst till PowerShell-specifik funktionalitet, som att mata ut resultatobjekt till en pipeline. Cmdlets kan använda API:er för att komma åt data direkt, eller så kan de använda PowerShells leverantörsramverk för att  komma åt datalagrar genom unika sökvägar. Datalager representeras genom enhetsbokstäver och en hierarkisk katalogstruktur inom dem. Windows PowerShell kommer med leverantörer för filsystemet , Windows-registret , certifikatarkivet och kommando-, variabel- och funktionsalias. Andra applikationer kan lägga till sina egna cmdlets och leverantörer för att komma åt sina datalager.

PowerShell 2.0 lade till möjligheten att skapa cmdlets i själva PowerShell, utan att använda .NET-språk.

Transportör

PowerShell, liksom UNIX/Linux-skal, har en pipeline. Denna pipeline används för att leda utdata från en cmdlet till ingången på en annan cmdlet. I synnerhet kan användaren mata ut resultaten av en cmdlet Get-Processtill en cmdlet Sort-Object(till exempel för att sortera processer efter handtag), sedan för Where-Objectatt filtrera bort processer som till exempel upptar mindre än 1 MB sidminne och slutligen skicka resultat till cmdleten Select-Object. för att endast välja de första 10 processerna (efter antal handtag). Pipeline-konceptet används ursprungligen på UNIX-liknande system (se Pipeline (UNIX) ), PowerShell-konceptet skiljer sig från detta. I UNIX-liknande system skickas utdata från ett kommando till nästa steg i pipelinen i binär form, det vill säga det är faktiskt en dataström. Exempel: dd if=/dev/zero bs=1M count=1M | bzip2 -z9 -c > ex.bz2där strömmen av "nollor" i block om 1 MB i mängden 1 miljon gånger (från enheten /dev/zero) av kommandot dd(kopiera specialfiler) överförs till kommandots ingång Bzip2, vilket komprimerar dem så mycket som möjligt (ur komprimeringsalgoritmens synvinkel bzip2, option -z9) och den resulterande strömmen sänder till stdout(option -с), som i sin tur omdirigeras till en ex.bz2. Resultatet av att utföra ett så relativt kort kommando kommer att vara skapandet av ett arkiv, i vilket det kommer att finnas en ström av noll byte på 1 terabyte i storlek. Processen att skapa ett sådant arkiv använder i det här fallet 2 sekventiella pipelines.

Scenarier

PowerShell innehåller ett skriptspråk med dynamiska typer som kan användas för att implementera komplexa operationer med hjälp av cmdlets. Skriptspråket stöder variabler, funktioner, förgreningskonstruktioner ( if-then-else), loopar ( while, do, foroch foreach), strukturerad felhantering och många andra funktioner, inklusive .NET-integration. Variabler i PowerShell betecknas med ett prefix $före namnet; de kan ställas in på vilket värde som helst, inklusive utdata från cmdlets. Även om språket i sig inte är starkt skrivet , lagras internt variabler med sina typer, som kan vara primitiva typer eller objekt .  Strängar kan omges av enkla citattecken eller dubbla citattecken: användning av dubbla citattecken kommer att ersätta variablerna i strängen med deras värden. Enligt variabelsyntaxen, om en filsökväg är omsluten av krulliga klammerparenteser föregås av ett dollartecken (dvs. ), kommer det att vara en referens till filens innehåll. Allt som kommer att tilldelas en sådan variabel kommer att skrivas till filen, och vice versa - när du kommer åt dess innehåll kommer innehållet i filen att visas. ${C:\foo.txt}

Du kan komma åt egenskaperna och metoderna för ett objekt med hjälp av punkten ( .) som i C# -syntaxen . PowerShell tillhandahåller speciella variabler som $args, som innehåller en array av alla namnlösa kommandoradsargument som skickas till en funktion, eller $_som refererar till det aktuella objektet i pipelines och andra konstruktioner. PowerShell har också arrayer och associativa arrayer . Dessutom utvärderar PowerShell automatiskt aritmetiska uttryck som anges på kommandoraden och förstår populära förkortningar som GB (GB), MB (MB) och KB (KB).

I PowerShell kan du skapa dina egna funktioner som tar parametrar med hjälp av function. Problemet för många nybörjare är att funktioner inte tar argument separerade med kommatecken, utan av mellanslag (som kommandoradsverktyg eller cmdlets):

  1. <function> <param1> <param2>: Anropar en funktion med två argument.

Dessa argument kan bindas till parametrar som anges i funktionsdeklarationen. De kan också nås via en array $args.

  1. <function>(<param1>, <param2>): anropar en funktion med ett argument, som är en matris med två element.

PowerShell låter dig anropa alla .NET-metoder genom att omge deras namnutrymme inom hakparenteser ( []) och sedan använda ett par kolon ( ::) för att ange en statisk metod . Till exempel [System.Console]::WriteLine("PowerShell"). Objekt skapas med cmdleten New-Objectoch du kan lägga till nya egenskaper till dem med cmdleten Add-Member.

För felhantering tillhandahåller PowerShell en mekanism baserad på .NET. Vid ett fel Exceptionreturneras objekt som innehåller information om felet ( objekt ), som fångas upp av nyckelordet trap. Felbeteendet är dock konfigurerbart. Du kan till exempel konfigurera PowerShell för att tyst fortsätta att köra i händelse av ett fel utan att fånga felet. Den andra versionen av PowerShell lade också till Try Catch Finally.

Skript skrivna i PowerShell kan sparas mellan sessioner i .PS1. Du kan sedan använda hela skriptet eller enskilda funktioner från det. Skript och funktioner används som cmdlets, det vill säga de kan vara kommandon i en pipeline och du kan skicka parametrar till dem. Objekt kan skickas transparent mellan skript, funktioner och cmdlets i en pipeline. Men att köra PowerShell-skript är inaktiverat som standard och måste aktiveras med cmdleten Set-ExecutionPolicy. PowerShell-skript kan signeras digitalt för att verifiera deras integritet.

PowerShell 2.0

Microsoft släppte PowerShell 2.0 som en del av Windows 7 och Windows Server 2008 R2. Windows PowerShell 2.0 är förinstallerat på dessa system. Undantaget är installationsläget för Windows Server 2008 R2 i Core-läge, där PowerShell 2.0 kan installeras om manuellt. För äldre plattformar är det tillgängligt som en del av Windows Management Framework. PowerShell 2.0 medför några ändringar av skriptspråket och inbäddnings-API, förutom 240 nya cmdlets.

En ofullständig lista över nya funktioner som ingår i PowerShell 2.0:

Jämförelse av cmdlets med liknande kommandon

Följande tabell innehåller ett urval av cmdlets som levereras med PowerShell, med kommandon som är så lika som möjligt från andra välkända kommandoradsskal.

Det bör noteras att denna tabell tillhandahålls för ytlig bekantskap, den täcker inte alla möjligheter för de presenterade skalen.

Windows PowerShell
(Cmdlet)
Windows PowerShell
(alias)
cmd.exe / COMMAND.COM
(MS-DOS, Windows, OS/2, etc.)
Bash
(Unix, BSD, Linux, Mac OS X, etc.)
Beskrivning
Få plats gl, pwd cd [5] pwd Visar den aktuella arbetskatalogen
Ställ in plats sl, cd, chdir cd , chdir CD Ändrar den aktuella katalogen
klar-värd cls, klart cls klar Rensar skärmen [6]
Kopiera objekt cpi, kopia, cp kopiera cp Kopierar en eller flera filer eller ett katalogträd (i PowerShell kan du även kopiera objekt från andra dataleverantörer)
Få hjälp hjälp mannen hjälp man Kommandohjälp
Ta bort sak ri, del, radera, rmdir, rd, rm del , radera , rmdir , rd rm , rmdir Tar bort en fil/katalog (eller annat objekt i PowerShell-dataleverantörer).
Byt namn på objekt rni, ren ren , byta namn mv Byter namn på en fil/katalog
Flytta objekt mi, flytta, mv flytta mv Flyttar en fil/katalog till en ny plats
Get-ChildItem gci, dir, ls dir ls Listar alla filer/kataloger i den aktuella katalogen
Skriv utdata eko, skriv eko eko Skriver ut strängar, variabler till standardutdata
Pop plats popd popd popd Ändrar den aktuella katalogen till den som senast placerades i stacken
Tryck plats pushd pushd pushd Trycker den aktuella katalogen till stacken
Ställ in variabel sv, set uppsättning uppsättning Ställa in värdet på en variabel / skapa en variabel
Få innehåll gc, typ, kat typ katt Hämtar innehållet i en fil
Välj-sträng sls finna , finna str grep Visar rader som matchar ett villkor
GetProcess gps, ps tlist, [7] uppgiftslista [8] ps Listar alla pågående processer
Stoppa process spps, döda döda , [7] taskkill [8] döda Stoppar en pågående process
Tee-objekt tee n/a tee Skickar indata till en fil eller variabel och skickar den sedan vidare i pipelinen

Se även

Anteckningar

  1. Powershell Open Source-projektet på Open Hub: Languages-sidan - 2006.
  2. PowerShell/PowerShell . GitHub. Hämtad 20 augusti 2016. Arkiverad från originalet 14 maj 2020.
  3. Beskrivning av Windows Management Framework . Hämtad 10 maj 2012. Arkiverad från originalet 14 maj 2012.
  4. ↑ Syntaxmarkering i realtid i PowerShell-konsolen "PowerShell och andra skript" Hämtad 2 november 2009. Arkiverad från originalet den 11 augusti 2010.
  5. cd utan parametrar skriver ut den aktuella katalogen.
  6. Clear-Host implementeras som en fördefinierad PowerShell-funktion.
  7. 1 2 Tillgänglig i Windows NT4, Windows 98 Resource Kit, Windows 2000 Support Tools
  8. 1 2 Tillgänglig i Windows XP Professional Edition och senare

Litteratur

Länkar