Это можно сделать в управляемом коде (C#/VB), создав собственный собственный производный класс PSVariable, но не напрямую в чистом сценарии, извините. Я говорю «чистый сценарий», потому что в powershell v2 вы можете встроить 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
Обратите внимание, что количество циклов отличается от каждой оценки переменной. Если, конечно, если вы просто используете регулярную функцию вместо переменной, это намного проще.
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
Надеется, что это помогает
-Oisin
Почему бы не использовать метод? http://www.computerperformance.co.uk/powershell/powershell_functions.htm – asawyer
В вашем примере dir $ myvar не будет работать, потому что write-host не будет выводиться для dir. Вы хотите написать-вывод, но вам это действительно не нужно, вам просто нужно '$ myvar = 'foo'' – Jaykul