web-dev-qa-db-fra.com

Redirection de l'entrée / sortie standard dans Windows PowerShell

Quelle est la syntaxe requise pour rediriger les entrées/sorties standard sur Windows PowerShell?

Sous Unix, nous utilisons:

$./program <input.txt >output.txt

Comment exécuter la même tâche dans PowerShell?

35
Nitin

Vous ne pouvez pas connecter un fichier directement à stdin, mais vous pouvez toujours accéder à stdin.

Get-Content input.txt | ./program > output.txt
45
JasonMArcher

Pour la redirection de sortie, vous pouvez utiliser:

  command >  filename      Redirect command output to a file (overwrite)

  command >> filename      APPEND into a file

  command 2> filename      Redirect Errors 

La redirection d'entrée fonctionne d'une manière différente. Par exemple, consultez cette applet de commande http://technet.Microsoft.com/en-us/library/ee176843.aspx

8
iSamnium

S'il y a quelqu'un qui cherche 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 pu découvrir comment écrire le résultat de cette commande dans une variable lorsque je l'exécute dans le script PowerShell car il écrit toujours des données sur la console.

ÉDITER:

Pour obtenir la sortie de Start-Process, vous pouvez utiliser l'option

-RedirectStandardOutput

pour rediriger la sortie vers un fichier (comme suggéré par js2010), puis la lire à partir du fichier:

Start-Process ".\program.exe" -RedirectStandardInput ".\input.txt" -RedirectStandardOutput ".\temp.txt" -NoNewWindow -Wait
$Result = Get-Content ".\temp.txt"
0
tscissors

Vous pouvez également le faire pour que l'erreur standard et la sortie standard se rendent au même endroit:

get-childitem foo 2> & 1> log

Notez que ">" est identique à "| out-file", et par défaut l'encodage est unicode ou utf 16. Faites également attention à ">>", car il peut mélanger ascii et unicode dans le même fichier texte. "| add-content" fonctionne probablement mieux que ">>". "| set-content" peut être préférable à ">".

Il y a maintenant 6 flux. Plus d'informations: https://docs.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 après.

0
js2010