Gibt es einen einfachen Weg in der Powershell, um gleichzeitig eine Zeichenfolge an Variable und Konsole auszugeben?
Ich möchte die Ausgabe meines Skripts in eine Variable aufnehmen, damit ich sie am Ende des Skripts analysieren, in einer Protokolldatei speichern und auch per E-Mail an einen Operator senden kann.
Meine Absicht ist es, eine Variable $ output zu haben und irgendwelche Ausgabe-Strings hinzuzufügen und auch sofort etwas wie
an die Konsole auszugeben %Vor%am Ende kann ich $ Ausgabe in eine Protokolldatei speichern, per E-Mail senden und analysieren.
Ich habe mit tee-object gespielt, das zu diesem Zweck funktionieren könnte, aber leider würde es meine $ output-Variable umschreiben, anstatt eine Zeichenkette anzuhängen.
UPDATE Dies ist die endgültige Lösung, die ich beschlossen habe - dank manojlds!
%Vor%Es gibt so viele Möglichkeiten, Ihr Endziel zu erreichen:
In Ihrem Skript haben Sie einfach so etwas:
%Vor%Führen Sie das Skript dann als
aus %Vor% Beachten Sie, dass die Ausgabe für Tee-Object
und damit für die Konsole verfügbar ist. Sie erhalten die Ausgabe erst, nachdem das gesamte Skript ausgeführt wurde. So funktioniert die Pipeline in Powershell. Objekte werden stromabwärts weitergeleitet, wenn sie auftreten. Fügen Sie einen sleep 10
dazwischen als Schritte ein und sehen Sie, dass die Ausgabe kommt, sobald sie verfügbar ist.
Sie müssen auch nicht unbedingt ein anderes Skript (launcher.ps1) haben, von dem Sie sprechen. Sie können Funktionen, Skriptblock usw. innerhalb Ihres Skripts verwenden.
Einige andere Möglichkeiten:
%Vor%Sie können einen Filter erstellen:
%Vor%Es gibt wahrscheinlich viel mehr Möglichkeiten, dies zu tun.
Ich habe Powershell nicht genug durcheinander gebracht, um eine konkrete Antwort zu geben, aber wenn ich das in C machen würde, würde ich Nebenwirkungen ausnutzen.
%Vor%Verwenden Sie die Funktion wie folgt:
%Vor%Es hätte den gewünschten Effekt. (Abgesehen von korrekter C-Syntax und Pedanterie, wie zum Beispiel mit Zeilenumbrüchen) Ich weiß nicht, wie man das in Powershell übersetzt.
Was Sie jedoch tun möchten, kann als unordentlich angesehen werden. Es ist vielleicht klarer, wenn Sie Ausgaben explizit ausgeben und protokollieren und nacheinander in Ihrem Code protokollieren. Nebenwirkungen kommen unweigerlich zurück, um dich zu beißen. Halten Sie die Dinge modular.
Ich habe mir etwas Ähnliches angesehen, mit der Ausnahme, dass ich es danach nicht analysieren musste, sammle nur die Ausgabe.
Etwas, auf das sich jemand anders einlassen könnte, da es so aussieht, als hätten Sie Ihre Antwort mit PowerShell-Transkripten (Start-Transcript und Stop-Transcript) .Ich habe daraus site , dass es bei einem Serverfehler einige Probleme gibt, aber er zeigt, wie er damit umgegangen ist.
Tags und Links powershell