Comment faire pour que PowerShell garde une fenêtre de commande ouverte?

Lorsque je lance un programme sur PowerShell, il ouvre une nouvelle fenêtre et avant que je puisse voir la sortie, la fenêtre se ferme. Comment puis-je le faire pour que PowerShell garde cette fenêtre ouverte?

    Essayez de faire:

    start-process your.exe -NoNewWindow 

    Ajoutez un -Wait si nécessaire.

    Le PO semblait satisfait de la réponse, mais la nouvelle fenêtre ne restait pas ouverte après l’exécution du programme, ce qu’il semblait demander (et la réponse que je cherchais). Donc, après quelques recherches, j’ai trouvé:

     Start-Process cmd "/c `"your.exe & pause `"" 

    Je résolvais un problème similaire il y a quelques semaines. Si vous ne souhaitez pas utiliser & ( & '.\program.exe' ), vous pouvez utiliser le processus de démarrage et lire la sortie par le processus de démarrage (où vous lisez explicitement la sortie).

    Il suffit de mettre ceci comme fichier PS1 séparé – par exemple (ou pour macro):

     param ( $name, $params ) $process = New-Object System.Diagnostics.Process $proInfo = New-Object System.Diagnostics.ProcessStartInfo $proInfo.CreateNoWindow = $true $proInfo.RedirectStandardOutput = $true $proInfo.RedirectStandardError = $true $proInfo.UseShellExecute = $false $proInfo.FileName = $name $proInfo.Arguments = $params $process.StartInfo = $proInfo #Register an Action for Error Output Data Received Event Register-ObjectEvent -InputObject $process -EventName ErrorDataReceived -action { foreach ($s in $EventArgs.data) { Write-Host $s -ForegroundColor Red } } | Out-Null #Register an Action for Standard Output Data Received Event Register-ObjectEvent -InputObject $process -EventName OutputDataReceived -action { foreach ($s in $EventArgs.data) { Write-Host $s -ForegroundColor Blue } } | Out-Null $process.Start() | Out-Null $process.BeginOutputReadLine() $process.BeginErrorReadLine() $process.WaitForExit() 

    Et puis appelez ça comme:

     .\startprocess.ps1 "c:\program.exe" "params" 

    Vous pouvez également redirect facilement la sortie ou implémenter un délai d’expiration au cas où votre application pourrait se bloquer …

    Si le programme est un fichier batch (extension .cmd ou .bat) lancé avec la commande cmd /c foo.cmd , changez-le en cmd /k foo.cmd et le programme s’exécute, mais l’invite rest ouverte.

    Si le programme n’est pas un fichier de commandes, enveloppez-le dans un fichier de commandes et ajoutez la commande de pause à la fin. Pour envelopper le programme dans un fichier de commandes, placez simplement la commande dans un fichier texte et atsortingbuez-lui l’extension .cmd. Ensuite, exécutez cela au lieu de l’exe.