PowerShellコンソールで複数行のスクリプトを入力・実行する方法
PowerShell コンソールでは、 1 行のコマンドだけでなく、複数行にわたるスクリプトを入力して実行することもできます。複雑な処理や条件分岐を記述する場合には、複数行で入力することで可読性が高くなります。ここでは PowerShell コンソールで複数行のスクリプトを入力・実行する方法について解説します。
複数行のスクリプトを入力・実行する
PowerShell コンソールでは、コマンドレットや関数などを実行することができます。例えば次のようなコマンドを実行してみます。
Get-ChildItem -Force
PowerShell コンソールを起動し、実行するコマンドを入力したら、最後に Enter キーを押します。
コマンドが実行されます。何か出力が行われるものであれば、画面に表示されます。
PowerShell コンソールでは 1 行のコマンドだけでなく、複数行で構成されるスクリプトを実行することもできます。例えば次の例を見てください。
$files = Get-ChildItem -File
foreach ($file in $files) {
Write-Host $file.Name
}
カレントディレクトリにあるすべてのファイルの名前を順に画面に出力する、という簡単なスクリプトです。このように複数行で構成されるスクリプトを入力して実行するには次の手順で行ってください。
PowerShell コンソールで最初の行を入力したら、 Enter キーではなく、 Shift + Enter キーを押します。
すると通常のプロンプト(>)ではなく >> と表示されます。 >> は、入力がまだ完了しておらず、続きの入力を待っている状態を示しています。
2 行目以降も入力したらShift + Enter を押します。
そして最後の行を入力したら、 Enter を押します。
すると、これまでに入力したスクリプトが上から順に実行されます。
このように、複数行で構成されるスクリプトの場合、 Enter キーではなく Shift + Enter キーを押していくことで、順に入力することができます。
自動的に次の行の入力待ちになるケース
複数行のスクリプトを入力する場合、 Shift + Enter キーを押すと説明しましたが、単に Enter キーを押しただけでも次の行の入力待ちに自動的になる場合があります。
一つは構文が未完成の状態で Enter キーを押した場合です。例えば先ほどのサンプルにもあった次の文を入力したあとで、 Enter キーを押します。
foreach ($file in $files) {
すると Shift + Enter キーを押したときのように >> が表示され、次の行の入力待ちとなりました。
これは既に入力されている { に対する } がまだ入力されていないため、続けて入力が行われると判断されているためです。
続けて次の文を入力したあとで、 Enter キーを押します。
Write-Host $file.Name
まだ } が現れていないため、続きがあるものと判断されて >> が表示され、次の行の入力待ちとなりました。
最後に次の文を入力します。 } が入力されたため、これで構文は完成となります。
}
ここで Enter キーを押すとこれまでに入力されたスクリプトが上から順に実行されます。
なお先ほど } を入力したあとで、 Enter キーではなく、 Shift + Enter キーを押せば、さらに次の行の入力待ちとなります。
このように、構文が未完成の状態の場合は、 Enter キーを押すだけでも自動的に次の行の入力待ちとなります。
もう一つはバッククォーテーション(`)を使った場合です。 PowerShell では 1 行が長いコマンドを入力する場合、途中でバッククォーテーションを入力してから改行すると、続きを次の行で入力することができます。
例えば次のようなコマンドを実行しようとしていたとします。
Get-ChildItem -File | ForEach-Object { $_.Name }
1 行が長いため、途中まで入力したあとでバッククォーテーションを入力してから Enter キーを押します。
Get-ChildItem -File `
※ バッククォーテーション(`)の後にはスペースを入れないように注意してください。スペースがあると正しく動作しない場合があります。
すると Shift + Enter キーを押したときのように >> が表示され、次の行の入力待ちとなりました。
これはバッククォーテーションが入力されていたため、続けて入力が行われると判断されているためです。
それでは残りの部分を入力したあとで Enter キーを押します。
| ForEach-Object { $_.Name }
コマンドが実行され、結果が画面に表示されます。
このように単に Enter を押した場合でも、次の行で続きの入力が行われると分かっている場合は、自動的に次の行の入力待ちとなります。
-- --
PowerShell コンソールで複数行のスクリプトを入力・実行する方法について解説しました。
( Written by Tatsuo Ikura )
著者 / TATSUO IKURA
これから IT 関連の知識を学ばれる方を対象に、色々な言語でのプログラミング方法や関連する技術、開発環境構築などに関する解説サイトを運営しています。