PowerShell

Den aktuelle version af siden er endnu ikke blevet gennemgået af erfarne bidragydere og kan afvige væsentligt fra den version , der blev gennemgået den 20. juli 2021; checks kræver 16 redigeringer .
Windows PowerShell

Session i Windows PowerShell
Type Operativsystem skal
Udvikler Microsoft
Skrevet 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ørste udgave 14. november 2006
Hardware platform x86 , x86-64 , Itanium , ARM
nyeste version 7.2.5 ( 21. juni 2022 )
Test version 7.3.0-preview.5 ( 22. juni 2022 )
Læsbare filformater 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] og PowerShell Cmdlet Definition XML [d]
Genererede filformater 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] og PowerShell Cmdlet Definition XML [d]
Licens MIT licens
Internet side docs.microsoft.com/en-us...
 Mediefiler på Wikimedia Commons

PowerShell er et open source-  udvidbart automatiseringsværktøj fra Microsoft [2] , der består af en shell med en kommandolinjegrænseflade og et tilhørende scriptsprog . Sproget blev første gang demonstreret offentligt på Professional Developers Conference (PDC) i september 2003  , kodenavnet Monad. Værktøjet blev oprindeligt udgivet som en Windows -funktion kaldet Windows PowerShell . Open source blev frigivet med starten af ​​PowerShell Core -udviklingen i august 2016 .

Windows PowerShell 2.0 blev udgivet med Windows 7 , Windows 8 og Windows Server 2008 R2 , samt Windows Server 2012 R2 som en integreret systemkomponent. Derudover er den anden version også tilgængelig til andre systemer såsom Windows XP SP3, Windows Server 2003 SP2, Windows Vista SP1, Windows Vista SP2, Windows Server 2008 [3] og Windows Server 2012.

PowerShell blev oprindeligt bygget på og integreret med Microsoft .NET Framework og senere på .NET . Derudover giver PowerShell nem adgang til COM , WMI og ADSI , samt muligheden for at udføre almindelige kommandolinjekommandoer for at skabe et enkelt miljø, hvor administratorer kan udføre forskellige opgaver på lokale og eksterne systemer.

Disse administrative opgaver udføres typisk ved hjælp af cmdlets (oprindeligt "cmdlets" ), som er specialiserede .NET- klasser . Brugeren kan kombinere dem i scripts (scripts) ved hjælp af forskellige konstruktioner, kommandolinjeværktøjer og kald til almindelige .NET-klasser, WMI- eller COM - objekter . Derudover kan du bruge forskellige datalagre, såsom filsystemet eller Windows-registreringsdatabasen , som leveres af PowerShell gennem udbydere ( engelske udbydere ).  

PowerShell giver også en indlejringsmekanisme, hvorigennem PowerShell-eksekverbare filer kan indlejres i andre applikationer. Disse applikationer kan derefter bruge PowerShell-funktionalitet til at implementere en række operationer, inklusive dem, der leveres via en grafisk grænseflade. Denne tilgang er taget i Microsoft Exchange Server 2007 for at implementere administrationsfunktionalitet i form af PowerShell-cmdlets og grafiske administrationsværktøjer i form af PowerShell-skaller, der påkalder de nødvendige cmdlets. Dermed er den grafiske styringsgrænseflade oven på mellemlaget - PowerShell. Andre Microsoft-applikationer, herunder Microsoft SQL Server 2008 , System Center Operations Manager og System Center Data Protection Manager , giver også adgang til deres administrationsgrænseflader gennem PowerShell-cmdlets.

PowerShell har sin egen udvidelsesvenlige hjælp tilgængelig (inklusive fra kommandolinjen) via Get-Help.

Baggrund

Hver frigivet version af MS-DOS og Microsoft Windows til personlige computere indeholdt et hjælpeprogram, der gav en kommandolinjegrænseflade. Disse var COMMAND.COM(på MS-DOS-baserede systemer, inklusive Windows 9x ) og cmd.exe(på Windows NT -familiesystemer ). Disse var almindelige kommandolinjetolke med kun få grundlæggende kommandoer. Andre opgaver krævede separate konsolapplikationer, der blev kaldt fra disse skaller. De havde også et scriptsprog ( batch-filer ), som de kunne automatisere forskellige opgaver med. Disse tolke var dog ikke egnede til fuld automatisering – dels fordi de manglede ækvivalenter til mange GUI-operationer, og også på grund af scriptsprogets svage funktionalitet, som ikke tillod at beskrive tilstrækkeligt komplekse algoritmer. I Windows Server 2003 blev situationen forbedret, men scripting-understøttelse blev stadig anset for utilstrækkelig.

Microsoft forsøgte at løse nogle af disse mangler med Windows Script Host , udgivet i 1998 med Windows 98 , og et kommandolinjeværktøj cscript.exe. Det integreres med Active Script og tillader scripting på kompatible sprog såsom JScript og VBScript ved hjælp af API'er leveret af applikationer gennem Component Object Model (COM). Denne løsning har dog sine ulemper. Windows Script Host er ikke integreret med skallen, der er ingen indbygget dokumentation. Forskellige versioner af Windows leverer også skaller til specielle formål (såsom netsh.exeWMIC ) med deres egne kommandosæt. De er ikke integreret med skallen og giver ikke interoperabilitet.

I 2003 begyndte Microsoft at udvikle en ny shell kaldet Monad (også kendt som Microsoft Shell eller MSH). Monad skulle være en ny, udvidelig kommandolinjeskal med et nyt design, der ville automatisere en hel række af administrative opgaver. Microsoft udgav den første offentlige beta af Monad den 17. juni 2005. Den anden og tredje betaversion blev udgivet henholdsvis den 11. september 2005 og den 10. januar 2006. Den 25. april 2006 blev det annonceret, at Monad var blevet omdøbt til Windows PowerShell for at placere det som en væsentlig del af deres ledelsesteknologier. Samtidig blev Release Candidate 1 udgivet. Release Candidate 2 fulgte den 26. september 2006. Den endelige version (Release to Web, RTW) blev udgivet den 14. november 2006 til Windows XP SP2 og Windows 2003. Den endelige version til Windows Vista blev først tilgængelig den 30. januar 2007.

Den seneste fællesskabsteknologi-preview- udgivelse af Windows PowerShell version 2.0 blev udgivet i december 2008. Den endelige version af den anden version af PowerShell blev udgivet på Windows 7 og Windows Server 2008 R2 på samme tid, som de blev udgivet. For andre systemer (Windows XP, Windows Server 2003, Windows Vista, Windows Server 2008) blev PowerShell 2 tilgængelig som en del af Windows Management Framework den 27. oktober 2009. Ud over Windows PowerShell version 2 indeholder denne pakke også WinRM version 2.0 og BITS 4.0 (sidstnævnte er kun tilgængelig til Windows Vista og Windows 2008; den er indbygget i Windows 7 og Windows Server 2008 R2).

Oversigt

Kommandoer, der kører i Windows PowerShell, kan være i form af cmdlet'er, som er specialiserede .NET- klasser designet til at give funktionalitet i PowerShell som PowerShell-scripts ( .PS1), eller de kan være almindelige eksekverbare filer . Hvis kommandoen er en eksekverbar fil, så kører PowerShell den i en separat proces; hvis det er en kommando, så udføres den inde i PowerShell-processen. PowerShell giver en kommandolinjegrænseflade, hvor du kan indtaste kommandoer og vise deres output som tekst. Denne brugergrænseflade, som er baseret på standard Windows -konsolmekanismen , giver en brugerdefinerbar kommandofuldførelsesmekanisme, men giver ikke syntaksfremhævning, selvom den kan leveres, hvis det ønskes [4] . I PowerShell kan du også oprette aliaser ( eng.  alias ) for cmdlets, der, når de kaldes, konverteres til originale kommandoer. Derudover understøttes positionelle og navngivne parametre for cmdlet'er. Når du kører en cmdlet, udføres arbejdet med at binde argumentværdier til parametre af PowerShell selv, men når du kalder eksterne eksekverbare filer, sendes argumenterne til dem til parsing.

Et andet koncept, der bruges i PowerShell, er en pipeline .  Ligesom pipelines i UNIX er de designet til at kombinere flere kommandoer ved at sende outputtet fra en kommando til inputtet af en anden kommando ved hjælp af . Men i modsætning til sin pendant i UNIX, er PowerShell-pipelinen fuldstændigt objekt , det vil sige, data mellem cmdlets overføres som fuldgyldige objekter af de relevante typer og ikke som en strøm af bytes. Når data sendes som objekter, bevarer de elementer, de indeholder, deres struktur og typer på tværs af cmdlets uden behov for nogen serialisering eller tegn-for-tegn-parsing af dataene. Objektet kan også indeholde nogle funktioner designet til at arbejde med data. De gøres også tilgængelige for den cmdlet, der modtager dem. Outputtet fra den sidste cmdlet i PowerShell-pipelinen sendes automatisk til cmdlet'en , som skaber en tekstlig repræsentation af objekterne og de data, de indeholder, og viser dem på skærmen. |Write-Host

Fordi alle PowerShell-objekter er .NET-objekter, indeholder de en metode .ToString(), der returnerer en tekstlig repræsentation af objektets data. PowerShell bruger denne metode til at konvertere et objekt til tekst. Derudover giver det dig mulighed for at angive formateringsregler, så den tekstlige repræsentation af objekter kan tilpasses. Men af ​​kompatibilitetsårsager, hvis en ekstern eksekverbar bruges i en pipeline, modtager den en tekststrøm, der repræsenterer objektet og integreres ikke med PowerShell-typen.

Extended Type System (ETS) PowerShell er baseret på .NET-systemet, men implementerer nogle tilføjelser .  For eksempel giver det dig mulighed for at oprette forskellige repræsentationer af objekter, der kun viser nogle af deres egenskaber og metoder, samt anvende specielle formaterings- og sorteringsmekanismer. Disse visninger er bundet til de originale objekter ved hjælp af konfigurationsfiler i XML-format .

Cmdlets

Cmdlets er specialiserede PowerShell-kommandoer, der implementerer forskellige funktioner .  Disse er indbyggede kommandoer i PowerShell. Cmdlets navngives i henhold til reglen , for eksempel, så deres formål tydeligt fremgår af navnet. Cmdlets output resultater som objekter eller samlinger af dem. Derudover kan cmdlets modtage input i samme form og følgelig bruges som modtagere i pipelinen. Mens PowerShell giver dig mulighed for at røre arrays og andre samlinger, behandler cmdlet'er altid objekter ét ad gangen. For en samling af objekter kaldes cmdlet-behandleren på hvert objekt i samlingen på skift. Глагол-СуществительноеGet-ChildItem

Objektforekomster oprettes i PowerShell og køres af det, når det kaldes. Cmdlet'er nedarves fra Cmdleteller fra PSCmdlet, og sidstnævnte bruges, når cmdlet'en skal interagere med den eksekverbare del af PowerShell ( PowerShell runtime ) .  Disse basisklasser specificerer nogle metoder - og mindst én af hvilke cmdlet-implementeringen skal overskrive for at give dens funktionalitet. Hver gang cmdlet'en køres, kaldes disse metoder på skift af PowerShell. Først kaldes , så hvis data sendes til cmdlet'en gennem pipelinen, for hvert element, og til allersidst - . En klasse, der implementerer , skal have én .NET-attribut , , der specificerer verbet og substantivet, der udgør navnet på cmdlet'en. Populære verber præsenteres i form af en opregning ( eng. enum ). BeginProcessing()ProcessRecord()EndProcessing()BeginProcessing()ProcessRecord()EndProcessing()CmdletCmdletAttribute 

Cmdlet-implementeringer kan kalde enhver tilgængelig .NET API og kan skrives på ethvert .NET-sprog. PowerShell giver også nogle ekstra API'er, såsom WriteObject(), som er nødvendige for at få adgang til PowerShell-specifik funktionalitet, såsom output af resultatobjekter til en pipeline. Cmdlets kan bruge API'er til at få direkte adgang til data, eller de kan bruge PowerShells udbyderramme til at  få adgang til datalagre gennem unikke stier. Datalagre er repræsenteret gennem drevbogstaver og en hierarkisk mappestruktur i dem. Windows PowerShell leveres med udbydere til filsystemet , Windows-registreringsdatabasen , certifikatlageret og kommando-, variabel- og funktionsaliasser. Andre applikationer kan tilføje deres egne cmdlets og udbydere for at få adgang til deres datalagre.

PowerShell 2.0 tilføjede muligheden for at oprette cmdlets i selve PowerShell uden at bruge .NET-sprog.

Transportør

PowerShell har ligesom UNIX/Linux-skaller en pipeline. Denne pipeline bruges til at overføre output fra en cmdlet til input fra en anden cmdlet. Især kan brugeren udsende resultaterne af en cmdlet Get-Processtil en cmdlet Sort-Object(for eksempel for at sortere processer efter håndtag), derefter til Where-Objectat filtrere processer fra, der for eksempel optager mindre end 1 MB sidehukommelse , og til sidst videregive resultater til cmdlet Select-Object. for kun at vælge de første 10 processer (efter antal håndtag). Pipeline-konceptet er oprindeligt brugt på UNIX-lignende systemer (se Pipeline (UNIX) ), PowerShell-konceptet er anderledes end dette. I UNIX-lignende systemer sendes outputtet af en kommando til næste fase af pipelinen i binær form, det vil sige, at det faktisk er en datastrøm. Eksempel: dd if=/dev/zero bs=1M count=1M | bzip2 -z9 -c > ex.bz2hvor strømmen af ​​"nuller" i blokke på 1 MB i mængden af ​​1 million gange (fra enheden /dev/zero) ved kommandoen dd(kopiering af specielle filer) overføres til kommandoens input Bzip2, som komprimerer dem så meget som muligt (fra komprimeringsalgoritmens synspunkt bzip2, option -z9) og den resulterende strøm transmitterer til stdout(option -с), som igen omdirigeres til en ex.bz2. Resultatet af at udføre en sådan relativt kort kommando vil være oprettelsen af ​​et arkiv, inde i hvilket der vil være en strøm af nul bytes på 1 terabyte i størrelse. Processen med at oprette et sådant arkiv bruger i dette tilfælde 2 sekventielle pipelines.

Scenarier

PowerShell inkluderer et scriptsprog med dynamiske typer , der kan bruges til at implementere komplekse operationer ved hjælp af cmdlets. Scriptsproget understøtter variabler, funktioner, forgreningskonstruktioner ( if-then-else), loops ( while, do, forog foreach), struktureret fejlhåndtering og mange andre funktioner, herunder .NET-integration. Variabler i PowerShell er angivet med et præfiks $før navnet; de kan indstilles til enhver værdi, inklusive output fra cmdlet'er. Selvom sproget i sig selv ikke er stærkt skrevet , lagres interne variabler med deres typer, som kan være primitive typer eller objekter .  Strenge kan være omgivet af enkelte anførselstegn eller dobbelte anførselstegn: Brug af dobbelte anførselstegn vil erstatte variablerne i strengen med deres værdier. Ifølge den variable syntaks, hvis en filsti er omgivet af krøllede parenteser foran et dollartegn (dvs. ), så vil det være en reference til indholdet af filen. Alt, der vil blive tildelt til en sådan variabel, vil blive skrevet til filen, og omvendt - når du får adgang til dens indhold, vil indholdet af filen blive vist. ${C:\foo.txt}

Du kan få adgang til et objekts egenskaber og metoder ved at bruge prikken ( .) som i C# -syntaks . PowerShell leverer specielle variabler såsom $args, som indeholder en matrix af alle unavngivne kommandolinjeargumenter, der sendes til en funktion, eller $_som refererer til det aktuelle objekt i pipelines og andre konstruktioner. PowerShell har også arrays og associative arrays . Derudover evaluerer PowerShell automatisk aritmetiske udtryk indtastet på kommandolinjen og forstår populære forkortelser som GB (GB), MB (MB) og KB (KB).

I PowerShell kan du oprette dine egne funktioner, der tager parametre ved hjælp af function. Problemet for mange begyndere er, at funktioner ikke tager argumenter adskilt af kommaer, men af ​​mellemrum (som kommandolinjeværktøjer eller cmdlets):

  1. <function> <param1> <param2>: Kalder en funktion med to argumenter.

Disse argumenter kan bindes til parametre specificeret i funktionsdeklarationen. De kan også tilgås via et array $args.

  1. <function>(<param1>, <param2>): kalder en funktion med ét argument, som er en matrix af to elementer.

PowerShell giver dig mulighed for at kalde alle .NET-metoder ved at omslutte deres navneområde i firkantede parenteser ( []) og derefter bruge et par koloner ( ::) til at angive en statisk metode . For eksempel [System.Console]::WriteLine("PowerShell"). Objekter oprettes ved hjælp af cmdlet'en New-Object, og du kan tilføje nye egenskaber til dem ved hjælp af cmdlet'en Add-Member.

Til fejlhåndtering giver PowerShell en mekanisme baseret på .NET. I tilfælde af en fejl returneres objekter, der indeholder information om fejlen ( objekt Exception), som opsnappes af nøgleordet trap. Fejladfærden kan dog konfigureres. For eksempel kan du konfigurere PowerShell til stille og roligt at fortsætte med at udføre i tilfælde af en fejl uden at fange fejlen. Den anden version af PowerShell tilføjede også Try Catch Finally.

Scripts skrevet i PowerShell kan gemmes mellem sessioner i .PS1. Du kan derefter bruge hele scriptet eller individuelle funktioner fra det. Scripts og funktioner bruges som cmdlets, det vil sige, de kan være kommandoer i en pipeline, og du kan sende parametre til dem. Objekter kan overføres gennemsigtigt mellem scripts, funktioner og cmdlets i en pipeline. Kørsel af PowerShell-scripts er dog deaktiveret som standard og skal aktiveres ved hjælp af cmdlet Set-ExecutionPolicy. PowerShell-scripts kan signeres digitalt for at bekræfte deres integritet.

PowerShell 2.0

Microsoft udgav PowerShell 2.0 som en del af Windows 7 og Windows Server 2008 R2. Windows PowerShell 2.0 er forudinstalleret på disse systemer. Undtagelsen er installationstilstanden for Windows Server 2008 R2 i kernetilstand, hvor PowerShell 2.0 kan geninstalleres manuelt. For ældre platforme er den tilgængelig som en del af Windows Management Framework. PowerShell 2.0 bringer nogle ændringer til scriptsproget og indlejrings-API'et ud over 240 nye cmdlets.

En delvis liste over nye funktioner inkluderet i PowerShell 2.0:

Sammenligning af cmdlets med lignende kommandoer

Følgende tabel indeholder et udvalg af de cmdlets, der leveres med PowerShell, med kommandoer, der ligner så meget som muligt fra andre velkendte kommandolinjeskaller.

Det skal bemærkes, at denne tabel er beregnet til overfladisk bekendtskab, den dækker ikke alle mulighederne for de præsenterede skaller.

Windows PowerShell
(Cmdlet)
Windows PowerShell
(alias)
cmd.exe / COMMAND.COM
(MS-DOS, Windows, OS/2 osv.)
Bash
(Unix, BSD, Linux, Mac OS X osv.)
Beskrivelse
Få placering gl, pwd cd [5] pwd Viser den aktuelle arbejdsmappe
Indstil placering sl, cd, chdir cd , chdir cd Ændrer den aktuelle mappe
klar-vært cls, klar cls klar Rydder skærmen [6]
Kopiér vare cpi, kopi, cp kopi cp Kopierer en eller flere filer eller et mappetræ (i PowerShell kan du også kopiere objekter fra andre dataudbydere)
Få hjælp hjælpe mand Hjælp mand Kommandohjælp
Fjern-vare ri, del, slet, rmdir, rd, rm del , slet , rmdir , rd rm , rmdir Sletter en fil/mappe (eller andet element i PowerShell-dataudbydere).
Omdøb-vare rni, ren ren , omdøbe mv Omdøber en fil/mappe
Flyt element mi, flytte, mv bevæge sig mv Flytter en fil/mappe til en ny placering
Get-ChildItem gci, dir, ls dir ls Viser alle filer/mapper i den aktuelle mappe
Skriv output ekko, skriv ekko ekko Udskriver strenge, variabler til standardoutput
Pop beliggenhed popd popd popd Ændrer den aktuelle mappe til den, der sidst blev placeret på stakken
Skub placering skubbet skubbet skubbet Skubber den aktuelle mappe ind på stakken
Indstil variabel sv, sæt sæt sæt Indstilling af værdien af ​​en variabel / oprettelse af en variabel
Hent indhold gc, type, kat type kat Henter indholdet af en fil
Vælg-streng sls finde , finde str grep Viser linjer, der matcher en betingelse
GetProcess gps, ps tlist, [7] opgaveliste [8] ps Viser alle kørende processer
Stop proces spps, dræb dræbe , [7] opgavedræb [8] dræbe Stopper en kørende proces
Tee-objekt tee n/a tee Sender input til en fil eller variabel og sender den derefter længere nede i pipelinen

Se også

Noter

  1. Powershell Open Source-projektet på Open Hub: Languages-side - 2006.
  2. PowerShell/PowerShell . GitHub. Hentet 20. august 2016. Arkiveret fra originalen 14. maj 2020.
  3. Beskrivelse af Windows Management Framework . Hentet 10. maj 2012. Arkiveret fra originalen 14. maj 2012.
  4. Syntaksfremhævning i realtid i PowerShell-konsollen "PowerShell og andre scripts" Hentet 2. november 2009. Arkiveret fra originalen 11. august 2010.
  5. cd uden parametre udskriver den aktuelle mappe.
  6. Clear-Host er implementeret som en foruddefineret PowerShell-funktion.
  7. 1 2 Tilgængelig i Windows NT4, Windows 98 Resource Kit, Windows 2000 Supportværktøjer
  8. 1 2 Tilgængelig i Windows XP Professional Edition og nyere

Litteratur

Links