2011年10月27日木曜日

◆スクリプトファイルのパスを取得する(補足)

PowerShell: ◆スクリプトファイルのパスを取得するで通常は取得可能なのだがFunction中ではうまく取得出来ない。

どうやらFunctionのスコープでもこの変数は設定されていて、それに隠蔽される風。

$script:myInvocation.MyCommand.pathとやれば参照できるようだ。

Functionの外で退避しておけば良い話でもあるのだが・・・。

2 件のコメント:

  1. なるほど、scriptラベルを使うのは盲点でした。
    この方法はスクリプト内、スクリプト内の関数内、どちらも同じコードで使えるので覚えておくといい感じですね。

    さて、スクリプト内の関数内でスクリプトファイルパスを取得するなら別解もあります。
    $myInvocation.ScriptName
    これで取得できます。

    ScriptNameプロパティは呼び出し元のスクリプトファイル名を返すもののようで、関数内だとその関数を呼び出したスクリプト、つまりその関数が記述されているスクリプトファイル名を返します。

    なのでこの方法では逆に、スクリプトファイル直下、つまりscriptスコープで実行すると、そのスクリプトファイル名は返しません。コンソールからそのスクリプトを呼び出すと空白、別スクリプトからそのスクリプトを呼び出すと別スクリプトのパスが返ります。

    返信削除
  2. いつもフォローして頂きありがとうございます。

    $myInvocation.ScriptNameの動作を確認しました。
    参考にさせて頂きます。(__)

    返信削除