「ライブラリ」ファイルには、「ワーカー」スクリプトから呼び出される関数があります。
ライブラリファイル
function ShowMessage($AValue)
{
$a = new-object -comobject wscript.Shell
$b = $a.popup( $AValue )
}
ワーカーファイル
. {c:\scratch\b.ps1}
ShowMessage "Hello"
PowerShellで「worker」スクリプトを実行すると正常に動作しますIDEしかし、ワーカーファイルを右クリックして[PowerShellで実行]を選択すると、関数 'ShowMessage'が見つかりません。両方のファイルが同じフォルダにあります。何が起きているのでしょうか?
ワーカーファイルで次のように変更します。
. "c:\scratch\b.ps1"
ShowMessage "Hello"
@RoiDantonが以下で言及したように:
相対パスを使用する場合の注意:パスの前にドットを追加することを忘れないでください。 「。\ b.ps1」。
最初のドットはスコープを変更するために使用される演算子であり、そのコンテキストではパスとは関係ありません。 Dot Source Notation を参照してください。
ワーカーファイルで、ライブラリファイルをドットソース化すると、すべてのコンテンツ(関数、変数など)がグローバルスコープに読み込まれ、ライブラリファイルから関数を呼び出すことができます。
=================== Worker file ==========================
# dot-source library script
# notice that you need to have a space
# between the dot and the path of the script
. c:\library.ps1
ShowMessage -AValue Hello
=================== End Worker file ======================