about_Parsing

Se aplica a: Windows PowerShell 2.0, Windows PowerShell 3.0, Windows PowerShell 4.0, Windows PowerShell 5.0

TEMA

about_Parsing

DESCRIPCIÓN BREVE

Describe cómo analiza Windows PowerShell los comandos.

DESCRIPCIÓN LARGA

Al escribir un comando en el símbolo del sistema, Windows PowerShell divide el texto del comando en una serie de segmentos denominados "tokens". Después, determina cómo se debe interpretar cada "token".

Por ejemplo, si escribe:

         Write-Host book

Windows PowerShell divide el siguiente comando en dos tokens, "Write-Host" y "book", e interpreta cada token de forma independiente.

Al procesar un comando, el analizador de Windows PowerShell funciona en modo de expresión o en modo de argumento:

- En el modo de expresión, los valores de cadena de caracteres deben estar escritos entre comillas. Los números que no estén entre comillas se tratarán como valores numéricos (y no como una serie de caracteres).

- En el modo de argumento, se trata cada valor como una cadena expandible, a menos que empiece por uno de los siguientes caracteres especiales: signo de dólar ($), arroba (@), comilla simple ('), comillas dobles (") o paréntesis de apertura (().

Si va precedido de uno de estos caracteres, el valor se tratará como una expresión de valor.

En la siguiente tabla aparecen varios ejemplos de comandos procesados en modo de expresión y en modo de argumento, así como los resultados producidos por dichos comandos.

    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)

Cada token puede interpretarse como alguna clase de tipo de objeto, como Boolean o string. Windows PowerShell trata de determinar el tipo de objeto a partir de la expresión. El tipo de objeto depende del tipo de parámetro que espera un comando y de si Windows PowerShell sabe cómo convertir el argumento en el tipo correcto. En la siguiente tabla se muestran varios ejemplos de los tipos asignados a los valores devueltos por las expresiones.

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

DETENER ANÁLISIS: --%

El símbolo de detención de análisis (--%), que se introdujo en Windows PowerShell 3.0, ordena que Windows PowerShell se abstenga de interpretar la entrada como comandos o expresiones de Windows PowerShell.

Al llamar a un programa ejecutable en Windows PowerShell, coloque el símbolo de detención de análisis antes de los argumentos del programa. Esta técnica es mucho más fácil que el uso de caracteres de escape para evitar una interpretación incorrecta.

Al encontrar un símbolo de detención de análisis, Windows PowerShell trata como literales los caracteres restantes de la línea. La única interpretación que lleva a cabo consiste en sustituir los valores por variables de entorno que usan la notación estándar de Windows, como %USERPROFILE%.

El símbolo de detención de análisis solo es eficaz hasta el siguiente carácter de nueva línea o de canalización. No se puede usar un carácter de continuación (`) para ampliar su efecto ni un delimitador de comando (;) para finalizar su efecto.

Por ejemplo, el siguiente comando llama al programa Icacls.

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

Para ejecutar este comando en Windows PowerShell 2.0, debe usar caracteres de escape para evitar que Windows PowerShell interprete los paréntesis incorrectamente.

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

A partir de Windows PowerShell 3.0, puede usar el símbolo de detención de análisis.

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

Windows PowerShell envía la siguiente cadena de comandos al programa Icacls:

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

VEA TAMBIÉN

about_Command_Syntax