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
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
Please also mark the comments that contributed to the solution of the article
Content-Key: 18346
Url: https://administrator.de/contentid/18346
Printed on: April 18, 2024 at 05:04 o'clock
11 Comments
Latest comment
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
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
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:
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:
(Pseudocode
So, wenn Dein Proggi also sinngemäß so anfängt (wie in den Demo-Schnipseln):
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!!
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:
(Pseudocode
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!!
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.
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
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
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
Hi Biber,
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
Wenn nicht, setzte ich die geistige Flexibilität zur Anpassung der Werte voraus.
Schönes Wochenende
gemini
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
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?!?bei der Aufgabenstellung sogar passen.
Wenn nicht, setzte ich die geistige Flexibilität zur Anpassung der Werte voraus.
Schönes Wochenende
gemini
@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
>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