2013-08-24 50 views
7

是否可以在PowerShell中輕鬆地列出用戶創建的變量? get-variable Cmdlet給我所有的系統變量,這也不是我想要的。如何在PowerShell中列出用戶創建的變量?

例如,如果我打開一個新的會話,並做

$a=1 
$b=2 

我想的get-variable只因爲他們已經在會議上明確創建的只有兩個變量返回ab一些變種。

回答

11

大多數標準變量可以在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

+0

我想到了這種方法,但它在控制檯中與其他任何東西一樣奇怪。幹得好! –

4

您可以考慮使用說明,但創建變量時,將需要不同的語法:

New-Variable -Name a -Value 1 -Description MyVars 
nv b 2 -des MyVars 
Get-Variable | where { $_.Description -eq 'MyVars' } 

第二語法使用別名/位置參數,以縮短你的工作。

1

我個人認爲要做到這一點的唯一方法是需要額外的步驟來將變量存儲在數組中。

一個例子,只是爲了測試:

PS C:\Users\Athomsfere> $myVars = @($a, $b) 
PS C:\Users\Athomsfere> Get-Variable -Name myVars 

Name       Value 
----       ----- 
myVars       {some, thing}