Ich habe die folgende benutze die den Eigenschaftswert zurückgibt, wie es über $thing.$prop
, wenn das die zugegriffen werden würde "property" würde existieren und keine zufällige Ausnahme werfen. Wenn die Eigenschaft "nicht existiert" (oder einen Nullwert hat), dann wird $null
zurückgegeben: Dieser Ansatz funktioniert in/ist nützlich für strict mode, weil, nun, Gonna Catch 'em All.
Ich finde diesen Ansatz nützlich, weil es PS Benutzerdefinierte Objekte, normale .NET-Objekte, PS HashTables und .NET-Sammlungen wie Dictionary als „Ente typisierte äquivalent“ behandelt werden kann, die wir finden eine ziemlich gut sind passend für PowerShell.
Natürlich erfüllt dies nicht die strenge Definition von "hat eine Eigenschaft" .. auf die diese Frage explizit beschränkt werden kann. Wenn die hier angenommene Definition von "Eigenschaft" akzeptiert wird, kann die Methode trivial modifiziert werden, um einen booleschen Wert zurückzugeben.
Function Get-PropOrNull {
param($thing, [string]$prop)
Try {
$thing.$prop
} catch {
}
}
Beispiele:
Get-PropOrNull (Get-Date) "Date" # => Monday, February 05, 2018 12:00:00 AM
Get-PropOrNull (Get-Date) "flub" # => $null
Get-PropOrNull (@{x="HashTable"}) "x" # => "HashTable"
Get-PropOrNull ([PSCustomObject]@{x="Custom"}) "x" # => "Custom"
$oldDict = New-Object "System.Collections.HashTable"
$oldDict["x"] = "OldDict"
Get-PropOrNull $d "x" # => "OldDict"
Und könnte dieses Verhalten nicht [immer] erwünscht sein .. dh. Es ist nicht möglich, zwischen x.Count
und x["Count"]
zu unterscheiden.
'($ object.property -ne $ null)'? – arco444
Ist es wichtig, ob die Eigenschaft vorhanden ist, aber einen '$ null'-Wert hat? – Matt