2011-10-03 16 views
44

Qual è la differenza tra le variabili $a e $b?GetType utilizzato in PowerShell, differenza tra le variabili

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

ho cercato di 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 non sembra esserci alcuna differenza, anche se l'uscita di queste variabili un aspetto diverso.

risposta

87

Prima di tutto, ti manca la parentesi per chiamare GetType. Quello che vedi è il MethodInfo che descrive il metodo GetType su [DayOfWeek]. Per chiamare in realtà GetType, si dovrebbe fare:

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

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

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

Select-Object crea un nuovo psobject e copia le proprietà richieste. Puoi verificare con GetType():

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

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

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

Invece, fare:

Get-Date | Select-Object -ExpandProperty DayOfWeek 

che ti porterà lo stesso risultato:

(Get-Date).DayOfWeek 

La differenza è che se Get-Date restituisce più oggetti, la via gasdotto funziona meglio rispetto al modo parentesi come (Get-ChildItem), ad esempio, è una matrice di elementi. Ciò è cambiato in PowerShell v3 e (Get-ChildItem).FullPath funziona come previsto e restituisce un array di soli percorsi completi.

Problemi correlati