Ejecute un archivo por lotes desde PowerShell [4 formas]
En Windows PowerShell, podemos ejecutar archivos por lotes de varias formas.
Ejecutar el archivo por lotes especificando la ruta absoluta o relativa utilizando el operador comercial (
&):ejecutando el archivo bat usando & operador:
Write-Host "Running the Batch Script Now..." & C:\Scripts\testPS.batEjecutar el archivo por lotes mediante el cmdlet
Invoke-Expression. Este comando funciona de manera similar con el operador comercial (&), pero lo escribimos en formato PowerShell.ejecutando el archivo bat usando el comando invoke-expression:
Invoke-Expression -Command ".\testPS.bat"-
Ejecutar el archivo por lotes llamando al archivo ejecutable del símbolo del sistema:
ejecutando el archivo bat llamando a cmd dentro de powershell:
cmd.exe -/c ".\testPS.bat" Ejecutar el archivo por lotes mediante el cmdlet
Start-Process. Al igual que nuestro otro comando de PowerShell, este cmdlet funciona de manera similar cuando llamamos a un archivo ejecutable, pero lo escribimos en formato PowerShell. Este comando también acepta argumentos si pasamos variables al archivo.ejecutando el archivo bat usando el comando start-expression:
Start-Process "cmd.exe" ".\testPS.bat" -Verb RunAs -NoNewWindow -Verb RunAs -NoNewWindow
Formas de ejecutar archivos por lotes en PowerShell
PowerShell es uno de los métodos de secuencias de comandos modernos, especialmente en una plataforma o máquina basada en el sistema operativo Windows. Sin embargo, a veces, a pesar de la modernización, todavía hay algunas tareas menores en las que los lenguajes de programación heredados tienen la ventaja. Un ejemplo de esto son estos procedimientos de secuencias de comandos heredados que se denominan secuencias de comandos por lotes.
Podemos incorporar fácilmente scripts por lotes dentro de PowerShell, ya que Windows creó ambos lenguajes de script en la misma plataforma. Este artículo analizará cómo podemos ejecutar e incluir scripts por lotes dentro de PowerShell.
Hay varias formas de ejecutar un archivo por lotes (BAT) o un script dentro del entorno de PowerShell.
Ejecutar el archivo BAT usando la ruta absoluta y relativa
Para nuestro primer método, podemos ejecutar el archivo BAT simplemente llamando a la ruta o ubicación del archivo. Para hacer esto, siga los pasos a continuación:
- Abra PowerShell (preferiblemente en modo administrador).
- Naveguemos hasta el directorio donde hemos colocado nuestro archivo por lotes o script. Podemos usar el comando check directorio o
cdpara navegar. Para este ejemplo, creemos uncden el directorioC:\Scriptsy localicemos el archivo por lotes de ejemplo. - Ejecute el archivo por lotes o script escribiendo su nombre y presionando Enter. Por ejemplo, si creamos un archivo por lotes llamado testPS.bat, use el siguiente comando:
llamando al nombre del archivo bat:
testPS.batAlternativamente, podemos ejecutar un archivo por lotes o un script especificando su ruta relativa o absoluta en el comando de PowerShell. Por ejemplo, para ejecutar un archivo por lotes ubicado en el directorio C:\Scripts, podemos usar cualquiera de los siguientes comandos:
llamando a la ruta absoluta y relativa del archivo bat:
.\testPS.bat
C:\Scripts\testPS.batAl hacerlo de esta manera, no necesitamos ingresar manualmente cd en el directorio. Tenga en cuenta que utilizamos la sintaxis .\ para especificar una ruta relativa, mientras que la ruta completa especifica una absoluta.
Sin embargo, el método anterior sería útil si ejecutamos el archivo BAT dentro de la terminal de línea de comandos de PowerShell. Sin embargo, ¿qué pasa si incorporamos el archivo BAT dentro de un archivo PowerShell, quizás dentro de PowerShell ISE?
Podemos usar el operador ampersand (&) y anteponerlo a nuestras rutas de archivos BAT. Sin embargo, no realiza ninguna función adicional, ya que su función principal es ejecutar comandos. Sin embargo, es una buena práctica de secuencias de comandos y mejora la legibilidad de nuestro código, ya que & indica que estamos ejecutando comandos heredados nativos dentro de PowerShell.
Por ejemplo, aquí hay un script de PowerShell de muestra:
llamando a la ruta absoluta y relativa del archivo bat dentro de powershell:
Write-Host "This is a powershell script."
Write-Host "Running the Batch Script Now..."
& C:\Scripts\testPS.batEjecutar el archivo BAT usando el comando Invoke-Expression
También es posible ejecutar un archivo por lotes o un script utilizando el cmdlet Invoke-Expression, que le permite ejecutar una cadena como si fuera un comando. Podemos hacer esto si queremos escribir todo con el estilo PowerShell en lugar de usar el operador &. Por ejemplo, para ejecutar un archivo por lotes ubicado en el directorio C:\Scripts, puede utilizar el siguiente comando:
ejecutando el archivo bat usando invoke-expression:
Invoke-Expression -Command ".\testPS.bat"También podemos usar el cmdlet Invoke-Expression para ejecutar un comando almacenado en una variable. Por ejemplo:
ejecutando el archivo bat usando el ejemplo 2 de expresión de invocación:
$batFileLocation = ".\testPS.bat"
Invoke-Expression -Command $batFileLocationEjecutar el archivo BAT llamando al símbolo del sistema
En PowerShell, como en cualquier otro terminal, podemos llamar a un archivo ejecutable. Además, es bueno que el símbolo del sistema tenga un archivo ejecutable dedicado llamado cmd.exe. Podemos usar este archivo ejecutable para ejecutar el archivo BAT dentro del entorno de PowerShell.
Solo tenemos que agregar un parámetro /c al archivo cmd.exe y agregar la ruta al archivo BAT. El parámetro /c es similar al comando Invoke-Expression anterior, que convierte el valor de la cadena en un comando dentro del archivo ejecutable.
ejecutando el archivo bat llamando al cmd exe:
cmd.exe -/c ".\testPS.bat"Ejecutar el archivo BAT usando el comando Iniciar proceso
Este comando es similar a las dos formas anteriores introducidas para el último método. Podemos usar el comando Start-Process para iniciar un proceso (normalmente un archivo ejecutable) y pasar argumentos si es necesario. Este comando es mucho mejor que el último método, ya que podemos mantener el estilo de escritura de PowerShell.
ejecutando el archivo bat usando start-process:
Start-Process -FilePath '.\testPS.bat' -NoNewWindowAgregamos el comando Start-Process con dos parámetros, -FilePath y -NoNewWindow. El parámetro de ruta del archivo determina la ubicación del archivo BAT que ejecutaremos, y el parámetro -NoNewWindow inicia el proceso definido en la ventana actual sin abrir otra ventana de PowerShell.
Alternativamente, podemos transformar el comando anterior para aceptar argumentos usando el parámetro -ArgumentList.
ejecutando el archivo bat en invoke-expression con argumentos:
Start-Process -FilePath 'cmd.exe' -ArgumentList @("/C", "'testfilePS.bat'") -Verb RunAs -NoNewWindowComo podemos ver, también agregué un nuevo parámetro llamado -Verb con un valor de RunAs que permitirá a PowerShell iniciar el proceso en modo Administrador.
Podemos simplificar esto aún más simplemente proporcionando los valores como forma abreviada. Ahora nuestro comando será similar a nuestros comandos anteriores pero escrito en estilo de secuencia de comandos de PowerShell.
ejecutando el archivo bat en forma abreviada de expresión de invocación:
Start-Process "cmd.exe" ".\testPS.bat" -Verb RunAs -NoNewWindowEl primer valor indica qué proceso iniciar y el segundo valor es la ruta del archivo junto con los argumentos (si los hay).
Estos son ejemplos de ejecución de scripts o archivos por lotes dentro del entorno de PowerShell. Dependiendo de nuestras necesidades específicas, es posible que necesitemos diferentes enfoques para ejecutar nuestros scripts y archivos por lotes.
Se trata de cómo ejecutar un archivo bat en PowerShell