ibc has asked for the wisdom of the Perl Monks concerning the following question:

Is there a way to retrieve a list of NT local groups from a server that is not a domain controller? I've been looking at info on Win32::NetAdmin, with no luck, other than getting all users, then determining the groups to which they belong.... Thanks!

Replies are listed 'Best First'.
Re: Getting NT Groups
by idnopheq (Chaplain) on May 16, 2001 at 14:31 UTC
    Win32:Lanman, Win32::AdminMisc, and Win32API::Net can all acquire this data for you, if ADSI is unavailable. You may need to authenticate to the machine, in that case Win32::NetResource can help you by a login ( just like mapping a drive w/o the drive letter ) against the remote machine's IPC$ or NetLogon shares.

    This is from the Win32::Lanman perldoc :

    Retrieves all local groups on server \\testserver

    unless(Win32::Lanman::NetLocalGroupEnum("testserver", \@groups)) { print 'Sorry, something went wrong in (Win32::Lanman::NetLocal +GroupEnum) ; error: '; # get the error code print Win32::Lanman::GetLastError(); exit 1; } foreach $group (@groups) { print "${$group}{'name'}\t${$group}{'comment'}\n"; }

    The @groups array will populate with the local groups on the specified server.

    HTH
    --
    idnopheq
    Apply yourself to new problems without preparation, develop confidence in your ability to to meet situations as they arrise.

Re: Getting NT Groups
by rchiav (Deacon) on May 16, 2001 at 02:57 UTC
    For this I'd use ADSI. I'm not sure if there's methods available via modules, but this will do the trick for you..
    #!/usr/bin/perl -w use strict; use Win32::OLE qw(in); my $server = "XXXXXX"; my $domain = Win32::OLE->GetObject("WinNT://$server"); $domain->{Filter} = ["group"]; foreach my $group (in($domain)) { print "$group->{Name}\n"; }
    Of course, this only works from a Windows machine. I'd definately look at ADSI and what you can do with it. It's pretty handy.

    Hope this helps..
    Rich