Quelle est la différence entre les variables $a
et $b
?
$a = (Get-Date).DayOfWeek
$b = Get-Date | Select-Object DayOfWeek
J'ai essayé de vérifier
$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
Mais il ne semble y avoir aucune différence bien que la sortie de ces variables semble différente.
Tout d'abord, il vous manque des parenthèses pour appeler GetType. Ce que vous voyez est le MethodInfo décrivant la méthode GetType sur [DayOfWeek]. Pour appeler réellement GetType, vous devriez faire:
$a.GetType();
$b.GetType();
Vous devriez voir que $a
est un [DayOfWeek] et $b
est un objet personnalisé généré par la cmdlet Select-Object pour capturer uniquement la propriété DayOfWeek d'un objet de données. Par conséquent, c'est un objet avec une propriété DayOfWeek uniquement:
C:\> $b.DayOfWeek -eq $a
True
Select-Object crée un nouveau psobject et y copie les propriétés que vous avez demandées. Vous pouvez le vérifier avec GetType ():
PS > $a.GetType().fullname
System.DayOfWeek
PS > $b.GetType().fullname
System.Management.Automation.PSCustomObject
Select-Object renvoie un paramètre personnalisé PSObject avec uniquement les propriétés spécifiées. Même avec une seule propriété, vous n'obtenez pas la variable ACTUAL; il est enveloppé dans le PSObject.
Au lieu de cela, faites:
_Get-Date | Select-Object -ExpandProperty DayOfWeek
_
Cela vous donnera le même résultat que:
_(Get-Date).DayOfWeek
_
La différence est que si Get-Date renvoie plusieurs objets, la méthode du pipeline fonctionne mieux que la méthode entre parenthèses car (Get-ChildItem)
, par exemple, est un tableau d'éléments. . Cela a changé dans PowerShell v3 et _(Get-ChildItem).FullPath
_ fonctionne comme prévu et renvoie un tableau contenant uniquement les chemins d'accès complets.