GetType utilizzato in PowerShell, differenza tra le variabili


92

Qual è la differenza tra le variabili $ae $b?

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

Ho provato a controllare

$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

Ma sembra non esserci alcuna differenza sebbene l'output di queste variabili sia diverso.

Risposte:


163

Prima di tutto, ti mancano le parentesi per chiamare GetType. Quello che vedi è il MethodInfo che descrive il metodo GetType su [DayOfWeek]. Per chiamare effettivamente GetType, dovresti fare:

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

Dovresti vedere che $aè un [DayOfWeek] ed $bè un oggetto personalizzato generato dal cmdlet Select-Object per acquisire solo la proprietà DayOfWeek di un oggetto dati. Quindi, è un oggetto con solo una proprietà DayOfWeek:

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

20

Select-Object crea un nuovo psobject e copia le proprietà che hai richiesto. Puoi verificarlo con GetType ():

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

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

10

Select-Object restituisce un oggetto PSObject personalizzato con solo le proprietà specificate. Anche con una singola proprietà, non ottieni la variabile ACTUAL; è avvolto all'interno di PSObject.

Invece, fai:

Get-Date | Select-Object -ExpandProperty DayOfWeek

Otterrai lo stesso risultato di:

(Get-Date).DayOfWeek

La differenza è che se Get-Date restituisce più oggetti, il modo pipeline funziona meglio del modo parentetico in quanto (Get-ChildItem), ad esempio, è un array di elementi. Questo è cambiato in PowerShell v3 e (Get-ChildItem).FullPathfunziona come previsto e restituisce un array di soli percorsi completi.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.