about_Scripts
Korte beschrijving
Beschrijft hoe u scripts kunt uitvoeren en schrijven in PowerShell.
Lange beschrijving
Een script is een bestand met tekst zonder tekst dat een of meer PowerShell-opdrachten bevat.
PowerShell-scripts hebben een .ps1 bestandsextensie.
Het uitvoeren van een script lijkt veel op het uitvoeren van een cmdlet. U typt het pad en de bestandsnaam van het script en gebruikt parameters om gegevens in te dienen en opties in te stellen. U kunt scripts uitvoeren op uw computer of in een externe sessie op een andere computer.
Als u een script schrijft, wordt een opdracht op slaat voor later gebruik en kunt u deze eenvoudig delen met anderen. Het belangrijkste is dat u hiermee de opdrachten eenvoudig kunt uitvoeren door het scriptpad en de bestandsnaam te typen. Scripts kunnen zo eenvoudig zijn als één opdracht in een bestand of zo uitgebreid als een complex programma.
Scripts hebben aanvullende functies, zoals de speciale opmerking, het gebruik van parameters, ondersteuning voor #Requires gegevenssecties en digitale ondertekening voor beveiliging.
U kunt ook Help-onderwerpen schrijven voor scripts en voor functies in het script.
Een script uitvoeren
Voordat u een script kunt uitvoeren op Windows, moet u het standaarduitvoeringsbeleid van PowerShell wijzigen. Uitvoeringsbeleid is niet van toepassing op PowerShell dat wordt uitgevoerd op niet-Windows platformen.
Het standaarduitvoeringsbeleid, , voorkomt dat alle scripts worden uitgevoerd, inclusief Restricted scripts die u op de lokale computer schrijft. Zie voor meer informatie about_Execution_Policies.
Het uitvoeringsbeleid wordt opgeslagen in het register, dus u hoeft het slechts één keer op elke computer te wijzigen.
Gebruik de volgende procedure om het uitvoeringsbeleid te wijzigen.
Typ in de opdrachtprompt:
Set-ExecutionPolicy AllSigned
of
Set-ExecutionPolicy RemoteSigned
De wijziging wordt onmiddellijk van kracht.
Als u een script wilt uitvoeren, typt u de volledige naam en het volledige pad naar het scriptbestand.
Als u bijvoorbeeld het script Get-ServiceLog.ps1 uitvoeren in de map C:\Scripts, typt u:
C:\Scripts\Get-ServiceLog.ps1
Als u een script wilt uitvoeren in de huidige map, typt u het pad naar de huidige map of gebruikt u een punt om de huidige map weer te geven, gevolgd door een padbackslash ( .\ ).
Als u bijvoorbeeld het script ServicesLog.ps1 in de lokale map wilt uitvoeren, typt u:
.\Get-ServiceLog.ps1
Als het script parameters bevat, typt u de parameters en parameterwaarden achter de bestandsnaam van het script.
Met de volgende opdracht wordt bijvoorbeeld de parameter ServiceName van het Get-ServiceLog script gebruikt om een logboek van winRM-serviceactiviteit aan te vragen.
.\Get-ServiceLog.ps1 -ServiceName WinRM
Als beveiligingsfunctie worden in PowerShell geen scripts uitgevoerd wanneer u dubbelklikt op het scriptpictogram in Verkenner of wanneer u de scriptnaam zonder een volledig pad typt, zelfs niet wanneer het script zich in de huidige map. Zie voor meer informatie over het uitvoeren van opdrachten en scripts in PowerShell about_Command_Precedence.
Uitvoeren met PowerShell
Vanaf PowerShell 3.0 kunt u scripts uitvoeren vanuit Verkenner.
De functie 'Uitvoeren met PowerShell' gebruiken:
Voer Verkenner uit, klik met de rechtermuisknop op de bestandsnaam van het script en selecteer vervolgens Uitvoeren met PowerShell.
De functie Uitvoeren met PowerShell is ontworpen om scripts uit te voeren die geen vereiste parameters hebben en geen uitvoer naar de opdrachtprompt retourneren.
Zie voor meer informatie about_Run_With_PowerShell.
Scripts uitvoeren op andere computers
Als u een script wilt uitvoeren op een of meer externe computers, gebruikt u de parameter FilePath van de Invoke-Command cmdlet .
Voer het pad en de bestandsnaam van het script in als de waarde van de FilePath-parameter. Het script moet zich bevinden op de lokale computer of in een map die de lokale computer kan openen.
Met de volgende opdracht wordt het Get-ServiceLog.ps1 script uitgevoerd op de externe computers met de naam Server01 en Server02.
Invoke-Command -ComputerName Server01,Server02 -FilePath `
C:\Scripts\Get-ServiceLog.ps1
Hulp krijgen voor scripts
De Get-Help-cmdlet krijgt de Help-onderwerpen voor scripts, evenals voor cmdlets en andere typen opdrachten. Typ gevolgd door het pad en de bestandsnaam van het script om het Help-onderwerp voor een Get-Help script op te halen. Als het scriptpad zich in uw Path omgevingsvariabele, kunt u het pad weglaten.
Als u bijvoorbeeld hulp wilt krijgen voor het ServicesLog.ps1 script, typt u:
get-help C:\admin\scripts\ServicesLog.ps1
Een script schrijven
Een script kan geldige PowerShell-opdrachten bevatten, waaronder enkele opdrachten, opdrachten die gebruikmaken van de pijplijn, functies en controlestructuren, zoals If-instructies en For-lussen.
Als u een script wilt schrijven, opent u een nieuw bestand in een teksteditor, typt u de opdrachten en sla u deze op in een bestand met een geldige bestandsnaam met de .ps1 bestandsextensie.
Het volgende voorbeeld is een eenvoudig script dat de services op haalt die worden uitgevoerd op het huidige systeem en deze opgeslagen in een logboekbestand. De bestandsnaam van het logboek wordt gemaakt op de huidige datum.
$date = (get-date).dayofyear
get-service | out-file "$date.log"
Als u dit script wilt maken, opent u een teksteditor of een scripteditor, typt u deze opdrachten en sla u deze op in een bestand met de naam ServiceLog.ps1 .
Parameters in scripts
Gebruik een Param-instructie om parameters in een script te definiëren. De Param instructie moet de eerste instructie in een script zijn, met uitzondering van opmerkingen en eventuele #Require instructies.
Scriptparameters werken zoals functieparameters. De parameterwaarden zijn beschikbaar voor alle opdrachten in het script. Alle functies van functieparameters, inclusief het kenmerk Parameter en de benoemde argumenten, zijn ook geldig in scripts.
Bij het uitvoeren van het script typen scriptgebruikers de parameters achter de scriptnaam.
In het volgende voorbeeld ziet u Test-Remote.ps1 een script met de parameter ComputerName. Beide scriptfuncties hebben toegang tot de parameterwaarde 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}
Als u dit script wilt uitvoeren, typt u de parameternaam achter de scriptnaam. Bijvoorbeeld:
C:\PS> .\test-remote.ps1 -computername Server01
Ping succeeded: Server01
Remote test failed: Server01
Zie voor meer informatie over de Param-instructie en de functieparameters about_Functions en about_Functions_Advanced_Parameters.
Help voor scripts schrijven
U kunt een Help-onderwerp voor een script schrijven met behulp van een van de volgende twee methoden:
Comment-Based Help voor scripts
Maak een Help-onderwerp met behulp van speciale trefwoorden in de opmerkingen. Als u help op basis van opmerkingen voor een script wilt maken, moeten de opmerkingen aan het begin of einde van het scriptbestand worden geplaatst. Zie voor meer informatie over help op basis van opmerkingen about_Comment_Based_Help.
XML-Based Help voor scripts
Maak een Help-onderwerp op basis van XML, zoals het type dat doorgaans wordt gemaakt voor cmdlets. Help op basis van XML is vereist als u Help-onderwerpen in meerdere talen vertaalt.
Als u het script wilt koppelen aan het Help-onderwerp op basis van XML, gebruikt u de . Het trefwoord Help-opmerking externalHelp. Zie voor meer informatie over het sleutelwoord ExternalHelp about_Comment_Based_Help. Zie Help voor cmdletschrijven voor meer informatie over help op basis van XML.
Een exitwaarde retourneren
Standaard retourneren scripts geen afsluitende status wanneer het script wordt beëindigd. U moet de instructie exit gebruiken om een afsluitende code van een script te retourneren. De instructie exit retourneert standaard 0 . U kunt een numerieke waarde geven om een andere exitstatus te retourneren. Een andere afsluitende code geeft doorgaans een fout aan.
Op Windows is elk getal tussen [int]::MinValue en [int]::MaxValue toegestaan.
In Unix zijn alleen positieve getallen [byte]::MinValue tussen (0) en [byte]::MaxValue (255) toegestaan. Een negatief getal in het bereik van through wordt automatisch omgezet in een positief getal door -1 -255 toe te voegen
256. wordt bijvoorbeeld -2 omgezet in 254 .
In PowerShell stelt de exit instructie de waarde van de variabele $LASTEXITCODE in. In de Windows Command Shell (cmd.exe) stelt de exit-instructie de waarde van de %ERRORLEVEL% omgevingsvariabele in.
Elk argument dat niet-numeriek of buiten het platformspecifieke bereik is, wordt omgezet in de waarde van 0 .
Scriptbereik en dot sourcing
Elk script wordt uitgevoerd in een eigen bereik. De functies, variabelen, aliassen en stations die in het script worden gemaakt, bestaan alleen in het scriptbereik. U hebt geen toegang tot deze items of hun waarden in het bereik waarin het script wordt uitgevoerd.
Als u een script in een ander bereik wilt uitvoeren, kunt u een bereik opgeven, zoals Globaal of Lokaal, of u kunt een puntbron voor het script opgeven.
Met de functie dot sourcing kunt u een script uitvoeren in het huidige bereik in plaats van in het scriptbereik. Wanneer u een script met een puntbron hebt uitgevoerd, worden de opdrachten in het script uitgevoerd alsof u ze bij de opdrachtprompt hebt getypt. De functies, variabelen, aliassen en stations die door het script worden gemaakt, worden gemaakt in het bereik waarin u werkt. Nadat het script is uitgevoerd, kunt u de gemaakte items gebruiken en de waarden ervan openen in uw sessie.
Als u een script wilt aanstippen, typt u een punt (.) en een spatie vóór het scriptpad.
Bijvoorbeeld:
. C:\scripts\UtilityFunctions.ps1
of
. .\UtilityFunctions.ps1
Nadat het script is uitgevoerd, worden de functies en variabelen die door het script worden UtilityFunctions.ps1 gemaakt, toegevoegd aan het huidige bereik.
Met het script worden UtilityFunctions.ps1 bijvoorbeeld de functie en de variabele New-Profile $ProfileName gemaakt.
#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 }
}
Als u het script in een eigen scriptbereik hebt uitgevoerd, bestaan de functie en de variabele UtilityFunctions.ps1 alleen terwijl het script wordt New-Profile $ProfileName uitgevoerd. Wanneer het script wordt afgesloten, worden de functie en de variabele verwijderd, zoals wordt weergegeven in het volgende voorbeeld.
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>
Wanneer u het script een punt geeft en uit te voeren, maakt het script de functie en de variabele New-Profile in uw sessie in uw $ProfileName bereik. Nadat het script is uitgevoerd, kunt u de functie New-Profile in uw sessie gebruiken, zoals wordt weergegeven in het volgende voorbeeld.
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
Zie voor meer informatie over het bereik about_Scopes.
Scripts in modules
Een module is een set gerelateerde PowerShell-resources die als een eenheid kunnen worden gedistribueerd. U kunt modules gebruiken om uw scripts, functies en andere resources te organiseren. U kunt modules ook gebruiken om uw code naar anderen te distribueren en code op te halen uit vertrouwde bronnen.
U kunt scripts opnemen in uw modules of u kunt een scriptmodule maken. Dit is een module die volledig of voornamelijk uit een script en ondersteunende resources bestaat. Een scriptmodule is slechts een script met de bestandsextensie .psm1.
Zie voor meer informatie over modules about_Modules.
Andere scriptfuncties
PowerShell heeft veel handige functies die u in scripts kunt gebruiken.
#Requires- U kunt een -instructie gebruiken om te voorkomen dat een script wordt uitgevoerd zonder opgegeven modules of modules en een#Requiresopgegeven versie van PowerShell. Zie voor meer informatie about_Requires.$PSCommandPath- Bevat het volledige pad en de naam van het script dat wordt uitgevoerd. Deze parameter is geldig in alle scripts. Deze automatische variabele is geïntroduceerd in PowerShell 3.0.$PSScriptRoot- Bevat de map van waaruit een script wordt uitgevoerd. In PowerShell 2.0 is deze variabele alleen geldig in scriptmodules (.psm1). Vanaf PowerShell 3.0 is het geldig in alle scripts.$MyInvocation- De automatische variabele bevat informatie over het huidige script, inclusief informatie over$MyInvocationhoe het is gestart of 'aangeroepen'. U kunt deze variabele en de eigenschappen ervan gebruiken om informatie over het script op te halen terwijl het wordt uitgevoerd. Bijvoorbeeld de$MyInvocation. De variabele MyCommand.Path bevat het pad en de bestandsnaam van het script.$MyInvocation. Regel bevat de opdracht die het script heeft gestart, inclusief alle parameters en waarden.Vanaf PowerShell 3.0 heeft twee nieuwe eigenschappen die informatie bieden over het script dat het huidige script heeft aangeroepen
$MyInvocationof aangeroepen. De waarden van deze eigenschappen worden alleen ingevuld wanneer de aanroeper of aanroeper een script is.PSCommandPath bevat het volledige pad en de naam van het script dat het huidige script heeft aangeroepen of aangeroepen.
PSScriptRoot bevat de map van het script dat het huidige script heeft aangeroepen of aangeroepen.
In tegenstelling tot de automatische variabelen en , die informatie bevatten over het huidige script, bevatten de eigenschappen
$PSCommandPath$PSScriptRootPSCommandPath en PSScriptRoot van de variabele informatie over het script dat het huidige$MyInvocationscript heeft aangeroepen.Gegevenssecties: u kunt het
Datatrefwoord gebruiken om gegevens te scheiden van logica in scripts. Gegevenssecties kunnen lokalisatie ook eenvoudiger maken. Zie voor meer informatie about_Data_Sections en about_Script_Internationalization.Script signing: u kunt een digitale handtekening toevoegen aan een script. Afhankelijk van het uitvoeringsbeleid kunt u digitale handtekeningen gebruiken om het uitvoeren van scripts die onveilige opdrachten kunnen bevatten, te beperken. Zie voor meer informatie about_Execution_Policies en about_Signing.