I Love PowerShell
PowerShell: ◆スクリプトファイルのパスを取得するで通常は取得可能なのだがFunction中ではうまく取得出来ない。
どうやらFunctionのスコープでもこの変数は設定されていて、それに隠蔽される風。
$script:myInvocation.MyCommand.pathとやれば参照できるようだ。
Functionの外で退避しておけば良い話でもあるのだが・・・。
なるほど、scriptラベルを使うのは盲点でした。この方法はスクリプト内、スクリプト内の関数内、どちらも同じコードで使えるので覚えておくといい感じですね。さて、スクリプト内の関数内でスクリプトファイルパスを取得するなら別解もあります。$myInvocation.ScriptNameこれで取得できます。ScriptNameプロパティは呼び出し元のスクリプトファイル名を返すもののようで、関数内だとその関数を呼び出したスクリプト、つまりその関数が記述されているスクリプトファイル名を返します。なのでこの方法では逆に、スクリプトファイル直下、つまりscriptスコープで実行すると、そのスクリプトファイル名は返しません。コンソールからそのスクリプトを呼び出すと空白、別スクリプトからそのスクリプトを呼び出すと別スクリプトのパスが返ります。
いつもフォローして頂きありがとうございます。$myInvocation.ScriptNameの動作を確認しました。参考にさせて頂きます。(__)
なるほど、scriptラベルを使うのは盲点でした。
返信削除この方法はスクリプト内、スクリプト内の関数内、どちらも同じコードで使えるので覚えておくといい感じですね。
さて、スクリプト内の関数内でスクリプトファイルパスを取得するなら別解もあります。
$myInvocation.ScriptName
これで取得できます。
ScriptNameプロパティは呼び出し元のスクリプトファイル名を返すもののようで、関数内だとその関数を呼び出したスクリプト、つまりその関数が記述されているスクリプトファイル名を返します。
なのでこの方法では逆に、スクリプトファイル直下、つまりscriptスコープで実行すると、そのスクリプトファイル名は返しません。コンソールからそのスクリプトを呼び出すと空白、別スクリプトからそのスクリプトを呼び出すと別スクリプトのパスが返ります。
いつもフォローして頂きありがとうございます。
返信削除$myInvocation.ScriptNameの動作を確認しました。
参考にさせて頂きます。(__)