2013-08-24 11 views
7

Czy można łatwo wyświetlać tylko zmienne utworzone przez użytkownika w PowerShell? Cmdlet get-variable daje mi również wszystkie zmienne systemowe, które nie są tym, co chciałbym czasem.Jak wyświetlić tylko zmienne utworzone przez użytkownika w PowerShell?

Na przykład jeśli otworzę nową sesję i zrobić

$a=1 
$b=2 

Chciałbym jakąś odmianę get-variable że zwraca tylko a i b ponieważ są tylko dwie zmienne, które zostały wyraźnie tworzone w sesji .

Odpowiedz

11

Większość standardowych zmiennych można znaleźć w System.Management.Automation.SpecialVariables. Jeśli odfiltrować te i małą listę innych znanych zmiennych, można utworzyć wielokrotnego użytku funkcji, aby zdefiniowane przez użytkownika zmienne:

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 

Uwaga: W ISE Istnieją dwa dodatkowe standardowe zmienne: $ psISE i $ psUnsupportedConsoleApplications

+0

Myślałem o tym podejściu, ale wydawało się to równie dziwne w konsoli jak cokolwiek innego. Dobra robota! –

4

Można rozważyć użycie opis, ale to wymagałoby innej składni podczas tworzenia zmiennych:

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

2-te składni używa aliasy/parametrów pozycyjnych skrócić swoją pracę.

1

Jedyny sposób, w jaki osobiście mogę to zrobić, wymagałby dodatkowego kroku przechowywania zmiennych w tablicy.

Jednym z przykładów, tylko do testowania:

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

Name       Value 
----       ----- 
myVars       {some, thing} 
Powiązane problemy