PowerShellコンソールで複数行のスクリプトを入力・実行する方法

広告

PowerShell コンソールでは、 1 行のコマンドだけでなく、複数行にわたるスクリプトを入力して実行することもできます。複雑な処理や条件分岐を記述する場合には、複数行で入力することで可読性が高くなります。ここでは PowerShell コンソールで複数行のスクリプトを入力・実行する方法について解説します。

複数行のスクリプトを入力・実行する

PowerShell コンソールでは、コマンドレットや関数などを実行することができます。例えば次のようなコマンドを実行してみます。

Get-ChildItem -Force

PowerShell コンソールを起動し、実行するコマンドを入力したら、最後に Enter キーを押します。

複数行のスクリプトを入力・実行する(1)

コマンドが実行されます。何か出力が行われるものであれば、画面に表示されます。

複数行のスクリプトを入力・実行する(2)

PowerShell コンソールでは 1 行のコマンドだけでなく、複数行で構成されるスクリプトを実行することもできます。例えば次の例を見てください。

$files = Get-ChildItem -File
foreach ($file in $files) {
    Write-Host $file.Name
}

カレントディレクトリにあるすべてのファイルの名前を順に画面に出力する、という簡単なスクリプトです。このように複数行で構成されるスクリプトを入力して実行するには次の手順で行ってください。

PowerShell コンソールで最初の行を入力したら、 Enter キーではなく、 Shift + Enter キーを押します。

複数行のスクリプトを入力・実行する(3)

すると通常のプロンプト(>)ではなく >> と表示されます。 >> は、入力がまだ完了しておらず、続きの入力を待っている状態を示しています。

複数行のスクリプトを入力・実行する(4)

2 行目以降も入力したらShift + Enter を押します。

複数行のスクリプトを入力・実行する(5)

そして最後の行を入力したら、 Enter を押します。

複数行のスクリプトを入力・実行する(6)

すると、これまでに入力したスクリプトが上から順に実行されます。

複数行のスクリプトを入力・実行する(7)

このように、複数行で構成されるスクリプトの場合、 Enter キーではなく Shift + Enter キーを押していくことで、順に入力することができます。

自動的に次の行の入力待ちになるケース

複数行のスクリプトを入力する場合、 Shift + Enter キーを押すと説明しましたが、単に Enter キーを押しただけでも次の行の入力待ちに自動的になる場合があります。

一つは構文が未完成の状態で Enter キーを押した場合です。例えば先ほどのサンプルにもあった次の文を入力したあとで、 Enter キーを押します。

foreach ($file in $files) {

複数行のスクリプトを入力・実行する(8)

すると Shift + Enter キーを押したときのように >> が表示され、次の行の入力待ちとなりました。

複数行のスクリプトを入力・実行する(9)

これは既に入力されている { に対する } がまだ入力されていないため、続けて入力が行われると判断されているためです。

続けて次の文を入力したあとで、 Enter キーを押します。

    Write-Host $file.Name

まだ } が現れていないため、続きがあるものと判断されて >> が表示され、次の行の入力待ちとなりました。

複数行のスクリプトを入力・実行する(10)

最後に次の文を入力します。 } が入力されたため、これで構文は完成となります。

}

ここで Enter キーを押すとこれまでに入力されたスクリプトが上から順に実行されます。

複数行のスクリプトを入力・実行する(11)

なお先ほど } を入力したあとで、 Enter キーではなく、 Shift + Enter キーを押せば、さらに次の行の入力待ちとなります。

複数行のスクリプトを入力・実行する(12)

このように、構文が未完成の状態の場合は、 Enter キーを押すだけでも自動的に次の行の入力待ちとなります。

もう一つはバッククォーテーション(`)を使った場合です。 PowerShell では 1 行が長いコマンドを入力する場合、途中でバッククォーテーションを入力してから改行すると、続きを次の行で入力することができます。

例えば次のようなコマンドを実行しようとしていたとします。

Get-ChildItem -File | ForEach-Object { $_.Name }

1 行が長いため、途中まで入力したあとでバッククォーテーションを入力してから Enter キーを押します。

Get-ChildItem -File `

複数行のスクリプトを入力・実行する(13)

※ バッククォーテーション(`)の後にはスペースを入れないように注意してください。スペースがあると正しく動作しない場合があります。

すると Shift + Enter キーを押したときのように >> が表示され、次の行の入力待ちとなりました。

複数行のスクリプトを入力・実行する(14)

これはバッククォーテーションが入力されていたため、続けて入力が行われると判断されているためです。

それでは残りの部分を入力したあとで Enter キーを押します。

| ForEach-Object { $_.Name }

複数行のスクリプトを入力・実行する(15)

コマンドが実行され、結果が画面に表示されます。

複数行のスクリプトを入力・実行する(16)

このように単に Enter を押した場合でも、次の行で続きの入力が行われると分かっている場合は、自動的に次の行の入力待ちとなります。

-- --

PowerShell コンソールで複数行のスクリプトを入力・実行する方法について解説しました。

( Written by Tatsuo Ikura )

プロフィール画像

著者 / TATSUO IKURA

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