我正试图从AD中提取一些可读的变量,以下工作。
$user = get-aduser "username" -Properties memberof, emailAddress, extensionattribute2, manager, physicalDeliveryOfficeName, url
$groups = ForEach ($group in $user.memberof){(Get-ADGroup $group).Name}
$groupStr = $groups -join "; " #Change "; " to "`r`n" for line break seperator
$user | Select-Object `
@{N="firstName";E={$_.GivenName}}, `
@{N="lastName";E={$_.Surname}}, `
@{N="email";E={$_.EmailAddress}}, `
@{N="businessArea";E={$_.extensionattribute2}}, `
@{N="accountName";E={$_.SamAccountName}}, `
@{N="manager";E={$_.Manager -replace '^CN=|,.*$'}}, `
@{N="office";E={$_.physicalDeliveryOfficeName}}, `
@{N="standardProfile";E={$_.url}}, `
@{n='Groups'; e={$groupStr}} | Export-CSV -NoTypeInformation "c:\out.csv"
但是,当我将Get-aduser "username"
交换为:Get-aduser -Filter {Enabled -eq $true} -SearchBase “ou=redacted,ou=UserAccounts,dc=redacted,dc=com”
它运行了相当长的时间,并填满了磁盘上的最后40gb,并且由于空间不足而出错。
我知道过去我通配-Properties并遇到类似的问题(现在我明白了),但是我不确定这次是什么原因引起的。
{Enabled -eq $true}
和-SearchBase
将其限制为大约4千个用户,我认为这不会花这么长时间才能运行,而且我也不知道正在消耗多少磁盘空间。
谢谢!
答案 0 :(得分:1)
稍微增加代码即可达到所需的结果:
ComboBox
在原始代码中,如果您没有为$users = get-aduser -filter "Enabled -eq '$true'" -Properties memberof, emailAddress, extensionattribute2, manager, physicalDeliveryOfficeName, url
$users | Foreach-Object {
$groups = ForEach ($group in $_.memberof) {
(Get-ADGroup $group).Name
}
$groupStr = $groups -join "; " #Change "; " to "`r`n" for line break separator
$_ | Select-Object @{N="firstName";E={$_.GivenName}},
@{N="lastName";E={$_.Surname}},
@{N="email";E={$_.EmailAddress}},
@{N="businessArea";E={$_.extensionattribute2}},
@{N="accountName";E={$_.SamAccountName}},
@{N="manager";E={$_.Manager -replace '^CN=|,.*$'}},
@{N="office";E={$_.physicalDeliveryOfficeName}},
@{N="standardProfile";E={$_.url}},
@{n='Groups'; e={$groupStr}}
} | Export-CSV -NoTypeInformation "c:\out.csv"
选择特定的用户对象,则$ groups包含所有已启用AD用户的所有组。这是因为get-aduser
将为$user.memberof
数组中的每个用户返回所有组。想象每个用户有5000个用户的10个组。您的CSV中每个用户将有50000个组。
$user
添加属性以从您正在查询的对象中返回。它不影响您返回的对象数,而仅影响返回结果的大小。 -Properties
与-Properties *
相比,-Properties Attribute1,Attribute2
可能会使用更多的内存,但由于您正在选择(Select-Object
)要输出的属性,因此不会影响CSV。如果运行Get-ADUser username
,它将返回默认的属性列表,例如,其中不包含mail
。如果要查看邮件值和默认属性,则必须运行Get-ADUser username -Properties Mail
。