J'ai utilisé ce qui suit qui renvoie la valeur de la propriété, car elle serait accessible via$thing.$prop
, si la "propriété" devait exister et ne pas lancer une exception aléatoire. Si la propriété "n'existe pas" (ou a une valeur nulle) alors $null
est retournée: cette approche fonctionne en / est utile pour le mode strict , car, eh bien, va les attraper tous.
Je trouve cette approche utile car elle permet aux objets personnalisés PS, aux objets .NET normaux, aux HashTables PS et aux collections .NET comme Dictionary d'être traités comme des «équivalents de type canard» , ce qui, à mon avis, convient assez bien à PowerShell.
Bien entendu, cela ne répond pas à la définition stricte de "possède une propriété" .. à laquelle cette question peut être explicitement limitée. Si vous acceptez la définition plus large de "propriété" supposée ici, la méthode peut être modifiée de manière triviale pour renvoyer un booléen.
Function Get-PropOrNull {
param($thing, [string]$prop)
Try {
$thing.$prop
} Catch {
}
}
Exemples:
Get-PropOrNull (Get-Date) "Date"
Get-PropOrNull (Get-Date) "flub"
Get-PropOrNull (@{x="HashTable"}) "x"
Get-PropOrNull ([PSCustomObject]@{x="Custom"}) "x"
$oldDict = New-Object "System.Collections.HashTable"
$oldDict["x"] = "OldDict"
Get-PropOrNull $d "x"
Et, ce comportement pourrait ne pas [toujours] être souhaité .. ie. il n'est pas possible de faire la distinction entre x.Count
et x["Count"]
.
($object.property -ne $null)
?