Write-Hostの使い方:画面にメッセージを表示する

広告

Write-Host コマンドレットを使用すると、画面に直接メッセージを表示することができます。ユーザーに対して処理の経過や結果などを分かりやすく表示したい場合に使用します。また、文字色や背景色を指定して、表示内容を見やすくすることもできます。ここでは PowerShell における Write-Host コマンドレットの使い方について解説します。

Write-Hostコマンドレットの書式

Write-Host コマンドレットは、画面に直接メッセージを表示するために使用します。 Write-Host コマンドレットの書式は次の通りです。

Write-Host
  [[-Object] <Object>]
  [-NoNewline]
  [-Separator <Object>]
  [-ForegroundColor <ConsoleColor>]
  [-BackgroundColor <ConsoleColor>]
  [<CommonParameters>]

画面にメッセージを表示するには次の書式を使用します。

Write-Host -Object オブジェクト

-Object は省略可能なので、通常は次のように実行します。

Write-Host オブジェクト

オブジェクトの部分には文字列を指定することが多いですが、他のオブジェクトを指定することもできます。文字列以外を指定した場合は、指定したオブジェクトが文字列に変換されて表示されます(例:数値や日付など)。

それでは、画面に "Hello" と表示します。次のように実行します。

Write-Host "Hello"

画面に "Hello" と表示されました。指定した文字列がそのまま画面に表示されます。

Write-Hostコマンドレットの使い方(1)

Write-Host は画面に直接表示するため、出力内容はパイプラインには流れません。そのため、変数に格納したり、パイプ(|)で他のコマンドに渡したりすることはできません。パイプラインに出力したい場合は Write-Output コマンドレットを使用してください。

Write-Output の使い方は「Write-Outputの使い方:オブジェクトをパイプラインに出力する」を参照されてください。

変数の値を表示する

Write-Host では、文字列などを直接表示するだけでなく、変数に格納された値を出力することもできます。

Write-Host $変数名

例えば次のような PowerShell スクリプトを作成して実行してみます。

$msg = "Hello"
Write-Host $msg

画面に "Hello" と表示されました。変数に格納されている値がそのまま表示されます。

Write-Hostコマンドレットの使い方(2)

PowerShell ではダブルクォーテーション(")で囲んだ文字列の中に変数を記述すると、変数の値が展開されて表示されます。例えば次の例では "Hello Taro" と画面に表示されます。

$name = "Taro"
Write-Host "Hello $name"

Write-Hostコマンドレットの使い方(3)

変数名の直後に文字が続く場合、どこまでが変数名なのか正しく認識されないことがあります。例えば次の例では変数 $name の直後に "san" という文字列が続くため、 $namesan という別の変数として扱われてしまいます。

$name = "Taro"
Write-Host "Hello $namesan"

このような場合は変数名を ${変数名} のように記述してください。これにより変数名の範囲を明確にすることができます。

$name = "Taro"
Write-Host "Hello ${name}san"

Write-Hostコマンドレットの使い方(4)

なおシングルクォーテーション(')で囲んだ文字列の中に変数を記述すると、変数は展開されず、そのまま文字列として表示されますのでご注意ください。

$name = "Taro"
Write-Host 'Hello $name'

Write-Hostコマンドレットの使い方(5)

変数が展開されずに "Hello $name" と画面に表示されました。

複数の値を一度に表示する

Write-Host では、複数の文字列や値を一度にまとめて表示することができます。表示したいオブジェクトをカンマ(,)で区切って指定してください。

Write-Host オブジェクト1, オブジェクト2, ...

表示されるときには、区切り文字として半角スペースが使用されます。

実際に試してみます。次のように実行します。

Write-Host "Blue", "Red", "Yellow"

画面に "Blue Red Yellow" と表示されました。各要素が半角スペースで区切られて表示されます。

Write-Hostコマンドレットの使い方(6)

-Separatorオプション

複数のオブジェクトを表示するときに、区切り文字として半角スペース以外の文字列を使用したい場合には -Separator オプションを使用します。

Write-Host オブジェクト1, オブジェクト2, ... -Separator 区切り文字列

例として区切り文字列を " /// " に変更してみます。

Write-Host "Blue", "Red", "Yellow" -Separator " /// "

画面に "Blue /// Red /// Yellow" と表示されました。各要素が設定した区切り文字で区切られて表示されます。

Write-Hostコマンドレットの使い方(7)

改行せずに表示する

PowerShell スクリプトで Write-Host を連続して使用した場合、画面に表示されるメッセージは、それぞれ改行されて表示されます。

例えば次のようなスクリプトを実行してみます。

Write-Host "The weather is "
Write-Host "sunny."

結果は次のように 2 行に分かれて表示されます。

PS C:\code\powershell> Write-Host "The weather is "
>> Write-Host "sunny."
The weather is
sunny.

Write-Host を使って画面にメッセージを表示したときに、改行を行わないようにするには -NoNewline オプションを使用します。

Write-Host オブジェクト -NoNewline

-NoNewline オプションを使用すると、改行が行われないため、最初の表示の直後に、次のメッセージが続けて表示されます。

それでは実際に試してみます。次のようなスクリプトを実行します。

Write-Host "The weather is " -NoNewline
Write-Host "sunny."

実行すると、今回は改行されず、 1 行に続けて表示されていることが確認できます。

PS C:\code\powershell> Write-Host "The weather is " -NoNewline
>> Write-Host "sunny."
The weather is sunny.

Write-Hostコマンドレットの使い方(8)

-NoNewline は、複数のメッセージを 1 行でまとめて表示したい場合や、進行状況を同じ行に表示したい場合に便利です。

文字色と背景色を設定する

Write-Host で表示するメッセージの文字色を設定するには -ForegroundColor オプションを使用します。また背景色を設定するには -BackgroundColor を使用します。

Write-Host オブジェクト -ForegroundColor 文字色 -BackgroundColor 背景色

文字色や背景色として使用できる値は、次のような名前で指定します。

Black
DarkBlue
DarkGreen
DarkCyan
DarkRed
DarkMagenta
DarkYellow
Gray
DarkGray
Blue
Green
Cyan
Red
Magenta
Yellow
White

-ForegroundColor または -BackgroundColor のどちらか一方だけを指定することもできます。

それでは実際に試してみます。文字色として "Yellow" 、背景色として "DarkGray" を指定します。

Write-Host "Good morning" -ForegroundColor Yellow -BackgroundColor DarkGray

画面にメッセージが、指定した文字色と背景色で表示されます。

Write-Hostコマンドレットの使い方(9)

使用できる色の名前は大文字・小文字を区別しませんが、正確な名前で指定する必要があります。

-- --

PowerShell における Write-Host コマンドレットの使い方について解説しました。

( Written by Tatsuo Ikura )

プロフィール画像

著者 / TATSUO IKURA

これから IT 関連の知識を学ばれる方を対象に、色々な言語でのプログラミング方法や関連する技術、開発環境構築などに関する解説サイトを運営しています。