Powershell 从Get-ADGroupMember获取UPN

Powershell 从Get-ADGroupMember获取UPN,powershell,active-directory,powershell-3.0,cmdlets,Powershell,Active Directory,Powershell 3.0,Cmdlets,我的任务是从我们的多域广告林中的多个组中的用户那里获取userPrincipalName属性 问题是,我无法使用Select对象从get-ADGroupMember获取用户的UPN,因为此cmdlet只返回有限数量的属性(samaccountname、name、SID和DN),而UPN不是其中之一 我写了这段代码(获取“name”,然后按“name”搜索UPN): 但下一个问题是此代码运行约30分钟(Measure-Command-cmdlet)。我们在多个领域拥有大量用户 我的问题是如何改进我

我的任务是从我们的多域广告林中的多个组中的用户那里获取userPrincipalName属性

问题是,我无法使用Select对象从get-ADGroupMember获取用户的UPN,因为此cmdlet只返回有限数量的属性(samaccountname、name、SID和DN),而UPN不是其中之一

我写了这段代码(获取“name”,然后按“name”搜索UPN):

但下一个问题是此代码运行约30分钟(Measure-Command-cmdlet)。我们在多个领域拥有大量用户

我的问题是如何改进我的代码,让用户的UPN更快

我知道System.DirectoryServices.DirectorySearcher,但不知道如何用我的txt文件(名称列表)实现这个方法


任何帮助都将不胜感激

最快的方法可能是完全避免
获取ADGroupMember
,只需搜索组,然后搜索属于该组的对象:

$Group = Get-ADGroup -Filter { Name -like "*groupname*" } -Server $Domain 
$Members = Get-ADObject -LDAPFilter "(memberOf=$($Group.DistinguishedName))" -Properties UserPrincipalName
$Members |Select-Object UserPrincipalName |Out-File (Join-Path $ScriptPath 'upnOfSDFC_AD_GroupsMembers.txt')
现在你只需要2个查询,而不是2+N(其中N是成员数)

好了,伙计们,我知道了:

  function Get-DomainFromDN ($param)
  {   
  $dn1 = $param -split "," | ? {$_ -like "DC=*"}
  $dn2 = $dn1 -join "." -replace ("DC=", "")
  $script:test = $dn2
  return $dn2
  }

foreach ($Group in $Groups) {
$Members = Get-ADObject -LDAPFilter "(&(objectCategory=user)(memberOf=$($Group.DistinguishedName)))" -Properties UserPrincipalName -Server (Get-DomainFromDN ($group.DistinguishedName))
$UPN_Of_SFDC_Groups += $Members |Select-Object UserPrincipalName }

$UPN_Of_SFDC_Groups | Out-file (Join-Path $ScriptPath 'upnOfSDFC_AD_GroupsMembers.txt')

实际上,您可以从一行代码中获得它。简单…:)


感谢您的回复,Mathias我稍微改进了您的示例,因为它工作不正常:foreach($groupin$Groups){$Members=Get-ADObject-LDAPFilter“(memberOf=$($Group.discrimitedName))“-Server”GC:3268”-Properties UserPrincipalName Write Host$Members$Members | Select Object UserPrincipalName | Out File(连接路径$ScriptPath'upnOfSDFC_AD_GroupsMembers.txt')}}}},最后一个字符串(Select Object UPN)运行太慢。现在的问题是如何改进这个字符串
  function Get-DomainFromDN ($param)
  {   
  $dn1 = $param -split "," | ? {$_ -like "DC=*"}
  $dn2 = $dn1 -join "." -replace ("DC=", "")
  $script:test = $dn2
  return $dn2
  }

foreach ($Group in $Groups) {
$Members = Get-ADObject -LDAPFilter "(&(objectCategory=user)(memberOf=$($Group.DistinguishedName)))" -Properties UserPrincipalName -Server (Get-DomainFromDN ($group.DistinguishedName))
$UPN_Of_SFDC_Groups += $Members |Select-Object UserPrincipalName }

$UPN_Of_SFDC_Groups | Out-file (Join-Path $ScriptPath 'upnOfSDFC_AD_GroupsMembers.txt')
Get-ADGroupMember -Identity "group name" |%{get-aduser $_.SamAccountName | select userPrincipalName } > c:\scripts\upnofADgroup.txt