Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
PowerShell jest powłoką wiersza polecenia i językiem skryptowym używanym do automatyzacji. Podobnie jak w przypadku innych powłok, takich jak bash
w systemie Linux czy powłoki poleceń systemu Windows (cmd.exe
), PowerShell umożliwia uruchamianie dowolnego polecenia dostępnego w systemie, a nie tylko poleceń PowerShell.
Typy poleceń
W przypadku dowolnej powłoki w dowolnym systemie operacyjnym istnieją trzy typy poleceń:
słowa kluczowe języka powłoki są częścią języka skryptowego powłoki.
- Przykłady słów kluczowych
bash
to:if
,then
,else
,elif
ifi
. - Przykłady słów kluczowych
cmd.exe
to:dir
,copy
,move
,if
iecho
. - Przykłady słów kluczowych programu PowerShell to:
for
,foreach
,try
,catch
itrap
.
Słowa kluczowe języka powłoki mogą być używane tylko w środowisku uruchomieniowym powłoki. Nie istnieje plik wykonywalny zewnętrzny względem powłoki, który dostarczałby funkcjonalność słowa kluczowego.
- Przykłady słów kluczowych
natywne polecenia systemu operacyjnego to pliki wykonywalne zainstalowane w systemie operacyjnym. Pliki wykonywalne można uruchamiać z dowolnej powłoki wiersza polecenia, takiej jak PowerShell. Obejmuje to pliki skryptów, które mogą wymagać innych powłok do prawidłowego działania. Na przykład, jeśli uruchomisz skrypt wsadowy systemu Windows (plik
.cmd
) w programie PowerShell, program PowerShell uruchomicmd.exe
i przekaże plik wsadowy do wykonania.Polecenia specyficzne dla środowiska powłoki to polecenia zdefiniowane w plikach zewnętrznych, które mogą być używane tylko w kontekście działania powłoki. Obejmują one skrypty i funkcje lub mogą być specjalnie skompilowanymi modułami, które dodają polecenia do środowiska uruchomieniowego powłoki. W programie PowerShell te polecenia są nazywane poleceniami cmdlet (wymawiane jako "command-let").
Uruchamianie poleceń natywnych
Dowolne natywne polecenie można uruchomić z poziomu wiersza polecenia programu PowerShell. Zazwyczaj polecenie jest uruchamiane dokładnie tak, jak w bash
lub cmd.exe
. W poniższym przykładzie pokazano uruchomienie polecenia grep
w bash
w systemie Ubuntu Linux.
sdwheeler@circumflex:~$ grep sdwheeler /etc/passwd
sdwheeler:x:1000:1000:,,,:/home/sdwheeler:/bin/bash
sdwheeler@circumflex:~$ pwsh
PowerShell 7.2.6
Copyright (c) Microsoft Corporation.
https://aka.ms/powershell
Type 'help' to get help.
Po uruchomieniu programu PowerShell w systemie Ubuntu możesz uruchomić to samo polecenie w wierszu polecenia programu PowerShell:
PS /home/sdwheeler> grep sdwheeler /etc/passwd
sdwheeler:x:1000:1000:,,,:/home/sdwheeler:/bin/bash
Przekazywanie argumentów do poleceń natywnych
Większość powłok zawiera funkcje używania zmiennych, oceniania wyrażeń i obsługi łańcuchów znaków. Ale każda powłoka robi te rzeczy inaczej. W programie PowerShell wszystkie parametry zaczynają się od znaku łącznika (-
). W cmd.exe
większość parametrów używa znaku ukośnika (/
). Inne narzędzia wiersza polecenia mogą nie mieć specjalnego znaku dla parametrów.
Każda powłoka ma własny sposób obsługi i oceniania ciągów w wierszu polecenia. Podczas uruchamiania natywnych poleceń w programie PowerShell, które oczekują cytowania ciągów w określony sposób, może być konieczne dostosowanie sposobu przekazywania tych ciągów.
Aby uzyskać więcej informacji, zobacz następujące artykuły:
Program PowerShell 7.2 wprowadził nową funkcję eksperymentalną PSNativeCommandArgumentPassing
, która poprawiła natywną obsługę poleceń. Aby uzyskać więcej informacji, zobacz $PSNativeCommandArgumentPassing
.
Obsługa danych wyjściowych i błędów
Program PowerShell ma również więcej strumieni wyjściowych niż inne powłoki. Powłoki bash
i cmd.exe
mają stdout i stderr. Program PowerShell ma sześć strumieni wyjściowych. Aby uzyskać więcej informacji, zobacz about_Redirection i about_Output_Streams.
Ogólnie rzecz biorąc, dane wyjściowe wysyłane do
Gdy natywne polecenie ma kod zakończenia inny niż zero, $?
jest ustawiona na $false
. Jeśli kod zakończenia ma wartość zero, $?
jest ustawiona na wartość $true
.
Jednak ta zmiana została zmieniona w programie PowerShell 7.2. Rekordy błędów przekierowane z natywnych poleceń, takich jak w przypadku używania operatorów przekierowania (2>&1
), nie są zapisywane w zmiennej $Error
programu PowerShell, a zmienna preferencji $ErrorActionPreference
nie ma wpływu na przekierowane dane wyjściowe.
Wiele natywnych poleceń zapisuje w stderr jako alternatywny strumień dodatkowych informacji. To zachowanie może spowodować zamieszanie w programie PowerShell podczas przeglądania błędów, a dodatkowe informacje wyjściowe mogą zostać utracone, jeśli $ErrorActionPreference
jest ustawiony na stan wyciszenia danych wyjściowych.
Program PowerShell 7.3 dodał nową funkcję eksperymentalną PSNativeCommandErrorActionPreference
, która umożliwia kontrolowanie, czy dane wyjściowe stderr
są traktowane jako błąd. Aby uzyskać więcej informacji, zobacz $PSNativeCommandUseErrorActionPreference
.
Uruchamianie poleceń programu PowerShell
Jak wspomniano wcześniej, polecenia programu PowerShell są nazywane poleceniami cmdlet. Polecenia cmdlet są gromadzone w modułach programu PowerShell i mogą być ładowane na żądanie. Polecenia cmdlet można pisać w dowolnym skompilowanym języku .NET lub użyć samego języka skryptów programu PowerShell.
Polecenia programu PowerShell uruchamiające inne polecenia
Program PowerShell operator wywołania (&
) umożliwia uruchamianie poleceń przechowywanych w zmiennych i reprezentowanych przez ciągi lub bloki skryptu. Można go użyć do uruchomienia dowolnego natywnego polecenia lub polecenia programu PowerShell. Jest to przydatne w skryscie, gdy trzeba dynamicznie konstruować parametry wiersza polecenia dla natywnego polecenia. Aby uzyskać więcej informacji, zobacz operatora wywołania
Polecenie cmdlet Start-Process
może służyć do uruchamiania natywnych poleceń, ale należy ich używać tylko wtedy, gdy trzeba kontrolować sposób wykonywania polecenia. Polecenie cmdlet ma parametry do obsługi następujących scenariuszy:
- Uruchamianie polecenia przy użyciu różnych poświadczeń
- Ukryj okno konsoli utworzone przez nowy proces
- Przekieruj strumień stdin, stdouti stderr
- Użyj innego katalogu roboczego dla polecenia
Poniższy przykład uruchamia natywne polecenie sort.exe
z przekierowanymi strumieniami wejściowymi i wyjściowymi.
$processOptions = @{
FilePath = "sort.exe"
RedirectStandardInput = "TestSort.txt"
RedirectStandardOutput = "Sorted.txt"
RedirectStandardError = "SortError.txt"
UseNewEnvironment = $true
}
Start-Process @processOptions
Aby uzyskać więcej informacji, zobacz Start-Process.
W systemie Windows polecenie cmdlet Invoke-Item
wykonuje domyślną akcję dla określonego elementu. Na przykład uruchamia plik wykonywalny lub otwiera plik dokumentu przy użyciu aplikacji skojarzonej z typem pliku dokumentu. Domyślna akcja zależy od typu elementu i jest rozpoznawana przez dostawcę programu PowerShell, który zapewnia dostęp do elementu.
Poniższy przykład otwiera repozytorium kodu źródłowego programu PowerShell w domyślnej przeglądarce internetowej.
Invoke-Item https://github.com/PowerShell/PowerShell
Aby uzyskać więcej informacji, zobacz Invoke-Item.