PowerShell'de kullanılan GetType, değişkenler arasındaki fark


92

Değişkenler arasındaki fark nedir $ave $b?

$a = (Get-Date).DayOfWeek
$b = Get-Date | Select-Object DayOfWeek

Kontrol etmeye çalıştım

$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

Ancak bu değişkenlerin çıktıları farklı görünse de hiçbir fark görünmüyor.

Yanıtlar:


163

Her şeyden önce, GetType'ı çağırmak için parantez yok. Gördüğünüz, [DayOfWeek] 'de GetType yöntemini açıklayan MethodInfo'dur. GetType'ı gerçekten aramak için şunları yapmalısınız:

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

Bunun $abir [DayOfWeek] olduğunu ve bir veri nesnesinin yalnızca DayOfWeek özelliğini yakalamak $biçin Select-Object cmdlet'i tarafından oluşturulan özel bir nesne olduğunu görmelisiniz . Dolayısıyla, yalnızca DayOfWeek özelliğine sahip bir nesnedir:

C:\> $b.DayOfWeek -eq $a
True

20

Select-Object, yeni bir psobject oluşturur ve ona istediğiniz özellikleri kopyalar. Bunu GetType () ile doğrulayabilirsiniz:

PS > $a.GetType().fullname
System.DayOfWeek

PS > $b.GetType().fullname
System.Management.Automation.PSCustomObject

10

Select-Object , yalnızca belirtilen özelliklere sahip özel bir PSObject döndürür . Tek bir özellik ile bile, GERÇEK değişkeni almazsınız; PSObject'in içine sarılır.

Bunun yerine şunları yapın:

Get-Date | Select-Object -ExpandProperty DayOfWeek

Bu size şununla aynı sonucu verecektir:

(Get-Date).DayOfWeek

Aradaki fark, Get- Date'in birden çok nesne döndürmesi durumunda (Get-ChildItem), örneğin bir öğe dizisi olduğundan, ardışık düzen yolunun parantez yönteminden daha iyi çalışmasıdır . Bu, PowerShell v3'te değişmiştir ve (Get-ChildItem).FullPathbeklendiği gibi çalışır ve yalnızca tam yollardan oluşan bir dizi döndürür.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.