속성 이름으로 객체의 속성 값을 얻는 방법은 무엇입니까?


132

PowerShell에서 이름 (문자열)을 지정하여 개체의 속성 값을 어떻게 얻습니까? 다음과 같은 것을 원합니다.

$obj = get-something

# View the object's members:
$obj | gm

# I could retrieve a property by doing so:
write-host $obj.SomeProp

# But for many purposes, I would really want to:
write-host $obj | Get-PropertyByName "SomeProp"

PowerShell에 "Get-PropertyByName"과 비슷한 것이 있습니까?

답변:


198

확실한

write-host ($obj | Select -ExpandProperty "SomeProp")

또는 그 문제에 대해 :

$obj."SomeProp"

12
select -expand "SomeProp"값을 원한다면 expand :를 기억하십시오 . select "SomeProp"속성이 "SomeProp"인 사용자 정의 개체를 반환 한 다음 1 단계에서 거의 다시 돌아 왔습니다.
Frode F.

2
사용하는 방법이 있나요 $obj."SomeProp"으로는 write-host?
머핀 맨

@TheMuffinMan, 예. 쓰기 호스트 $ obj와 같은 일반적으로 적용 가능한 기능입니다. "$ somepropertyname"
Elroy Flynn

4
문자열이 변수에 있으면 $obj.($propName)작동합니다. (괄호는 필요하지 않지만 그들 없이는 정말 이상하게 보입니다 .)
jpmc26 April

3
$propName예를 들어 객체에 저장된 경우 $Headers.PropertyName괄호가 필요합니다 $obj.($Headers.PropertyName).
조나스 롬 홀트

41

@aquinas에서 확장 :

Get-something | select -ExpandProperty PropertyName

또는

Get-something | select -expand PropertyName

또는

Get-something | select -exp PropertyName

정보를 얻기 위해 한 줄 명령 만 찾고 실제 예제를 포함하고 싶었던 사람들을 위해 이러한 제안을했습니다.

PowerShell을 통해 Office 365를 관리 할 때 "BookInPolicy"목록에 추가 된 모든 사용자 / 그룹을 얻는 데 사용한 예는 다음과 같습니다.

Get-CalendarProcessing conferenceroom@domain.com | Select -expand BookInPolicy

"BookInPolicy 선택"을 사용하면 여러 회원이 차단되므로이 정보에 감사드립니다!


27

cmdlet을 사용하여 원하는 속성 이름을 지정 하여 속성 을 이름으로 가져올 수 있습니다.이 속성Select-Object단순히 해당 속성의 원시 값을 반환하지는 않습니다. 대신 여전히 객체처럼 동작하는 것을 얻습니다.

[PS]> $property = (Get-Process)[0] | Select-Object -Property Name

[PS]> $property

Name
----
armsvc

[PS]> $property.GetType().FullName
System.Management.Automation.PSCustomObject

해당 속성 의 을 사용하려면 속성이 하나 뿐인 경우에도 다음 속성을 식별해야합니다.

[PS]> $property.Name
armsvc

[PS]> $property -eq "armsvc"
False

[PS]> $property.Name -eq "armsvc"
True

[PS]> $property.Name.GetType().FullName
System.String

다른 답변에 따르면 문자열 내에서 단일 속성을 사용하려면 식을 괄호로 묶고 표현식을 삽입 할 변수로 동적으로 선언하기 위해 달러 기호 ($)를 접두사로 사용해야합니다 문자열로 :

[PS]> "The first process in the list is: $($property.Name)"
The first process in the list is: armsvc

정확하게 다른 사람들은 cmdlet 의 -ExpandProperty매개 변수를 권장하여이 질문에 대답했습니다 Select-Object. 지정된 속성 값을 반환하여 두통을 피할 수 있지만 시나리오마다 다른 접근 방식을 사용하려고합니다.

-ExpandProperty <String>

선택할 속성을 지정하고 해당 속성을 확장하려고 시도해야 함을 나타냅니다.

https://technet.microsoft.com/en-us/library/hh849895.aspx

[PS]> (Get-Process)[0] | Select-Object -ExpandProperty Name
armsvc


8

이 시도 :

$obj = @{
    SomeProp = "Hello"
}

Write-Host "Property Value is $($obj."SomeProp")"

StackOverflow에 오신 것을 환영합니다, 당신의 질문을 수정하고 설명하십시오 그가이 시도해야하며, 그 이유 는 기존의 답변을 향상시킨다.
T3 H40

이 답변은 IMO가 객체의 속성 문자열 이름을 기반으로 속성을 안전하게 얻는 가장 간단한 방법이지만 설명도 제공하지 않기 때문에 upvote와 downvote에서 충돌합니다.
트로이 팔라 치노

```$ obj = @ {Prop = "값"; }; $ propName = "Prop" '; Write-Host "$ propName의 값은 $ ($ obj."$ propName ")"$ propName = "NonexistentProp" '; Write-Host "$ propName의 값은 $ ($ obj."$ propName ")"입니다 The value of Prop is ValueThe value of NonexistentProp is
.``

와! 마크 다운 문서는 도움말 도움말에 링크되어 있지만 해당 사항에는 적용되지 않습니다. 정말 멋진 개발자들
Troy Palacino

3

객체의 속성 값을 얻는 다른 방법은 다음과 같습니다.

write-host $(get-something).SomeProp

0
$com1 = new-object PSobject                                                         #Task1
$com2 = new-object PSobject                                                         #Task1
$com3 = new-object PSobject                                                         #Task1



$com1 | add-member noteproperty -name user -value jindpal                           #Task2
$com1 | add-member noteproperty -name code -value IT01                              #Task2
$com1 | add-member scriptmethod ver {[system.Environment]::oSVersion.Version}       #Task3


$com2 | add-member noteproperty -name user -value singh                             #Task2
$com2 | add-member noteproperty -name code -value IT02                              #Task2
$com2 | add-member scriptmethod ver {[system.Environment]::oSVersion.Version}       #Task3


$com3 | add-member noteproperty -name user -value dhanoa                             #Task2
$com3 | add-member noteproperty -name code -value IT03                               #Task2
$com3 | add-member scriptmethod ver {[system.Environment]::oSVersion.Version}        #Task3


$arr += $com1, $com2, $com3                                                          #Task4


write-host "windows version of computer1 is: "$com1.ver()                            #Task3
write-host "user name of computer1 is: "$com1.user                                   #Task6
write-host "code of computer1 is: "$com1,code                                        #Task5
write-host "windows version of computer2 is: "$com2.ver()                            #Task3
write-host "user name of computer2 is: "$com2.user                                   #Task6
write-host "windows version of computer3 is: "$com3.ver()                            #Task3
write-host "user name of computer3 is: "$com1.user                                   #Task6
write-host "code of computer3 is: "$com3,code                                        #Task5

read-host

$ arr = @ ( "jind", 12, "singh") 쓰기 호스트 $ arr [1] 읽기 호스트 $ arr + = "reza"쓰기 호스트 $ arr [3] 읽기 호스트 쓰기 호스트 $ arr [ $ arr.length-1] 읽기 호스트 $ arr = $ arr -ne $ arr [1] 쓰기 호스트 $ arr 읽기 호스트 foreach ($ arr에서 $ i) {write-host $ i}
dhanoa
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.