schnagels
Goto Top

LOGINHOURS in vbs

Hallo ich habe ein Problem.
Ich muss einien Win2000 Server als Domänencontroller erstellen. und ich möchte für einige bestimmte user ein vbscipt schreiben. das hab ich auch schon. Das script legt im grunde genommen nur die user an. doch die user dürfen sich nur zu einer bestimmten zeit einloggen. das geht ja ganz leicht im active directory einzustellen, aber wenn ich das für jeden user mache, den ich neu anlege (und das sind nicht wenige), dann wird das irgendwann lästig. Also will ich das mit in das script einbauen.
ich habe zwar schon einiges darüber gefunden, z.b., dass es loginhours heißt, aber ich finde nirgendwo ein beispiel, wie man die tage und stunden da eingibt.
das geht mit adsi, aber wie?
könnt ihr mir helfen? ich muss das bis allerspätestens übermorgen fertig haben und ich verzweifle langsam daran.
bitte HELFT mir.

mfg Schnagels

Content-Key: 18346

Url: https://administrator.de/contentid/18346

Printed on: April 18, 2024 at 05:04 o'clock

Member: killeradminfromhell
killeradminfromhell Oct 24, 2005 at 14:39:06 (UTC)
Goto Top
Hallo,

also die Loginhours kannst du meines wissens nicht in einem Script festlegen. Du kannst sie nur für jede OU einzeln definieren und das ganze so regeln.

Best Regarts
Member: schnagels
schnagels Oct 24, 2005 at 16:57:52 (UTC)
Goto Top
doch das geht auch für jeden einzelnen user in vbscript.
sieh mal hier: http://www.dx21.com/HOME/ARTICLES/P2P/ARTICLE.ASP?CID=23

ich kapier dat nur nicht so richtig, weil ich voll der anfänger bin.
Member: Biber
Biber Oct 24, 2005 at 19:14:30 (UTC)
Goto Top
Moin schnagels,
nimm bitte erstmal dieses alberne "Hiiiillfe!!! ---" aus dem Titel raus, dann können wir vielleicht vernünftiger über das bisschen Coden reden.
Danke im Voraus und bis später
Biber
Member: Biber
Biber Oct 26, 2005 at 12:48:54 (UTC)
Goto Top
Moin, schnagels,

erstmal Danke für das Editieren.

Ich habe mir diese LoginHours-Mimik mal angeschaut - na, ich weiß ja nicht, ob das das Richtige zum Spaß-am-Scripten-Finden ist.. bzw. ob Aufwand und Nutzen in einem vertretbaren Verhältnis stehen.

Aber sei's drum... Wie hast Du Dir denn grundsätzlich Dein Neues-User-Anlegen-Scriptchen gedacht?
Greifst Du die "neuen" User aus einer Excel-Tabelle/einer DB-Tabelle ab? Oder editierst Du für jeden Benutzer Dein Standard-Script und speicherst das unter UsernameXYZ.vbs ab?
Und das Wichtigste - wo kommen denn jetzt diese LOGINHOURS her? Sind die für alle User gleich? Stehen die im Klartext in einem Tabellenfeld? Oder als kleine Kreuzchen ähnlich der GUI-Darstellung/der Byte-Feld-Darstellung des LOGINHOURS-Arrays?

Gib mal bitte ein paar feste Punkte im Raum, ehe wir die M$-Welt aus ihren Angeln heben..

Grüße
Biber
Member: schnagels
schnagels Oct 26, 2005 at 14:13:56 (UTC)
Goto Top
also die user haben alle fast den selben namen. das soll ein projekt bei mir in der schule sein, das wir heute hätten abgeben müssen, doch mit den scripts haben wir länger zeit.
also es sollen 20 user für einen kurs erstellt werden. am beginn des scripts gibt man ein welcher kurs und welches jahr. wenn es der kurs 01 im jahr 2005 ist, heißt der kurs also "K01-05". Wie gesagt sollen 20 user angelegt werden. das mache ich mit einer for-schleife. Die user heißen dann "K01-05-T01", "k01-05-T02" usw. halt bis T20. da lese ich also nichts aus einer tabelle oder so. Die LoginHours sind komplett gleich. Ich weiß jetzt nicht genau die zeiten aber ich glaube werktags von 8 uhr bis 22 uhr und samstags von 8 bis 14 und sonntags nicht. die will ich jetzt einfach nur in das script eingeben, also direkt im Quelltext.

Wenn du noch mehr fragen hast kannste die ruhig stellen.

Achja die zeiten können ruhig abweichen wenn das nicht genau geht.
Member: Biber
Biber Oct 26, 2005 at 20:01:00 (UTC)
Goto Top
Hm, schnagels,

tasten wir uns mal langsam ran.
Die erlaubten Zeiten sind ja in diesem 21-Byte-Array LOGINHOURS verdrahtet.
Wenn alles rund um die Uhr erlaubt wäre, sähe das so aus:
----> alle Bytes sind 0b11111111 = 0xFF = dezimal(255) 

<b>11111111</b> sa23 sa22 sa21 sa20 sa19 sa18 sa17 sa16 --- Byte 01 Sa. 24h-16h = Char(255)
<b>11111111</b> so07 so06 so05 so04 so03 so02 sa01 so00 --- Byte 02 So. 08h-00h
<b>11111111</b> so15 so14 so13 so12 so11 so10 sa09 so08 --- Byte 03 So. 16h-08h
<b>11111111</b> so23 so22 so21 so20 so19 so18 so17 so16 --- Byte 04 So. 24h-16h
<b>11111111</b> mo07 mo06 mo05 mo04 mo03 mo02 mo01 mo00 --- Byte 05 Mo. 08h-00h
<b>11111111</b> mo15 mo14 mo13 mo12 mo11 mo10 mo09 mo08 --- Byte 06 Mo. 16h-08h
<b>11111111</b> mo23 mo22 mo21 mo20 mo19 mo18 mo17 mo16 --- Byte 07 Mo. 24h-16h
<b>11111111</b> di07 di06 di05 di04 di03 di02 di01 di00 --- Byte 08 Di. 08h-00h
<b>11111111</b> di15 di14 di13 di12 di11 di10 di09 di08 --- Byte 09 Di. 16h-08h
<b>11111111</b> di23 di22 di21 di20 di19 di18 di17 di16 --- Byte 10 Di. 24h-16h
<b>11111111</b> mi07 mi06 mi05 mi04 mi03 mi02 mi01 mi00 --- Byte 11 Mi. 08h-00h
<b>11111111</b> mi15 mi14 mi13 mi12 mi11 mi10 mi09 mi08 --- Byte 12 Mi. 16h-08h
<b>11111111</b> mi23 mi22 mi21 mi20 mi19 mi18 mi17 mi16 --- Byte 13 Mi. 24h-16h
<b>11111111</b> do07 do06 do05 do04 do03 do02 do01 do00 --- Byte 14 Do. 08h-00h
<b>11111111</b> do15 do14 do13 do12 do11 do10 do09 do08 --- Byte 15 Do. 16h-08h
<b>11111111</b> do23 do22 do21 do20 do19 do18 do17 do16 --- Byte 16 Do. 24h-16h
<b>11111111</b> fr07 fr06 fr05 fr04 fr03 fr02 fr01 fr00 --- Byte 17 Fr. 08h-00h
<b>11111111</b> fr15 fr14 fr13 fr12 fr11 fr10 fr09 fr08 --- Byte 18 Fr. 16h-08h
<b>11111111</b> fr23 fr22 fr21 fr20 fr19 fr18 fr17 fr16 --- Byte 19 Fr. 24h-16h
<b>11111111</b> sa07 sa06 sa05 sa04 sa03 sa02 sa01 sa00 --- Byte 20 Sa. 08h-00h
<b>11111111</b> sa15 sa14 sa13 sa12 sa11 sa10 sa09 sa08 --- Byte 21 Sa. 16h-08h

>> werktags von 8 uhr bis 22 uhr 
>> und samstags von 8 bis 14 
>> und sonntags nicht

wäre dann:

<b>00000000</b> sa23 sa22 sa21 sa20 sa19 sa18 sa17 sa16 --- Byte 01 Sa. 24h-16h = Char(000)
<b>00000000</b> so07 so06 so05 so04 so03 so02 sa01 so00 --- Byte 02 So. 08h-00h = Char(000)
<b>00000000</b> so15 so14 so13 so12 so11 so10 sa09 so08 --- Byte 03 So. 16h-08h = Char(000)
<b>00000000</b> so23 so22 so21 so20 so19 so18 so17 so16 --- Byte 04 So. 24h-16h = Char(000)
<b>00000000</b> mo07 mo06 mo05 mo04 mo03 mo02 mo01 mo00 --- Byte 05 Mo. 08h-00h = Char(000)
<b>11111111</b> mo15 mo14 mo13 mo12 mo11 mo10 mo09 mo08 --- Byte 06 Mo. 16h-08h = Char(255)
<b>00111111</b> mo23 mo22 mo21 mo20 mo19 mo18 mo17 mo16 --- Byte 07 Mo. 24h-16h = Char(063)
<b>00000000</b> di07 di06 di05 di04 di03 di02 di01 di00 --- Byte 08 Di. 08h-00h = Char(000)
<b>11111111</b> di15 di14 di13 di12 di11 di10 di09 di08 --- Byte 09 Di. 16h-08h = Char(255)
<b>00111111</b> di23 di22 di21 di20 di19 di18 di17 di16 --- Byte 10 Di. 24h-16h .....
<b>00000000</b> mi07 mi06 mi05 mi04 mi03 mi02 mi01 mi00 --- Byte 11 Mi. 08h-00h
<b>11111111</b> mi15 mi14 mi13 mi12 mi11 mi10 mi09 mi08 --- Byte 12 Mi. 16h-08h
<b>00111111</b> mi23 mi22 mi21 mi20 mi19 mi18 mi17 mi16 --- Byte 13 Mi. 24h-16h
<b>00000000</b> do07 do06 do05 do04 do03 do02 do01 do00 --- Byte 14 Do. 08h-00h
<b>11111111</b> do15 do14 do13 do12 do11 do10 do09 do08 --- Byte 15 Do. 16h-08h
<b>00111111</b> do23 do22 do21 do20 do19 do18 do17 do16 --- Byte 16 Do. 24h-16h
<b>00000000</b> fr07 fr06 fr05 fr04 fr03 fr02 fr01 fr00 --- Byte 17 Fr. 08h-00h
<b>11111111</b> fr15 fr14 fr13 fr12 fr11 fr10 fr09 fr08 --- Byte 18 Fr. 16h-08h
<b>00111111</b> fr23 fr22 fr21 fr20 fr19 fr18 fr17 fr16 --- Byte 19 Fr. 24h-16h
<b>00000000</b> sa07 sa06 sa05 sa04 sa03 sa02 sa01 sa00 --- Byte 20 Sa. 08h-00h
<b>00111111</b> sa15 sa14 sa13 sa12 sa11 sa10 sa09 sa08 --- Byte 21 Sa. 16h-08h

Man möge mir verzeihen, dass ich hier jetzt im ersten Schritt nicht den Umrechnungs-Algorithmus nachgebildet habe, sondern erstmal versuchen wollte, die "Regelmäßigkeiten" in dieser epischen Breite aufzumalen. Außerdem habe ich immer Probleme mit For-Schleifen.

Denn somit kommt nach diesem kleinen Exkurs recht schnell raus, dass es nur ein paar (ganze drei) unterschiedliche Bytes in diesem Array gibt.
Nämlich "nur" Char(0),Char(63dez), auch bekannt als das "?", und Char(255dez).

Somit sollte Dein 21-Zeichen-Array LOGINHOURS also bestehen aus:

(Pseudocodeface-smile
NotAllowed = Chr(&h00)    // = dez(0) = 0b00000000
FullAllowed = Chr(&hff)   // = dez255 = 0b11111111
First6h = Chr(&h3f)       // = dez63  = 0b00111111 ="?" 

LoginHours= _
NotAllowed + _       // Sa von 16h -2h 
+ NotAllowed + NotAllowed + NotAllowed  +_ // Sonntag komplett
+ NotAllowed + FullAllowed + First6h +_  // Montag 0-8h + Montag 8-16h + Montag 16 -22h
+ NotAllowed + FullAllowed + First6h +_  // Dienstag 0-8h + Dienstag 8-16h + Dienstag 16 -22h...
..... Mi, Do, Fr wie Montag
+ NotAllowed + First6h             // Samstag 0-8h und Samstag 8-14h  

So, wenn Dein Proggi also sinngemäß so anfängt (wie in den Demo-Schnipseln):
Const strUserID = 	"[UserID]"  
Const strLDAPPath = 	"[LDAP_Path]"  

Dim objUser, objRDSE, arLoginHours
Dim Index, strByte

Set objRDSE = GetObject("LDAP://rootDSE")  
Set objUser = GetObject("LDAP://cn=" & strUserID & "," & strLDAPPath & "," & _  
	objRDSE.Get("defaultNamingContext"))  
....

// und dann irgendwann nach dem ganzen anderen gePUTte ...
// ...diese 21 Byte bzw. Zeichen in das LOGINHOURS-Property packen
...
objUser.Put "loginHours", LoginHours  
objUser.SetInfo
...
Set objUser = Nothing
Set objRDSE = Nothing

Mehr ist doch gar nicht dabei, oder?
Und was die Genauigkeit betrifft... gehen eh nur volle Stunden.

HTH
Frank, der Biber aus Bremen

P.S. Nichts davon ist getestet, alles nur vor mich hin getippselt.
Und das einzige, was ich ein bisschen kann, ist Batch mit "echo Hallo" und "Copy a:\*.* c:" und sowas. Also bitte kritisch lesen!!
Member: Biber
Biber Nov 04, 2005 at 02:41:35 (UTC)
Goto Top
Menno, schnagels,

war ich so daneben mit meiner Aufdröselung?
Dann poste doch bitte wenigstens die richtige Lösung. Lass mich nicht dumm sterben.
..will doch auch mal ein großer Admin werden...

Biber
Member: gemini
gemini Nov 04, 2005 at 05:42:13 (UTC)
Goto Top
Moin moin,

zum Festlegen der Loginhours habe jetzt nix gefunden, aber zum kopieren.
Wenn du also einen TemplateUser erstellst sollte das funktionieren.

Ist aus dem ScriptCenter und muss natürlich noch angepasst werden.
On Error Resume Next
Set objUserTemplate = _
GetObject("LDAP://cn=userTemplate,OU=Management,dc=NA,dc=fabrikam,dc=com")  
arrLogonHours = objUserTemplate.Get("logonHours")  
Set objUser = _
GetObject("LDAP://cn=MyerKen,OU=Management,dc=NA,dc=fabrikam,dc=com")  
objUser.Put "logonHours", arrLogonHours  
objUser.SetInfo
Member: Biber
Biber Nov 04, 2005 at 09:05:33 (UTC)
Goto Top
Moin gemini,
meinen wir beide das Gleiche mit "LoginHours" und "logonHours" (wovon ich fest ausgehe) und -viel wichtiger- merkt M$, dass wir dasselbe meinen??
Ist ja ähnlich leicht zu merken wie die LoginScripts/LogonScripts...

Ansonsten ist Deine Lösung über ein Template natürlich spürbar geschmeidiger.. kann gut sein, dass die Standardwerte bei der Aufgabenstellung sogar passen.

Grüße nach Bajuwarien
Biber
Member: gemini
gemini Nov 04, 2005 at 09:29:23 (UTC)
Goto Top
Hi Biber,

meinen wir beide das Gleiche mit "LoginHours" und "logonHours"
Geh ich auch mal von aus

(wovon ich fest ausgehe) und -viel wichtiger- merkt M$, dass wir dasselbe meinen??
Davon bin ich nicht so überzeugt.
Das Script ist 1:1 aus dem Scriptcenter kopiert, lediglich Leerzeilen entfernt.
Mglw. hat dieser großartige Translator zugeschlagen der auch die MSKB-Artikel ins deuschte übersetzt face-big-smile

Ist ja ähnlich leicht zu merken wie die LoginScripts/LogonScripts...
Der Unterschied ist mir immer noch nicht klar, hier besteht Schulungsbedarf!

geschmeidiger.. kann gut sein, dass die Standardwerte
bei der Aufgabenstellung sogar passen.
Wenn seine Domäne fabrikam.com heißt?!?
Wenn nicht, setzte ich die geistige Flexibilität zur Anpassung der Werte voraus.

Schönes Wochenende
gemini
Member: Biber
Biber Nov 04, 2005 at 09:44:26 (UTC)
Goto Top
@gemini
>Mglw. hat dieser großartige Translator zugeschlagen der auch die MSKB-Artikel ins deuschte übersetzt
Das ist mein Wunschtraum, seit es diesen Translator gibt:
Bill G. bestellt in einem deutschen Restaurant sein Mittagsmenü mit Hilfe seines Übersetzungsprogramms und ich mache ein Foto von seinem Gesicht, wenn er einen Fransenteppich in einer Ölwanne serviert bekommt...

Dir auch ein baldiges und schönes Wochenende
Biber