在PowerShell LDAP路径中转义空格

时间:2013-02-06 14:00:42

标签: powershell ldap space

我有以下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名称,但我宁愿不回。有人能帮我弄清楚如何正确逃离这个空间吗?

2 个答案:

答案 0 :(得分: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字符串中可能存在拼写错误,可能值得仔细检查拼写。

答案 1 :(得分:0)

尝试:

 .... DirectoryEntry('LDAP://OU=Computers,OU="2 Streetsville",DC=ourdomain,DC=local')