객체에 특정 속성이 있는지 어떻게 테스트 할 수 있습니까?
할 수있어 감사합니다 …
$members = Get-Member -InputObject $myobject
다음을 foreach
통해$members
객체에 특정 속성이 있는지 테스트하는 기능이 있습니까?
추가 정보 :
문제는 두 가지 종류의 CSV 파일을 가져 오는 것입니다. 하나에는 두 개의 열이 있고 다른 하나에는 세 개의 열이 있습니다. 나는 “Property”와 함께 작동하는 수표를 얻을 수 없었고, “NoteProperty”에서만 … 차이가 무엇이든간에
if ( ($member.MemberType -eq "NoteProperty" ) -and ($member.Name -eq $propertyName) )
답변
이렇게?
[bool]($myObject.PSobject.Properties.name -match "myPropertyNameToTest")
답변
당신이 사용할 수있는 Get-Member
if(Get-Member -inputobject $var -name "Property" -Membertype Properties){
#Property exists
}
답변
이것은 간결하고 읽기 쉽습니다.
"MyProperty" -in $MyObject.PSobject.Properties.Name
함수에 넣을 수 있습니다.
function HasProperty($object, $propertyName)
{
$propertyName -in $object.PSobject.Properties.Name
}
답변
“속성”이 존재하고 임의의 예외를 throw하지 않는 경우 를 통해 액세스 할 수 있으므로 속성 값$thing.$prop
을 반환 하는 다음을 사용하고 있습니다 . 속성이 “존재하지 않음”(또는 null 값이 있음)이면 $null
반환됩니다.이 접근 방식은 엄격 모드 에서 작동 / 유용 합니다 . 왜냐하면 Gonna Catch ’em All.
이 접근 방식 은 PS Custom Objects, 일반 .NET 개체, PS HashTables 및 Dictionary와 같은 .NET 컬렉션을 “duck-typed equivalent”로 취급 할 수 있기 때문에 유용 하며 PowerShell에 상당히 적합하다고 생각합니다.
물론, 이것은 이 질문이 명시 적으로 제한 될 수있는 “속성 있음”.. 의 엄격한 정의를 충족하지 않습니다 . 여기서 가정 한 “속성”의 더 큰 정의를 받아들이면 부울을 반환하도록 메서드를 사소하게 수정할 수 있습니다.
Function Get-PropOrNull {
param($thing, [string]$prop)
Try {
$thing.$prop
} Catch {
}
}
예 :
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"
그리고이 동작은 [항상] 바람직하지 않을 수도 있습니다. 즉. x.Count
과 를 구별 할 수 없습니다 x["Count"]
.
답변
MyProperty" -in $MyObject.PSobject.Properties.Name
그러나 나를 위해 작동하지 않았습니다.
$MyObject.PSobject.Properties.Name.Contains("MyProperty")
공장
답변
StrictMode를 사용 중이고 psobject가 비어있는 경우 오류가 발생합니다.
모든 목적을 위해 다음을 수행합니다.
if (($json.PSobject.Properties | Foreach {$_.Name}) -contains $variable)
답변
자바 스크립트 검사와 진짜 비슷합니다.
foreach($member in $members)
{
if($member.PropertyName)
{
Write $member.PropertyName
}
else
{
Write "Nope!"
}
}