Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
PowerShell är ett kommandoradsgränssnitt och ett skriptspråk som används för automatisering. På samma sätt som andra gränssnitt, till exempel bash i Linux eller Windows Command Shell (cmd.exe), kan du med PowerShell köra alla kommandon som är tillgängliga i systemet, inte bara PowerShell-kommandon.
Typer av kommandon
För alla gränssnitt i alla operativsystem finns det tre typer av kommandon:
Nyckelord för Shell-språk ingår i gränssnittets skriptspråk.
- Exempel på
bashnyckelord är:if,then,else,elifochfi. - Exempel på
cmd.exenyckelord är:dir,copy,move,ifochecho. - Exempel på PowerShell-nyckelord är:
for,foreach,try,catchochtrap.
Nyckelord för shell-språk kan bara användas inom skalets körmiljö. Det finns ingen körbar fil, utanför gränssnittet, som tillhandahåller nyckelordets funktioner.
- Exempel på
os-interna kommandon är körbara filer installerade i operativsystemet. Körbara filer kan köras från valfritt kommandoradsgränssnitt, till exempel PowerShell. Detta inkluderar skriptfiler som kräver att andra skal fungerar korrekt. Om du till exempel kör ett Windows-batchskript (
.cmdfil) i PowerShell, kör PowerShellcmd.exeoch skickar in batchfilen för körning.Shell-miljöspecifika kommandon är kommandon som definieras i externa filer och som endast kan användas i körmiljön för skalet. Detta omfattar skript, funktioner och moduler som lägger till kommandon i shell-körningen. I PowerShell kallas dessa kommandon som en modul lägger till cmdlets (uttalas som "command-lets").
Köra inbyggda kommandon
Alla interna kommandon kan köras från PowerShell-kommandoraden. Vanligtvis kör du kommandot precis som i bash eller cmd.exe. I följande exempel visas körning av kommandot grep i bash på Ubuntu Linux.
sdwheeler@circumflex:~$ grep sdwheeler /etc/passwd
sdwheeler:x:1000:1000:,,,:/home/sdwheeler:/bin/bash
sdwheeler@circumflex:~$ pwsh
PowerShell 7.2.6
Copyright (c) Microsoft Corporation.
https://aka.ms/powershell
Type 'help' to get help.
När du har startat PowerShell på Ubuntu kan du köra samma kommando från PowerShell-kommandoraden:
PS /home/sdwheeler> grep sdwheeler /etc/passwd
sdwheeler:x:1000:1000:,,,:/home/sdwheeler:/bin/bash
Skicka argument till interna kommandon
De flesta gränssnitt innehåller funktioner för att använda variabler, utvärdera uttryck och hantera strängar. Men varje skal gör dessa saker på olika sätt. I PowerShell börjar alla parametrar med ett bindestreck (-) tecken. I cmd.exeanvänder de flesta kommandoparametrar ett snedstreck (/)-tecken. Andra verktyg för kommandoraden kan använda blanksteg, bindestreck, dubbelstreck (--).
Varje gränssnitt har sitt eget sätt att hantera och utvärdera strängar på kommandoraden. När du kör interna kommandon i PowerShell som förväntar sig att strängar ska citeras på ett visst sätt kan du behöva justera hur du skickar dessa strängar.
Mer information finns i följande artiklar:
PowerShell 7.2 introducerade en ny experimentell funktion PSNativeCommandArgumentPassing som förbättrade den interna kommandohanteringen. Mer information finns i $PSNativeCommandArgumentPassing.
Hantera utdata och fel
PowerShell har också flera fler utdataströmmar än andra gränssnitt. Skalen bash och cmd.exe har stdout och stderr. PowerShell har sex utdataströmmar. Mer information finns i about_Redirection och about_Output_Streams.
I allmänhet skickas utdata som skickas till stdout- av ett internt kommando till Success-strömmen i PowerShell. Utdata som skickas till stderr med ett internt kommando skickas till Fel ström i PowerShell.
När ett internt kommando har en slutkod som inte är noll anges $? till $false. Om slutkoden är noll är $? inställd på $true.
PowerShell 7.2 har dock ändrat det här beteendet. Felposter som omdirigeras från interna kommandon, till exempel när du använder omdirigeringsoperatorer (2>&1), skrivs inte till PowerShells $Error variabel och inställningsvariabeln $ErrorActionPreference påverkar inte de omdirigerade utdata.
Många inbyggda kommandon skriver till stderr som en alternativ ström för ytterligare information. Det här beteendet kan orsaka förvirring i PowerShell när du tittar igenom fel och ytterligare utdatainformation kan gå förlorad om $ErrorActionPreference är inställt på ett tillstånd som stänger av utdata.
PowerShell 7.3 har lagt till en ny experimentell funktion PSNativeCommandErrorActionPreference som gör att du kan styra hur du hanterar slutkoder som inte är noll från interna kommandon. Mer information finns i $PSNativeCommandUseErrorActionPreference.
Köra PowerShell-kommandon
Som tidigare nämnts kallas PowerShell-kommandon för cmdletar. Cmdlets samlas i PowerShell-moduler som kan laddas in på begäran. Cmdletar kan skrivas på alla kompilerade .NET-språk eller med hjälp av själva PowerShell-skriptspråket.
PowerShell-kommandon som kör andra kommandon
Med PowerShell--anropsoperatorn (&) kan du köra kommandon som lagras i variabler och representeras av strängar eller skriptblock. Du kan använda operatorn för att köra valfritt internt kommando eller PowerShell-kommando. Detta är användbart i ett skript när du dynamiskt behöver konstruera kommandoradsparametrarna för ett internt kommando. För mer information, se operatören för samtal.
Cmdleten Start-Process kan användas för att köra interna kommandon, men bör endast användas när du behöver styra hur kommandot körs. Cmdleten har parametrar som stöder följande scenarier:
- Kör ett kommando med olika autentiseringsuppgifter
- Dölj konsolfönstret som skapats av den nya processen
- Omdirigera strömmarna för stdin, stdoutoch stderr.
- Använda en annan arbetskatalog för kommandot
I följande exempel körs det interna kommandot sort.exe med omdirigerade indata- och utdataströmmar.
$processOptions = @{
FilePath = "sort.exe"
RedirectStandardInput = "TestSort.txt"
RedirectStandardOutput = "Sorted.txt"
RedirectStandardError = "SortError.txt"
UseNewEnvironment = $true
}
Start-Process @processOptions
Mer information finns i Start-Process.
I Windows utför cmdleten Invoke-Item standardåtgärden för det angivna objektet. Den kör till exempel en körbar fil eller öppnar en dokumentfil med hjälp av det program som är associerat med dokumentfiltypen. Standardåtgärden beror på vilken typ av objekt och PowerShell-provider som ger åtkomst till objektet.
I följande exempel öppnas PowerShell-källkodslagringsplatsen i standardwebbläsaren.
Invoke-Item https://github.com/PowerShell/PowerShell
Mer information finns i Invoke-Item.