2013-08-24 31 views
7

Có thể dễ dàng liệt kê các biến do người dùng tạo trong PowerShell không? Cmdlet get-variable cung cấp cho tôi tất cả các biến hệ thống cũng không phải là những gì tôi muốn đôi khi.Làm cách nào để bạn chỉ liệt kê các biến do người dùng tạo trong PowerShell?

Ví dụ nếu tôi mở một phiên làm việc mới và làm

$a=1 
$b=2 

tôi muốn một số biến thể của get-variable mà chỉ trả ab vì chúng là hai biến duy nhất mà đã được tạo ra một cách rõ ràng trong phiên .

Trả lời

11

Hầu hết các biến chuẩn có thể được tìm thấy trong System.Management.Automation.SpecialVariables. Nếu bạn lọc ra những điều này và một danh sách nhỏ của các biến tiếng khác, bạn có thể tạo một hàm tái sử dụng để có được biến do người dùng định nghĩa:

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 

Note: Trong ISE có hai biến chuẩn bổ sung: $ psISE và $ psUnsupportedConsoleApplications

+0

Tôi nghĩ về cách tiếp cận này, nhưng nó có vẻ lạ lẫm trong giao diện điều khiển như bất cứ điều gì khác. Làm tốt lắm! –

4

Bạn có thể xem xét sử dụng mô tả, nhưng điều đó sẽ đòi hỏi cú pháp khác nhau khi tạo biến:

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

cú pháp thứ 2 sử dụng bí danh/tham số vị trí để rút ngắn công việc của bạn.

1

Cách duy nhất để cá nhân tôi có thể xem để thực hiện việc này, sẽ yêu cầu thêm một bước để lưu trữ các biến trong một mảng.

Một ví dụ, chỉ để thử nghiệm:

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

Name       Value 
----       ----- 
myVars       {some, thing} 
Các vấn đề liên quan