Ho usato quanto segue che restituisce il valore della proprietà, poiché sarebbe accessibile tramite$thing.$prop
, se la "proprietà" dovesse esistere e non generare un'eccezione casuale. Se la proprietà "non esiste" (o ha un valore nullo) $null
viene restituita: questo approccio funziona in / è utile per la modalità rigorosa , perché, beh, Gonna Catch 'em All.
Trovo questo approccio utile perché consente a PS Custom Objects, normali oggetti .NET, PS HashTables e .NET raccolte come Dictionary di essere trattati come "equivalenti a forma di papera" , che trovo siano abbastanza adatti per PowerShell.
Naturalmente, questo non soddisfa la definizione rigorosa di "ha una proprietà" .. a cui questa domanda può essere esplicitamente limitata. Se si accetta la definizione più ampia di "proprietà" qui assunta, il metodo può essere banalmente modificato per restituire un valore booleano.
Function Get-PropOrNull {
param($thing, [string]$prop)
Try {
$thing.$prop
} Catch {
}
}
Esempi:
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"
E questo comportamento potrebbe non [sempre] essere desiderato .. cioè. non è possibile distinguere tra x.Count
e x["Count"]
.
($object.property -ne $null)
?