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