web-dev-qa-db-ja.com

PowerShellで何かを出力する方法

バッチファイル内からPowerShellスクリプトを実行しています。スクリプトはWebページを取得し、そのページのコンテンツが文字列 "OK"であるかどうかを確認します。

PowerShellスクリプトは、エラーレベルをバッチスクリプトに返します。

バッチスクリプトは、FTP自動化プログラムである ScriptFTP によって実行されます。エラーが発生した場合は、ScriptFTPにコンソール出力全体を電子メールで管理者に送信させることができます。

PowerShellスクリプトでは、Webサイトからの戻り値が「OK」ではない場合に出力したいので、エラーメッセージはコンソール出力、つまりステータスメールに含まれます。

私はPowerShellに慣れていないので、これにどの出力関数を使うべきかわからない。私は3つを見ることができます:

  • 書き込みホスト
  • 書き込み出力
  • 書き込みエラー

stdoutと同等のWindowsへの書き込みに使用する正しいものは何でしょうか。

188
Pekka 웃

単純に何かを出力することは、PowerShellの美しさです - そしてその最大の強みです。たとえば、一般的なこんにちは、世界!アプリケーションは1行に縮小されています。

"Hello, World!"

それは文字列オブジェクトを作成し、前述の値を割り当て、そしてそれは.toString()メソッドを呼び出しそしてその結果をSTDOUTに出力する(デフォルトで)。美しさのこと。

他のWrite-*コマンドはテキストをそれらに関連したストリームに出力するのに特有であり、そのような場所にあります。

184
Goyuix

この場合、 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」を開発者に送り返します。

117
naivists

以下は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
8
user2426679

これらはデフォルトのストリーム(出力とエラー)に書き込むので、シナリオでこれらのいずれかを使用できます。出力を別のコマンドレットにパイプ接続している場合は、 Write-Output を使用します。これは、最終的に で終わります。 - ホスト

この記事では、さまざまな出力オプションについて説明します。 PowerShell Oは出力用です

7
GrayWizardx
Write-Host "Found file - " + $File.FullName -ForegroundColor Magenta

Magentaは、 "System.ConsoleColor"列挙値の1つ - 黒、ダークブルー、ダークグリーン、ダークレッド、ダークマゼンタ、ダークイエロー、グレー、ダークグレー、ブルー、グリーン、シアン、レッド、マゼンタ、イエロー、ホワイトです。

+ $File.FullNameはオプションで、変数を文字列に入れる方法を示します。

2
jordan

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:\>
2
samthebest