# Move groups inside Users OU to Groups OU. # written 18-jul-2003 by fgb # # NB: groups OU must have been previously created. # # If LDAP connection fails try nbtstat /R (reload) after # getting rid of lmhosts. use Win32::OLE; use Win32::OLE::Enum; my $sAppName = "mvGroups"; my $sDomUsers = "LDAP://cn=Users,dc=whatever,dc=junk,dc=local"; my $dest = "LDAP://ou=groups,dc=whatever,dc=junk,dc=local"; my $nGroups = 0; my $nMoved = 0; _main: print "Connecting to $sDomUsers...\n"; $oDom = Win32::OLE->GetObject($sDomUsers) or die "Unable to connect to domain $sDomUsers\n"; print "Connecting to $dest...\n"; $obj = Win32::OLE->GetObject($dest) or die "Can't connect to $dest\n"; $enum = Win32::OLE::Enum->new($oDom); print "Processinging groups\n"; foreach $i ($enum->All) { uc($i->{Class}) eq uc("Group") or next; $gname = $i->{Name}; $gname =~ s/CN=//; print "moving $gname..."; $obj->MoveHere("LDAP://cn=$gname,cn=Users,dc=whatever,dc=junk,dc=local","cn=$gname"); $status = chkOleErr(); if ($status == 0) { print "success\n"; $nMoved++; } else { print "failed\n"; } $nGroups++; } print "$sAppName: moved $nMoved out of $nGroups groups.\n"; exit; ### subroutines: sub chkOleErr { my $err; if ($err = Win32::OLE->LastError()) { print "GetObject error: $err\n"; } return $err; } __END__