我有一个任务可以获取userPrincipalName属性,这些属性来自我们的多域AD森林中多个组中的用户。从Get-ADGroupMember获取UPN
问题是我无法使用Select-Object从Get-ADGroupMember获取用户的UPN,因为此cmdlet只返回有限数量的属性(samaccountname,name,SID和DN),并且UPN不是其中之一。
我写了这个代码(得到“名”和比“名”搜索UPN):
$ScriptPath = Split-Path $MyInvocation.MyCommand.Path
$LocalSite = (Get-ADDomainController -Discover).Site
$NewTargetGC = Get-ADDomainController -Discover -Service 6 -SiteName
$LocalSite
IF (!$NewTargetGC)
{ $NewTargetGC = Get-ADDomainController -Discover -Service 6 -NextClosestSite }
$NewTargetGCHostName = $NewTargetGC.HostName
$LocalGC = “$NewTargetGCHostName” + “:3268”
$domains = (Get-ADForest).domains
$MembersOfSFDC_Groups = foreach ($domain in $domains) {
$Group = Get-ADGroup -Filter { Name -like "*groupname*" } -Server $Domain
$Group | Get-ADGroupMember -Server $domain | Select @{
Name="Domain";Expression={$Domain}},@{
Name="Group";Expression={$Group.Name}}, name}
$DisplayNames = $MembersOfSFDC_Groups.name
$DisplayNames |Out-file (Join-Path $ScriptPath 'DisplayNames.txt')
Get-content (Join-Path $ScriptPath 'DisplayNames.txt') |
$displaynames | ForEach-Object {
Get-ADUser -Server $LocalGC -Filter {Name -eq $_} |
Select-Object -Property userPrincipalName} |
Out-File (Join-Path $ScriptPath 'upnOfSDFC_AD_GroupsMembers.txt')
但接下来的问题是,这个代码运行约30分钟(测量-Command cmdlet的)。我们在多个域中拥有大量的用户。
我的问题是如何改进我的代码让用户的UPN更快更快?
我知道System.DirectoryServices.DirectorySearcher,但不知道如何用我的txt文件(“名称”列表)实现此方法。
任何帮助将不胜感激。
谢谢您的回复,马蒂亚斯 我提高你的例子一点点,因为它不能正常工作: 的foreach($集团在$组){$ 会员= Get-ADObject -LDAPFilter“(memberOf = $($ Group.DistinguishedName))”-Server“GC:3268”-Properties UserPrincipalName Write-Host $成员 $成员|选择对象UserPrincipalName |加入路径$ ScriptPath'upnOfSDFC_AD_GroupsMembers.txt')} } } } 而最后一个字符串(Select-Object UPN)是运行速度太慢。现在的问题是如何提高**这个**字符串 –