Script di PowerShell, che mostra i comandi eseguiti


37

Sto giocando con gli script di PowerShell e stanno funzionando alla grande. Tuttavia, mi chiedo se ci sia un modo per mostrare anche tutti i comandi che sono stati eseguiti, proprio come se li stessi digitando manualmente. Questo sarebbe simile a "echo on" nei file batch. Ho esaminato gli argomenti della riga di comando di PowerShell, i cmdlet, ma non ho trovato nulla di ovvio. Grazie!

Risposte:


45

Il comando seguente genererà ogni riga di script in Write-Debug-

Set-PSDebug -Trace 1

A partire dal man Set-PSDebug

Quando il parametro Trace è impostato su 1, ogni riga di script viene tracciata mentre viene eseguita. Quando il parametro è impostato su 2, vengono tracciate anche le assegnazioni delle variabili, le chiamate di funzione e le chiamate di script. Se viene specificato il parametro Step, viene richiesto prima di eseguire ogni riga dello script.


Se lo aggiungi a uno script che utilizza Param, assicurati di posizionare questa riga sotto il blocco di definizione dei parametri o potrebbe causare errori.
kayleeFrye_onDeck,

4

Dove ho usato echo onin CMD, ora uso Write-Verbosee Set-PSDebug -Stepinvece. Non sono gli stessi, ma sono più potenti se maneggiati abilmente.


2

Brutto:

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 >

Il problema con quanto sopra è che se si dispone di comandi multilinea come questo:

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

Quanto sopra fallirà con il mio esempio sopra se è inserito in foo.ps1 con quella struttura ...


Sì, continuo a trovare mezze soluzioni come questa. Penso davvero che non ci sia un "proiettile d'argento" per quello che voglio. Grazie per essere creativi con queste soluzioni. Ho un paio di opzioni ora e dovrò decidere dove andare da qui.
Nelson Rothermel,

2
help about_History 

Ti parlerò di tutti i comandi e

Get-History [options]  

restituirà l'elenco completo per manipolare \ display ecc.


2
Ho trovato "set-psdebug -trace 1" che mostrerà i comandi, ma un sacco di "rumore" extra che non voglio. get-history non genera nulla in uno script. Se lo facessi, potrei incollarlo alla fine di uno script, ma i comandi non sarebbero in linea (prima dell'output del comando) e qualsiasi eccezione lo salterebbe (a meno che non lo prenda ovviamente). È ancora una buona idea da tenere a mente ... Altre idee?
Nelson Rothermel,

Ah - vuoi dire che vuoi catturare l'input e l'output, o almeno vuoi fare eco ai comandi di input immediatamente seguiti dall'output corrispondente? Un modo per farlo è quello di inserire i risultati in un array e quindi scorrere i risultati della cronologia get emettendo il comando seguito dal suo output.
Helvick,

start-transcript potrebbe anche fare quello che stai cercando, ma sarà limitato alla parte di testo della console solo dell'azione.
Helvick,

Hai capito - allo stesso modo in cui funziona un file batch. Abbiamo un sacco di file batch ora e sto esaminando la fattibilità di sostituirli con gli script di PowerShell. Disponiamo di software per la pianificazione, il mantenimento della cronologia di output, ecc. Senza l'eco del comando di input, è più difficile eseguire il debug. Suppongo che spingendo i risultati sia necessario farlo su ogni comando, assicurarsi di catturare le eccezioni, ecc. In modo da non perdere nulla. Un'altra opzione, ma non proprio quello che sto cercando. Potremmo semplicemente scegliere un'opzione ed eseguirla.
Nelson Rothermel,

Ho provato start-transcript, ma ha registrato solo che si è avviato / arrestato, ma non c'è niente in mezzo. Ho letto da qualche parte che è pensato per comandi interattivi.
Nelson Rothermel,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.