我正在尝试编写一个PowerShell脚本,该脚本遍历对象属性并仅输出值为True
的脚本。
我的起始数据是:
UserId : 00546000000m3vCAAQ UserPermissionsOfflineUser : True UserPermissionsMobileUser : False UserPermissionsSupportUser : True UserPermissionsWebUser : False
我希望输出包含UserID,并且只包含如下所示的许可证:
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 }
}
答案 0 :(得分: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
部分抓取通过我们的Name
过滤器生成的属性的Where-Object
属性的值,因此此时$trueProperties
包含2个字符串:“ UserPermissionsOfflineUser“和”UserPermissionsSupportUser“。
表达式@('Id';$trueProperties)
只是将字符串连接到“Id”字符串,因此最后的Select-Object
语句与说法基本相同:
$_ |Select Id,UserPermissionsOfflineUser,UserPermissionsSupportUser