我有以下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名称,但我宁愿不回。有人能帮我弄清楚如何正确逃离这个空间吗?
答案 0 :(得分:1)
看一下这个链接,特别是Powershell和ADSI部分,它有多个转义字符的例子:
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')