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.
Kort beskrivning
Beskriver hur du kör och skriver skript i PowerShell.
Lång beskrivning
Ett skript är en oformaterad textfil som innehåller ett eller flera PowerShell-kommandon.
PowerShell-skript har ett .ps1 filnamnstillägg.
Att köra ett skript är ungefär som att köra en cmdlet. Du skriver sökvägen och filnamnet för skriptet och använder parametrar för att skicka data och ange alternativ. Du kan köra skript på datorn eller i en fjärrsession på en annan dator.
När du skriver ett skript sparas ett kommando för senare användning och det blir enkelt att dela med andra. Det viktigaste är att du kan köra kommandona genom att skriva skriptsökvägen och filnamnet. Skript kan vara lika enkla som ett enda kommando i en fil eller så omfattande som ett komplext program.
Skript har ytterligare funktioner, såsom den speciella kommentaren #Requires, användning av parametrar, stöd för dataavsnitt och digital signering för säkerhet.
Du kan också skriva hjälpavsnitt för skript och för alla funktioner i skriptet.
Så här kör du ett skript
Innan du kan köra ett skript i Windows måste du ändra standardprincipen för PowerShell-körning. Körningsprincipen gäller inte för PowerShell som körs på plattformar som inte är Windows-plattformar.
Standardkörningsprincipen, Restricted, förhindrar att alla skript körs, inklusive skript som du skriver på den lokala datorn. Mer information finns i about_Execution_Policies.
Körningsprincipen sparas i registret, så du behöver bara ändra den en gång på varje dator.
För att ändra exekveringsprincipen, använd följande steg.
I kommandotolken skriver du:
Set-ExecutionPolicy AllSigned
eller
Set-ExecutionPolicy RemoteSigned
Ändringen träder i kraft omedelbart.
Om du vill köra ett skript skriver du det fullständiga namnet och den fullständiga sökvägen till skriptfilen.
Om du till exempel vill köra Get-ServiceLog.ps1 skriptet i katalogen C:\Scripts skriver du:
C:\Scripts\Get-ServiceLog.ps1
Om du vill köra ett skript i den aktuella katalogen skriver du sökvägen till den aktuella katalogen eller använder en punkt för att representera den aktuella katalogen, följt av en omvänt snedstreckssökväg (.\).
Om du till exempel vill köra skriptet ServicesLog.ps1 i den lokala katalogen skriver du:
.\Get-ServiceLog.ps1
Om skriptet har parametrar skriver du parametrarna och parametervärdena efter skriptfilens namn.
Följande kommando använder till exempel parametern ServiceName för skriptet Get-ServiceLog för att begära en logg över WinRM-tjänstaktivitet.
.\Get-ServiceLog.ps1 -ServiceName WinRM
Som en säkerhetsfunktion kör PowerShell inte skript när du dubbelklickar på skriptikonen i Utforskaren eller när du skriver skriptnamnet utan en fullständig sökväg, även när skriptet finns i den aktuella katalogen. Mer information om hur du kör kommandon och skript i PowerShell finns i about_Command_Precedence.
Kör med PowerShell
Från och med PowerShell 3.0 kan du köra skript från Utforskaren.
Så här använder du funktionen "Kör med PowerShell":
Kör Utforskaren, högerklicka på skriptfilens namn och välj sedan "Kör med PowerShell".
Funktionen "Kör med PowerShell" är utformad för att köra skript som inte har nödvändiga parametrar och inte returnerar utdata till kommandotolken.
Mer information finns i about_Run_With_PowerShell.
Köra skript på andra datorer
Om du vill köra ett skript på en eller flera fjärrdatorer använder du parametern FilePath i cmdleten Invoke-Command.
Ange sökvägen och filnamnet för skriptet som värdet för parametern FilePath. Skriptet måste finnas på den lokala datorn eller i en katalog som den lokala datorn kan komma åt.
Följande kommando kör skriptet Get-ServiceLog.ps1 på fjärrdatorerna med namnet Server01 och Server02.
$invokeCommandSplat = @{
ComputerName = 'Server01', 'Server02'
FilePath = 'C:\Scripts\Get-ServiceLog.ps1'
}
Invoke-Command @invokeCommandSplat
Få hjälp med skript
Cmdleten Get-Help hämtar hjälpämnena för skript samt för cmdletar och andra typer av kommandon. Om du vill få hjälpavsnittet för ett skript skriver du Get-Help följt av sökvägen och filnamnet för skriptet. Om skriptsökvägen finns i din PATH miljövariabel kan du utelämna sökvägen.
Om du till exempel vill få hjälp med skriptet ServicesLog.ps1 skriver du:
Get-Help C:\admin\scripts\ServicesLog.ps1
Skriva ett skript
Ett skript kan innehålla alla giltiga PowerShell-kommandon, inklusive enskilda kommandon, kommandon som använder pipelinen, funktioner och kontrollstrukturer som if-instruktioner och for-loopar.
Om du vill skriva ett skript öppnar du en ny fil i en textredigerare, skriver kommandona och sparar dem i en fil med ett giltigt filnamn med filnamnstillägget .ps1.
Följande exempel är ett enkelt skript som hämtar de tjänster som körs i det aktuella systemet och sparar dem i en loggfil. Loggfilnamnet skapas från det aktuella datumet.
$date = (Get-Date).DayOfYear
Get-Service | Out-File "$date.log"
Om du vill skapa det här skriptet öppnar du en textredigerare eller en skriptredigerare, skriver dessa kommandon och sparar dem sedan i en fil med namnet ServiceLog.ps1.
Parametrar i skript
Om du vill definiera parametrar i ett skript använder du en param-instruktion.
param-instruktionen måste vara den första instruktionen i ett skript, förutom kommentarer och eventuella #Requires-instruktioner.
Skriptparametrar fungerar som funktionsparametrar. Parametervärdena är tillgängliga för alla kommandon i skriptet. Alla funktioner i funktionsparametrar, inklusive parameterattributet och dess namngivna argument, är också giltiga i skript.
När skriptet körs skriver skriptanvändare parametrarna efter skriptnamnet.
I följande exempel visas ett Test-Remote.ps1 skript som har parametern ComputerName. Båda skriptfunktionerna har åtkomst till parametervärdet ComputerName.
param ($ComputerName = $(throw "ComputerName parameter is required."))
function CanPing {
$Error.Clear()
$tmp = Test-Connection $ComputerName -ErrorAction SilentlyContinue
if (!$?)
{Write-Host "Ping failed: $ComputerName."; return $false}
else
{Write-Host "Ping succeeded: $ComputerName"; return $true}
}
function CanRemote {
$s = New-PSSession $ComputerName -ErrorAction SilentlyContinue
if ($s -is [System.Management.Automation.Runspaces.PSSession])
{Write-Host "Remote test succeeded: $ComputerName."}
else
{Write-Host "Remote test failed: $ComputerName."}
}
if (CanPing $ComputerName) {CanRemote $ComputerName}
Om du vill köra det här skriptet skriver du parameternamnet efter skriptnamnet. Till exempel:
C:\PS> .\test-remote.ps1 -ComputerName Server01
Ping succeeded: Server01
Remote test failed: Server01
Mer information om param-instruktionen och funktionsparametrarna finns i about_Functions och about_Functions_Advanced_Parameters.
Hjälp med att skriva skript
Du kan skriva ett hjälpavsnitt för ett skript med någon av följande två metoder:
Comment-Based hjälp för skript
Skapa ett hjälpavsnitt med hjälp av särskilda nyckelord i kommentarerna. Om du vill skapa kommentarsbaserad hjälp för ett skript måste kommentarerna placeras i början eller slutet av skriptfilen. Mer information om kommentarsbaserad hjälp finns i about_Comment_Based_Help.
XML-Based hjälp för skript
Skapa ett XML-baserat hjälpavsnitt, till exempel den typ som vanligtvis skapas för cmdletar. XML-baserad hjälp krävs om du översätter hjälpavsnitt till flera språk.
Om du vill associera skriptet med det XML-baserade hjälpavsnittet använder du nyckelordet .EXTERNALHELP Hjälpkommentar. Mer information finns i:
Återställande av ett returvärde
Skript returnerar som standard inte någon avslutsstatus när skriptet slutar. Du måste använda exit-instruktionen för att returnera en slutkod från ett skript. Som standard returnerar exit-instruktionen 0. Du kan ange ett numeriskt värde för att returnera en annan utgångsstatus. En icke-nollavslutskod signalerar vanligtvis ett fel.
I Windows tillåts valfritt tal mellan [int]::MinValue och [int]::MaxValue.
På Unix tillåts endast positiva tal mellan [byte]::MinValue (0) och [byte]::MaxValue (255). Ett negativt tal i intervallet för -1 via -255 översätts automatiskt till ett positivt tal genom att lägga till 256. Till exempel omvandlas -2 till 254.
I PowerShell anger exit-instruktionen värdet för variabeln $LASTEXITCODE. I Windows Command Shell (cmd.exe) anger exit-instruktionen värdet för miljövariabeln %ERRORLEVEL%.
Alla argument som inte är numeriska eller utanför det plattformsspecifika intervallet översätts till värdet för 0.
Skriptomfång och punktkällor
Varje skript körs i sitt eget omfång. De funktioner, variabler, alias och enheter som skapas i skriptet finns bara i skriptomfånget. Du kan inte komma åt dessa objekt eller deras värden i det omfång där skriptet körs.
För att köra ett skript i ett annat omfång kan du ange ett omfång, som Globalt eller Lokalt, eller använda punktkällkodning av skriptet.
Med funktionen dot sourcing kan du köra ett skript i det aktuella omfånget i stället för i skriptomfånget. När du kör ett skript som är punktkällat (dot sourced), körs kommandona i skriptet som om du hade skrivit dem vid kommandoraden. De funktioner, variabler, alias och enheter som skriptet skapar skapas i det omfång som du arbetar i. När skriptet har körts kan du använda de skapade objekten och komma åt deras värden i sessionen.
Om du vill pricka ett skript skriver du en punkt (.) och ett blanksteg före skriptsökvägen.
Till exempel:
. C:\scripts\UtilityFunctions.ps1
eller
. .\UtilityFunctions.ps1
När UtilityFunctions.ps1 skriptet har körts läggs de funktioner och variabler som skriptet skapar till i det aktuella omfånget.
Till exempel skapar UtilityFunctions.ps1-skriptet funktionen New-Profile och variabeln $ProfileName.
#In UtilityFunctions.ps1
function New-Profile
{
Write-Host "Running New-Profile function"
$profileName = Split-Path $PROFILE -Leaf
if (Test-Path $PROFILE)
{Write-Error "Profile $profileName already exists on this computer."}
else
{New-Item -Type File -Path $PROFILE -Force }
}
Om du kör UtilityFunctions.ps1-skriptet i ett eget skriptomfång finns funktionen New-Profile och variabeln $ProfileName bara när skriptet körs. När skriptet avslutas tas funktionen och variabeln bort, enligt följande exempel.
C:\PS> .\UtilityFunctions.ps1
C:\PS> New-Profile
The term 'New-Profile' is not recognized as a cmdlet, function, operable
program, or script file. Verify the term and try again.
At line:1 char:12
+ New-Profile <<<<
+ CategoryInfo : ObjectNotFound: (New-Profile:String) [],
+ FullyQualifiedErrorId : CommandNotFoundException
C:\PS> $profileName
C:\PS>
När du dot-källar skriptet och kör det, skapar skriptet New-Profile-funktionen och variabeln $ProfileName i din session och i din variabelsvit. När skriptet har körts kan du använda funktionen New-Profile i sessionen, som du ser i följande exempel.
C:\PS> . .\UtilityFunctions.ps1
C:\PS> New-Profile
Directory: C:\Users\juneb\Documents\WindowsPowerShell
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a--- 1/14/2009 3:08 PM 0 Microsoft.PowerShellISE_profile.ps1
C:\PS> $profileName
Microsoft.PowerShellISE_profile.ps1
Mer information om räckvidd hittar du i about_Scopes.
Skript i moduler
En modul är en uppsättning relaterade PowerShell-resurser som kan distribueras som en enhet. Du kan använda moduler för att organisera skript, funktioner och andra resurser. Du kan också använda moduler för att distribuera koden till andra och för att hämta kod från betrodda källor.
Du kan inkludera skript i dina moduler eller skapa en skriptmodul, som är en modul som helt eller främst består av ett skript och stödresurser. En skriptmodul är bara ett skript med ett .psm1 filnamnstillägg.
Mer information om moduler finns i about_Modules.
Andra skriptfunktioner
PowerShell har många användbara funktioner som du kan använda i skript.
#Requires– Du kan använda en#Requires-instruktion för att förhindra att ett skript körs utan angivna moduler eller snapin-moduler och en angiven version av PowerShell. Mer information finns i about_Requires.$PSCommandPath– Innehåller den fullständiga sökvägen och namnet på skriptet som körs. Den här parametern är giltig i alla skript. Den här automatiska variabeln introduceras i PowerShell 3.0.$PSScriptRoot– Innehåller katalogen som ett skript körs från. I PowerShell 2.0 är den här variabeln endast giltig i skriptmoduler (.psm1). Från och med PowerShell 3.0 är det giltigt i alla skript.$MyInvocation– Den$MyInvocationautomatiska variabeln innehåller information om det aktuella skriptet, inklusive information om hur det startades eller "anropades". Du kan använda den här variabeln och dess egenskaper för att hämta information om skriptet medan det körs. Till exempel$MyInvocation. Variabeln MyCommand.Path innehåller sökvägen och filnamnet för skriptet.$MyInvocation. Raden innehåller kommandot som startade skriptet, inklusive alla parametrar och värden.Från och med PowerShell 3.0 har
$MyInvocationtvå nya egenskaper som ger information om skriptet som anropade eller startade det aktuella skriptet. Värdena för dessa egenskaper fylls bara i när anroparen eller uppringaren är ett skript.PSCommandPath innehåller den fullständiga sökvägen och namnet på skriptet som anropade det aktuella skriptet.
PSScriptRoot innehåller katalogen för skriptet som anropade eller initierade det aktuella skriptet.
Till skillnad från
$PSCommandPathoch$PSScriptRootautomatiska variabler, som innehåller information om det aktuella skriptet, innehåller PSCommandPath och PSScriptRoot egenskaper för$MyInvocationvariabeln information om skriptet som anropade det aktuella skriptet.Dataavsnitt – Du kan använda nyckelordet
Dataför att separera data från logik i skript. Dataavsnitt kan också göra lokalisering enklare. Mer information finns i about_Data_Sections och about_Script_Internationalization.Skriptsignering – Du kan lägga till en digital signatur i ett skript. Beroende på körningsprincipen kan du använda digitala signaturer för att begränsa körningen av skript som kan innehålla osäkra kommandon. Mer information finns i about_Execution_Policies och about_Signing.