从非域成员的 Windows 主机在 PowerShell 中查询 Active Directory

从非域成员的 Windows 主机在 PowerShell 中查询 Active Directory

如何使用 PowerShell[adsisearcher]查询我所在的域不是是成员吗?通常我会这样做:

$myAdsi = [adsisearcher]""
$myAdsi.SearchRoot = [adsi]"LDAP://dc=corp,dc=mycompany,dc=com"
$myAdsi.Filter = "objectCategory=computer"

$res = $myAdsi.FindAll()

如果我在我的域中的主机上运行此代码片段,我会得到预期的结果。但是,如果我从可以访问域的计算机(通过 L2L VPN)运行此代码片段,我会收到错误:

Exception calling "FindAll" with "0" argument(s): "The specified domain either does not exist or could not be contacted.
"
At line:11 char:33
+ $adComputers = $searcher.FindAll <<<< ()
    + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
    + FullyQualifiedErrorId : DotNetMethodException

这在某种程度上是意料之中的,因为我没有提供任何[adsisearcher]可以告诉它如何进行身份验证的凭证。我的问题是:如何让系统[adsisearcher]知道我想针对我不是成员的域进行身份验证?

答案1

删除了我上次的回复。抱歉,我花了一段时间才回复你。以下内容无耻地抄袭自http://powershell.com/cs/blogs/ebookv2/archive/2012/03/26/chapter-19-user-management.aspx

[ADSI] 是 DirectoryServices.DirectoryEntry .NET 类型的快捷方式。因此,您也可以通过以下方式设置上一个连接:

$domain = [DirectoryServices.DirectoryEntry]""
$domain
distinguishedName
-----------------
{DC=scriptinternals,DC=technet}

因此,请尝试以下方法向另一个域提供凭据:

$domain = new-object DirectoryServices.DirectoryEntry("LDAP://10.10.10.1","domain\user", "secret")
$domain.name
scriptinternals
$domain.distinguishedName
DC=scriptinternals,DC=technet

您说得对,这是一个身份验证问题,尽管我希望错误消息能够更准确地反映这一点。这应该对您有所帮助。

相关内容