Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
PowerShell es un shell de línea de comandos y un lenguaje de scripting que se usa para la automatización. De forma similar a otros shells, como bash
en Linux o windows Command Shell (cmd.exe
), PowerShell le permite ejecutar cualquier comando disponible en el sistema, no solo comandos de PowerShell.
Tipos de comandos
Para cualquier shell de cualquier sistema operativo hay tres tipos de comandos:
Las palabras clave del lenguaje del shell forman parte del lenguaje de scripting del shell.
- Algunos ejemplos de palabras clave de
bash
son:if
,then
,else
,elif
yfi
. - Algunos ejemplos de palabras clave de
cmd.exe
son:dir
,copy
,move
,if
yecho
. - Algunos ejemplos de palabras clave de PowerShell son:
for
,foreach
,try
,catch
ytrap
.
Las palabras clave del lenguaje shell solo se pueden usar en el entorno en tiempo de ejecución del shell. No hay ningún archivo ejecutable, externo al shell, que proporciona la funcionalidad de la palabra clave.
- Algunos ejemplos de palabras clave de
comandos nativos del sistema operativo son archivos ejecutables instalados en el sistema operativo. Los ejecutables se pueden ejecutar desde cualquier shell de línea de comandos, como PowerShell. Esto incluye archivos de script que pueden requerir que otros shells funcionen correctamente. Por ejemplo, si ejecuta un archivo de script por lotes de Windows (
.cmd
) en PowerShell, PowerShell ejecutacmd.exe
y transmite el archivo de script por lotes para su ejecución.comandos específicos del entorno de Shell son comandos definidos en archivos externos que solo se pueden usar en el entorno en tiempo de ejecución del shell. Estos incluyen scripts y funciones, o pueden ser módulos especialmente compilados que agregan comandos al entorno de ejecución del shell. En PowerShell, estos comandos se conocen como cmdlets (pronunciado "command-lets").
Ejecución de comandos nativos
Cualquier comando nativo se puede ejecutar desde la línea de comandos de PowerShell. Normalmente, ejecuta el comando exactamente como lo haría en bash
o cmd.exe
. En el ejemplo siguiente se muestra cómo ejecutar el comando grep
en bash
en 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.
Después de iniciar PowerShell en Ubuntu, puede ejecutar el mismo comando desde la línea de comandos de PowerShell:
PS /home/sdwheeler> grep sdwheeler /etc/passwd
sdwheeler:x:1000:1000:,,,:/home/sdwheeler:/bin/bash
Pasar argumentos a comandos nativos
La mayoría de los shells incluyen características para usar variables, evaluar expresiones y controlar cadenas. Pero cada shell hace estas cosas de manera distinta. En PowerShell, todos los parámetros comienzan con un carácter de guion (-
). En cmd.exe
, la mayoría de los parámetros usan un carácter de barra diagonal (/
). Es posible que otras herramientas de línea de comandos no tengan un carácter especial para los parámetros.
Cada shell tiene su propia manera de controlar y evaluar cadenas en la línea de comandos. Al ejecutar comandos nativos en PowerShell que esperan que las cadenas estén entrecomilladas de forma específica, es posible que necesite ajustar cómo se pasan esas cadenas.
Para obtener más información, consulte los artículos siguientes:
PowerShell 7.2 introdujo una nueva característica experimental PSNativeCommandArgumentPassing
que mejoró el control de comandos nativos. Para obtener más información, consulte $PSNativeCommandArgumentPassing
.
Control de la salida y los errores
PowerShell también tiene varios flujos de salida más que otros shells. Los shells bash
y cmd.exe
tienen stdout y stderr. PowerShell tiene seis flujos de salida. Para obtener más información, vea about_Redirection y about_Output_Streams.
En general, la salida enviada a stdout por un comando nativo se envía a la secuencia Success en PowerShell. La salida enviada a stderr por un comando nativo se envía a la secuencia Erroren PowerShell.
Cuando un comando nativo tiene un código de salida distinto de cero, $?
se establece en $false
. Si el código de salida es cero, $?
se establece en $true
.
Sin embargo, esto cambió en PowerShell 7.2. Los registros de error redirigidos desde comandos nativos, como cuando se usan operadores de redireccionamiento (2>&1
), no se escriben en la variable $Error
de PowerShell y la variable de preferencia $ErrorActionPreference
no afecta a la salida redirigida.
Muchos comandos nativos escriben en stderr a modo de flujo alternativo para obtener información adicional. Este comportamiento puede causar confusión en PowerShell al revisar los errores y se pierde la información de salida adicional si $ErrorActionPreference
está establecido en un estado que muta la salida.
PowerShell 7.3 ha agregado una nueva característica experimental PSNativeCommandErrorActionPreference
que permite controlar si la salida a stderr
se trata como un error. Para obtener más información, consulte $PSNativeCommandUseErrorActionPreference
.
Ejecución de comandos de PowerShell
Como se indicó anteriormente, los comandos de PowerShell se conocen como cmdlets. Los cmdlets se recopilan en módulos de PowerShell que se pueden cargar a petición. Los cmdlets se pueden escribir en cualquier lenguaje .NET compilado o mediante el propio lenguaje de scripting de PowerShell.
Comandos de PowerShell que ejecutan otros comandos
El operador de llamada de PowerShell (&
) permite ejecutar comandos almacenados en variables y representados por cadenas o bloques de script. Puede usarlo para ejecutar cualquier comando nativo o comando de PowerShell. Esto es útil en un script cuando necesita construir dinámicamente los parámetros de la línea de comandos para un comando nativo. Para obtener más información, vea el operador de llamada.
El cmdlet Start-Process
se puede usar para ejecutar comandos nativos, pero solo debe usarse cuando necesite controlar cómo se ejecuta el comando. El cmdlet tiene parámetros para admitir los siguientes escenarios:
- Ejecución de un comando con credenciales diferentes
- Ocultar la ventana de consola creada por el nuevo proceso
- Redirección de los flujos stdin, stdout y stderr
- Uso de un directorio de trabajo diferente para el comando
En el ejemplo siguiente se ejecuta el comando nativo sort.exe
con flujos de entrada y salida redirigidos.
$processOptions = @{
FilePath = "sort.exe"
RedirectStandardInput = "TestSort.txt"
RedirectStandardOutput = "Sorted.txt"
RedirectStandardError = "SortError.txt"
UseNewEnvironment = $true
}
Start-Process @processOptions
Para obtener más información, vea Start-Process.
En Windows, el cmdlet Invoke-Item
realiza la acción predeterminada para el elemento especificado. Por ejemplo, ejecuta un archivo ejecutable o abre un archivo de documento mediante la aplicación asociada al tipo de archivo de documento. La acción predeterminada depende del tipo de elemento y se resuelve mediante el proveedor de PowerShell que proporciona acceso al elemento.
En el ejemplo siguiente se abre el repositorio de código fuente de PowerShell en el explorador web predeterminado.
Invoke-Item https://github.com/PowerShell/PowerShell
Para obtener más información, vea Invoke-Item.