Поделиться через


about_Parsing

Назначение: Windows PowerShell 2.0, Windows PowerShell 3.0

РАЗДЕЛ

about_Parsing

КРАТКОЕ ОПИСАНИЕ

Описание анализа команд в Windows PowerShell.

ПОДРОБНОЕ ОПИСАНИЕ

Когда вы вводите команду в командной строке, Windows PowerShell разбивает текст команды на ряд сегментов, называемых лексемами, а затем определяет способ интерпретации каждой лексемы.

Например, если ввести:

         Write-Host book

Windows PowerShell разбивает следующую команду на две лексемы («Write-Host» и «book») и интерпретирует каждую лексему независимо друг от друга.

При обработке команды средство анализа Windows PowerShell работает в режиме выражения или в режиме аргумента.

– В режиме выражения значения строк символов следует заключить в кавычки. Числа, не заключенные в кавычки, рассматриваются как числовые значения (а не как последовательность символов).

– В режиме аргумента каждое значение рассматривается как расширяемая строка, если оно не начинается со следующих специальных символов: символ доллара ($), символ @, одинарная кавычка ('), двойная кавычка (") или открывающая скобка (().

Если перед значением стоит один из этих символов, оно рассматривается как выражение значения.

Ниже приведено несколько примеров команд, обработанных в режиме выражения и режиме аргумента, и результаты выполнения этих команд.

    Example            Mode         Result
    ------------------ ----------   ----------------
    2+2                Expression   4 (integer)
    Write-Output 2+2   Argument     "2+2" (string)
    Write-Output (2+2) Expression   4 (integer)
    $a = 2+2           Expression   $a = 4 (integer)
    Write-Output $a    Expression   4 (integer)
    Write-Output $a/H  Argument     "4/H" (string)

Каждую лексему можно интерпретировать как некий тип объекта, например логический или строковый. Windows PowerShell пытается определить тип объекта из выражения. Тип объекта зависит от типа параметра, ожидаемого командой, и от того, знает ли Windows PowerShell, как преобразовать аргумент в требуемый тип. Ниже приведено несколько примеров типов, которые назначаются значениям, возвращаемым выражениями.

    Example            Mode         Result
    ------------------ ----------   ---------------
    Write-Output !1    argument     "!1" (string)
    Write-Output (!1)  expression   False (Boolean)
    Write-Output (2)   expression   2 (integer)

ОСТАНОВКА АНАЛИЗА: --%

Символ остановки анализа (--%), впервые представленный в Windows PowerShell 3.0, указывает Windows PowerShell не интерпретировать входные данные как команды или выражения Windows PowerShell.

При вызове исполняемой программы в Windows PowerShell поместите символ остановки анализа перед аргументами программы. Этот прием гораздо проще использования escape-символов для предотвращения неправильной интерпретации.

При обнаружении символа остановки анализа Windows PowerShell рассматривает остальные символы в строке как литеральные. Единственной выполняемой интерпретацией является замена значений для переменных среды, которые используют стандартную нотацию Windows, например %USERPROFILE%.

Символ остановки анализа действует только до следующего символа новой строки или конвейера. Нельзя использовать символ продолжения (') для расширения его действия или разделитель команд (;) для остановки его действия.

Например, следующая команда вызывает программу Icacls.

        icacls X:\VMS /grant Dom\HVAdmin:(CI)(OI)F

Для выполнения этой команды в Windows PowerShell 2.0 необходимо использовать escape-символы, чтобы предотвратить неправильную интерпретацию скобок.

        icacls X:\VMS /grant Dom\HVAdmin:`(CI`)`(OI`)F

Символ остановки анализа можно использовать, начиная с Windows PowerShell 3.0.

        icacls X:\VMS --% /grant Dom\HVAdmin:(CI)(OI)F

Windows PowerShell отправляет следующую строку команды в программу Icacls:

        X:\VMS /grant Dom\HVAdmin:(CI)(OI)F

СМ. ТАКЖЕ

about_Command_Syntax