有没有办法在powershell脚本中获取仅本地声明的变量?
在此snippit中,我希望它仅返回myVar1
,myVar2
,anotherVar
:
$myVar1 = "myVar1"
$myVar2 = "myVar2"
$anotherVar = "anotherVar"
Get-Variable -Scope Script
但它会返回大量其他本地脚本变量。
我正在尝试解决的问题,也许你可以提出另一种方法,就是我有许多Powershell脚本,它们在顶部声明了一堆misc变量常量。
我想将它们全部导出到磁盘(xml)以便稍后导入。
因此,要调用Get-Variable bla* | Export-Clixml vars.xml
,我需要知道所有变量名称。
有没有我喜欢的方式
$allVars = {
$myVar1 = "alex"
$myVar2 = "iscool"
$anotherVar = "thisisanotherVar"
}
Get-Variable allVars | Export-Clixml "C:\TEMP\AllVars.xml"
然后是Import-Clixml .\AllVars.xml | %{ Set-Variable $_.Name $_.Value }
?
所以脚本的其余部分仍然可以使用$myVar1
等,而不会对已编写的内容进行重大更改?
答案 0 :(得分:2)
问题是,除了您已声明的变量之外,还有更多可在该范围内访问的变量。您可以做的一件事是在之前获取变量列表。获取所有变量的另一个副本,并比较列表以获取您的变量。
$before = Get-Variable -Scope Local
$r = "Stuff"
$after = Get-Variable -Scope Local
# Get the differences
Compare-Object -Reference $current -Difference $more -Property Name -PassThru
上面应该为您的变量吐出名称和简单值。如果需要,您应该能够轻松地将其发送到Export-CliXML。如果变量很复杂,则可能需要更改-depth
以获取更复杂的对象。
警告:如果您要更改一些默认变量值,上面的代码当前会省略它们,因为它只是在寻找新名称。
也不确定是否可以使用与导出时相同的方式导入它们。这在很大程度上取决于您的数据类型。对于简单的变量,这很好
我需要知道所有变量名称。
我所知道的唯一其他方式(我从未真正考虑过这一点)是将所有变量更改为具有my_
之类的前缀,这样您就可以只有一行用于导出。
Get-Variable my_* | Export-Clixml vars.xml