Cómo ejecutar un script de PowerShell

712

¿Cómo ejecuto un script de PowerShell?

  • Tengo un script llamado myscript.ps1
  • Tengo todos los marcos necesarios instalados
  • Me puse de que la política de ejecución cosa
  • He seguido las instrucciones en esta página de ayuda de MSDN y estoy tratando de ejecutarlo así: powershell.exe 'C:\my_path\yada_yada\run_import_script.ps1'(con o sin --noexit)

que no devuelve exactamente nada, excepto que se muestra el nombre del archivo.

Sin error, sin mensaje, nada. Ah, cuando agrego -noexit, sucede lo mismo, pero permanezco dentro de PowerShell y tengo que salir manualmente.

Se supone que el archivo .ps1 ejecuta un programa y devuelve el nivel de error dependiente de la salida de ese programa. Pero estoy bastante seguro de que ni siquiera estoy llegando allí todavía.

¿Qué estoy haciendo mal?

Pekka
fuente
2
Comience powershellcomo lo habría hecho cmd. Ahora puede ejecutar el myscript.ps1script como cualquier ejecutable allí en (en la ventana de .\myscript.ps1
PowerShell

Respuestas:

733
  1. Inicie Windows PowerShell y espere un momento PSa que aparezca el símbolo del sistema
  2. Navegue al directorio donde vive el script

    PS> cd C:\my_path\yada_yada\ (enter)
  3. Ejecute el script:

    PS> .\run_import_script.ps1 (enter)

¿¿Qué me estoy perdiendo??

O: puede ejecutar el script de PowerShell de cmd.exeesta manera:

powershell -noexit "& ""C:\my_path\yada_yada\run_import_script.ps1""" (enter)

de acuerdo con esta publicación de blog aquí

O incluso podría ejecutar su script de PowerShell desde su aplicación C # :-)

Ejecute asíncronamente los scripts de PowerShell desde su aplicación C #

marc_s
fuente
19
El enlace de tu publicación de blog lo hizo. Tengo que usar powershell -noexit "& "C:\yada_yada\run_import_script.ps1"(observe las tres comillas dobles) Realmente no entiendo por qué, pero en este punto, realmente no me importa :) ¡Muchas gracias!
Pekka
16
¿Qué hace exactamente el "&?
BlueRaja - Danny Pflughoeft
16
De acuerdo con technet.microsoft.com/en-us/library/ee176949.aspx , el '&' es para "Si realmente desea ejecutar ese valor de cadena (es decir, si desea ejecutar el script cuya ruta está encerrada en comillas dobles) debe prefacio de la ruta con el operador de llamada (el signo ")".
Doug Dawson
29
ninguno de estos funcionó para mí hasta que pasé por alto la política de ejecución predeterminada de powershell para mi script sin firmar recién creado. Entre otras cosas, esto requería reiniciar PowerShell como administrador. Totalmente de acuerdo con @LukePuplett: es genial hacer que el caso de uso más simple tome 20 minutos buscando en Google y vagando por ahí. Y los mensajes de error! Aparentemente, estos tipos trabajaban en IBM ... en los años 70.
Spike0xff
15
Como se indica en un comentario a continuación, se debe omitir la política de ejecución. Uno de los elementos que no se trata aquí es cómo ejecutar un script de PowerShell desde una línea de comando que pasa un parámetro. Para hacer esto: escribapowershell -executionpolicy bypass ".\myscript.ps1 yadayadayada"
Jim Lahman
230

Si está utilizando PowerShell 2.0, use el -Fileparámetro PowerShell.exe para invocar un script desde otro entorno, como cmd.exe. Por ejemplo:

Powershell.exe -File C:\my_path\yada_yada\run_import_script.ps1
Keith Hill
fuente
55
¿Hay alguna manera de agregar parámetros a dicha invocación?
Alexander Groß
11
Debería poder seguir los argumentos después de la ruta del archivo de script. Del uso de PowerShell.exe - [-File <filePath> <args>]
Keith Hill
"no se puede cargar porque la ejecución de scripts está deshabilitada en este sistema. Consulte" get-help about_signing "para obtener más detalles".
Pavel Vlasov
77
Si no ha habilitado la ejecución del script de PowerShell en su sistema, agregue el parámetro-ExecutionPolicy Bypass
Keith Hill el
44
Para su información, esto también funciona para PowerShell 1.0 en mi experiencia (Windows 2012 Server)
llamado el
189

Si desea ejecutar un script sin modificar la directiva de ejecución de secuencias de comandos predeterminado, puede utilizar la derivación de interruptor cuando el lanzamiento de Windows PowerShell .

powershell [-noexit] -executionpolicy bypass -File <Filename>
Chingiz Musayev
fuente
11
Además, incluya la -nologoopción para deshacerse del banner de inicio
swdev
73

Tipo:

powershell -executionpolicy bypass -File .\Test.ps1

NOTA: Aquí Test.ps1está el script de PowerShell.

Sudheesh
fuente
Esto debería ejecutarse en un PowerShell ya que powershell -executionpolicy bypass -File .\Test.ps1suponiendo que su directorio de trabajo actual contiene Test.ps1
Yeow_Meng
29

Tuve el mismo problema y lo intenté y lo intenté ... Finalmente utilicé:

powershell.exe -noexit "& 'c:\Data\ScheduledScripts\ShutdownVM.ps1'"

Y ponga esta línea en un archivo por lotes, y esto funciona.

Dennis
fuente
22

Si solo tiene PowerShell 1.0 , esto parece funcionar bastante bien:

powershell -command - < c:\mypath\myscript.ps1

Canaliza el archivo de script a la línea de comandos de PowerShell.

AndyM
fuente
3
Truco útil cuando las políticas de seguridad no permiten la ejecución de scripts.
Aron Lorincz
17

Muy fácil. Haga clic derecho en el archivo .ps1 en Windows y en el menú de shell haga clic en Ejecutar con PowerShell .

electronictonic
fuente
Esto funciona para ejecutar rápidamente un script sin tener que habilitar la ejecución de scripts con la política de ejecución. ¡Gracias!
b01
Esto es lo que estaba buscando, gracias!
Aamol
11

Usando el archivo cmd (BAT):

@echo off
color 1F
echo.

C:\Windows\system32\WindowsPowerShell\v1.0\powershell.exe -ExecutionPolicy Bypass -File "PrepareEnvironment.ps1"

:EOF
echo Waiting seconds
timeout /t 10 /nobreak > NUL

Si necesita ejecutar como administrador :

  1. Haga un acceso directo señalado al símbolo del sistema (lo llamé Símbolo del sistema administrativo)
  2. Abra las propiedades del acceso directo y vaya a la pestaña Compatibilidad
  3. En la sección Nivel de privilegio, asegúrese de que la casilla de verificación junto a "Ejecutar este programa como administrador" esté marcada
Kiquenet
fuente
11

Una manera fácil es usar PowerShell ISE , abrir script, ejecutar e invocar su script, función ...

Ingrese la descripción de la imagen aquí

José Evaristo Cepeda Barrera
fuente
10

Si su secuencia de comandos se nombra con la .ps1extensión y está en una ventana de PowerShell, simplemente ejecuta ./myscript.ps1(suponiendo que el archivo esté en su directorio de trabajo).

De todos modos, esto es cierto para mí en Windows 10 con PowerShell versión 5.1, y no creo que haya hecho nada para que sea posible.

rainabba
fuente
2
¿Cómo responde esto a la pregunta?
Peter Mortensen
44
responde absolutamente la pregunta: ¿cómo ejecuto un script de PowerShell? respuesta: inicie la consola powershell, luego ejecute el script. fácil. simple. Funciona en Linux también.
Thufir
44
Esto responde absolutamente la pregunta, y era exactamente lo que estaba buscando. como myscript.ps1no funcionó, arrojó un error, pero con ./su ejecución.
Jeff
7
  • Indique la ruta de la secuencia de comandos, es decir, la configuración de ruta por cmd:

    $> . c:\program file\prog.ps1

  • Ejecute la función de punto de entrada de PowerShell:

    Por ejemplo, $> add or entry_func or main

pkm
fuente
Ejecutando sus comandos desde un indicador de cmd: >$ . c:\program file\prog.ps1 '.' is not recognized as an internal or external command, operable program or batch file.y>$ add or entry_func or main 'add' is not recognized as an internal or external command, operable program or batch file.
Suncat2000
1

Use el -Fileparámetro delante del nombre del archivo. Las citas hacen que PowerShell piense que es una cadena de comandos.

Ingeniero
fuente
1

Tengo una respuesta muy simple que funciona:

  1. Abra PowerShell en modo administrador
  2. Correr: set-executionpolicy unrestricted
  3. Abra una ventana normal de PowerShell y ejecute su script.

Encontré esta solución siguiendo el enlace que se proporcionó como parte del mensaje de error: Acerca de las políticas de ejecución

solstinger
fuente