次の方法で共有


about_Parsing

適用対象: Windows PowerShell 2.0, Windows PowerShell 3.0, Windows PowerShell 4.0, Windows PowerShell 5.0

トピック

about_Parsing

概要

Windows PowerShell によるコマンドの解析方法について説明します。

詳細説明

ユーザーがコマンド プロンプトでコマンドを入力すると、Windows PowerShell はコマンド テキストを「トークン」と呼ばれる一連のセグメントに分割し、各「トークン」の解釈方法を決定します。

たとえば、次のように入力したとします。

         Write-Host book

Windows PowerShell は次のコマンドを「Write-Host」と「book」の 2 つのトークンに分割し、各トークンを個別に解釈します。

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 で実行可能プログラムを呼び出すときは、プログラムの引数の前に解析停止記号を指定してください。この手法は、エスケープ文字を使用して誤った解釈を防ぐよりもはるかに簡単です。

Windows PowerShell は、解析停止記号を検出すると、行の残りの文字をリテラルとして処理します。実行される唯一の解釈は、値を Windows の標準表記を使用する環境変数 (%USERPROFILE% など) と見なすことです。

解析停止記号の有効範囲は、次の改行またはパイプライン文字までです。継続文字 (') を使用してその効果を拡張したり、コマンドの区切り文字 (;) を使用してその効果を停止したりすることはできません。

たとえば、次のコマンドは Icacls プログラムを呼び出します。

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

Windows PowerShell 2.0 でこのコマンドを実行するには、Windows PowerShell がかっこを誤って解釈しないようにエスケープ文字を使用する必要があります。

        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