Durante l'esecuzione di determinati script di PowerShell diventa importante sapere cosa fanno i vari comandi e analizzare la presenza di errori. A volte capita che l'esecuzione locale di uno script vada bene, invece quando lo si esegue in remoto qualcosa vada storto, anche nel caso di operazioni pianificate, e bisogna capire dove il processo si blocca. Start-Transcript e Stop-Transcript sono due cmdlet che permettono di avviare, e poi fermare, la creazione un file di report che contiene tutti i comandi eseguiti dallo script e gli eventuali errori.
Start-Transcript nella sua forma più semplice va a creare il file di report nella cartella documenti dell'utente, nulla ci vieta di indicare noi il nome e la destinazione di questo file con Start-Transcript -Path "d:\report.txt", il cmdlet può essere usato anche per registrare una singola sessione di PowerShell senza necessariamente inserirlo in uno script.
Un esempio molto semplice di script può essere questo, nella prima riga si avvia la registrazione dei comandi che viene salvata nel file log.txt e l'opzione -Append permette di utilizzare un solo file di log e "appendere" il log dell'esecuzione ripetuta dello script in fondo al file log.txt. Stop-Transcript ferma la registrazione al termine dello script e invoke-item permette di aprire subito il file di report per consultarlo.
Start-Transcript -path d:\log.txt -Append#Lista comandi da eseguireStop-Transcriptinvoke-item d:\log.txt
L'esecuzione pratica di uno script può generare qualcosa di simile a questo.

Se invece vogliamo dei log separati, distinguibili per data e ora, bisogna utilizzare questo comando Start-Transcript -Path "d:\log-$(Get-Date -format HH.mm-dd-MM-yyyy).txt"

Il file di log contiene una prima parte informativa. Se queste informazioni non vi interessano si può aggiungere l'opzione -UseMinimalHeader al comando che diventa così Start-Transcript -Path "d:\Log-$(Get-Date -format HH.mm-dd-MM-yyyy).log" -UseMinimalHeader.

Seguita dalla parte con tutti i comandi eseguiti (ho abbreviato la lista dei servizi) e gli eventuali errori presenti nello script.

Dove vanno inseriti lo start e lo stop?
Quando ho cominciato a provare i cmdlet avrei detto all'inizio e alla fine dello script, ma è bastato fare qualche prova per trovare uno script dove dovevo spostare l'avvio della registrazione più in basso perché altrimenti il CmdletBinding e tutti i parametri non funzionavano a causa di un errore.
In caso di errore controllate lo script e provate a spostare i due cmdlet.

Per ulteriori dettagli e opzioni potete consultare questa pagina Microsoft.