GetType, используемый в PowerShell, разница между переменными

89

В чем разница между переменными $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

Но, похоже, нет никакой разницы, хотя результат этих переменных выглядит иначе.

Джрара
источник

Ответы:

158

Во-первых, вам не хватает скобок для вызова GetType. Вы видите MethodInfo, описывающий метод GetType в [DayOfWeek]. Чтобы вызвать GetType, вам нужно сделать:

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

Вы должны увидеть, что $aэто [DayOfWeek], и $bэто настраиваемый объект, созданный командлетом Select-Object для захвата только свойства DayOfWeek объекта данных. Следовательно, это объект только со свойством 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 только с указанными свойствами. Даже с одним свойством вы не получите переменную ACTUAL; он обернут внутри PSObject.

Вместо этого сделайте:

Get-Date | Select-Object -ExpandProperty DayOfWeek

Это даст вам тот же результат, что и:

(Get-Date).DayOfWeek

Разница в том, что если Get-Date возвращает несколько объектов, конвейерный способ работает лучше, чем способ в скобках (Get-ChildItem), например, массив элементов. Это было изменено в PowerShell v3 и (Get-ChildItem).FullPathработает так, как ожидалось, и возвращает массив только полных путей.

MasterCheffinator
источник