2011-02-03 7 views
0

この検索を実行します。$_は、グループまたはユーザーの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を印刷する方法を知っていさえわからない?

答えて

2

検索対象のエントリを反復処理する。属性が存在しない場合は、それは我々がそれからのメソッド呼び出しを逆参照しようとしていないため、障害の原因となる(もちろん)undefことはなくなります

foreach my $entry ($m->entries) { 
    my ($uid, $sAMAccountName) = (
     $entry->get_value('uid'), 
     $entry->get_value('sAMAccountName'), 
    ); 
} 
+0

どうもありがとう=) –

0

あなたのフィルタがあるので:。

(objectClass=Person) 

$ _がグループの場合、エントリは取得されません。

そのひどいdefined()呼び出しの代わりに、$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"; 
} 
関連する問題