Я использовал следующее, которое возвращает значение свойства, поскольку к нему можно получить доступ$thing.$prop
, если «свойство» должно существовать, а не генерировать случайное исключение. Если свойство «не существует» (или имеет нулевое значение), то $null
возвращается: этот подход работает в / полезен для строгого режима , потому что, ну, Gonna Catch 'em All.
Я считаю этот подход полезным, потому что он позволяет обрабатывать пользовательские объекты PS, обычные объекты .NET, PS HashTables и коллекции .NET, такие как Dictionary, как «утиный эквивалент» , который, как я считаю, довольно хорошо подходит для PowerShell.
Конечно, это не соответствует строгому определению термина «имеет свойство» ... которым этот вопрос может быть явно ограничен. Если принять более широкое определение «свойства», предложенное здесь, метод можно тривиально изменить, чтобы он возвращал логическое значение.
Function Get-PropOrNull {
param($thing, [string]$prop)
Try {
$thing.$prop
} Catch {
}
}
Примеры:
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"
И такое поведение может не [всегда] быть желательным ... т.е. невозможно различить x.Count
и x["Count"]
.
($object.property -ne $null)
?