我正在尝试在 Perl 中实现一个简单的 LDAP 查询。我想从域中的所有“dnsZone”对象中检索“dc”属性。我首先使用 dsquery 编写它,它运行良好:
dsquery * "DC=iii,DC=hogent,DC=be" -attr dc -scope subtree -filter "(objectClass=dnsZone)"
现在,当我尝试在 Perl 中实现这一点时,我在查询“dc”属性时收到以下错误。当我查询“dc”和“name”属性(看起来相同)时,我没有问题。
“ADODB.Fields”中的 OLE 异常:
在与请求的名称或序号对应的集合中找不到项目。
我在想属性缓存的方向,也许该属性还没有可用。但我不知道应该如何使用 LDAP 查询刷新属性缓存。也许它有一个 getInfoEx([...], 0) 变体?
my $rootDSE = bind_object('RootDSE');
my $base = bind_object($rootDSE->Get('defaultNamingContext'))->{ADsPath};
my $filter = "(objectClass=dnsZone)";
my $attrs = 'dc'; #No error when i change this into 'dc,name'
my $scope = 'subTree';
my $connection = Win32::OLE->CreateObject('ADODB.Connection');
$connection->{Provider} = 'ADsDSOObject';
$connection->Open();
my $command = Win32::OLE->CreateObject('ADODB.Command');
$command->{ActiveConnection} = $connection;
$command->{CommandText} = "<$base>;$filter;$attrs;$scope;";
my $resultSet = $command->Execute();
until($resultSet->{EOF}) {
my $fields = $resultSet->{Fields};
print $fields->{dc}->{Value}."\n";
$resultSet->MoveNext();
}
有人看到我做错了吗?