PowerShellスクリプト、実行されたコマンドを表示


37

PowerShellスクリプトをいじっていますが、うまく機能しています。ただし、自分で手動で入力したかのように、実行されたすべてのコマンドを表示する方法があるかどうか疑問に思っています。これは、バッチファイルの「エコーオン」に似ています。PowerShellのコマンドライン引数であるコマンドレットを見ましたが、明らかなものは見つかりませんでした。ありがとう!

回答:


45

次のコマンドは、スクリプトの各行をWrite-Debug-に出力します

Set-PSDebug -Trace 1

から man Set-PSDebug

Traceパラメーターが1に設定されている場合、スクリプトの各行は実行時にトレースされます。パラメーターを2に設定すると、変数の割り当て、関数呼び出し、およびスクリプト呼び出しもトレースされます。Stepパラメーターが指定されている場合、スクリプトの各行が実行される前にプロンプ​​トが出されます。


を使用するスクリプトにこれを追加する場合はParam、この行をparam-definingブロックの下に配置してください。そうしないと、エラーが発生する可能性があります。
kayleeFrye_onDeck

4

echo onCMDで使用していた場所でWrite-VerboseSet-PSDebug -Step代わりにand を使用します。それらは同じではありませんが、巧みに振るとより強力になります。


2

醜い:

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 >

上記の問題は、次のような複数行のコマンドがある場合です。

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

上記の例では、その構造でfoo.ps1に配置されている場合、上記は失敗します...


ええ、私はこのような半分の解決策を見つけ続けています。私は本当に私が欲しいものに「銀の弾丸」がないと思います。これらのソリューションで創造性を発揮していただきありがとうございます。現在、いくつかのオプションがあり、ここからどこに行くかを決める必要があります。
ネルソンロザーメル

2
help about_History 

すべてのコマンドについて説明し、

Get-History [options]  

あなたが操作\表示などするための完全なリストを返します。


2
コマンドを表示する「set-psdebug -trace 1」を見つけましたが、多くの余分な「ノイズ」は必要ありません。get-historyはスクリプトに何も出力しません。それができた場合、スクリプトの最後に貼り付けることができますが、コマンドはインラインではなく(コマンド出力の前)、例外はスキップします(もちろんキャッチしない限り)。それはまだ心に留めておくべき良いものです...他のアイデアはありますか?
ネルソンロザーメル

ああ-入力と出力をキャプチャすることを意味しますか、または少なくとも対応する出力が続く入力コマンドをエコーすることを意味しますか?そのための1つの方法は、結果を配列にプッシュし、get-historyの結果をループしてコマンドを出力し、その後に出力を続けることです。
ヘルヴィック

start-transcriptでも目的の機能を実行できますが、アクションのコンソールテキスト部分のみに制限されます。
ヘルヴィック

バッチファイルが機能するのと同じ方法で取得しました。現在、バッチファイルがたくさんあり、それらをPowerShellスクリプトに置き換える可能性を検討しています。スケジューリング、出力履歴の維持などのためのソフトウェアがあります。入力コマンドがエコーされないと、デバッグが難しくなります。結果をプッシュするには、すべてのコマンドでそれを行う必要があり、例外などをキャッチして、何も見逃さないようにする必要があります。別のオプションですが、私が探しているものではありません。1つのオプションを選択して実行するだけです。
ネルソンロ

start-transcriptを試しましたが、開始/停止したことをログに記録するだけで、間には何もありません。私はどこかでそれがインタラクティブなコマンドのためにあると読んだ。
ネルソンロザーメル
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.