usar todos script los interesantes ejemplos como comandos comando cancelar powershell

todos - script powershell ejemplos



¿Cómo decirle a PowerShell que espere a que termine cada comando antes de comenzar el siguiente? (7)

Tengo un script de PowerShell 1.0 para simplemente abrir un montón de aplicaciones. La primera es una máquina virtual y las otras son aplicaciones de desarrollo. Quiero que la máquina virtual termine de arrancar antes de que se abra el resto de las aplicaciones.

En bash, podría decir "cmd1 && cmd2"

Esto es lo que tengo ...

C:/Applications/VirtualBox/vboxmanage startvm superdooper &"C:/Applications/NetBeans 6.5/bin/netbeans.exe"


Además de usar Start-Process -Wait , conectar la salida de un ejecutable hará que Powershell espere. Dependiendo de la necesidad, normalmente conectaré a Out-Null , Out-Default , Out-String o Out-String -Stream . Here hay una larga lista de algunas otras opciones de salida.

# Saving output as a string to a variable. $output = ping.exe example.com | Out-String # Filtering the output. ping .com | where { $_ -match ''^reply'' } # Using Start-Process affords the most control. Start-Process -Wait SomeExecutable.com

Extraño los operadores de estilo CMD / Bash a los que hizo referencia (&, &&, ||). Parece que tenemos que ser más prolijo con Powershell .


Algunos programas no pueden procesar la secuencia de salida muy bien, el uso de la tubería a Out-Null puede no bloquearlo.
Y Start-Process necesita el -ArgumentList para pasar argumentos, no tan conveniente.
También hay otro enfoque.

$exitCode = [Diagnostics.Process]::Start(<process>,<arguments>).WaitForExit(<timeout>)


Incluir la opción -NoNewWindow me da un error: Start-Process : This command cannot be executed due to the error: Access is denied.

La única forma en que podía hacer que funcionara era llamar:

Start-Process <path to exe> -Wait


Normalmente, para los comandos internos, PowerShell espera antes de comenzar el siguiente comando. Una excepción a esta regla es EXE externo basado en subsistema de Windows. El primer truco es canalizar a Out-Null así:

Notepad.exe | Out-Null

PowerShell esperará hasta que se haya cerrado el proceso Notepad.exe antes de continuar. Eso es ingenioso pero algo sutil a la hora de leer el código. También puede usar Start-Process con el parámetro -Wait:

Start-Process <path to exe> -NoNewWindow -Wait

Si está utilizando la versión de PowerShell Community Extensions, es:

$proc = Start-Process <path to exe> -NoWindow $proc.WaitForExit()

Otra opción en PowerShell 2.0 es usar un trabajo de fondo:

$job = Start-Job { invoke command here } Wait-Job $job Receive-Job $job


Si lo llevas más lejos, podrías incluso analizarlo sobre la marcha

p.ej

& "my.exe" | %{ if ($_ -match ''OK'') { Write-Host $_ -f Green } else if ($_ -match ''FAIL|ERROR'') { Write-Host $_ -f Red } else { Write-Host $_ } }


Si usa Start-Process <path to exe> -NoNewWindow -Wait

También puede usar la opción -PassThru para emitir eco.


Solo usa "Wait-process":

"notepad","calc","wmplayer" | ForEach-Object {Start-Process $_} | Wait-Process ;dir

el trabajo esta terminado