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; вона загорнута всередину об'єкта PSO.

Натомість зробіть:

Get-Date | Select-Object -ExpandProperty DayOfWeek

Це дасть вам такий самий результат, як:

(Get-Date).DayOfWeek

Різниця полягає в тому, що якщо Get-Date повертає кілька об’єктів, конвеєр працює краще, ніж у дужках, оскільки (Get-ChildItem), наприклад, це масив елементів. Це змінилося в PowerShell v3, (Get-ChildItem).FullPathпрацює належним чином і повертає масив із лише повними шляхами.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.