Schrift
[thread]9199[/thread]

Windows NT und Windows 2003: User in Gruppen einfügen



<< >> 2 Einträge, 1 Seite
Gast Gast
 2007-07-17 20:27
#78586 #78586
Ich bin Perl-Anfänger und wollte gerne ein Script schreiben um im AD (eine Windows 2003 Domäne) Gruppen zu erzeugen und dann aus einer getrusteten Windows NT 4 Domäne mit Usern zu füllen. Das Erzeugen der Gruppen klappt ohne Probleme aber das hinzufügen von Usern aus der NT 4 Domäne klappt garnicht. Ich habs mit LDAP: ... Probiert und als letztes mit WinNT (siehe unten) dies führt allerdings zu der Fehlermeldung das ich ein Problem mit dem Trust zwischen den Domänen habe. Dies hab ich allerdings nicht. Ich muß also davon ausgehen das ich einfach nur zu dumm bin den richtigen Code zu finden. :( Kann mir jemand weiterhelfen. Ich finde einfach nichts was mir hilft.

Ich denke das hier ist der entscheidende Abschnitt:

use win32::OLE;
my $Gruppe = "WinNT://Win2003/Gruppe1,group";
my $user = "WinNT://NT4/Test1,user";
my $g = Win32::OLE->GetObject($Gruppe) or die ("$Gruppe nicht verfügbar!!\n");
    $g->Add($user);

Ich bin für jede Hilfe dankbar!!

Cu

Spyder
Strat
 2007-07-18 15:21
#78587 #78587
User since
2003-08-04
5246 Artikel
ModeratorIn
[Homepage] [default_avatar]
versuche mal den Connect auf AD mit folgendem Codeschnipsel:

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
#! /usr/bin/perl
use warnings;
use strict;
use Win32::OLE;
use Win32::OLE::Variant;
$Win32::OLE::Warn = 3;

my $userDn = "cn=Administrator,cn=Users,dc=my,dc=domain";
my $password = 'password';
my $server = 'server.with.full.domain.name';

# ADSI-Objekt erzeugen und anmelden
my $adConn = Win32::OLE->CreateObject('ADODB.Connection');
$adConn->{Provider} = 'ADsDSOObject';
$adConn->Properties->{'User ID' } = $userDn;
$adConn->Properties->{'Password'} = $password;
$adConn->Open();

# root naming context vom $server ermitteln
my $rootDSE = Win32::OLE->GetObject("LDAP://$server/RootDSE");
my $rootNamingContext = $rootDSE->Get('defaultNamingContext');

# dann eventuell was suchen
my @wantedAttributes = qw( ADsPath cn objectClass member ); # usw

my $searchString = join( ";", "<LDAP://$server/$rootNamingContext>",
"(&(objectClass=groupOfNames)(cn=*))",
join(",", @wantedAttributes ),
'SubTree',
);

my $adoCmd = Win32::OLE->new('ADODB.Command');
$adoCmd->{ActiveConnection} = $adConn;
$adoCmd->Properties->{'Page Size'} = 1000;
$adoCmd->{'CommandText'} = $searchString;

my $searchResult = $adoCmd->Execute($searchString);
unless (ref $searchResult) {
die "Error: couldn't execute searchString: " . Win32::OLE::LastError;
} # unless

while( my $object = &GetNextEntry( $searchResult, \@wantedAttributes ) ) {

# ADSI-Objekt holen
my $object = Win32::OLE->GetObject( $object->{ADsPath} );

# mach was mit dem Objekt

} # while

$searchResult->Close;


# ------------------------------------------------------------
sub GetNextEntry {
my( $searchResult, $attributesRef ) = @_;

return if $searchResult->EOF;

my %object = map {
$attributesRef->[$_] => $searchResult->Fields($_)->value
} 0..$#attributesRef;

$searchResult->MoveNext;

return \%object;
} # GetNextEntry
# ------------------------------------------------------------

(nicht getestet, weil ich momentan kein AD hier habe)

Hilfreich finde ich: Active Directory Cookbook - Codesamples in Perl\n\n

<!--EDIT|Strat|1184757722-->
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/
<< >> 2 Einträge, 1 Seite



View all threads created 2007-07-17 20:27.