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
но, кажется, нет никакой разницы, хотя выходные данные этих переменных выглядят по-разному.
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