2010-11-05 32 views
5

Je voudrais Write-Verbose beaucoup de données à un fichier de sortie. Voici comment je le fais.Sortie Write-Verbose qui n'emballe pas à la largeur de commande dans Powershell

Start-Transcript -Path $TargetDir\RunUnitTests.log -Width 1000000 
Write-Verbose "five million character lines and stuff" 

Cela fonctionne très bien, sauf que la sortie est automatique emballé à la largeur standard d'une console, ce qui rend le regard journal absolument terrible.

J'ai trouvé une solution ici lien mort enlevé , mais il est tellement impliqué et compliqué que je ne veux pas simplement jeter dans mon script ci-dessous un commentaire #Thar be dragons.

Y a-t-il une meilleure façon de procéder?

+0

Pour le problème connexe de l'emballage en Prevent _all_ sortie verbeuse, pas seulement des appels explicites à 'Écrivez-Verbose', voir [cette question] (http://stackoverflow.com/q/41504786/45375) . – mklement0

Répondre

5

Voici une solution de contournement très simple basée sur Write-Host qui n'a pas de problème. Au début de la session d'installation/point source le remplacement de la valeur par défaut Write-Verbose:

function global:Write-Verbose 
(
    [string] 
    $Message 
) 
{ 
    # check $VerbosePreference variable 
    if ($VerbosePreference -ne 'SilentlyContinue') { 
     # do this via Write-Host 
     Write-Host "VERBOSE: $Message" -ForegroundColor 'Yellow' 
    } 
} 

Ensuite, cela fonctionne au besoin:

$VerbosePreference = 'Continue' 
Start-Transcript -Path .\RunUnitTests.log 
Write-Verbose ("verbose writes five million character lines and stuff. " * 20) 

C'est: il prend en compte $VerbosePreference, il écrit hôte en jaune, la sortie de la transcription n'est pas encapsulée et elle est toujours marquée VERBOSE.

********************** 
Windows PowerShell Transcript Start 
Start time: 20101105055855 
********************** 
Transcript started, output file is .\RunUnitTests.log 
VERBOSE: verbose writes ... <long line text> ... and stuff. 
********************** 
Windows PowerShell Transcript End 
End time: 20101105055855 
********************** 
+2

Vous pourriez peut-être également décorer le paramètre pour prendre en charge pipelining '[Paramètre (Position = 0, obligatoire = $ true, ValueFromPipeline = $ true)]' –