スクリプトファイルのエラー修正
残念ながら、先ほどのスクリプトを実行した結果、赤字でメッセージが表示されてしまった方もいるのではないでしょうか? これは、作成したスクリプトファイルにエラーがあることを示しています。
試しにわざとif文の最初の{ ~ }までのWrite-HostをWrite-Hos(Hostのtを削除して)と書き換えて実行してみましょう(実験する場合Test.txtを準備してから行ってください)。
if ( Test-Path "Test.txt" )
{
Write-Hos "Test.txtは存在します"
}
else
{
Write-Host "Test.txtは存在しません"
}
この状態で実行してみると下記のようになるかと思います。
これはどういう意味でしょうか? 1つ1つ説明したいと思います。
用語 'Write-Hos'は、コマンドレット、関数、操作可能なプログム、 またはスクリプト ファイルとして認識されません。用語を確認し、 再試行してください。
これはまさしく書いてあるとおりで、Write-Hosというものがない(認識できない)ことを意味しています。
発生場所 C:\Work\sample1.ps1:3 文字:12 + Write-Hos <<<< "Test.txtが見つかりました"
これはエラーが発生した場所(ファイル)を示しています。今回実行したファイルは「C:\Work」に作成した「sample1.ps1」というファイルを実行してエラーが発生したので、「C:\Work\sample1.ps1」となっています。そのとなりの3 文字:12は3行目の12文字目がおかしいということを意味しています。
このように、メッセージからエラー箇所を特定し修正を行います。
スクリプトファイルへ値を渡す
PowerShellでは外部からスクリプトファイルへ値を渡すことが可能です。ためしに下記をテキストエディタで入力し、「sample2.ps1」として保存してください。
Write-Host $args[0]
このコードについて説明します。
まずWrite-Hostコマンドレットですが、これはWrite-Hostの右側に書かれたものをコンソールウィンドウへ表示します。
次に$argsですが、これは自動変数と呼ばれている変数で、外部から受け取った値はこの変数に代入されることが決まっています(この変数はPowerShellで予約済みの変数のため、この名前で変数を作成することはできません)。
$argsは配列変数となっており、いくつでも外部から値を受け取ることができます。各値へのアクセスは$argsの後ろに[]を付け、[]の中には数値を書きます。この数値は要素番号と呼ばれており、1番目に受け取った値は$args[0]、2番目に受け取った値は$args[1]、n番目に受け取った値は$args[n-1]でアクセスできます。
よって「sample2.ps1は外部から受け取った値の1つ目($args[0]に代入されている)を Write-Hostコマンドレットでコンソールウィンドウに表示せよ」ということになります。
では、コンソールウィンドウで、
./sample2.ps1 "A"
と入力し[Enter]キーを押してください。実行結果は下記のようになります。
これは、スクリプトファイル「sample2.ps1」実行時に「A」という文字を渡しています。 渡された値は$args変数に代入されているので、結果としてコンソールウィンドウに「A」という文字が表示されます。


