スクリプトテスト用のPowerShellの同等のエコー


233

フラグを設定し、スクリプト全体でデータが入っていくのを確認して、PowerShellスクリプトで変数と値を出力したいと思います。

どうすればいいですか?

たとえば、次のPHPコードに相当するPowerShellは何でしょうか。

echo "filesizecounter: " . $filesizecounter 

PowerGUIに付属しているスクリプトエディター/デバッガーを確認してください。それはあなたがやっていることに適しているかもしれません。Powershell 2にもデバッガーが付属していることを理解しています(ただし、まだ試していません)。
dan-gph 2009

回答:


275

いくつかの方法があります。

Write-Host:関数/コマンドレットの出力には含まれず、コンソールに直接書き込みます。前景色と背景色を設定できます。

Write-Debug$DebugPreference続行または停止に設定されている場合は、コンソールに直接書き込みます。

Write-Verbose$VerbosePreference続行または停止に設定されている場合は、コンソールに直接書き込みます。

後者はWrite-Debug、デバッグのための追加のオプション情報を目的としています(そのため、この場合に適しているようです)。

追加:PSH2では、(少なくとも)コマンドレットバインディングを使用するスクリプトは、-Verbose-Debugスイッチパラメーターを自動的に取得し、コンパイルされたコマンドレットとプロバイダーが行うように、ローカルで有効Write-VerboseWrite-Debug(つまり、設定変数をオーバーライド)します。


4
Write-DebugとWrite-Verboseの良い点は、デバッグステートメントをコードに残しておき、適切な設定変数を使用して、必要なときに出力をオンにできることです。時間を節約し、関数の他のユーザーにとって便利な機能です。
JasonMArcher 2009

5
また、Out-Stringに慣れる必要があります。重要なオブジェクトでは、3つのWrite- *コマンドレットを使用する前に、それを使用してオブジェクトを表示可能な文字列に変換する必要があるためです。
Jaykul、2009年

113

Powershellには、echoをWrite-Outputにマッピングするエイリアスがあるため、次のようになります。

echo "filesizecounter : $filesizecounter"


7
echoWrite-OutputMicrosoftのTechNetのエイリアスであり、ここ
Glenn Lawrence、

2
Glennに感謝します。私がこれを投稿してから6年間でエイリアスが再マッピングされたようです。パイプラインをバイパスするため、実際にはWrite-Hostを使用しないでください。これを示すために返信を更新しました。ありがとう!
Justin R.

3
スクリプトの実行をトレースするためにコンソールに「デバッグ」出力をエコーするだけの場合、なぜパイプラインをバイパスしたくないのですか?Write-Outputには奇妙な副作用があり、関数から明示的に返そうとする変数をオーバーライドして、Write-Outputへの最後の呼び出しの内容がスタックに残されます。そのような副作用は、言語が動作するためのひどくねじれた方法のように感じます。
クレイグ

33

PowerShellは補間しますか?

PHPで

echo "filesizecounter: " . $filesizecounter 

次のように書くこともできます:

echo "filesizecounter: $filesizecounter" 

PowerShellでは、次のようなものがニーズに合うはずです。

Write-Host "filesizecounter: $filesizecounter"

9
PHPはこの質問とは何の関係もありません
reggaeguitar


14

PowerShellでエコーを返す最も簡単な方法は、文字列オブジェクトを作成し、パイプラインに出力させることです。

$filesizecounter = 8096
"filesizecounter : $filesizecounter"

もちろん、Write- *メソッドを使用しない場合、ある程度の柔軟性はあきらめます。


9

echoはWrite-Outputのエイリアスですが、Write-Hostと同じように見えますです。

PowerShellのechoとWrite-Hostの違い何ですか?

echoは、Success出力ストリームに書き込むWrite-Outputのエイリアスです。これにより、出力をパイプラインで処理したり、ファイルにリダイレクトしたりできます。Write-Hostはコンソールに直接書き込むため、出力をリダイレクト/処理することはできません。


8

書き込みホストは正常に動作します。

$Filesize = (Get-Item $filepath).length;
Write-Host "FileSize= $filesize";

5

それが賢明かどうかは分かりませんが、あなたは書くことができます

"filesizecounter: " + $filesizecounter

そしてそれは出力するはずです:

filesizecounter:値


1
"filesizecounter: $filesizecounter"さらに短いです。
jiggunjer

3

PowerShellには、などのいくつかの一般的なコマンドのエイリアスがありますecho。PowerShellで次のように入力します。

Get-Alias echo

応答を取得するには:

CommandType     Name                                               Version    Source
-----------     ----                                               -------    ------
Alias           echo -> Write-Output

Get-Aliasにもエイリアスがありgal -> Get-Aliasます。gal echoのエイリアスを取得するように書くことができますecho

gal echo

その他のエイリアスは次のとおりです。https//docs.microsoft.com/en-us/powershell/scripting/learn/using-familiar-command-names?view = powershell-6

cat dir mount rm cd echo move rmdir chdir erase popd sleep clear h ps sort cls history pushd tee copy kill pwd type del lp r write diff ls ren


2

試してみるGet-Content .\yourScript.PS1と、スクリプトの内容が表示されます。

また、あなたはあなたのスクリプトコードにこの行を挿入することができます:

get-content .\scriptname.PS1
script code
script code

....


処理された実際の値(たとえば、環境変数の置換)は表示されないため、質問に対する回答はありません。
iisystems

0

Set-PSDebugが古い学校のecho onバッチコマンドに似ていることにも言及する必要があります。

Set-PSDebug -Trace 1

このコマンドを実行すると、実行中のスクリプトのすべての行が表示されます。

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.