我基本上想要创建一个每次都会执行的变量.最简单的例子:
$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时都会重新执行该部分
它可以通过创建自己的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
归档时间: |
|
查看次数: |
373 次 |
最近记录: |