2017-04-25 5 views
1

개체 속성을 통해 반복하고 값이 True 인 PowerShell 스크립트 만 출력하려고합니다. 나는이 필요하다고 생각개체의 속성을 반복하는 방법

 
UserId         : 00546000000m3vCAAQ 
UserPermissionsOfflineUser    : True 
UserPermissionsSupportUser    : True 

: 나는 사용자 ID로 구성 할 수있는 출력과 다음과 같이 사실 만 라이센스를 원하는

 
UserId         : 00546000000m3vCAAQ 
UserPermissionsOfflineUser    : True 
UserPermissionsMobileUser    : False 
UserPermissionsSupportUser    : True 
UserPermissionsWebUser     : False 

:

내 시작 데이터는이입니다 하나는 각 사용자를 반복하고 다른 루프는 사용자 속성을 반복하고 모든 잘못된 값을 구문 분석합니다.

$resultSet |ForEach-Object { 
    $trueProperties = $_.psobject.Properties |Where-Object {$_.Value -eq $true} |Select -ExpandProperty Name 
    $_ |Select -Property @('Id';$trueProperties) 
} 

선택적 같은 자신의 가치를 기반으로 특성을 따기주의하십시오 :

foreach ($_ in $resultset) 
{ 
    $_ | 
    Select-Object -Property @{ N = 'UserId'; E = { $_.Id } } 

    #This is where I am getting stuck on the second loop. 
    #$_.psobject.properties | % { $_.Value }  
} 

답변

2

사용 Where-ObjectUserID 특성과 함께 사람들을 선택 Select-Object를 사용 후, $true의 값을 가진 속성을 찾을 수 이로 인해 나중에 고통이 발생할 수 있습니다. Export-* 또는 Format-* cmdlets

|Select-Object -ExpandProperty Name 부분은 NameWhere-Object 필터를 통해 만든 속성의 속성이므로이 시점에서 $trueProperties에는 2 개의 문자열, "UserPermissionsOfflineUser"및 "UserPermissionsSupportUser"가 포함되어 있습니다.

표현 @('Id';$trueProperties)은 단순히 "ID"문자열로 문자열을 연결, 그래서 마지막 Select-Object 문은 말을 기본적으로 동일 :

$_ |Select Id,UserPermissionsOfflineUser,UserPermissionsSupportUser 
+0

감사합니다. 구문 오류가 수정되었습니다. 저는 Value 대신 $ _. value를 사용합니다. 지금 올바른 출력을 받고 있지만 UserId는 비어 있습니다. – PKonstant

+0

@PKonstant는 'UserId' 속성의 실제 이름입니까? 또는 그것은'Id'입니까? 질문 [ –

+0

]에서 분명하지 않습니다. 'ID'입니다. 나는 그것을 바꿨고 효과가 있었다! 고맙습니다. 나는 당신 스크립트의 일부를 '| -ExpandProperty Name '과'$ _ | Select -Property @ ('Id'; $ trueProperties) '를 선택하십시오. 나는 powershell을 처음 사용하고 있으며 어떤 내용의 문장을 출력하는지 알고 싶습니까? – PKonstant

관련 문제