0

我有以下PowerShell代码:

 $strCategory = "computer"

 $objDomain = New-Object System.DirectoryServices.DirectoryEntry("LDAP://OU=Computers,OU=2 Streetsville,DC=ourdomain,DC=local")

 $objSearcher = New-Object System.DirectoryServices.DirectorySearcher($objDomain)
 $objSearcher.Filter = ("(objectCategory=$strCategory)")

 $colProplist = "name"
 foreach ($i in $colPropList){[void]$objSearcher.PropertiesToLoad.Add($i)}

 $colResults = $objSearcher.FindAll()

当我们的 LDAP 路径不包含空格时,代码运行良好:

LDAP://OU=Computers,OU=DataCenter,DC=ourdomain,DC=local

但是,当我们将 DataCenter OU 重命名为地址时:

LDAP://OU=Computers,OU=2 Streetsville,DC=ourdomain,DC=local

突然代码不再起作用。

我认为没问题,我只需要使用以下命令逃离空间\

LDAP://OU=Computers,OU=2\ Streetsville,DC=ourdomain,DC=local

然而,这是行不通的。我还尝试了一个双斜杠来逃避空格:

LDAP://OU=Computers,OU=2\\ Streetsville,DC=ourdomain,DC=local

我不知道还能尝试什么。我可以回到一个没有空格的 OU 名称,但我宁愿不这样做。有人可以帮我弄清楚如何正确逃离这个空间吗?

4

2 回答 2

1

看看这个链接,特别是 Powershell 和 ADSI 部分,它有多个转义字符的例子:

http://social.technet.microsoft.com/wiki/contents/articles/5312.active-directory-characters-to-escape.aspx

LDAP 中的空格应该不是问题,但可能是单引号和双引号的组合。我们有带空格的 OU,并且用双引号构造 LDAP 查询可以正常工作:

$searchme = [ADSI]"LDAP://OU=Computers,OU=2 Streetsville,DC=ourdomain,DC=local"
 $search = [adsisearcher]$searchme
 $colResults = $search.FindAll()

您收到的错误是说传入的 OU 不存在,这表明 LDAP 字符串中可能存在拼写错误,可能值得仔细检查拼写。

于 2015-03-06T04:01:58.963 回答
0

尝试:

 .... DirectoryEntry('LDAP://OU=Computers,OU="2 Streetsville",DC=ourdomain,DC=local')
于 2013-02-06T14:04:35.143 回答