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.
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).
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 ä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.
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.
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):
Dessa argument kan bindas till parametrar som anges i funktionsdeklarationen. De kan också nås via en array $args.
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.
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:
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 |
.NETTO | |
---|---|
Genomföranden | |
Arkitektur | |
Infrastruktur | |
Microsofts språk | |
Andra språk | |
Windows Foundations | |
Komponenter | |
Jämförelser |
|
Framtida teknologier | |
Informationsresurser |
Gratis och öppen källkod från Microsoft | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
allmän information |
| ||||||||||||
Programvara _ |
| ||||||||||||
Licenser | |||||||||||||
Relaterade ämnen |
| ||||||||||||
Kategori |