243 votes

Comment sortir quelque chose dans PowerShell

Je suis en cours d'exécution d'un script PowerShell à partir d'un fichier de commandes. Le script récupère une page web et vérifie si le contenu de la page est la chaîne de caractères "OK".

Le script PowerShell renvoie une erreur au niveau du script de commandes.

Le script de commandes est exécuté par ScriptFTP, un FTP programme d'automatisation. Si une erreur se produit, je peux avoir ScriptFTP envoyer la sortie de la console de l'administrateur par E-Mail.

Dans le script PowerShell, je tiens à la sortie de la valeur de retour à partir du site web si elle n'est pas "OK", de sorte que le message d'erreur qui est inclus dans la sortie de la console, et donc dans le statut de la poste.

Je suis nouveau sur PowerShell et pas sûr de la sortie de la fonction à utiliser pour cela. Je vois trois:

  • Write-Host
  • Écrivez-Sortie
  • Write-Error

Quelle serait la bonne chose à utiliser pour écrire sur le Windows équivalent de stdout?

228voto

Goyuix Points 9634

Il vous suffit de générer quelque chose est PowerShell est une chose de la beauté et de l'un de ses plus grands atouts. Par exemple, la commune Hello, World! l'application est réduite à une seule ligne:

"Hello, World!"

Il crée un objet de type string, attribue ladite valeur, et d'être le dernier élément sur le pipeline de la commande qu'il appelle la .la méthode toString() et affiche le résultat sur la sortie standard (par défaut). Une chose de la beauté.

L'autre en Écriture* les commandes sont spécifiques à la sortie du texte qui leur sont associées flux, et ont leur place en tant que tel.

138voto

naivists Points 15639

Je pense que dans ce cas, vous aurez besoin d' write-output.

Si vous avez un script comme

write-output "test1";
write-host "test2";
"test3";

alors, si vous appelez le script avec redirigé sortie, quelque chose comme yourscript.ps1 > out.txt, vous obtiendrez test2 sur l'écran test1\ntest3\n dans l' "out.txt".

Notez que "test3" et de l'écriture en-ligne de sortie sera toujours ajouter une nouvelle ligne à votre texte et il n'existe aucun moyen dans powershell pour arrêter (exemple: echo-n est impossible dans Powershell avec le natif de commandes). Si vous voulez (un peu de base et facile en bash) des fonctionnalités de l'echo -n, puis voir Comment la sortie à quelque chose en PowerShell

Si un fichier de commandes exécute une commande PowerShell, il sera plus susceptible de capter l ' "écriture de sortie de la commande". J'ai eu "de longues discussions" avec les administrateurs système à propos de ce qui devrait être écrit à la console et ce qui ne le devrait pas. Maintenant, nous avons convenu que seules les informations si le script est exécuté avec succès ou la mort doit être write-host'ed, et tout ce qui est du script auteur pourriez avoir besoin de savoir à propos de l'exécution (ce que les articles ont été mis à jour, ce que les champs ont été mis en, etc.) va à l' write-output. De cette façon, lorsque vous soumettez un script à l'admin, il peut aisément runthescript.ps1 >someredirectedoutput.txt et de voir à l'écran, si tout est ok. Puis d'envoyer le "someredirectedoutput.txt" de retour de la part des développeurs.

8voto

GrayWizardx Points 6812

Vous pouvez utiliser n'importe lequel de ces éléments dans votre scénario car ils écrivent dans les flux par défaut (sortie et erreur). Si vous diffusiez une sortie vers une autre commande, vous souhaiteriez utiliser Write-Output, qui se terminera éventuellement par Write-Host.

Cet article décrit les différentes options de sortie: Powershell O est destiné à la sortie

2voto

samthebest Points 2097

Vous simplement ne pouvez pas PowerShell omettre ces satanés retours à la ligne. Il n’y a aucun script ou l’applet de commande qui fait ça.

Bien sûr, Write-Host est un non-sens absolu parce que vous ne peut pas rediriger/tuyau d’elle ! Il faut simplement écrire vos propres :

Par exemple

-12voto

Utiliser un programme externe comme dans d’à l’intérieur de votre script PS :

C’est stupide et qui coûte cher en exécutant un processus distinct mais Powershell est mal conçu.

Prograide.com

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.

Powered by:

X