我执行此搜索,其中$_
可以是组或用户的DN。
my $m = $ldap->search(
base => "$_",
scope => 'base',
filter => '(objectClass=Person)',
attrs => ['sAMAccountName'],
);
if (defined($m->entry->entries->get_value('sAMAccountName'))) {
print $m->entry->entries->get_value('sAMAccountName') . "\n";
}
这个问题是,如果$_
是一个组,则sAMAccountName
不存在,并且脚本失败。我甚至不确定这是否适用于用户=(
如果sAMAccountName
是一个人,是否有人知道如何仅打印$_
?
答案 0 :(得分:2)
迭代搜索对象的条目。如果该属性不存在,它将是undef
(当然),但不会导致失败,因为我们不会尝试取消引用它的方法调用。
foreach my $entry ($m->entries) {
my ($uid, $sAMAccountName) = (
$entry->get_value('uid'),
$entry->get_value('sAMAccountName'),
);
}
答案 1 :(得分:0)
因为您的过滤器是:
(objectClass=Person)
然后,当$ _是一个组时,您将不会检索任何条目。
因此,请查看$m->entries()
是否为空,而不是那个可怕的定义()调用。
示例:
my $m = $ldap->search(
base => "$_",
scope => 'base',
filter => '(objectClass=Person)',
attrs => ['sAMAccountName'],
);
my @entries = $m->entries();
if (@entries) {
print $m->entry->entries->get_value('sAMAccountName') . "\n";
}