是否可以在 PowerShell 中轻松仅列出用户创建的变量?Cmdlet 也为我提供get-variable
了所有系统变量,这有时不是我想要的。
例如,如果我打开一个新会话并执行
$a=1
$b=2
我想要一些get-variable
只返回的变体a
,b
因为它们是在会话中显式创建的仅有的两个变量。
是否可以在 PowerShell 中轻松仅列出用户创建的变量?Cmdlet 也为我提供get-variable
了所有系统变量,这有时不是我想要的。
例如,如果我打开一个新会话并执行
$a=1
$b=2
我想要一些get-variable
只返回的变体a
,b
因为它们是在会话中显式创建的仅有的两个变量。
大多数标准变量都可以在System.Management.Automation.SpecialVariables
. 如果您过滤掉这些和一小部分其他已知变量,您可以创建一个可重用的函数来获取用户定义的变量:
function Get-UDVariable {
get-variable | where-object {(@(
"FormatEnumerationLimit",
"MaximumAliasCount",
"MaximumDriveCount",
"MaximumErrorCount",
"MaximumFunctionCount",
"MaximumVariableCount",
"PGHome",
"PGSE",
"PGUICulture",
"PGVersionTable",
"PROFILE",
"PSSessionOption"
) -notcontains $_.name) -and `
(([psobject].Assembly.GetType('System.Management.Automation.SpecialVariables').GetFields('NonPublic,Static') | Where-Object FieldType -eq ([string]) | ForEach-Object GetValue $null)) -notcontains $_.name
}
}
$a = 5
$b = 10
get-udvariable
Name Value
---- -----
a 5
b 10
注意:在 ISE 中还有两个额外的标准变量:$psISE 和 $psUnsupportedConsoleApplications
您可以考虑使用描述,但在创建变量时需要不同的语法:
New-Variable -Name a -Value 1 -Description MyVars
nv b 2 -des MyVars
Get-Variable | where { $_.Description -eq 'MyVars' }
第二种语法使用别名/位置参数来缩短您的工作。
我个人认为这样做的唯一方法是需要一个额外的步骤,将变量存储在数组中。
一个示例,仅用于测试:
PS C:\Users\Athomsfere> $myVars = @($a, $b)
PS C:\Users\Athomsfere> Get-Variable -Name myVars
Name Value
---- -----
myVars {some, thing}