2016-12-25 12 views
5

PowerShellスクリプトを実行して、スクリプトの各行のコマンドと出力の両方を表示する方法があるのだろうかと思います。たとえば、Bashではbash -x myscriptと書くか、set -xをスクリプトの先頭に置きます。バッチでは、伝統的にスクリプトの上部に残っている@echo offを省略します。 PowerShellにはこれらの構成要素と同等のものがありますか?冗長出力でPowerShellスクリプトを実行するにはどうすればよいですか?

私が試したこと:実行中powershell -? | sls verbose、何も表示されませんでした。

+0

最初に、あなたの担当者のユーザーは、質問する前に少し研究していたはずですか? [google:Echo on powershell](http://www.google.com/search?q=Echo+on+for+powershell&oq=Echo+on+for+powershell) – LotPings

+1

@LotPings申し訳ありませんが、私には起こりませんでしたGoogleの "echo on on powershell"へ。 –

答えて

12

間違った質問をすると、@ JamesKoと表示されます。間違った答えを得ました:-(。いくつかの人は、(a)Linuxエクスポージャーの欠如と(b)という冗長語をというように使います。以下では、このトピックでLinuxがPowerShellとどのように関係しているかを説明しますが、急いでいる場合は最後に答えにジャンプしてください。

背景 PowerShellでは、冗長PowerShell man pageもかなり曖昧程度で非常に特別な意味を持っている

コマンドが実行した操作の詳細情報を表示します。この情報は、トレースまたは トランザクションログの情報に似ています。このパラメーターは、コマンドによって冗長メッセージ が生成された場合にのみ機能します。

あなたが望むように聞こえます...しかし、この(man-pages projectから)...

可能性があり、シェルはそれが 後に標準エラー出力に各コマンドのトレースを記述しなければならない、のは、Linuxの味に依存している、set -xのためのLinuxのドキュメントにそれを比較してみましょうコマンドを展開してから実行します。

またはこの(gnuから)...

、コマンドのために、簡単なコマンドのトレースを出力する場合は、コマンド、 コマンドを選択して、コマンドとその引数または 関連する単語リストのための算術それらが展開された後、それらの前に実行されます。

あなたの質問の最初の行は、これらと明確かつ簡潔に一致しています。しかし、PowerShellの冗長は異なっています。簡単に言えば、冗長モード(-Verboseコマンドラインスイッチまたは$VerbosePreference変数)をオンにするだけで、冗長ストリームからコンソールへの出力が可能になります。 (Linuxがstdoutとstderrの2つのストリームを提供するのと同じように、PowerShellは、出力ストリーム、エラーストリーム、警告ストリーム、冗長ストリーム、およびデバッグストリームの複数のストリームを提供します。でも例えば、stdoutに冗長ストリームをマージするために、例えば、commands 4>&1を使用しています。(あなたはPowerShell One-Liners: Accessing, Handling and Writing Dataの基本的な書き込みストリームセクションと良いクイックリファレンスでのPowerShellの複数の出力ストリームについての詳細をComplete Guide to PowerShell Punctuationさ読み取ることができます。)

回答

Set-PSDebugコマンドは、bashと同等のトレースを行います。でトレースの詳細を調整することもできます。パラメータ。まず、ここでの制御がSet-PSDebugを使用する前に、です:の値で

PS> Get-PSDepth 
0 

それは実行時には、コードの各行を取得し、例えば:の値で

PS> Set-PSDebug -Trace 1 
PS> Get-PSDepth 
DEBUG: 1+ >>>> Get-PSDepth 
DEBUG: 141+ >>>> { 
DEBUG: 142+ >>>> $nest = -1 
DEBUG: 143+ >>>> $thisId = $pid 
DEBUG: 144+ while (>>>> (ps -id $thisId).Name -eq 'powershell') { 
DEBUG: 145+ >>>> $thisId = (gwmi win32_process -Filter "processid='$thisId'").ParentProcessId 
DEBUG: 146+ >>>> $nest++ 
DEBUG: 144+ while (>>>> (ps -id $thisId).Name -eq 'powershell') { 
DEBUG: 148+ >>>> $nest 
0 
DEBUG: 149+ >>>> } 

変数の割り当てとコードパスが得られます。

PS> Set-PSDebug -Trace 2 
PS> Get-PSDepth 
DEBUG: 1+ >>>> Get-PSDepth 
DEBUG:  ! CALL function '<ScriptBlock>' 
DEBUG: 141+ >>>> { 
DEBUG:  ! CALL function 'Get-PSDepth' (defined in file 'C:\Users\msorens\Documents\WindowsPowerShell\profile.ps1') 
DEBUG: 142+ >>>> $nest = -1 
DEBUG:  ! SET $nest = '-1'. 
DEBUG: 143+ >>>> $thisId = $pid 
DEBUG:  ! SET $thisId = '9872'. 
DEBUG: 144+ while (>>>> (ps -id $thisId).Name -eq 'powershell') { 
DEBUG: 145+ >>>> $thisId = (gwmi win32_process -Filter "processid='$thisId'").ParentProcessId 
DEBUG:  ! SET $thisId = '10548'. 
DEBUG: 146+ >>>> $nest++ 
DEBUG:  ! SET $nest = '0'. 
DEBUG: 144+ while (>>>> (ps -id $thisId).Name -eq 'powershell') { 
DEBUG: 148+ >>>> $nest 
0 
DEBUG: 149+ >>>> } 

これらはsimpの痕跡です私が書いたleコマンドレットは、Get-PSDepthと呼ばれています。 DEBUG接頭辞、実際の出力(この場合は0を含む単一行)が混在したコマンド、割り当てなどを出力します。

0

あなたは書き込み冗長これは自動的に行われます、あなたのスクリプトの中で使用している場合は、しかし

、手動であなたの関数から詳細な出力を記述する必要がある場合は、手動で各関数が呼び出されていることを確認する必要があります冗長フラグでこれは、あなたの関数の中から$ PSCmdlet.MyInvocation.BoundParameters ["Verbose"] をチェックすることによって行うことができます。

5

あなたのスクリプトではいつでも以下を使用できます。

$ VerbosePreference =

を "続行" 注:あなたは上昇モードでシェルを開く必要があります。

下記のスクリーンショットは参考用です。

$VerbosePreference

はそれがお役に立てば幸いです。

0

これは実際にはすべてのPowerShell CMDLETにVerboseタグが組み込まれています。あなたが例えばしなければならないすべて:それはある

テスト-接続-ComputerName www.google.com -Verbose

。私はこれが助けてくれるといいです

関連する問題