2013-08-24 21 views
7

È possibile elencare facilmente solo le variabili create dall'utente in PowerShell? Il cmdlet get-variable mi fornisce anche tutte le variabili di sistema, che a volte non sono ciò che vorrei.Come si elencano solo le variabili create dall'utente in PowerShell?

Per esempio, se apro una nuova sessione e fare

$a=1 
$b=2 

Vorrei un po variante di get-variable che restituisce solo a e b dal momento che sono le uniche due variabili che sono state create in modo esplicito nella sessione .

risposta

11

La maggior parte delle variabili standard possono essere trovati in System.Management.Automation.SpecialVariables. Se si filtra fuori questi e un piccolo elenco di altre variabili note, è possibile creare una funzione riutilizzabile per ottenere variabili definite dall'utente:

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 

Nota: Nel ISE ci sono due variabili tipo supplementari: $ psISE e $ psUnsupportedConsoleApplications

+0

Ho pensato a questo approccio, ma sembrava altrettanto strano nella console come qualsiasi altra cosa. Buon lavoro! –

4

È possibile considerare l'utilizzo di descrizione, ma che richiederebbe sintassi diversa per la creazione di variabili:

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

seconda sintassi utilizza alias/parametri posizionali per accorciare il vostro lavoro.

1

L'unico modo che posso vedere personalmente per fare ciò, richiederebbe un ulteriore passaggio per la memorizzazione delle variabili in un array.

Un esempio, solo per i test:

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

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