Informacje o analizowaniu
KRÓTKI OPIS
Opisuje sposób analizowania poleceń programu PowerShell.
DŁUGI OPIS
Po wprowadzeniu polecenia w wierszu polecenia program PowerShell dzieli tekst polecenia na serię segmentów nazywanych "tokenami", a następnie określa, jak interpretować poszczególne "tokeny".
Jeśli na przykład wpiszesz:
książka Write-Host
Program PowerShell dzieli następujące polecenie na dwa tokeny: "Write-Host" i "book" i interpretuje każdy token niezależnie.
Podczas przetwarzania polecenia analizator programu PowerShell działa w trybie wyrażenia lub w trybie argumentu:
W trybie wyrażenia wartości ciągów znaków muszą być zawarte w cudzysłowie. Liczby, które nie są ujęte w cudzysłów, są traktowane jako wartości liczbowe (a nie jako seria znaków).
W trybie argumentu każda wartość jest traktowana jako ciąg rozwijalny, chyba że zaczyna się od jednego z następujących znaków specjalnych: znak dolara ($), znak znaku (@), znak cudzysłowu jednokrotnego ('), podwójny cudzysłów (") lub nawias otwierający (().
Jeśli poprzedza jeden z tych znaków, wartość jest traktowana jako wyrażenie wartości.
W poniższej tabeli przedstawiono kilka przykładów poleceń przetwarzanych w trybie wyrażeń i trybie argumentów oraz wynikach wygenerowanych przez te polecenia.
Przykład | Mode | Wynik |
---|---|---|
2+2 | Wyrażenie | 4 (liczba całkowita) |
Write-Output 2+2 | Argument | "2+2" (ciąg) |
Write-Output (2+2) | Wyrażenie | 4 (liczba całkowita) |
$a = 2+2 | Wyrażenie | $a = 4 (liczba całkowita) |
Write-Output $a | Wyrażenie | 4 (liczba całkowita) |
Write-Output $a/H | Argument | "4/H" (ciąg) |
Każdy token może być interpretowany jako jakiś typ obiektu, taki jak wartość logiczna lub ciąg. Program PowerShell próbuje określić typ obiektu z wyrażenia. Typ obiektu zależy od typu parametru oczekiwanego przez polecenie i od tego, czy program PowerShell wie, jak przekonwertować argument na poprawny typ. W poniższej tabeli przedstawiono kilka przykładów typów przypisanych do wartości zwracanych przez wyrażenia.
Przykład | Mode | Wynik |
---|---|---|
Write-Output !1 | Argument | "!1" (ciąg) |
Write-Output (!1) | expression | False (wartość logiczna) |
Write-Output (2) | expression | 2 (liczba całkowita) |
Symbol zatrzymania analizowania (--%), wprowadzony w programie PowerShell 3.0, nakazuje programowi PowerShell powstrzymanie się od interpretowania danych wejściowych jako poleceń lub wyrażeń programu PowerShell.
Podczas wywoływania programu wykonywalnego w programie PowerShell umieść symbol zatrzymania analizy przed argumentami programu. Ta technika jest znacznie łatwiejsza niż używanie znaków ucieczki, aby zapobiec błędnej interpretacji.
Gdy napotka symbol zatrzymania analizy, program PowerShell traktuje pozostałe znaki w wierszu jako literał. Jedyną interpretacją, którą wykonuje, jest zastąpienie wartości zmiennych środowiskowych korzystających ze standardowej notacji systemu Windows, takiej jak %USERPROFILE%.
Symbol zatrzymania analizy jest skuteczny tylko do następnego nowego wiersza lub znaku potoku. Nie można użyć znaku kontynuacji ('), aby rozszerzyć jego efekt lub użyć ogranicznika polecenia (;), aby przerwać jego efekt.
Na przykład następujące polecenie wywołuje program Icacls.
icacls X:\VMS /grant Dom\HVAdmin:(CI)(OI)F
Aby uruchomić to polecenie w programie PowerShell 2.0, należy użyć znaków ucieczki, aby zapobiec błędnej interpretacji nawiasów w programie PowerShell.
icacls X:\VMS /grant Dom\HVAdmin:`(CI`)`(OI`)F
Począwszy od programu PowerShell 3.0, można użyć symbolu stop-parsing.
icacls X:\VMS --% /grant Dom\HVAdmin:(CI)(OI)F
Program PowerShell wysyła następujący ciąg polecenia do programu Icacls:
X:\VMS /grant Dom\HVAdmin:(CI)(OI)F