PowerShell – 独自の「自動変数」を作成することは可能ですか?

私は基本的に毎回実行される変数を作成したいと思います。最も簡単な例では:

$myvar = `write-host foo`;

それから、$ myvarを参照するたびに、fooが出力されます。

dir $myvar

Directory of foo:

ポイントは、書き込みホストのfoo部分が$ myvarを参照するたびに再実行されるということです。

ベストアンサー
PSVariable派生クラスを独自に作成することでマネージコード(C#/ VB)で実行できますが、純粋なスクリプトで直接実行することはできません。 PowerShell v2ではC#をadd-typeでインライン化できるため、「純粋なスクリプト」と言っています。そうは言っても、暗黙のToString呼び出しに頼ることでスクリプトでそれをハックすることができますが、これはあらゆる状況で信頼できるわけではありません。例:

# empty custom object
$o = new-object psobject

# override ToString with a PSScriptMethod member
$o.psobject.members.add((new-object `
     System.Management.Automation.PSScriptMethod "ToString", {
         "ticks: $([datetime]::now.ticks)" }))

ps> $o
ticks: 634256043148813794

ps> $o
ticks: 634256043165574752

ティック数は変数の評価ごとに異なります。もちろん、変数の代わりに通常の関数を使うだけなら、これははるかに簡単です。

function Ticks { [datetime]::now.ticks }

# use as a parameter - note the use of ( and )
ps> write-host (ticks)
634256043148813794

# use in a string - note the use of $( and )
ps> write-host "ticks $(ticks)"
ticks 634256043165574752

お役に立てれば

– オイシン

転載記事の出典を記入してください: PowerShell – 独自の「自動変数」を作成することは可能ですか? - コードログ