Quelle est la syntaxe requise pour rediriger l'entrée/sortie standard sur Windows PowerShell ?
Sous Unix, nous utilisons :
$./program output.txt
Comment exécuter la même tâche dans PowerShell ?
Quelle est la syntaxe requise pour rediriger l'entrée/sortie standard sur Windows PowerShell ?
Sous Unix, nous utilisons :
$./program output.txt
Comment exécuter la même tâche dans PowerShell ?
Si quelqu'un recherche une alternative à 'Get-Content' pour les gros fichiers (comme moi), vous pouvez utiliser CMD dans PowerShell:
cmd.exe /c ".\program < .\input.txt"
Ou vous pouvez utiliser cette commande PowerShell:
Start-Process .\program.exe -RedirectStandardInput .\input.txt -NoNewWindow -Wait
Il exécutera le programme de manière synchrone dans la même fenêtre. Mais je n'ai pas réussi à savoir comment écrire le résultat de cette commande dans une variable lorsque je l'exécute dans un script PowerShell car il écrit toujours les données dans la console.
MODIFIER:
Pour obtenir la sortie de Start-Process, vous pouvez utiliser l'option
-RedirectStandardOutput
pour rediriger la sortie vers un fichier et ensuite le lire à partir du fichier:
Start-Process ".\program.exe" -RedirectStandardInput ".\input.txt" -RedirectStandardOutput ".\temp.txt" -NoNewWindow -Wait
$Result = Get-Content ".\temp.txt"
Pour la redirection de sortie, vous pouvez utiliser :
command > filename Rediriger la sortie de la commande vers un fichier (écraser)
command >> filename AJOUTER dans un fichier
command 2> filename Rediriger les erreurs
La redirection d'entrée fonctionne d'une manière différente. Par exemple, voir cette Cmdlet http://technet.microsoft.com/en-us/library/ee176843.aspx
Ou vous pouvez faire :
quelque chose comme :
$proc = Start-Process "my.exe" "arguments de ligne de commande exe" -PassThru -wait -NoNewWindow -RedirectStandardError "chemin vers le fichier d'erreur" -redirectstandardinput "chemin vers un fichier d'où provient l'entrée"
si vous voulez savoir si le processus a généré une erreur, ajoutez le code suivant :
$exitCode = $proc.get_ExitCode()
if ($exitCode){
$errItem = Get-Item "chemin vers le fichier d'erreur"
if ($errItem.length -gt 0){
$errors = Get-Content "chemin vers le fichier d'erreur" | Out-String
}
}
Je trouve que de cette façon, j'ai une meilleure maîtrise de l'exécution de vos scripts lorsque vous avez besoin de gérer un programme/processus externe. Sinon, j'ai rencontré des situations où le script restait bloqué sur certaines erreurs de processus externes.
Vous pouvez également le faire pour que les erreurs standard et la sortie standard aillent au même endroit (notez que dans cmd, 2>&1 doit être dernier):
get-childitem foo 2>&1 >log
Remarquez que ">" est équivalent à "| out-file", et par défaut l'encodage est unicode ou utf 16. Faites également attention avec ">>", car cela peut mélanger ascii et unicode dans le même fichier texte. "| add-content" fonctionne probablement mieux que ">>". "| set-content" pourrait être préférable à ">".
Il y a maintenant 6 flux. Plus d'informations: https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_redirection?view=powershell-5.1
Je pense que tout ce que vous pouvez faire est d'enregistrer dans un fichier texte puis de le lire dans une variable par la suite.
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.