about_PowerShell_exe
Korte beschrijving
Hierin wordt uitgelegd hoe u de powershell.exe
opdrachtregelinterface gebruikt. Geeft de opdrachtregelparameters weer en beschrijft de syntaxis.
Lange beschrijving
Zie about_Pwsh voor informatie over de opdrachtregelopties voor PowerShell 7.
SYNTAXIS
PowerShell[.exe]
[-PSConsoleFile <file> | -Version <version>]
[-NoLogo]
[-NoExit]
[-Sta]
[-Mta]
[-NoProfile]
[-NonInteractive]
[-InputFormat {Text | XML}]
[-OutputFormat {Text | XML}]
[-WindowStyle <style>]
[-EncodedArguments <Base64EncodedArguments>]
[-EncodedCommand <Base64EncodedCommand>]
[-ConfigurationName <string>]
[-File - | <filePath> <args>]
[-ExecutionPolicy <ExecutionPolicy>]
[-Command - | { <script-block> [-args <arg-array>] }
| { <string> [<CommandParameters>] } ]
PowerShell[.exe] -Help | -? | /?
Parameters
Alle parameters zijn niet hoofdlettergevoelig.
-File - | <filePath><args>
De waarde van Bestand kan een bestandspad en optionele parameters zijn -
. Als de waarde van Bestand is -
, worden opdrachten gelezen uit standaardinvoer.
Als de waarde van Bestand een bestandspad is, wordt het script uitgevoerd in het lokale bereik ('dot-sourced') van de nieuwe sessie, zodat de functies en variabelen die door het script worden gemaakt, beschikbaar zijn in die nieuwe sessie. Voer het scriptbestandspad en eventuele parameters in. Het bestand moet de laatste parameter in de opdracht zijn. Alle waarden die na de parameter Bestand zijn getypt, worden geïnterpreteerd als het scriptbestandspad en de parameters die aan dat script worden doorgegeven. Bijvoorbeeld: -File .\Get-Script.ps1 -Domain Central
Normaal gesproken worden de switchparameters van een script opgenomen of weggelaten.
Met de volgende opdracht wordt bijvoorbeeld de parameter All van het Get-Script.ps1
scriptbestand gebruikt: -File .\Get-Script.ps1 -All
In zeldzame gevallen moet u mogelijk een Booleaanse waarde opgeven voor een parameter.
Het is niet mogelijk om een expliciete Booleaanse waarde door te geven voor een switchparameter wanneer een script op deze manier wordt uitgevoerd. Deze beperking is verwijderd in PowerShell 6 (pwsh.exe
).
Parameters die aan het script worden doorgegeven, worden doorgegeven als letterlijke tekenreeksen, na interpretatie door de huidige shell. Als u bijvoorbeeld een cmd.exe
omgevingsvariabelewaarde wilt doorgeven, gebruikt u de cmd.exe
syntaxis: powershell.exe -File .\test.ps1 -TestParam %windir%
Het uitvoeren van resultaten in cmd.exe
het script dat de letterlijke tekenreeks $env:windir
ontvangt, heeft daarentegen powershell.exe -File .\test.ps1 -TestParam $env:windir
geen speciale betekenis voor de huidige cmd.exe
shell. De $env:windir
verwijzing naar de omgevingsvariabele kan worden gebruikt in een opdrachtparameter , omdat deze daar wordt geïnterpreteerd als PowerShell-code.
En als u dezelfde opdracht wilt uitvoeren vanuit een Batch-script, gebruikt %~dp0
u in plaats van .\
of $PSScriptRoot
om de huidige uitvoeringsmap weer te geven: pwsh -File %~dp0test.ps1 -TestParam %windir%
Als u .\test.ps1
in plaats daarvan gebruikt, genereert PowerShell een fout omdat het letterlijke pad niet kan worden gevonden .\test.ps1
Notitie
De parameter Bestand biedt geen ondersteuning voor scripts met behulp van een parameter die een matrix met argumentwaarden verwacht. Dit is helaas een beperking van de manier waarop een systeemeigen opdracht argumentwaarden ophaalt. Wanneer u een systeemeigen uitvoerbaar bestand (zoals powershell
of pwsh
) aanroept, weet deze niet wat u moet doen met een matrix, dus het wordt doorgegeven als een tekenreeks.
Als de waarde van Bestand is -
, worden opdrachten gelezen uit standaardinvoer.
Als powershell -File -
u zonder omgeleide standaardinvoer uitvoert, wordt een gewone sessie gestart. Dit is hetzelfde als het helemaal niet opgeven van de File
parameter. Bij het lezen van standaardinvoer worden de invoerinstructies één instructie tegelijk uitgevoerd alsof ze zijn getypt bij de PowerShell-opdrachtprompt. Als een instructie niet correct wordt geparseerd, wordt de instructie niet uitgevoerd. De afsluitcode van het proces wordt bepaald door de status van de laatste (uitgevoerde) opdracht. Bij een geslaagde uitvoering is de afsluitcode altijd 0
. Wanneer het scriptbestand wordt beëindigd met een exit
opdracht, wordt de afsluitcode van het proces ingesteld op het numerieke argument dat wordt gebruikt met de exit
opdracht.
-Command
Net als wanneer er een scriptafsluitfout optreedt, wordt de afsluitcode ingesteld op 1
. In tegenstelling tot bij -Command
, wanneer de uitvoering wordt onderbroken met Ctrl+C, is de afsluitcode echter .0
Zie about_Automatic_Variables voor meer informatie.$LASTEXITCODE
-Bevelen
De waarde van Command kan -
zijn, een scriptblok of een tekenreeks. Als de waarde van Command is -
, wordt de opdrachttekst gelezen uit de standaardinvoer.
De opdrachtparameter accepteert alleen een scriptblok voor uitvoering wanneer deze de waarde kan herkennen die als scriptbloktype is doorgegeven aan Command. Dit is alleen mogelijk wanneer deze wordt uitgevoerd powershell.exe
vanaf een andere PowerShell-host. Het ScriptBlock-type kan zijn opgenomen in een bestaande variabele, geretourneerd uit een expressie of geparseerd door de PowerShell-host als een letterlijk scriptblok dat tussen accolades ({}
) staat voordat het wordt doorgegeven aan powershell.exe
.
powershell -Command {Get-WinEvent -LogName security}
In cmd.exe
, er is geen scriptblok (of ScriptBlock-type ), dus de waarde die aan Command wordt doorgegeven, is altijd een tekenreeks. U kunt een scriptblok in de tekenreeks schrijven, maar in plaats van dat het wordt uitgevoerd, gedraagt het zich precies alsof u het hebt getypt bij een typische PowerShell-prompt, waarbij de inhoud van het scriptblok naar u wordt afgedrukt.
Een tekenreeks die aan Command wordt doorgegeven, wordt nog steeds uitgevoerd als PowerShell-code, dus het script blokkeert accolades zijn vaak niet vereist in de eerste plaats wanneer deze wordt uitgevoerd.cmd.exe
Als u een inlinescriptblok wilt uitvoeren dat in een tekenreeks is gedefinieerd, kan de aanroepoperator &
worden gebruikt:
powershell.exe -Command "& {Get-WinEvent -LogName security}"
Als de waarde van Command een tekenreeks is, moet Command de laatste parameter voor pwsh zijn, omdat alle argumenten die erop volgen, worden geïnterpreteerd als onderdeel van de opdracht die moet worden uitgevoerd.
Wanneer de resultaten vanuit een bestaande PowerShell-sessie worden aangeroepen, worden de resultaten geretourneerd naar de bovenliggende shell als gedeserialiseerde XML-objecten, niet live-objecten. Voor andere shells worden de resultaten geretourneerd als tekenreeksen.
Als de waarde van Command is -
, worden de opdrachten gelezen uit standaardinvoer. U moet standaardinvoer omleiden wanneer u de opdrachtparameter gebruikt met standaardinvoer. Voorbeeld:
@'
"in"
"hi" |
% { "$_ there" }
"out"
'@ | powershell -NoProfile -Command -
In dit voorbeeld wordt de volgende uitvoer gegenereerd:
in
hi there
out
Bij het lezen van standaardinvoer wordt de invoer geparseerd en één instructie tegelijk uitgevoerd, alsof deze zijn getypt bij de PowerShell-opdrachtprompt. Als de invoercode niet correct wordt geparseerd, wordt de instructie niet uitgevoerd. Tenzij u de -NoExit
parameter gebruikt, wordt de PowerShell-sessie afgesloten wanneer er geen invoer meer is om uit standaardinvoer te lezen.
De afsluitcode van het proces wordt bepaald door de status van de laatste (uitgevoerde) opdracht in de invoer. De afsluitcode is 0
wanneer $?
of $true
1
wanneer$?
.$false
Als de laatste opdracht een extern programma of een PowerShell-script is waarmee expliciet een andere afsluitcode dan 0
of 1
wordt ingesteld, wordt die afsluitcode geconverteerd naar 1
voor procesafsluitcode. Op dezelfde manier wordt de waarde 1 geretourneerd wanneer een script-afsluitfout (runspace-terminating) optreedt, zoals a throw
of-ErrorAction Stop
, of wanneer de uitvoering wordt onderbroken met Ctrl+C.
Als u de specifieke afsluitcode wilt behouden, voegt u deze toe exit $LASTEXITCODE
aan de opdrachtreeks of het scriptblok. Zie about_Automatic_Variables voor meer informatie.$LASTEXITCODE
-ConfigurationName-tekenreeks <>
Hiermee geeft u een configuratie-eindpunt waarin PowerShell wordt uitgevoerd. Dit kan elk eindpunt zijn dat is geregistreerd op de lokale computer, inclusief de standaardeindpunten voor externe communicatie van PowerShell of een aangepast eindpunt met specifieke mogelijkheden voor gebruikersrollen.
-EncodedArguments <Base64EncodedArguments>
Accepteert een met Base64 gecodeerde opdrachtargumenten voor tekenreeksversies. Gebruik deze parameter om argumenten in te dienen waarvoor complexe, geneste quotatie is vereist. De Base64-weergave moet een UTF-16LE-gecodeerde tekenreeks zijn.
-EncodedCommand <Base64EncodedCommand>
Accepteert een met base 64 gecodeerde tekenreeksversie van een opdracht. Gebruik deze parameter om opdrachten naar PowerShell te verzenden waarvoor complexe aanhalingstekens of accolades zijn vereist. De tekenreeks moet worden opgemaakt met UTF-16LE-tekencodering.
-ExecutionPolicy <ExecutionPolicy>
Hiermee stelt u het standaarduitvoeringsbeleid voor de huidige sessie in en slaat u het op in de $env:PSExecutionPolicyPreference
omgevingsvariabele. Met deze parameter wordt het PowerShell-uitvoeringsbeleid dat in het register is ingesteld, niet gewijzigd. Zie about_Execution_Policies voor informatie over powerShell-uitvoeringsbeleid, inclusief een lijst met geldige waarden.
-InputFormat {Text | XML}
Beschrijft de indeling van gegevens die naar PowerShell worden verzonden. Geldige waarden zijn Text
(tekenreeksen) of XML
(geserialiseerde CLIXML-indeling).
-Mta
Start PowerShell met behulp van een appartement met meerdere threads. Deze parameter wordt geïntroduceerd in PowerShell 3.0. In PowerShell 2.0 is MTA (multi-threaded apartment) de standaardinstelling. In PowerShell 3.0 is sta (single threaded apartment) de standaardinstelling.
-NoExit
Sluit niet af na het uitvoeren van opstartopdrachten.
-Niet-interactief
Deze schakeloptie wordt gebruikt om sessies te maken waarvoor geen gebruikersinvoer nodig is. Dit is handig voor scripts die worden uitgevoerd in geplande taken of CI/CD-pijplijnen. Pogingen om interactieve functies te gebruiken, zoals Read-Host
of bevestigingsprompts, resulteren in fouten bij het beëindigen van instructies in plaats van vast te hangen.
-NoLogo
Verbergt de copyrightbanner bij het opstarten.
-NoProfile
Laadt het PowerShell-profiel niet.
-OutputFormat {Text | XML}
Bepaalt hoe de uitvoer van PowerShell is opgemaakt. Geldige waarden zijn Text
(tekenreeksen) of XML
(geserialiseerde CLIXML-indeling).
-PSConsoleFile <FilePath>
Laadt het opgegeven PowerShell-consolebestand. Voer het pad en de naam van het consolebestand in. Als u een consolebestand wilt maken, gebruikt u de cmdlet Export-Console in PowerShell.
-Sta
Start PowerShell met behulp van een appartement met één thread. In Windows PowerShell 2.0 is MTA (multi-threaded apartment) de standaardinstelling. In Windows PowerShell 3.0 is sta (single threaded apartment) de standaardinstelling.
-Versie PowerShell-versie <>
Hiermee start u de opgegeven versie van PowerShell. Geldige waarden zijn 2.0 en 3.0. De versie die u opgeeft, moet op het systeem worden geïnstalleerd. Als Windows PowerShell 3.0 op de computer is geïnstalleerd, is '3.0' de standaardversie. Anders is '2.0' de standaardversie. Zie PowerShell installeren voor meer informatie.
-WindowStyle Window style <>
Hiermee stelt u de vensterstijl voor de sessie in. Geldige waarden zijnNormal
, Minimized
, en Hidden
Maximized
.
-Help-?/?
Geeft help weer voor PowerShell.exe
. Als u een opdracht in een PowerShell.exe
PowerShell-sessie typt, moet u de opdrachtparameters vooraf laten gaan met een afbreekstreepje (-
), niet een slash (/
). U kunt een afbreekstreepje of slash gebruiken in cmd.exe
.
OPMERKINGEN
Opmerking: in PowerShell 2.0 mislukt het starten van sommige programma's vanuit de PowerShell-console met een LastExitCode van 0xc0000142.
VOORBEELDEN
# Create a new PowerShell session and load a saved console file
PowerShell -PSConsoleFile sqlsnapin.psc1
# Create a new PowerShell V2 session with text input, XML output, and no logo
PowerShell -Version 2.0 -NoLogo -InputFormat text -OutputFormat XML
# Execute a PowerShell Command in a session
PowerShell -Command "Get-EventLog -LogName security"
# Run a script block in a session
PowerShell -Command {Get-EventLog -LogName security}
# An alternate way to run a command in a new session
PowerShell -Command "& {Get-EventLog -LogName security}"
# To use the -EncodedCommand parameter:
$command = "dir 'c:\program files' "
$bytes = [System.Text.Encoding]::Unicode.GetBytes($command)
$encodedCommand = [Convert]::ToBase64String($bytes)
powershell.exe -encodedCommand $encodedCommand