Comment rediriger la sortie D'un PowerShell vers un fichier lors de son exécution

J'ai un script PowerShell pour laquelle je voudrais rediriger la sortie vers un fichier. Le problème est que je ne peux pas changer la façon dont ce script est appelé. Donc je ne peux pas faire:

 .MyScript.ps1 > output.txt

Comment rediriger la sortie D'un script PowerShell pendant son exécution?

160
demandé sur Peter Mortensen 2009-08-01 02:49:09

10 réponses

Peut-être que Start-Transcript fonctionnerait pour vous. D'abord l'arrêter si il est déjà en cours d'exécution, puis le démarrer et l'arrêter lorsque vous avez terminé.

$ErrorActionPreference="SilentlyContinue"
Stop-Transcript | out-null
$ErrorActionPreference = "Continue"
Start-Transcript -path C:\output.txt -append
# do some stuff
Stop-Transcript

Vous pouvez également l'exécuter tout en travaillant sur des choses et l'enregistrer vos sessions de ligne de commande pour référence ultérieure.

EDIT : Si vous voulez supprimer complètement l'erreur lorsque vous tentez d'arrêter une transcription qui ne transcrit pas, vous pouvez le faire:

$ErrorActionPreference="SilentlyContinue"
Stop-Transcript | out-null
$ErrorActionPreference = "Continue" # or "Stop"
150
répondu Bratch 2015-05-04 14:02:42

Microsoft a annoncé sur le site Web de Powershell Connections (15/02/2012 à 16h40) que dans la version 3.0, ils ont étendu la redirection comme solution à ce problème.

In PS 3.0, we've extended output redirection to include the following streams: 
 Pipeline (1) 
 Error    (2) 
 Warning  (3) 
 Verbose  (4) 
 Debug    (5)
 All      (*)

We still use the same operators
 >    Redirect to a file and replace contents
 >>   Redirect to a file and append to existing content
 >&1  Merge with pipeline output

Voir l'article d'aide" about_Redirection " pour plus de détails et d'exemples.

help about_Redirection
38
répondu Nathan Hartley 2015-11-30 22:14:13

Écrire " choses à écrire | / Out-File Outputfile.txt -Ajouter

28
répondu Fred 2012-11-05 17:24:04

Une solution possible, si votre situation le permet:

  1. renommez MyScript. ps1 en TheRealMyScript. ps1
  2. Créez un nouveau MyScript. ps1 qui ressemble à:

    . \ TheRealMyScript. ps1 > sortie.txt

21
répondu zdan 2009-07-31 23:39:36

Vous pouvez jeter un oeil à l'applet de commande tee-Object. Vous pouvez diriger la sortie vers Tee et il écrira dans le pipeline et aussi dans un fichier

16
répondu Andy Schneider 2009-08-02 17:36:48

Je suppose que vous pouvez modifier MyScript.ps1. Ensuite, essayez de le changer comme suit:

$(
  here is your current script
) *>&1 > output.txt

Je viens d'essayer ceci avec Powershell 3. Vous pouvez utiliser toutes les options de redirection comme dans la réponse de Nathan Hartley.

15
répondu Michael Lemke 2016-04-11 15:31:50
powershell ".\MyScript.ps1" > test.log
10
répondu suiwenfeng 2017-02-04 01:40:10

Si vous voulez une redirection directe de toutes les sorties vers un fichier, essayez d'utiliser *>>:

# You'll receive standard output for the first command, and an error from the second command.
mkdir c:\temp -force *>> c:\my.log ;
mkdir c:\temp *>> c:\my.log ;

Comme il s'agit d'une redirection directe vers un fichier, elle ne sera pas sortie sur la console (souvent utile). Si vous désirez la sortie de la console, combiné toutes les sorties avec *&>1, puis pipe avec Tee-Object:

mkdir c:\temp -force *>&1 | Tee-Object -Append -FilePath c:\my.log ;
mkdir c:\temp *>&1 | Tee-Object -Append -FilePath c:\my.log ;

# shorter aliased version
mkdir c:\temp *>&1 | tee -Append c:\my.log ;

Je crois que ces techniques sont supportées Powershell 3.0+, je teste sur Powershell 5.0.

4
répondu sonjz 2017-11-28 09:51:10
.\myscript.ps1 | Out-File c:\output.csv

Si vous voulez le faire à partir de la ligne de commande et non intégré dans le script lui-même

2
répondu Chris 2014-10-15 10:23:07

Intégrer ceci dans votre script, vous pouvez le faire comme ceci:

        Write-Output $server.name | Out-File '(Your Path)\Servers.txt' -Append

, ce Qui devrait faire l'affaire.

0
répondu bbcompent1 2015-07-12 19:16:11