【发布时间】:2017-06-13 16:08:42
【问题描述】:
如何为不同的受信任域中的用户获取完全限定域名 (FQDN)?
通常情况下,我会要求所述用户采用here 概述的任何一种方法(例如whoami /fqdn 或echo %userDNSdomain%),但如果这种方法由于某种原因不可用(例如该帐户是代理)我无法以交互方式登录的帐户,我工作的公司已被收购,新的所有者不是那么即将到来,等等),有没有办法获得这个不同用户帐户的 FQDN?
或者,采用“模拟”我的用户凭据返回的 FQDN 的方法也容易出错。以我的用户身份运行whoami /fqdn 的输出为例:
C:\Users\john.eisbrener>whoami /fqdn
CN=John M. Eisbrener,OU=Standard Users,OU=Resources,DC=CONTOSO,DC=COM
我可以在概念上将CONTOSO 域组件调整为另一个受信任的域,期望它遵循相同的结构,但这是短视的,因为并非所有域都遵循相同的结构命名约定。我看到太多受信任的域使用.org 或在其 LDAP 根路径中包含额外的域前缀或后缀。
所有这一切的主要驱动因素是我需要将正确的域组件传递给以下 PowerShell 查询,我在尝试查找可能需要将哪些用户组和用户名添加到某些安全组时依赖这些查询,文件路径等。
## List Groups for a Username
$domainName = 'CONTOSO'
$domainSuffix = 'COM'
$username = 'john.eisbrener'
(New-Object System.DirectoryServices.DirectorySearcher((New-Object System.DirectoryServices.DirectoryEntry("LDAP://dc=$($domainName),dc=$($domainSuffix)")), "(&(objectCategory=User)(samAccountName=$($username)))")).FindOne().GetDirectoryEntry().memberOf | % { (New-Object System.DirectoryServices.DirectoryEntry("LDAP://"+$_)) } | Sort-Object sAMAccountName | SELECT @{name="Group Name";expression={$_.Name}},@{name="Group sAMAccountName";expression={$_.sAMAccountName}}
## List Members in a Group
$domainName = 'CORP'
$domainSuffix = 'ORG'
$groupname = 'RemoteUsers'
(New-Object System.DirectoryServices.DirectoryEntry((New-Object System.DirectoryServices.DirectorySearcher((New-Object System.DirectoryServices.DirectoryEntry("LDAP://dc=$($domainname),dc=$($domainSuffix)")), "(&(objectCategory=Group)(name=$($groupname)))")).FindOne().GetDirectoryEntry().Path)).member | % { (New-Object System.DirectoryServices.DirectoryEntry("LDAP://"+$_)) } | Sort-Object sAMAccountName | SELECT @{name="User Name";expression={$_.Name}},@{name="User sAMAccountName";expression={$_.sAMAccountName}}
为什么我不能安装任何其他组件或模块?我使用的计算机非常普通,没有任何额外的 PowerShell 模块或 mmc 管理单元(例如dsa.msc)可用,因为我的用户帐户没有足够的权限来安装软件。
我目前获取此其他用户域的 FQDN 的方法是设置一个以所述用户身份运行的 Windows 计划任务,将上述 whoami /fqdn 或 echo %userDNSdomain% 命令的输出保存到文本文件中,但这似乎是有点笨拙,我希望有一个简单的单行程序,可以从命令提示符或 PowerShell 提示符运行。任何建议将不胜感激。
最后,如果我的术语不正确或导致混淆,我深表歉意。我愿意接受理解我所问内容的人对此进行的任何编辑。
【问题讨论】:
-
ADSI 和 RSAT 的 Active Directory 模块不一样。 ADSI 将是您可能想要使用的方法。
-
@BenH 在这种情况下我无法使用这些工具中的任何一个,因为我的帐户没有足够的权限将软件安装到我有权访问的计算机上。
-
那么您需要通过 [adsisearcher] 类型加速器或 System.DirectoryServices.DirectorySearcher 类使用 shell 中本机可用的内容。
-
ADSI 未安装。它是 .Net 的一部分。 @thepip3r
whoami /fqdn确实返回了专有名称。 -
对于当前用户,AD 不会将其称为“FQDN”,它是一个专有名称。它可能恰好是完全限定的,因为它包括它所属的权威:例如dc=contoso,dc=com 但只是想确保它是他正在寻找的 DN。
标签: powershell active-directory fqdn distinguishedname