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?
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% 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:
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:
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.
Beachten Sie, dass Write-Output und Write-Host ein Objekt verwenden:
%Vor%und
%Vor%Tags und Links powershell