Frage PowerShell-Skript, Befehle werden ausgeführt


Ich spiele mit PowerShell-Skripten und sie funktionieren großartig. Ich frage mich jedoch, ob es eine Möglichkeit gibt, alle ausgeführten Befehle auch zu zeigen, so als würden Sie sie manuell eingeben. Dies wäre vergleichbar mit "Echo on" in Batch-Dateien. Ich habe mir die PowerShell-Befehlszeilenargumente und die Cmdlets angesehen, aber ich habe nichts Offensichtliches gefunden. Vielen Dank!


23
2018-01-12 23:27


Ursprung




Antworten:


Der folgende Befehl gibt jede Skriptzeile an Write-Debug- aus.

Set-PSDebug -Trace 1

Von man Set-PSDebug

Wenn der Trace-Parameter auf 1 gesetzt ist, wird jede Zeile des Skripts als verfolgt   es wird ausgeführt. Wenn der Parameter auf 2 gesetzt ist,   Funktionsaufrufe und Skriptaufrufe werden ebenfalls verfolgt. Wenn der Schritt   Parameter ist angegeben, Sie werden vor jeder Zeile des   Skript wird ausgeführt.


30
2018-02-16 03:53





Wo ich gebraucht habe echo on in CMD benutze ich jetzt Write-Verbose und Set-PSDebug -Step stattdessen. Sie sind nicht gleich, aber sie sind mächtiger, wenn sie geübt werden.


2
2018-02-23 16:16





Hässlich:

PS > get-content foo.ps1|foreach-object{$_;invoke-expression "$_"}
$procs=get-process powershell
foreach($proc in $procs){$proc.processname}
powershell
PS > get-content foo.ps1
$procs=get-process powershell
foreach($proc in $procs){$proc.processname}
PS >

Das Problem mit dem oben genannten ist, dass wenn Sie mehrzeilige Befehle wie folgt haben:

foreach($proc in $procs){
  $proc.processname
}

Das obige wird mit meinem obigen Beispiel fehlschlagen, wenn das in foo.ps1 mit dieser Struktur platziert wird ...


1
2018-01-15 23:29



Ja, ich finde immer wieder halbe Lösungen. Ich glaube wirklich, dass es keine "Wunderwaffe" für das gibt, was ich will. Danke, dass Sie mit diesen Lösungen kreativ sind. Ich habe jetzt ein paar Optionen und muss entscheiden, wohin ich von hier aus gehen soll. - Nelson Rothermel


help about_History 

Erzähl dir von allen Befehlen und

Get-History [options]  

gibt die vollständige Liste zurück, damit Sie die Anzeige usw. manipulieren können


1
2018-01-12 23:32



Ich habe "set-psdebug -trace 1" gefunden, das die Befehle anzeigen wird, aber eine Menge zusätzliches "Rauschen" will ich nicht. get-history gibt in einem Skript nichts aus. Wenn dies der Fall wäre, könnte ich es am Ende eines Skripts anheften, aber dann wären die Befehle nicht in-line (vor der Befehlsausgabe) und irgendwelche Ausnahmen würden es überspringen (es sei denn, ich fange es natürlich). Es ist immer noch eine gute Idee ... Irgendwelche anderen Ideen? - Nelson Rothermel
Ah - meinst du, dass du die Eingabe und die Ausgabe erfassen willst, oder zumindest die Eingabebefehle, gefolgt von der entsprechenden Ausgabe, echo? Eine Möglichkeit besteht darin, die Ergebnisse in ein Array zu pushen und anschließend die get-history-Ergebnisse durchzugehen, wobei der Befehl mit der Ausgabe ausgegeben wird. - Helvick
start-transkript kann auch das tun, was Sie suchen, aber es wird nur auf den Konsolentextteil der Aktion beschränkt. - Helvick
Sie haben es - genauso wie eine Batch-Datei funktioniert. Wir haben jetzt eine Reihe von Batch-Dateien und ich überlege mir, ob es möglich ist, diese durch PowerShell-Skripte zu ersetzen. Wir haben Software für die Planung, die Verwaltung des Ausgabeverlaufs usw. Ohne das Echo des Eingabebefehls ist es schwieriger zu debuggen. Ich schätze, das Drücken der Ergebnisse erfordert, dass Sie dies bei jedem Befehl tun, stellen Sie sicher, dass Sie Ausnahmen usw. abfangen, so dass Sie nichts verpassen. Eine andere Option, aber nicht ganz das, wonach ich suche. Wir müssen vielleicht nur eine Option auswählen und damit laufen. - Nelson Rothermel
Ich habe das Start-Protokoll versucht, aber es hat nur protokolliert, dass es gestartet / gestoppt wurde, aber nichts dazwischen. Ich habe irgendwo gelesen, dass es für interaktive Befehle gedacht ist. - Nelson Rothermel