Write-Debug von PowerShell gibt keine Arrays aus, Write-Output jedoch. Ist das absichtlich?

8

Wie unten gezeigt, funktioniert ein Array gut als Eingabe für Write-Output, aber nicht für Write-Debug (ich erwartete, dass sie ähnlicher sind).

%Vor%

Ich denke, das ist nur ein unglücklicher Entwurf, aber ich hoffe auf eine vernünftige Erklärung. Benutze ich Write-Debug richtig? Wenn ja, hat jemand eine bevorzugte einfache Abhilfe?

    
Vimes 05.07.2011, 23:47
quelle

4 Antworten

12

Ich hatte das gleiche Problem, und keine der Lösungen, die ich oben oder sonstwo fand, würde im allgemeinen Fall funktionieren. Zum Beispiel funktioniert die erste Antwort nur, weil das Array ein Array von Strings ist. Wenn es ein Array von irgendetwas anderem ist, bricht diese Lösung, und Write-Debug gibt den Objekttyp aus und nicht seinen Wert, wie man es erwarten würde.

Endlich habe ich eine allgemeine Lösung gefunden: Der Schlüsselpunkt besteht darin, zuerst das Eingabeobjekt mit Hilfe des Out-String-Befehls in eine Zeichenkette umzuwandeln. Sobald alles eine Zeichenfolge ist, funktioniert die obige Lösung. Die Verwendung von "Out-String-Stream" verbessert die Ausgabeausrichtung. Beispiel:

%Vor%     
Jean-François Larvoire 12.09.2013, 15:07
quelle
5

Wenn Sie möchten, dass write-debug jede einzeln behandelt:

%Vor%     
mjolinor 06.07.2011 10:21
quelle
1

Write-Debug wurde für die Ausgabe einfacher Nachrichten entwickelt, wenn Debug-Einstellungen in einem bestimmten Ordner festgelegt sind Weg . Es braucht nur eine Zeichenkette, nicht so etwas wie Write-Host (und magisch formatiert). Sie müssen Ihre Ausgabe selbst in einer einzigen Zeichenfolge formatieren.

Sie könnten Write-Host und Write-Debug kombinieren, wenn Sie zusätzliche Informationen ausgeben möchten, bevor Sie den Benutzer auffordern:

%Vor%

Write-Host wird verwendet, weil es immer auf den Konsolenhost anstatt auf die Ausgabe des Skripts schreibt, wie es Write-Output tut. Wenn Sie die Standardausgabe des Skripts in eine Datei umleiten würden, würde Write-Output in der Datei landen, während Write-Host immer noch in der Konsole angezeigt würde.

Du könntest auch so etwas machen, wenn dein Array einfach genug ist, dass ein automatischer Aufruf von ToString() auf ihnen (wenn sie noch keine Strings sind) dich dahin bringt, was du willst:

%Vor%     
Joel B Fant 06.07.2011 00:22
quelle
0

Schreib-Debug:

%Vor%

Erwartet eine Zeichenfolge. Es ist nicht möglich, ein Zeichenfolgenarray in eine Zeichenfolge zu konvertieren, wie der Fehler sagt. Der Grund, warum es eine Zeichenfolge erwartet, ist, weil es writes debug messages to the console from a script or command.

ist

Beachten Sie, dass Write-Output und Write-Host ein Objekt verwenden:

%Vor%

und

%Vor%     
manojlds 06.07.2011 00:28
quelle

Tags und Links