バッチファイル内からPowerShellスクリプトを実行しています。スクリプトはWebページを取得し、そのページのコンテンツが文字列 "OK"であるかどうかを確認します。
PowerShellスクリプトは、エラーレベルをバッチスクリプトに返します。
バッチスクリプトは、FTP自動化プログラムである ScriptFTP によって実行されます。エラーが発生した場合は、ScriptFTPにコンソール出力全体を電子メールで管理者に送信させることができます。
PowerShellスクリプトでは、Webサイトからの戻り値が「OK」ではない場合に出力したいので、エラーメッセージはコンソール出力、つまりステータスメールに含まれます。
私はPowerShellに慣れていないので、これにどの出力関数を使うべきかわからない。私は3つを見ることができます:
stdout
と同等のWindowsへの書き込みに使用する正しいものは何でしょうか。
単純に何かを出力することは、PowerShellの美しさです - そしてその最大の強みです。たとえば、一般的なこんにちは、世界!アプリケーションは1行に縮小されています。
"Hello, World!"
それは文字列オブジェクトを作成し、前述の値を割り当て、そしてそれは.toString()
メソッドを呼び出しそしてその結果をSTDOUT
に出力する(デフォルトで)。美しさのこと。
他のWrite-*
コマンドはテキストをそれらに関連したストリームに出力するのに特有であり、そのような場所にあります。
この場合、 Write-Output が必要になると思います。
次のようなスクリプトがある場合
Write-Output "test1";
Write-Host "test2";
"test3";
次に、リダイレクト出力(yourscript.ps1 > out.txt
など)を使用してスクリプトを呼び出すと、画面のtest2
が「out.txt」のtest1\ntest3\n
になります。
「test3」とWrite-Output行は常にテキストに新しい行を追加し、PowerShellでこれを停止する方法がないことに注意してください(つまり、PowerShellではネイティブコマンドではecho -n
は不可能です)。 echo -n
の機能( Bash のやや基本的で簡単な機能)が必要な場合は、 samthebestの答え を参照してください。
バッチファイルでPowerShellコマンドを実行すると、ほとんどの場合、Write-Outputコマンドがキャプチャされます。何をコンソールに書き込むべきか、何をすべきでないかについて、システム管理者と「長い議論」をしました。スクリプトが正常に実行または死亡した場合の唯一の情報はWrite-Host
'edである必要があり、スクリプトの作成者であるすべてが実行について知る必要があるかもしれないこと(どのアイテムが更新されたか、どのフィールドが設定されたか、など)は書き込み出力に進みます。このようにして、システム管理者にスクリプトを送信すると、彼は簡単にrunthescript.ps1 >someredirectedoutput.txt
して、すべてが問題なければ画面に表示できます。次に、「someredirectedoutput.txt」を開発者に送り返します。
以下はEcho vs. Write-Host の良い展示だと思います。 test()が実際にどのように整数の配列を返すのかに注意してください。簡単に信じられるようになるため、単一のintではなく。
function test {
Write-Host 123
echo 456 # AKA 'Write-Output'
return 789
}
$x = test
Write-Host "x of type '$($x.GetType().name)' = $x"
Write-Host "`$x[0] = $($x[0])"
Write-Host "`$x[1] = $($x[1])"
上記のターミナル出力:
123
x of type 'Object[]' = 456 789
$x[0] = 456
$x[1] = 789
これらはデフォルトのストリーム(出力とエラー)に書き込むので、シナリオでこれらのいずれかを使用できます。出力を別のコマンドレットにパイプ接続している場合は、 Write-Output を使用します。これは、最終的に で終わります。 - ホスト 。
この記事では、さまざまな出力オプションについて説明します。 PowerShell Oは出力用です
Write-Host "Found file - " + $File.FullName -ForegroundColor Magenta
Magentaは、 "System.ConsoleColor"列挙値の1つ - 黒、ダークブルー、ダークグリーン、ダークレッド、ダークマゼンタ、ダークイエロー、グレー、ダークグレー、ブルー、グリーン、シアン、レッド、マゼンタ、イエロー、ホワイトです。
+ $File.FullName
はオプションで、変数を文字列に入れる方法を示します。
PowerShellにこれらの厄介な改行を省略させることはできません。これを実行するスクリプトやコマンドレットはありません。
もちろんWrite-Hostは絶対に無意味です。なぜなら、リダイレクト/パイプからリダイレクトすることはできないからです。あなたは単にあなた自身のものを書く必要があります。
using System;
namespace WriteToStdout
{
class Program
{
static void Main(string[] args)
{
if (args != null)
{
Console.Write(string.Join(" ", args));
}
}
}
}
例えば。
PS C:\> writetostdout finally I can write to stdout like echo -n
finally I can write to stdout like echo -nPS C:\>