PowerShellで使用されるGetType、変数間の違い


92

変数$aとの違いは何$bですか?

$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

しかし、これらの変数の出力は異なって見えますが、違いはないようです。

回答:


163

まず、GetTypeを呼び出すための括弧がありません。表示されるのは、[DayOfWeek]のGetTypeメソッドを説明するMethodInfoです。実際にGetTypeを呼び出すには、次のようにする必要があります。

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

これ$aは[DayOfWeek]であり、データオブジェクトのDayOfWeekプロパティのみをキャプチャ$bするためにSelect-Objectコマンドレットによって生成されたカスタムオブジェクトであることがわかります。したがって、これはDayOfWeekプロパティのみを持つオブジェクトです。

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

20

Select-Objectは、新しいpsobjectを作成し、要求したプロパティをコピーします。これはGetType()で確認できます。

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

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

10

Select-Objectは、指定されたプロパティのみを含むカスタムPSObjectを返します。プロパティが1つであっても、ACTUAL変数は取得されません。PSObject内にラップされています。

代わりに、次のようにします。

Get-Date | Select-Object -ExpandProperty DayOfWeek

これにより、次と同じ結果が得られます。

(Get-Date).DayOfWeek

違いは、Get-Dateが複数のオブジェクトを返す場合(Get-ChildItem)、たとえばアイテムの配列であるため、パイプラインの方法は括弧の方法よりもうまく機能することです。これはPowerShellv3で変更され(Get-ChildItem).FullPath、期待どおりに機能し、フルパスのみの配列を返します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.