Éviter le retour à la ligne dans l'écriture-sortie
Je veux rassembler toutes les données de sortie à partir de mon script dans un fichier journal et doit utiliser write-output instaed de write-host.
Write-Output "Server:" $a
ressemble
Server:
.
foo
Dois-je vraiment écrire pour écrire
write-output $("sfdghk:" + $a)
pour obtenir Server:Foo
Merci
-jt
source d'informationauteur ithyme | 2011-05-27
Vous devez vous connecter pour publier un commentaire.
Trouvé quelque part sur Internet:
Fonctionne très bien dans mon code.
9 heures ... je commence une réponse.
Dans Powershell tout ce que vous manipuler est un objet.
donc "Serveur:" est un objet, $a est un objet
Write-output
est une Applet de commande que mettre l'objet dans une sorte de liste (un tuyau) pour être utilisée par d'autres Applets de commande ou de scripts. Donc, il n'est pas vraiment un retour à la ligne entre "Serveur:" et "foo". C'est la façon dont la console de vous montrer une liste (un tableau) des objets. Comme vous pouvez le voir ci-dessous :Clairement c'est un résumé ici, mais j'espère que cela peut vous faire comprendre.
Si vous souhaitez récupérer la sortie d'un script dans un fichier journal, pensez à utiliser
Start-Transcript
. Il enregistre toutes les commandes et tous les PowerShell sortie vers un fichier. Il n'a pas de journal de ce qui est envoyé vers la sortie standard, cependant, si vous êtes en utilisant toutes les anciennes commandes, vous aurez à pipe de leur sortie àWrite-Host
:Il y a de bonnes informations dans les réponses, mais permettez-moi de tenter un résumé pragmatique:
Lors de l'impression à la console ou de la redirection vers un fichier
Write-Output
sépare plusieurs arguments par un saut de ligne à chaque.Par conséquent, afin de produire seule ligne de sortie, vous devez "pré-assembler" les pièces à la sortie dans un unique chaîne que vous transmettez en tant que unique argument.
Sauf à supprimer l'énumération des collections, généralement, vous n'avez pas besoin d'utiliser
Write-Output
explicitementparce que PowerShell par défaut envoie tout ce qui n'est pas capturé dans une variable ou redirigés ailleurs ou envoyés à travers le pipeline pour le [succès] flux de sortie (quiWrite-Output
également écrit); ainsi, dans le cas à portée de main, ce qui suit est suffisante:Ce qui peut être déroutant, c'est que le
Write-Host
applet de commande qui agit différemmentmais il est important de noter qu'il a un but différent.Write-Host
contrairement àWrite-Output
sépare les multiples arguments par une espace unique chaque.Il y a d'autres différences importantes, qui sont résumées dans le cette réponse de la mine.
Donné le titre générique de la question, nous allons également aborder comment faire pour supprimer un de fuite newline:
Pour l'impression à la console uniquementvous pouvez utiliser
Write-Host -NoNewline
.Avec données sortievia
Write-Output
implicite, de sortie, ou d'une autre commande:Vous ne peut pas empêcher une fuite de saut de ligne lorsque la sortie est envoyée à la console.
Malheureusement, comme de Windows PowerShell v5.1 /PowerShell de Base v6.0.0, vous ne peut pas empêcher une fuite de retour à la ligne lors de l'envoi du texte à externe de programmes via l' pipeline - voir cette question GitHub.
Dans PSv5+, cependant, vous peut empêcher une fuite de saut de ligne quand la capture de la sortie dans un fichieren utilisant
Out-File -NoNewline
ouSet-Content -NoNewline
(en PSv4-, vous devez utiliser l' .NET Framework directement); en revanche, la redirection vers un fichier avec>
ne ajouter un retour à la ligne de fuite.-NoNewline
non seulement supprime un de fuite de ligne, mais également des retours à la ligne entre ces objets.Out-File
etSet-Content
et quand à choisir, voir cette réponse de la mine.