Je sais que Powershell a des fonctionnalités de travail de fond avec Start-Job
, Wait-Job
, etc., mais est-il possible d'utiliser le pour obtenir la même chose Process
classe de System.Diagnostics
en .Net? Si oui, quelle serait la meilleure façon de le faire/quels avantages cela aurait-il par rapport au mécanisme Powershell par défaut d'exécution des tâches en arrière-plan?Utiliser systemdiagnostics.process pour exécuter des travaux de fond dans Powershell
Répondre
Vous pouvez certainement utiliser l'objet de processus pour « lancer » l'exécutable asychronously et avec l'objet de processus, vous revenez vous pouvez tester pour voir si le fichier EXE est fait ou tuer le processus. L'astuce consiste à récupérer les informations de flux de sortie et d'erreur sans interférer avec la console pendant que le programme s'exécute pour que vous puissiez faire d'autres choses. A partir de la documentation MSDN, il ressemble à l'aide du BeginOutputReadLine
pourrait faire l'affaire:
// Start the child process.
Process p = new Process();
// Redirect the output stream of the child process.
p.StartInfo.UseShellExecute = false;
p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.FileName = "Write500Lines.exe";
p.Start();
// Do not wait for the child process to exit before
// reading to the end of its redirected stream.
// p.WaitForExit();
// Read the output stream first and then wait.
string output = p.StandardOutput.ReadToEnd();
p.WaitForExit();
Bien que si vous voulez que le comportement de fond que vous devrez effectuer la StandardOutput.ReadToEnd() sur un thread d'arrière-plan, puis créer un mécanisme pour récupérer cette sortie du thread de la console principale qui semble être beaucoup de travail et pour le moment je peux penser à des avantages sur les travaux d'arrière-plan PowerShell.
Une autre approche consiste à créer un espace d'exécution pour que le travail bg fonctionne, comme le souligne blog post by Jim Truher.
Ceci n'est pas élégant ou bien documenté. Il crée un objet System.Diagnostic.Process et effectue certaines initialisations communes sur celui-ci. Une fois que vous obtenez l'objet Process, vous pouvez effectuer des ajustements supplémentaires, puis appelez Process.Start pour démarrer le processus.
function New-Process($cmd, $arguments, [switch]$stdout, [switch]$stdin, [switch]$stderr, [switch]$shellexec, [switch]$showwindow)
{
$process = New-Object "System.Diagnostics.Process"
$startinfo = New-Object "System.Diagnostics.ProcessStartInfo"
$startinfo.FileName = $cmd
$startinfo.Arguments = $arguments
$startinfo.WorkingDirectory = $pwd.Path
$startinfo.UseShellExecute = $shellexec
$startinfo.RedirectStandardInput = $stdin
$startinfo.RedirectStandardOutput = $stdout
$startinfo.RedirectStandardError = $stderr
if (!$showwindow) {
$startinfo.WindowStyle = [System.Diagnostics.ProcessWindowStyle]::Hidden
}
$process.StartInfo = $startinfo
return $process
}
- 1. Surveillance de l'avancement des travaux PowerShell
- 2. si utiliser un pipeline powershell ou utiliser powershell RunspaceInvoke pour exécuter des scripts
- 3. Exécuter des scripts PowerShell sans installer PowerShell?
- 4. Exécution de travaux de minuteur SharePoint à partir de PowerShell
- 5. Surveillance des travaux dans une session PowerShell d'une autre session PowerShell
- 6. Puis-je exécuter des scripts PowerShell dans une application Silverlight?
- 7. Utiliser Powershell pour accéder aux journaux IIS?
- 8. Comment utiliser Powershell 'invoke-expression' pour exécuter un exécutable en tant qu'utilisateur différent
- 9. Exécuter le script R de Powershell
- 10. tâche de fond de coupe ne peut pas exécuter
- 11. ordre d'exécution des travaux dans delayed_job
- 12. Utiliser performSelectorInBackground pour exécuter indicateur de chargement
- 13. powershell exchange: comment configurer une tâche planifiée pour exécuter exchange2007 powershell?
- 14. Des travaux sont perdus dans ParallelPython?
- 15. Puis-je utiliser System.Core.dll/System.Collections.Generic.HashSet dans powershell?
- 16. Planification des travaux sur Windows
- 17. Empêcher les utilisateurs de créer des planifications pour les travaux
- 18. En utilisant Powershell sur un ordinateur pour exécuter un script Powershell sur un autre
- 19. comment utiliser paramiko pour exécuter des commandes à distance
- 20. Fonction ping rapide pour PowerShell
- 21. Utiliser PowerShell pour l'invite de commande Visual Studio
- 22. Travaux de minuterie Sharepoint
- 23. Travaux internes de WMI?
- 24. Comment utiliser l'image de fond par défaut pour iPhone UIView?
- 25. Comment exécuter un script PowerShell à partir de SSIS
- 26. Comment exécuter un script PowerShell sans afficher de fenêtre?
- 27. exécuter plusieurs threads de fond successivement sur iphone/ipad
- 28. Utiliser la balise d'objet html pour intégrer des travaux HTML, mais IE7 a des barres de défilement
- 29. Utiliser python pour exécuter d'autres programmes
- 30. Utiliser Hashes dans l'URL pour exécuter le script onload
Comment puis-je exécuter powershell.exe pour appeler le fichier test1.ps1 et obtenir la sortie dans le journal? – Kiquenet