![尝试使用 PowerShell 导出 AD 并获取每个 ADPropertyValueCollection 的值](https://linux22.com/image/747017/%E5%B0%9D%E8%AF%95%E4%BD%BF%E7%94%A8%20PowerShell%20%E5%AF%BC%E5%87%BA%20AD%20%E5%B9%B6%E8%8E%B7%E5%8F%96%E6%AF%8F%E4%B8%AA%20ADPropertyValueCollection%20%E7%9A%84%E5%80%BC.png)
我的 CSV 文件中的某些字段显示为 ADPropertyValueCollection
有没有办法获取集合中的所有值并将它们存储到我的 CSV 中?
showInAddressBook
Microsoft.ActiveDirectory.Management.ADPropertyValueCollection
我使用的代码是
Get-ADUser -Filter * -Properties * | export-csv -path c:\temp\userexport.csv
答案1
请不要这样做,-properties *
除非您确实需要每个属性,但显然您并不需要。如果您拖拽用户中的每个属性,则执行时间会更长。
您不需要在Select
语句中的所有属性之间使用引号。另外,您在 前面有一个反引号Name
。::join
示例中的 对我来说也不起作用。这有效:
Get-ADUser jeff.besos -Properties memberof | Select Name,DisplayName,SamAccountName, @{Name='MemberOf';Expression={$_.MemberOf -join ';'}}
Name : jeff.bezos
DisplayName :
SamAccountName : jeff.bezos
MemberOf : CN=!IDAMAdmins,OU=Admin Groups,OU=Domain Groups,DC=mydomain,DC=com;CN=!ExchangeAdministrators,OU=Admin Groups,OU=Domain
Groups,DC=mydomain,DC=com
如今,如果您有多值属性,以后要重新处理,我实际上建议将其导出为 JSON。如果您查询多个用户,这显然也有效。
Get-ADUser jeff.bezos -Properties memberof | Select Name,DisplayName,SamAccountName,memberof | convertto-json -depth 100 | out-file C:\myuser.json
{
"Name": "jeff.bezos",
"DisplayName": null,
"SamAccountName": "jeff.bezos",
"memberof": [
"CN=!IDAMAdmins,OU=Admin Groups,OU=Domain Groups,DC=mydomain,DC=com",
"CN=!ExchangeAdministrators,OU=Admin Groups,OU=Domain Groups,DC=mydomain,DC=com",
]
}
然后,您将 JSON 从文件导入到对象(即 PSCustomObject)并对其进行处理。PSCustomObjects 非常便于切片和切块。
$user = get-content C:\myuser.json | ConvertFrom-Json
$user |fl
Name : jeff.bezos
DisplayName :
SamAccountName : jeff.bezos
memberof : {CN=!IDAMAdmins,OU=Admin Groups,OU=Domain Groups,DC=mydomain,DC=com,
CN=!ExchangeAdministrators,OU=Admin Groups,OU=Domain Groups,DC=mydomain,DC=com}
答案2
一种方法是将其添加到选择中,并指定每个属性名称。对于多值属性,请执行以下操作:
Get-ADUser -Properties * | `
select SamAccountName,@{Name="ShowInAddressBook";Expression={$_.showInAddressBook -join ";"}} | `
Export-Csv -Path C:\Temp\UserExport.csv