about_PowerShell_exe
Krótki opis
W tym artykule wyjaśniono, jak używać interfejsu powershell.exe
wiersza polecenia. Wyświetla parametry wiersza polecenia i opisuje składnię.
Długi opis
Aby uzyskać informacje o opcjach wiersza polecenia dla programu PowerShell 7, zobacz about_Pwsh.
SKŁADNIA
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 | -? | /?
Parametry
Wszystkie parametry są bez uwzględniania wielkości liter.
-File - | <filePath><args>
Wartość parametru File może być -
lub ścieżka pliku i parametry opcjonalne. Jeśli wartość parametru File to -
, polecenia są odczytywane ze standardowych danych wejściowych.
Jeśli wartość File jest ścieżką pliku, skrypt jest uruchamiany w zakresie lokalnym ("dot-sourced") nowej sesji, dzięki czemu funkcje i zmienne tworzone przez skrypt są dostępne w tej nowej sesji. Wprowadź ścieżkę pliku skryptu i wszystkie parametry. Plik musi być ostatnim parametrem w poleceniu . Wszystkie wartości wpisywane po parametrze File są interpretowane jako ścieżka pliku skryptu i parametry przekazywane do tego skryptu. Na przykład: -File .\Get-Script.ps1 -Domain Central
.
Zazwyczaj parametry przełącznika skryptu są dołączane lub pomijane.
Na przykład następujące polecenie używa parametru All pliku skryptu Get-Script.ps1
: -File .\Get-Script.ps1 -All
W rzadkich przypadkach może być konieczne podanie wartości logicznej dla parametru.
Nie można przekazać jawnej wartości logicznej dla parametru przełącznika podczas uruchamiania skryptu w ten sposób. To ograniczenie zostało usunięte w programie PowerShell 6 (pwsh.exe
).
Parametry przekazywane do skryptu są przekazywane jako ciągi literału po interpretacji przez bieżącą powłokę. Jeśli na przykład jesteś w cmd.exe
lokalizacji i chcesz przekazać wartość zmiennej środowiskowej, użyj cmd.exe
składni : powershell.exe -File .\test.ps1 -TestParam %windir%
Z kolei uruchomienie powershell.exe -File .\test.ps1 -TestParam $env:windir
w cmd.exe
wynikach skryptu odbiera ciąg $env:windir
literału, ponieważ nie ma specjalnego znaczenia dla bieżącej cmd.exe
powłoki. Styl $env:windir
odwołania do zmiennej środowiskowej może być używany wewnątrz parametru Command , ponieważ jest on interpretowany jako kod programu PowerShell.
Podobnie, jeśli chcesz wykonać to samo polecenie ze skryptu usługi Batch, użyj polecenia %~dp0
zamiast .\
lub $PSScriptRoot
do reprezentowania bieżącego katalogu wykonawczego: pwsh -File %~dp0test.ps1 -TestParam %windir%
. Jeśli zamiast tego używasz .\test.ps1
, program PowerShell zgłasza błąd, ponieważ nie może znaleźć ścieżki literału .\test.ps1
Uwaga
Parametr File nie może obsługiwać skryptów przy użyciu parametru, który oczekuje tablicy wartości argumentów. Niestety, jest to ograniczenie sposobu, w jaki natywne polecenie pobiera wartości argumentów. Wywołanie natywnego pliku wykonywalnego (takiego jak powershell
lub pwsh
) nie wie, co należy zrobić z tablicą, więc jest przekazywane jako ciąg.
Jeśli wartość parametru File to -
, polecenia są odczytywane ze standardowych danych wejściowych.
Uruchamianie powershell -File -
bez przekierowanych standardowych danych wejściowych uruchamia zwykłą sesję. Jest to takie samo, jak nie określa parametru File
w ogóle. Podczas odczytywania ze standardowych danych wejściowych instrukcje wejściowe są wykonywane pojedynczo tak, jakby były wpisywane w wierszu polecenia programu PowerShell. Jeśli instrukcja nie analizuje się poprawnie, instrukcja nie jest wykonywana. Kod zakończenia procesu jest określany przez stan ostatniego (wykonanego) polecenia. Po pomyślnym wykonaniu kod zakończenia jest zawsze 0
. Po zakończeniu pliku skryptu za exit
pomocą polecenia kod zakończenia procesu jest ustawiony na argument liczbowy używany z poleceniem exit
.
Podobnie jak w przypadku -Command
wystąpienia błędu zakończenia skryptu kod zakończenia jest ustawiony na 1
wartość . Jednak w przeciwieństwie do metody w przypadku -Command
przerwania wykonywania za pomocą Ctrl+C kod zakończenia to .0
Aby uzyskać więcej informacji, zobacz $LASTEXITCODE
w about_Automatic_Variables.
-Polecenie
Wartością polecenia może być -
blok skryptu lub ciąg. Jeśli wartość command to -
, tekst polecenia jest odczytywany ze standardowych danych wejściowych.
Parametr Command akceptuje tylko blok skryptu do wykonania, gdy może rozpoznać wartość przekazaną do polecenia jako typ ScriptBlock. Jest to możliwe tylko w przypadku uruchamiania powershell.exe
z innego hosta programu PowerShell. Typ ScriptBlock może być zawarty w istniejącej zmiennej, zwracanej z wyrażenia lub analizowany przez hosta programu PowerShell jako blok skryptu literału ujęty w nawiasy klamrowe ({}
), przed przekazaniem do powershell.exe
elementu .
powershell -Command {Get-WinEvent -LogName security}
W cmd.exe
systemie nie ma czegoś takiego jak blok skryptu (lub typ ScriptBlock ), więc wartość przekazana do polecenia jest zawsze ciągiem. Blok skryptu można napisać wewnątrz ciągu, ale zamiast wykonywać działa dokładnie tak, jakby został wpisany w typowym wierszu programu PowerShell, wyświetlając zawartość bloku skryptu.
Ciąg przekazany do polecenia jest nadal wykonywany jako kod programu PowerShell, więc blok skryptu nawiasy klamrowe nie są często wymagane w pierwszej kolejności podczas uruchamiania z cmd.exe
. Aby wykonać wbudowany blok skryptu zdefiniowany wewnątrz ciągu, można użyć operatora &
wywołania:
powershell.exe -Command "& {Get-WinEvent -LogName security}"
Jeśli wartość Command jest ciągiem, polecenie musi być ostatnim parametrem dla programu pwsh, ponieważ wszystkie argumenty następujące po nim są interpretowane jako część polecenia do wykonania.
Po wywołaniu z istniejącej sesji programu PowerShell wyniki są zwracane do powłoki nadrzędnej jako zdeserializowane obiekty XML, a nie obiekty aktywne. W przypadku innych powłok wyniki są zwracane jako ciągi.
Jeśli wartość polecenia to -
, polecenia są odczytywane ze standardowych danych wejściowych. Podczas korzystania z parametru Command ze standardowymi danymi wejściowymi należy przekierować standardowe dane wejściowe. Na przykład:
@'
"in"
"hi" |
% { "$_ there" }
"out"
'@ | powershell -NoProfile -Command -
Ten przykład generuje następujące wyniki:
in
hi there
out
Podczas odczytywania ze standardowych danych wejściowych dane wejściowe są analizowane i wykonywane pojedynczo, tak jakby zostały wpisane w wierszu polecenia programu PowerShell. Jeśli kod wejściowy nie jest poprawnie analizowany, instrukcja nie jest wykonywana. Jeśli nie używasz parametru -NoExit
, sesja programu PowerShell kończy się, gdy nie ma więcej danych wejściowych do odczytu ze standardowych danych wejściowych.
Kod zakończenia procesu jest określany przez stan ostatniego (wykonanego) polecenia w danych wejściowych. Kod zakończenia jest w przypadku, gdy element 0
jest $true
lub 1
ma $?
wartość $false
.$?
Jeśli ostatnie polecenie jest programem zewnętrznym lub skryptem programu PowerShell, który jawnie ustawia kod zakończenia inny niż 0
lub 1
, kod zakończenia jest konwertowany na 1
dla kodu zakończenia procesu. Podobnie wartość 1 jest zwracana, gdy występuje błąd zakończenia skryptu (runspace-terminating), taki jak throw
lub -ErrorAction Stop
, lub po przerwaniu wykonywania za pomocą Ctrl+C.
Aby zachować określony kod zakończenia, dodaj exit $LASTEXITCODE
do ciągu polecenia lub bloku skryptu. Aby uzyskać więcej informacji, zobacz $LASTEXITCODE
w about_Automatic_Variables.
-ConfigurationName <ciąg>
Określa punkt końcowy konfiguracji, w którym jest uruchamiany program PowerShell. Może to być dowolny punkt końcowy zarejestrowany na komputerze lokalnym, w tym domyślne punkty końcowe komunikacji zdalnej programu PowerShell lub niestandardowy punkt końcowy, który ma określone możliwości roli użytkownika.
-EncodedArguments <Base64EncodedArguments>
Akceptuje argumenty polecenia wersji ciągów zakodowanych w formacie Base64. Użyj tego parametru, aby przesłać argumenty, które wymagają złożonego, zagnieżdżonego cudzysłów. Reprezentacja Base64 musi być ciągiem zakodowanym w formacie UTF-16LE.
-EncodedCommand Base64EncodedCommand <>
Akceptuje zakodowaną w formacie base-64 wersję ciągu polecenia. Użyj tego parametru, aby przesłać polecenia do programu PowerShell, które wymagają złożonych znaków cudzysłowu lub nawiasów klamrowych. Ciąg musi być sformatowany przy użyciu kodowania znaków UTF-16LE.
-ExecutionPolicy ExecutionPolicy <>
Ustawia domyślne zasady wykonywania dla bieżącej sesji i zapisuje je w zmiennej środowiskowej $env:PSExecutionPolicyPreference
. Ten parametr nie zmienia zasad wykonywania programu PowerShell ustawionych w rejestrze. Aby uzyskać informacje o zasadach wykonywania programu PowerShell, w tym listę prawidłowych wartości, zobacz about_Execution_Policies.
-InputFormat {Text | XML}
Opisuje format danych wysyłanych do programu PowerShell. Prawidłowe wartości to Text
(ciągi tekstowe) lub XML
(serializowany format CLIXML).
-Mta
Uruchamia program PowerShell przy użyciu apartamentu wielowątkowego. Ten parametr jest wprowadzany w programie PowerShell 3.0. W programie PowerShell 2.0 apartament wielowątkowy (MTA) jest domyślny. W programie PowerShell 3.0 jednowątkowy apartament (STA) jest domyślny.
-NoExit
Nie kończy się po uruchomieniu poleceń uruchamiania.
-Nieinteraktywnych
Ten przełącznik służy do tworzenia sesji, które nie powinny wymagać danych wejściowych użytkownika. Jest to przydatne w przypadku skryptów uruchamianych w zaplanowanych zadaniach lub potokach ciągłej integracji/ciągłego wdrażania. Wszelkie próby użycia funkcji interaktywnych, takich jak Read-Host
lub monity o potwierdzenie, powodują zakończenie instrukcji błędy, a nie zawieszają się.
-NoLogo
Ukrywa baner praw autorskich podczas uruchamiania.
-NoProfile
Nie ładuje profilu programu PowerShell.
-OutputFormat {Text | XML}
Określa sposób formatowania danych wyjściowych z programu PowerShell. Prawidłowe wartości to Text
(ciągi tekstowe) lub XML
(serializowany format CLIXML).
-PSConsoleFile <FilePath>
Ładuje określony plik konsoli programu PowerShell. Wprowadź ścieżkę i nazwę pliku konsoli. Aby utworzyć plik konsoli, użyj polecenia cmdlet Export-Console w programie PowerShell.
-Sta
Uruchamia program PowerShell przy użyciu jednowątkowego mieszkania. W programie Windows PowerShell 2.0 domyślnie jest to apartament wielowątkowy (MTA). W programie Windows PowerShell 3.0 jednowątkowy apartament (STA) jest domyślny.
-Wersja <programu PowerShell>
Uruchamia określoną wersję programu PowerShell. Prawidłowe wartości to 2.0 i 3.0. Określona wersja musi być zainstalowana w systemie. Jeśli na komputerze jest zainstalowany program Windows PowerShell 3.0, "3.0" jest wersją domyślną. W przeciwnym razie "2.0" jest wersją domyślną. Aby uzyskać więcej informacji, zobacz temat Instalacja PowerShell.
-Styl <okna okna>
Ustawia styl okna dla sesji. Prawidłowe wartości to Normal
, , Maximized
Minimized
i Hidden
.
-Pomoc-?/?
Wyświetla pomoc dotyczącą elementu PowerShell.exe
. Jeśli piszesz PowerShell.exe
polecenie w sesji programu PowerShell, poprzedzając parametry polecenia łącznikiem (-
), a nie ukośnik (/
). Możesz użyć łącznika lub ukośnika do przodu w .cmd.exe
UWAGI
Uwaga dotycząca rozwiązywania problemów: w programie PowerShell 2.0 uruchamianie niektórych programów z konsoli programu PowerShell kończy się niepowodzeniem z kodem LastExitCode 0xc0000142.
PRZYKŁADY
# 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