2011-10-03 15 views
44

Sự khác nhau giữa các biến số $a$b là gì?GetType được sử dụng trong PowerShell, sự khác biệt giữa các biến

$a = (Get-Date).DayOfWeek 
$b = Get-Date | Select-Object DayOfWeek 

tôi đã cố gắng để kiểm tra

$a.GetType 
$b.GetType 

MemberType   : Method 
OverloadDefinitions : {type GetType()} 
TypeNameOfValue  : System.Management.Automation.PSMethod 
Value    : type GetType() 
Name    : GetType 
IsInstance   : True 

MemberType   : Method 
OverloadDefinitions : {type GetType()} 
TypeNameOfValue  : System.Management.Automation.PSMethod 
Value    : type GetType() 
Name    : GetType 
IsInstance   : True 

Nhưng có vẻ là không có sự khác biệt mặc dù đầu ra của các biến này có vẻ khác.

Trả lời

87

Trước hết, bạn thiếu dấu ngoặc đơn để gọi GetType. Những gì bạn thấy là MethodInfo mô tả phương thức GetType trên [DayOfWeek]. Để thực sự gọi GetType, bạn nên làm:

$a.GetType(); 
$b.GetType(); 

Bạn sẽ thấy rằng $a là một [DAYOFWEEK], và $b là một đối tượng tùy chỉnh được tạo ra bởi Select-Object cmdlet để nắm bắt chỉ là tài sản dayOfWeek của một đối tượng dữ liệu. Do đó, nó là một đối tượng chỉ với một tài sản dayOfWeek:

C:\> $b.DayOfWeek -eq $a 
True 
11

Chọn đối tượng tạo ra một psobject mới và sao chép các thuộc tính mà bạn yêu cầu. Bạn có thể xác minh điều này bằng GetType():

PS > $a.GetType().fullname 
System.DayOfWeek 

PS > $b.GetType().fullname 
System.Management.Automation.PSCustomObject 
6

Select-Object trả về một tùy chỉnh PSObject chỉ với các thuộc tính xác định. Ngay cả với một thuộc tính duy nhất, bạn không nhận được biến ACTUAL; nó được bọc bên trong PSObject.

Thay vào đó, làm:

Get-Date | Select-Object -ExpandProperty DayOfWeek 

Điều đó sẽ giúp bạn có được kết quả tương tự như:

(Get-Date).DayOfWeek 

Sự khác biệt là nếu Get-Date lợi nhuận nhiều đối tượng, cách đường ống làm việc tốt hơn so với cách đặt trong dấu ngoặc ví dụ như (Get-ChildItem) là một mảng các mục. Điều này đã thay đổi trong PowerShell v3 và (Get-ChildItem).FullPath hoạt động như mong đợi và trả về một mảng chỉ là đường dẫn đầy đủ.

Các vấn đề liên quan