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

ただし、DataCenterOUの名前を次のアドレスに変更した場合:

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 に答える