変数$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
しかし、これらの変数の出力は異なって見えますが、違いはないようです。
まず、GetTypeを呼び出すための括弧がありません。表示されるのは、[DayOfWeek]のGetTypeメソッドを記述するMethodInfoです。実際にGetTypeを呼び出すには、次のことを行う必要があります。
$a.GetType();
$b.GetType();
$a
は[DayOfWeek]であり、$b
は Select-Object コマンドレットによって生成され、データオブジェクトのDayOfWeekプロパティのみをキャプチャするカスタムオブジェクトであることがわかります。したがって、DayOfWeekプロパティのみを持つオブジェクトです。
C:\> $b.DayOfWeek -eq $a
True
Select-Objectは新しいpsobjectを作成し、要求したプロパティをコピーします。 GetType()でこれを確認できます:
PS > $a.GetType().fullname
System.DayOfWeek
PS > $b.GetType().fullname
System.Management.Automation.PSCustomObject
Select-Object は、カスタムを返します PSObject プロパティのみを指定します。単一のプロパティであっても、ACTUAL変数を取得しません。 PSObject内にラップされます。
代わりに:
Get-Date | Select-Object -ExpandProperty DayOfWeek
それはあなたと同じ結果を得るでしょう:
(Get-Date).DayOfWeek
違いは、 Get-Date が複数のオブジェクトを返す場合、たとえば (Get-ChildItem)
がアイテムの配列であるため、パイプラインの方法は括弧の方法よりも優れていることです。これはPowerShell v3で変更され、(Get-ChildItem).FullPath
は期待どおりに機能し、完全なパスのみの配列を返します。