Share via


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 $true1 wanneer$?.$false Als de laatste opdracht een extern programma of een PowerShell-script is waarmee expliciet een andere afsluitcode dan 0 of 1wordt 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.ps1gebruikt, 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.

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 HiddenMaximized.

-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