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



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


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

666   3  

3 ответов:

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

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

вы должны это видеть $a это [день недели], и $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 только с указанными свойствами. Даже с одним свойством вы не получаете фактическую переменную; она обернута внутри PSObject.

вместо этого:

Get-Date | Select-Object -ExpandProperty DayOfWeek

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

(Get-Date).DayOfWeek

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

Comments

    Ничего не найдено.