Win32::DomainName() ignores any machine name you give it  and just returns
the domain of the local machine.  So if you wanted to query a remote
machine it is useless ( for me at least that would be like always 0_O )

The ExxonMobil software distribution system uses this routine to get the
domain of a given machine name.  There is probably a better way but it
works.  It stores the domain names in a cache so that if the same name is
queried, it just returns the name it got last time:

sub NTDomain{
     my $server = shift;
     # Remove the back-slashes
     $server =~ s/^\\//g;
     return $Domain{$server} if defined $Domain{$server};

     # On the local machine use this method
     if ( uc $server eq uc $ENV{COMPUTERNAME} ){
          $Domain{$server} = Win32::DomainName();
          return $Domain{$server};
     }

     # First try NetBIOS
     open ( NBT, "C:\\WINNT\\SYSTEM32\\NBTSTAT.EXE -a $server|" );
     my ( $temp, @temp );
     while ($temp = <NBT>) {
          last if $temp =~ /Host not found/;
          ( $Domain{$server}, @temp ) = split (/ /,$temp) if $temp =~
/\<00\>\s+GROUP/i;
     }
     close NBT;

     if ( not defined $Domain{$server} ){
          warn "UNABLE TO EXECUTE NBTSTAT ON $ENV{COMPUTERNAME}";
          # !!! Try the registry method

          if ( not defined %Win32::TieRegistry:: ){
               use Win32::TieRegistry(Delimiter=>'/');
          }
          my $Object = $Registry->Open
( "//$server/HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows
NT/CurrentVersion/Winlogon", { Access => KEY_READ } );
          if ( defined $Object->{'//CachePrimaryDomain'} ){
               $Domain{$server} = $Object->{'//CachePrimaryDomain'};
          } else {
               my $error = Win32::GetLastError();
               my $message = Win32::FormatMessage( $error );
               warn "Error in NTDomain attempting to access registry on
$server\n";
               print "ERROR $error: $message\n";
          }
     }
     if ( defined $Domain{$server} ){
          return $Domain{$server};
     }
}



                                                                                       
                                                    
                    [EMAIL PROTECTED]                                       
                                                    
                    Sent by:                                   To:     
[EMAIL PROTECTED]                           
                    [EMAIL PROTECTED]      cc:                     
                                                    
                    eState.com                                 Subject:     getting 
domain name                                            
                                                                                       
                                                    
                                                                                       
                                                    
                                                                                       
                                                    
                    07/15/02 05:09 PM                                                  
                                                    
                                                                                       
                                                    
                                                                                       
                                                    



Never mind...

Win32::DomainName();

Thanks anyway,
Jason

_______________________________________________
Perl-Win32-Admin mailing list
[EMAIL PROTECTED]
To unsubscribe: http://listserv.ActiveState.com/mailman/mysubs




_______________________________________________
Perl-Win32-Admin mailing list
[EMAIL PROTECTED]
To unsubscribe: http://listserv.ActiveState.com/mailman/mysubs

Reply via email to