如何枚举所有本地声明的脚本变量?
How to enumerate all locally declared script variables?
有没有办法在 powershell 脚本中仅获取本地声明的变量?
在这个片段中,我只希望它 return myVar1
、myVar2
、anotherVar
:
$myVar1 = "myVar1"
$myVar2 = "myVar2"
$anotherVar = "anotherVar"
Get-Variable -Scope Script
但它 return 是大量其他本地脚本变量。
我试图解决的问题是我有很多 Powershell 脚本,它们在顶部声明了一堆杂项变量常量。
我想将它们全部导出到磁盘 (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
等,而无需对已编写的内容进行重大更改?
问题是除了您已经声明的变量之外,还有更多的变量可以在该范围内访问。您可以做的一件事是在您声明变量之前获取变量列表。获取所有变量的另一个副本并比较列表以获取您的变量。
$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
以获得更复杂的对象。
警告: 如果您要更改某些默认变量值,上述代码目前会忽略它们,因为它只是在寻找新名称。
也不确定您是否可以完全按照导出它们的方式导入它们。这在很大程度上取决于您的数据类型。对于简单的变量,这就可以了
I need to know all of the variable names.
我知道的唯一另一种方法(我从来没有真正考虑过这个)是将所有变量更改为具有像 my_
这样的前缀,这样您就可以只导出一行。
Get-Variable my_* | Export-Clixml vars.xml
有没有办法在 powershell 脚本中仅获取本地声明的变量?
在这个片段中,我只希望它 return myVar1
、myVar2
、anotherVar
:
$myVar1 = "myVar1"
$myVar2 = "myVar2"
$anotherVar = "anotherVar"
Get-Variable -Scope Script
但它 return 是大量其他本地脚本变量。
我试图解决的问题是我有很多 Powershell 脚本,它们在顶部声明了一堆杂项变量常量。
我想将它们全部导出到磁盘 (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
等,而无需对已编写的内容进行重大更改?
问题是除了您已经声明的变量之外,还有更多的变量可以在该范围内访问。您可以做的一件事是在您声明变量之前获取变量列表。获取所有变量的另一个副本并比较列表以获取您的变量。
$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
以获得更复杂的对象。
警告: 如果您要更改某些默认变量值,上述代码目前会忽略它们,因为它只是在寻找新名称。
也不确定您是否可以完全按照导出它们的方式导入它们。这在很大程度上取决于您的数据类型。对于简单的变量,这就可以了
I need to know all of the variable names.
我知道的唯一另一种方法(我从来没有真正考虑过这个)是将所有变量更改为具有像 my_
这样的前缀,这样您就可以只导出一行。
Get-Variable my_* | Export-Clixml vars.xml