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

SYNTAXIS

PowerShell[.exe]
    [-PSConsoleFile <file> | -Version <version>]
    [-NoLogo]
    [-NoExit]
    [-Sta]
    [-Mta]
    [-NoProfile]
    [-NonInteractive]
    [-InputFormat {Text | XML}]
    [-OutputFormat {Text | XML}]
    [-WindowStyle <style>]
    [-EncodedCommand <Base64EncodedCommand>]
    [-ConfigurationName <string>]
    [-File - | <filePath> <args>]
    [-ExecutionPolicy <ExecutionPolicy>]
    [-Command - | { <script-block> [-args <arg-array>] }
                | { <string> [<CommandParameters>] } ]

PowerShell[.exe] -Help | -? | /?

Parameters

-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 Export-Console cmdlet in PowerShell.

-Versie <van 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.

Hiermee verbergt u de copyrightbanner bij het opstarten.

-NoExit

Wordt niet afgesloten na het uitvoeren van opstartopdrachten.

-Sta

Start PowerShell met behulp van een appartement met één thread. In Windows PowerShell 2.0 is multithreaded appartement (MTA) de standaardinstelling. In Windows PowerShell 3.0 is sta (single threaded apartment) de standaardinstelling.

-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 multithreaded appartement (MTA) de standaardinstelling. In PowerShell 3.0 is sta (single threaded apartment) de standaardinstelling.

-NoProfile

Het PowerShell-profiel wordt niet geladen.

-Niet-interactief

Er wordt geen interactieve prompt voor de gebruiker weergegeven.

-InputFormat {Text | XML}

Beschrijft de indeling van gegevens die naar PowerShell worden verzonden. Geldige waarden zijn Tekst (tekenreeksen) of XML (geserialiseerde CLIXML-indeling).

-OutputFormat {Text | XML}

Bepaalt hoe uitvoer van PowerShell is opgemaakt. Geldige waarden zijn Tekst (tekenreeksen) of XML (geserialiseerde CLIXML-indeling).

-WindowStyle Window style <>

Hiermee stelt u de vensterstijl voor de sessie in. Geldige waarden zijn normaal, geminimaliseerd, gemaximaliseerd en verborgen.

-EncodedCommand <Base64EncodedCommand>

Accepteert een met base 64 gecodeerde tekenreeksversie van een opdracht. Gebruik deze parameter om opdrachten te verzenden naar PowerShell waarvoor complexe aanhalingstekens of accolades zijn vereist. De tekenreeks moet worden opgemaakt met UTF-16LE-tekencodering.

-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 standaard externe PowerShell-eindpunten of een aangepast eindpunt met specifieke gebruikersrolmogelijkheden.

-Bestand - | <filePath>< args>

Als de waarde van bestand '-' is, wordt de opdrachttekst gelezen uit standaardinvoer. Als u zonder powershell -File - omgeleide standaardinvoer uitvoert, wordt een normale sessie gestart. Dit is hetzelfde als het helemaal niet opgeven van de parameter Bestand .

Als de waarde van Bestand een bestandspad is, wordt het script uitgevoerd in het lokale bereik (dot-sourced), zodat de functies en variabelen die door het script worden gemaakt, beschikbaar zijn in de huidige sessie. Voer het pad naar het scriptbestand 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 pad naar het scriptbestand en 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 omgevingsvariabelewaarde wilt doorgeven, gebruikt u de cmd.exe syntaxis: powershell.exe -File .\test.ps1 -TestParam %windir%

Het uitvoeren powershell.exe -File .\test.ps1 -TestParam $env:windir in cmd.exe resulteert daarentegen 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 referentie voor omgevingsvariabelen kan worden gebruikt in een opdrachtparameter , omdat deze daar wordt geïnterpreteerd als PowerShell-code.

Als u dezelfde opdracht wilt uitvoeren vanuit een Batch-script, gebruikt %~dp0 u ook de huidige uitvoeringsmap in plaats van .\$PSScriptRoot de huidige uitvoeringsmap: powershell.exe -File %~dp0test.ps1 -TestParam %windir% Als u in plaats daarvan gebruikt .\test.ps1, genereert PowerShell een fout omdat het letterlijke pad niet kan worden gevonden .\test.ps1

Wanneer de waarde van Bestand een bestandspad is, moethet bestand de laatste parameter in de opdracht zijn, omdat tekens die zijn getypt na de bestandsnaam, worden geïnterpreteerd als het pad naar het scriptbestand 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 Alle 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 bij het uitvoeren van een script op deze manier. Deze beperking is verwijderd in PowerShell 6 (pwsh.exe).

Notitie

De parameter Bestand kan geen scripts ondersteunen met behulp van een parameter die een matrix met argumentwaarden verwacht. Dit is helaas een beperking van hoe een systeemeigen opdracht argumentwaarden krijgt. Wanneer u een systeemeigen uitvoerbaar bestand (zoals powershell of pwsh) aanroept, weet het niet wat u moet doen met een matrix, dus deze wordt doorgegeven als een tekenreeks.

-ExecutionPolicy ExecutionPolicy <>

Hiermee stelt u het standaarduitvoeringsbeleid voor de huidige sessie in en slaat u dit op in de $env:PSExecutionPolicyPreference omgevingsvariabele. Met deze parameter wordt het PowerShell-uitvoeringsbeleid dat is ingesteld in het register niet gewijzigd. Zie about_Execution_Policies voor informatie over PowerShell-uitvoeringsbeleid, inclusief een lijst met geldige waarden.

-Opdracht

Hiermee worden de opgegeven opdrachten (en eventuele parameters) uitgevoerd alsof ze zijn getypt bij de PowerShell-opdrachtprompt en vervolgens worden afgesloten, tenzij de NoExit parameter is opgegeven.

De waarde van de opdracht kan een scriptblok of een tekenreeks zijn -. Als de waarde van Command is -, wordt de opdrachttekst gelezen uit standaardinvoer.

De opdrachtparameter accepteert alleen een scriptblok voor uitvoering wanneer deze de waarde kan herkennen die aan Command is doorgegeven als een ScriptBlock-type . Dit is alleen mogelijk bij het uitvoeren powershell.exe vanaf een andere PowerShell-host. Het type ScriptBlock kan worden opgenomen in een bestaande variabele, geretourneerd door een expressie of geparseerd door de PowerShell-host als een letterlijk scriptblok tussen accolades ({}), voordat het wordt doorgegeven aan powershell.exe.

powershell -Command {Get-WinEvent -LogName security}

In cmd.exe, er is geen scriptblok (of ScriptBlock-type ), zodat de waarde die wordt doorgegeven aan Commandaltijd een tekenreeks is. U kunt een scriptblok in de tekenreeks schrijven, maar in plaats van te worden 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 wordt doorgegeven aan opdracht , wordt nog steeds uitgevoerd als PowerShell-code, dus het script blok accolades zijn vaak niet vereist op de eerste plaats wanneer u vanaf cmd.exewordt uitgevoerd. Als u een inlinescriptblok wilt uitvoeren dat is gedefinieerd in een tekenreeks, kan de aanroepoperator& worden gebruikt:

powershell.exe -Command "& {Get-WinEvent -LogName security}"

Als de waarde van de opdracht een tekenreeks is, moet de opdracht de laatste parameter voor pwsh zijn, omdat alle argumenten na deze worden geïnterpreteerd als onderdeel van de opdracht die moet worden uitgevoerd.

Wanneer de resultaten worden aangeroepen vanuit een bestaande PowerShell-sessie, worden de resultaten geretourneerd naar de bovenliggende shell als gedeserialiseerde XML-objecten, niet als liveobjecten. Voor andere shells worden de resultaten geretourneerd als tekenreeksen.

Als de waarde van Command is -, wordt de opdrachttekst gelezen uit standaardinvoer. U moet standaardinvoer omleiden wanneer u de opdrachtparameter gebruikt met standaardinvoer. Bijvoorbeeld:

@'
"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 $? is $true of 1 wanneer$?.$false Als de laatste opdracht een extern programma of een PowerShell-script is waarmee expliciet een afsluitcode anders wordt ingesteld dan 0 of 1, wordt die afsluitcode geconverteerd naar 1 voor procesafsluitcode. Als u de specifieke afsluitcode wilt behouden, voegt u deze toe exit $LASTEXITCODE aan uw opdrachttekenreeks of scriptblok.

Op dezelfde manier wordt de waarde 1 geretourneerd wanneer een script-afsluitfout (runspace-terminating), zoals a throw of -ErrorAction Stop, optreedt of wanneer de uitvoering wordt onderbroken met Ctrl-C.

-Help, -?, /?

Geeft help weer voor PowerShell.exe. Als u een PowerShell.exe opdracht in een PowerShell-sessie typt, moet u de opdrachtparameters vooraf laten gaan met een afbreekstreepje (-), geen slash (/). U kunt een afbreekstreepje of slash in cmd.exegebruiken.

OPMERKINGEN

Opmerking voor probleemoplossing: 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