2016-05-31 57 views
1

我正在寻找一种使用PowerShell修改非Active Directory LDAP对象的方法。我发现许多脚本联机访问LDAP对象信息,但没有显示如何修改它们。下面是我通过结合我在网上找到的各种脚本得到的最接近的结果。我无法越过“$ c.Bind()”行,因为我总是收到“LDAP服务器不可用”错误。我知道服务器名称是正确的,它已启动并正在运行。使用Powershell修改非AD LDAP对象

任何人有任何想法?

[System.Reflection.Assembly]::LoadWithPartialName("System.DirectoryServices.Protocols") 
[System.Reflection.Assembly]::LoadWithPartialName("System.Net") 

$credentials = new-object System.Net.NetworkCredential("cn=adminID,o=edu","password") 
$NetWareServer=New-Object System.DirectoryServices.Protocols.LdapDirectoryIdentifier("LDAP://ldapserver.system.edu:636") 
$c = New-Object System.DirectoryServices.Protocols.LdapConnection($NetWareServer, $credentials) 

$c.SessionOptions.SecureSocketLayer = $true; 
$c.SessionOptions.ProtocolVersion = 3 
$c.AuthType = [System.DirectoryServices.Protocols.AuthType]::Basic 

$c.Bind() 

$r = (new-object "System.DirectoryServices.Protocols.ModifyRequest") 
$r.DistinguishedName = "uid=testID,ou=test,o=edu"; 

$a = New-Object "System.DirectoryServices.Protocols.DirectoryAttributeModification" 
$a.Name = "description" 
$a.Operation = [System.DirectoryServices.Protocols.DirectoryAttributeOperation]::Add 
$a.Add("testdescription") 

$r.Modifications.Add($a) 

$re = $c.SendRequest($r); 

if ($re.ResultCode -ne System.directoryServices.Protocols.ResultCode]::Success) 
{ 
    write-host "Failed!" 
    write-host ("ResultCode: " + $re.ResultCode) 
    write-host ("Message: " + $re.ErrorMessage) 
} 
+1

难道用'ldapserver.system.edu提供的证书:636'不被信任? –

+0

它可以。但是我对证书知之甚少,不知道如何去测试。 – David

+0

我有这个问题,它通过采取AD根证书并将其添加到我的受信任的根机构来解决。 –

回答

0

尝试使用uid而不是cn作为凭证。尝试连接时不使用SSL。验证端口和用户信息是否正确,以及服务器和该端口是否可从您的位置访问。

这是我做的:

$c = New-Object -TypeName System.DirectoryServices.Protocols.LdapConnection -ArgumentList "ldapserver.system.edu:636" 
$c.SessionOptions.SecureSocketLayer = $true; 
$c.SessionOptions.ProtocolVersion = 3 
$c.AuthType = [System.DirectoryServices.Protocols.AuthType]::Basic 
if ([string]::IsNullOrWhiteSpace($ConnectWithUser)) 
{ 
    $ConnectWithUser = Read-Host -Prompt "User:" 
} 
if ([string]::IsNullOrWhiteSpace($ConnectWithPassword)) 
{ 
    $ConnectWithPassword = Read-Host -Prompt "Password:" -AsSecureString 
} 
$ConnectWithUser = "uid="+$ConnectWithUser+",OU=admins,O=edu" 

$credentials = New-Object -TypeName System.Net.NetworkCredential -ArgumentList $ConnectWithUser,$ConnectWithPassword 
$c.Bind($credentials) 

好运