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
-Opdracht
Hiermee worden de opgegeven opdrachten (en parameters) uitgevoerd alsof ze zijn getypt bij de PowerShell-opdrachtprompt en vervolgens worden afgesloten, tenzij de NoExit
parameter is opgegeven.
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}
Incmd.exe
, er is geen scriptblok (of ScriptBlock-type), zodat de waarde die wordt doorgegeven aan Command altijd een tekenreeks is. 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 weer 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 -
, wordt de opdrachttekst gelezen uit de 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
De afsluitcode van het proces wordt bepaald door de status van de laatste (uitgevoerde) opdracht in het scriptblok. 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. 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
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.
-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.
-File - | <Filepath><Args>
Als de waarde van Bestand is -
, wordt de opdrachttekst 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 parameter File .
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.
Parameters die aan het script worden doorgegeven, worden doorgegeven als letterlijke tekenreeksen, na interpretatie door de huidige shell. Als u zich bijvoorbeeld in cmd.exe bevindt en een waarde voor een omgevingsvariabele wilt doorgeven, gebruikt u de cmd.exe syntaxis: powershell.exe -File .\test.ps1 -TestParam %windir%
Het uitvoeren in cmd.exe resulteert daarentegen powershell.exe -File .\test.ps1 -TestParam $env:windir
in het script dat de letterlijke tekenreeks $env:windir
ontvangt, omdat het geen speciale betekenis heeft voor de huidige cmd.exe shell. De $env:windir
stijl van de verwijzing naar omgevingsvariabelen 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: powershell.exe -File %~dp0test.ps1 -TestParam %windir%
Als u in plaats daarvan .\test.ps1
gebruikt, genereert PowerShell een fout omdat het letterlijke pad niet kan worden gevonden .\test.ps1
Wanneer de waarde van File een bestandspad is, moet Het bestandde laatste parameter in de opdracht zijn omdat tekens die zijn getypt na de bestandsnaam van de bestandsnaam worden geïnterpreteerd als het scriptbestandspad gevolgd door de scriptparameters.
U kunt de scriptparameters en -waarden opnemen in de waarde van de parameter Bestand . 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
).
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.
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. Bij normale beëindiging is de afsluitcode altijd 0
.
Zie about_Automatic_Variables voor meer informatie.$LASTEXITCODE
-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
Feedback
https://aka.ms/ContentUserFeedback.
Binnenkort beschikbaar: In de loop van 2024 zullen we GitHub-problemen geleidelijk uitfaseren als het feedbackmechanisme voor inhoud en deze vervangen door een nieuw feedbacksysteem. Zie voor meer informatie:Feedback verzenden en weergeven voor