Eu tenho usado o seguinte que retorna o valor da propriedade, como seria acessado via$thing.$prop
, se a "propriedade" existir e não lançar uma exceção aleatória. Se a propriedade "não existe" (ou tem um valor nulo), então $null
é retornado: esta abordagem funciona em / é útil para o modo estrito , porque, bem, vou pegar todos.
Acho essa abordagem útil porque permite que Objetos personalizados PS, objetos .NET normais, HashTables PS e coleções .NET como o Dicionário sejam tratados como "equivalente digitado em pato" , que considero um ajuste bastante adequado para PowerShell.
Claro, isso não atende à definição estrita de "tem uma propriedade" .. à qual esta questão pode ser explicitamente limitada. Se aceitar a definição mais ampla de "propriedade" assumida aqui, o método pode ser modificado trivialmente para retornar um booleano.
Function Get-PropOrNull {
param($thing, [string]$prop)
Try {
$thing.$prop
} Catch {
}
}
Exemplos:
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"
E, este comportamento pode não ser [sempre] desejado .. ie. não é possível distinguir entre x.Count
e x["Count"]
.
($object.property -ne $null)
?