2013-08-24 15 views
7

Sadece kullanıcı tarafından oluşturulan değişkenleri PowerShell'de kolayca listelemek mümkün mü? get-variable Cmdlet bana tüm sistem değişkenlerini de verir, bu da bazen istediğim gibi değildir. Ben yeni bir oturum açıp yapmak ÖrneğinSadece kullanıcı tarafından oluşturulmuş değişkenleri PowerShell'de nasıl listelersiniz?

$a=1 
$b=2 
onlar açıkça oturumda oluşturulmuş sadece iki değişken olduğundan sadece a ve b döndürür get-variable bir varyasyonunu istiyorum

.

cevap

11

standart değişkenlerin çoğu System.Management.Automation.SpecialVariables bulunabilir.

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 

Not: iki ek standart değişken vardır İMKB ise: Eğer bu ve diğer bilinen değişkenlerin küçük listesini filtrelemek ise, kullanıcı tanımlı değişken almak için yeniden kullanılabilir bir işlevi oluşturabilir $ psISE ve $ psUnsupportedConsoleApplications

+0

Bu yaklaşımı düşündüm, ancak konsolda başka herhangi bir şey gibi garip görünüyordu. İyi iş! –

4

Sen açıklamasına kullanmayı düşünün, ancak değişkenleri oluştururken farklı bir sözdizimi gerektirir:

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

2 sözdizimi işinizi kısaltmak için diğer adlar/konumsal parametreleri kullanır.

1

Bunu yapmak için kişisel olarak görebildiğim tek yol, değişkenleri bir dizide saklamanın ek bir adımını gerektirir. Sadece test için

bir örnek:

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

Name       Value 
----       ----- 
myVars       {some, thing} 
İlgili konular