是否可以创建自己的"自动变量"?

esa*_*sac 6 powershell

我基本上想要创建一个每次都会执行的变量.最简单的例子:

$myvar = `write-host foo`;
Run Code Online (Sandbox Code Playgroud)

然后每当我引用$ myvar时,它都会输出foo:

dir $myvar

Directory of foo:
Run Code Online (Sandbox Code Playgroud)

关键是write-host foo每次引用$ myvar时都会重新执行该部分

x0n*_*x0n 5

它可以通过创建自己的PSVariable派生类在托管代码(C#/ VB)中实现,但不能直接在纯脚本中使用,抱歉.我说"纯脚本",因为在powershell v2中你可以使用add-type内联C#.也就是说,您可以依靠隐式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
Run Code Online (Sandbox Code Playgroud)

请注意,每次评估变量时,滴答计数都不同.当然,如果你只使用常规函数而不是变量,这就容易多了.

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
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助

-Oisin