He estado usando lo siguiente que devuelve el valor de la propiedad, ya que se accedería a través de$thing.$prop
, si la "propiedad" existiera y no arrojara una excepción aleatoria. Si la propiedad "no existe" (o tiene un valor nulo), $null
se devuelve: este enfoque funciona en / es útil para el modo estricto , porque, bueno, Gonna Catch 'em All.
Encuentro este enfoque útil porque permite que los objetos personalizados de PS, los objetos .NET normales, las tablas hash de PS y las colecciones de .NET como Dictionary se traten como "equivalentes de tipo pato" , lo que considero que encaja bastante bien con PowerShell.
Por supuesto, esto no cumple con la definición estricta de "tiene una propiedad" ... a la que esta pregunta puede limitarse explícitamente. Si acepta la definición más amplia de "propiedad" asumida aquí, el método puede modificarse trivialmente para devolver un valor booleano.
Function Get-PropOrNull {
param($thing, [string]$prop)
Try {
$thing.$prop
} Catch {
}
}
Ejemplos:
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"
Y, este comportamiento podría no ser [siempre] deseable ... es decir. no es posible distinguir entre x.Count
y x["Count"]
.
($object.property -ne $null)
?