So,
 
I have seen this exact behavior in my test domain with the below script.
 
distinguishedname is probably a bad field to be using for this.
 
...where distinguishedname is something like this:
 
 CN=COMPUTER14 Disabled,OU=Some OU,OU=Test Accounts,OU=Computer
Accounts,OU=SomeOU,DC=domainname
,DC=com
 
You could use cn instead of distinguishedname in your search (for a DN
like above) since cn is the last part of the distinguished name
(cn=COMPUTER14 Disabled)...
 
    query_ldap("<LDAP://" . $dc .
">;(&(objectclass=Computer)(cn=*Disabled*)
);displayname,distinguishedname;subtree",$objects);

This won't work if you are trying to find an OU name that has the word
"Disabled" in it.

However, I didn't have an example of a distinguished name that you
wanted to test for, so I can't cover all the scenarios.  If this isn't
what you were looking for, give us an example of the dns you are trying
to match.

HTH

Steven
________________________________

        From: A F [mailto:perl95...@yahoo.com] 
        Sent: Tuesday, June 28, 2011 9:48 PM
        To: Steven Manross; perl-win32-admin@listserv.ActiveState.com
        Subject: Listing computers from a specific OU
        
        
        Hi All,
         
        I have this code from Steven that I've modified to get the
number of all computer in a specific ou ( OU=History,OU=Disabled
Computers) but I am getting 0.
        This is the filter I am using
(&(objectclass=Computer)(Distinguishedname=*Disabled*)).  There are
about 500 computers in that OU.
        How can I get a record count from that OU? 
         
         
         
        use Win32::OLE;
         
            my $RootDSE = Win32::OLE->GetObject("LDAP://RootDSE");
            
            
            $dc = $RootDSE->Get("DnsHostName");
            print "$dc\n";
            query_ldap("<LDAP://" . $dc .
">;(&(objectclass=Computer)(Distinguishedname=*Disabled*)
);displayname,distinguishedname;subtree",$objects);
            
            print "recordcount = ".$objects->{RecordCount}."\n";
            
            sub query_ldap {
              my $ldap_query = $_[0];
              my $error_num;
              my $error_name;
              my $RS;
              my $Conn = Win32::OLE->new("ADODB.Connection");
              if (Win32::OLE->LastError() != 0) {
                print "Failed creating ADODB.Connection object
(".Win32::OLE->LastError().")\n  -> $ldap_query\n";
                return 0;
              }
              $Conn->{'Provider'} = "ADsDSOObject";
              if (Win32::OLE->LastError() != 0) {
                print "Failed setting ADODB.Command Provider
(".Win32::OLE->LastError().")\n  -> $ldap_query\n";
                return 0;
              }
              #$Conn->{Open} = "Perl Active Directory Query";
              $Conn->{Open} = "Active Directory Provider";
              my $Cmd = Win32::OLE->new("ADODB.Command");
              $Cmd->{ActiveConnection} = $Conn;
              if (Win32::OLE->LastError() != 0) {
                print "Failed creating ADODB.Command object
(".Win32::OLE->LastError().")\n  -> $ldap_query\n";
                return 0;
              }
              $Cmd->{CommandText} = $ldap_query;
              
              $Cmd->{ActiveConnection} = $Conn;
              $Cmd->{Properties}->{"Page Size"} = 500;
              
             
              
              $RS = $Cmd->Execute();
              if (Win32::OLE->LastError() != 0) {
                print "Failed Executing ADODB Command object
(".Win32::OLE->LastError().")\nExecuting ADODB Command ->
$ldap_query\n";
                return 0;
              } else {
                $_[1] = $RS;
                return 1;
              }
            }

_______________________________________________
Perl-Win32-Admin mailing list
Perl-Win32-Admin@listserv.ActiveState.com
To unsubscribe: http://listserv.ActiveState.com/mailman/mysubs

Reply via email to