2017-04-25 106 views
1

我正在尝试编写一个PowerShell脚本,该脚本遍历对象属性并仅输出值为True的值。如何遍历对象的属性

我的出发数据是这样的:

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

我想输出到包括用户ID,并且只有那些真正像下面的许可:我觉得我需要两个

 
UserId         : 00546000000m3vCAAQ 
UserPermissionsOfflineUser    : True 
UserPermissionsSupportUser    : True 

循环,迭代每个用户,然后循环遍历用户的属性,并解析出所有的假值。

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-Object$true价值发现的属性,然后使用Select-Object选择与UserID财产沿着这些:

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

注意,基于像他们的价值选择挑选出的属性这可能会导致你后来的疼痛Export-*Format-* cmdlet

|Select-Object -ExpandProperty Name部分抓住的值通过我们的Where-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