PowerShell5.1のスクリプトでStart/Stop-Transcriptでログを保存する時、 実行したコマンド自体をログに書き込みたい


PowerShell5.1のスクリプトでStart/Stop-Transcriptでログを保存する時、  
実行したコマンド自体をログに書き込むことはできないでしょうか。

例えば

[code]

    Start-Transcript
    Write-Host "Hello World"
    Stop-Transctipt
    
[/code]

このスクリプトを実行したとき出力されるログファイルは

[code]

    **********************
    Windows PowerShell トランスクリプト開始
    (中略)
    **********************
    トランスクリプトが開始されました。出力ファイル:（略）
    HelloWorld
    **********************
    Windows PowerShell トランスクリプト終了
    終了時刻: （略）
    **********************
    
[/code]

と保存されますが、私の希望は実行コマンドもログに保存することです。  
つまり以下のようになってほしいです。

[code]

    **********************
    Windows PowerShell トランスクリプト開始
    (中略)
    **********************
    トランスクリプトが開始されました。出力ファイル:（略）
    PS>Write-Host "Hello World"
    HelloWorld
    **********************
    Windows PowerShell トランスクリプト終了
    終了時刻: （略）
    **********************
    
[/code]

試したこととして、`Set-PSDebug -Trace
1`を記載してみましたが、ストリームには似たような形で表示されるのですが、ログには一切表示されませんでした。

(追記)追加要件になりますが、エビデンス収集に使用したい為、実行コマンドと出力結果を順序通り出力したいと考えています。




> PowerShell5.1のスクリプトでStart/Stop-Transcriptでログを保存する時、  
>  実行したコマンド自体をログに書き込むことはできないでしょうか。

`Start/Stop-
Transcript`でログを書く方法ではありませんが、スクリプトを`powershell‘に読み込ませて実行する方法はいかがでしょうか？

スクリプト q.ps1

[code]

    Write-Host "Hello World"
    
[/code]

実行方法

[code]

    type .\q.ps1 | powershell -File -  > log.txt
    
[/code]

log.txtの内容

[code]

    PS D:\junc\ps> Write-Host "Hello World"
    Hello World
    PS D:\junc\ps> 
    
[/code]




> PowerShell5.1のスクリプトでStart/Stop-Transcriptでログを保存する時、  
>  実行したコマンド自体をログに書き込むことはできないでしょうか。

下記のフォーラムによると、PowerShell5.1と5.0の不具合によりコマンド自体をログに書き込むことができないようです。  
[Start-Transcript コマンドレットでデバッグ
ログが出力されない](https://social.technet.microsoft.com/Forums/azure/ja-
JP/55c4b802-d01f-413f-8b72-041da82c8ca2/starttranscript)

ちなみに力技でスクリプトを保存する方法として、[PowerShell スクリプト
ブロックのログ記録を有効にする](https://docs.microsoft.com/ja-
jp/powershell/scripting/windows-powershell/wmf/whats-new/script-
logging?view=powershell-7.2)方法を使って、全スクリプトログを強制的にイベントログとして保存する方法があります。  
上記のリンク先を引用します。

> ログ記録は、 [管理用テンプレート] -> [Windows コンポーネント] -> [Windows PowerShell] の
> [PowerShell スクリプト ブロックのログ記録を有効にする] グループ ポリシー設定で有効にします。

ログ記録を参照するには「ファイル名を指定して実行」→「eventvwr.msc」などでイベントビューアを開き、左側ツリーで「アプリケーションとサービス ログ
> Microsoft > Windows > PowerShell > Operational」を選択します。  
右側のリストで対象のイベントを選択することで、下記のような形で実行結果を得られます。  
ただし実行結果は保存されません。

[code]

    Scriptblock テキストを作成しています (1 個中 1 個目):
    Write-Host "Hello World" 
    
[/code]

下記のPowerShellスクリプトで10分以内のイベントを取得することもできます。

[code]

    Get-WinEvent Microsoft-Windows-PowerShell/Operational | where Id -eq 4104 | where TimeCreated -ge $(date).AddMinutes(-10) | Format-Table -AutoSize -Wrap
    
[/code]

