如何按声明的顺序获取变量

时间:2010-04-27 13:15:57

标签: powershell

是否可以使Get-Variable始终按照声明的顺序返回变量?

 & {
     $c = 2
     $b = 1
     $a = 0

     get-variable -scope local
   }

2 个答案:

答案 0 :(得分:1)

如果为变量分配了scriptblocks(我的情况),原来有办法实现这个目的:

 &{
   $h_one = { "one" }
   $h_two = { "two" }
   $h_three = { "three" }
   $h_four = { "four" }

   $byStartLines= @{}
   get-variable -name "h_*" -scope local | % { $byStartlines[($_.value.startposition.startline)] = $_ }
   $order = ([int[]] $byStartLines.keys) | sort
   $order | %{ $byStartLines[$_].name }
 }

如果你在一行中声明了几个脚本块,情况会变得更复杂,但这是它的要点。

答案 1 :(得分:0)

我认为答案是否定的,但需要注意。

因为variable:name条目中没有任何内容(通过dir variable:name获取此内容),表明创建$name的时间。

需要注意的是,自定义PSH主机可以通过在执行之前检查运行空间中的管道来做某事(但这可能需要编写自己的解析器,可能仍然无法处理invoke-expression )。

(如果你解释为什么要这样做,可能会有更好的答案。)