2011-10-03 4 views
44

変数$a$bの違いは何ですか?PowerShellでGetTypeを使用すると、変数の差

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

私は

$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 

をチェックしようとしましたが、これらの変数の出力が異なって見えるものの、有意差はないように思えます。

答えて

87

まず、GetTypeを呼び出す括弧がありません。あなたは[DayOfWeek]でGetTypeメソッドを記述するMethodInfoを見ています。実際にはgettypeを呼び出すには、実行する必要があります。

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

あなたは$aは、[のDayOfWeek]であることを確認する必要があり、そして$bは、データオブジェクトの唯一のDayOfWeekプロパティをキャプチャするSelect-Objectコマンドレットによって生成されたカスタムオブジェクトです。したがって、それだけのDayOfWeekプロパティを持つオブジェクトです:

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

Select-Objectは新しいオブジェクトを作成し、要求したプロパティをコピーします。これはGetType()で確認することができます。

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

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

Select-Objectは、指定されたプロパティだけでカスタムPSObjectを返します。単一のプロパティであっても、ACTUAL変数は取得できません。 PSObjectの内部にラップされます。代わりに

、ん:違いはGet-Dateは、複数のオブジェクトを返す場合、パイプラインの方法は括弧の方法よりも優れて動作することである

(Get-Date).DayOfWeek 

:としてあなたと同じ結果が得られます

Get-Date | Select-Object -ExpandProperty DayOfWeek 

たとえば、(Get-ChildItem)はアイテムの配列です。これはPowerShell v3で変更され、(Get-ChildItem).FullPathは期待どおりに動作し、完全なパスのみの配列を返します。

関連する問題