尝试使用 PowerShell 导出 AD 并获取每个 ADPropertyValueCollection 的值

尝试使用 PowerShell 导出 AD 并获取每个 ADPropertyValueCollection 的值

我的 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

相关内容