VBS Skript für Logon
Ersteinmal wollte ich halle in diesem Board sagen
Jetzt zu meinem Problem. Ich versuche zur Zeit unsere Logon Skript von *.bat dateien zu einem VBS Skript zu migrieren. Und bin leider dabei auf ein Problem bestoßen.
Die Abfrage mit der ismember klappt leider nicht so.
Und zwar ist das Problem das in der Sicherheitsgruppe "GP_CEPT005" sind keine User sind sondern dort ist wiederum eine Sicherheitsgruppe. Und in der Sind dann die User der Abteilung.
Das kann ich auch leider nicht mehr trennen oder anderes gestalten.
Wenn ich in die Gruppe GP_CEPT005 einen Benutzer reinschreiben klappt das Skript. Gibt es dort einen Trick wie ich das auch noch hinbekomme? Da die ifmember.exe die ich bei der batch datei benutzt hab damit keine Probleme hatte.
Für Hinweise wäre ich dankbar Wer das ganze besser oder schlauer lösen kann soll mir bitte Tips geben.
Anbei der Abschnitt des VBS Skripts.
Grüße
Marcel
_____
Function IsMember(strGroup)
Dim objMember, objGroup
On Error Resume Next
Set objGroup = GetObject("WinNT:" & strDomain & "/" & strGroup & ",group")
If Err.Number = 0 Then
IsMember = objGroup.IsMember("WinNT:" & strDomain & "/" & strUserName)
End If
On Error Goto 0
End Function
If IsMember("GP_CEPT005") Then
WSHNetwork.AddWindowsPrinterConnection "\\clprint01\cept005"
WSHNetwork.SetDefaultPrinter "\\" & strPrintSRV & "\cept005"
end if
____
Jetzt zu meinem Problem. Ich versuche zur Zeit unsere Logon Skript von *.bat dateien zu einem VBS Skript zu migrieren. Und bin leider dabei auf ein Problem bestoßen.
Die Abfrage mit der ismember klappt leider nicht so.
Und zwar ist das Problem das in der Sicherheitsgruppe "GP_CEPT005" sind keine User sind sondern dort ist wiederum eine Sicherheitsgruppe. Und in der Sind dann die User der Abteilung.
Das kann ich auch leider nicht mehr trennen oder anderes gestalten.
Wenn ich in die Gruppe GP_CEPT005 einen Benutzer reinschreiben klappt das Skript. Gibt es dort einen Trick wie ich das auch noch hinbekomme? Da die ifmember.exe die ich bei der batch datei benutzt hab damit keine Probleme hatte.
Für Hinweise wäre ich dankbar Wer das ganze besser oder schlauer lösen kann soll mir bitte Tips geben.
Anbei der Abschnitt des VBS Skripts.
Grüße
Marcel
_____
Function IsMember(strGroup)
Dim objMember, objGroup
On Error Resume Next
Set objGroup = GetObject("WinNT:" & strDomain & "/" & strGroup & ",group")
If Err.Number = 0 Then
IsMember = objGroup.IsMember("WinNT:" & strDomain & "/" & strUserName)
End If
On Error Goto 0
End Function
If IsMember("GP_CEPT005") Then
WSHNetwork.AddWindowsPrinterConnection "\\clprint01\cept005"
WSHNetwork.SetDefaultPrinter "\\" & strPrintSRV & "\cept005"
end if
____
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 102440
Url: https://administrator.de/contentid/102440
Ausgedruckt am: 26.11.2024 um 11:11 Uhr
5 Kommentare
Neuester Kommentar
Hallo free2k!
Basierend auf diesem "Scripting Guy"-Artikel könnte das so gehen:
Noch als Anmerkung: Das Objekt für den (aktuellen) Benutzer ("objUser") wird innerhalb der Funktion erzeugt - besser wäre es, dieses beim Aufruf als Argument zu übergeben.
Grüße
bastla
Basierend auf diesem "Scripting Guy"-Artikel könnte das so gehen:
Function IsMember(strGroup)
On Error Resume Next
InGroup = False
Set objUser=GetObject("LDAP://" & CreateObject("ADSystemInfo").UserName)
Set colGroups = objUser.Groups
For Each objGroup in colGroups
If objGroup.CN = strGroup Then
InGroup = True
Exit For
Else
GetNested objGroup, strGroup, InGroup
End If
Next
IsMember = InGroup
End Function
Sub GetNested(objGroup, strGroup, InGroup)
On Error Resume Next
colMembers = objGroup.GetEx("memberOf")
If Err.Number = 0 Then
For Each strMember in colMembers
strPath = "LDAP://" & strMember
Set objNestedGroup = GetObject(strPath)
If objNestedGroup.CN = strGroup Then
InGroup = True
Exit For
Else
GetNested objNestedGroup, strGroup, InGroup
End If
Next
End If
End Sub
Grüße
bastla
Hallo free2k!
Das ist zwar für die Wiederverwendbarkeit der "Function" vorteilhaft, für die konkrete Anwendung hier aber nicht entscheidend ...
Wenn es Probleme gibt, solltest Du mit eingestreuten "WScript.Echo"-Zeilen und einem Test von der Kommandozeile mit
die ermittelten Werte anzeigen lassen.
Du könntest etwa zwischen Zeile 6 und 7 einfügen:
und als Zeile 23b (= nach "Set objNestedGroup = GetObject(strPath)"):
So werden die gefundenen Gruppen mit dem Namen, wie sie dann auch verglichen werden, angezeigt.
Zu beachten wäre noch, dass in der derzeitigen Fassung die Groß-/Kleinschreibung berücksichtigt werden muss, also etwa "gp_CEPT005" nicht gefunden würde.
Grüße
bastla
Was meinst du damit dieses beim Aufruf als Argument zu übergeben ?
Die Funktion sollte die Gruppenzugehörigkeit eines beliebigen Users prüfen können - daher sollte der User nicht in der Funktion selbst festgelegt, sondern gemeinsam mit der Gruppe an die Funktion "übergeben" werden, etwa:If IsMember(strUser, "GP_CEPT005") Then
Wenn es Probleme gibt, solltest Du mit eingestreuten "WScript.Echo"-Zeilen und einem Test von der Kommandozeile mit
cscript //nologo Scriptdatei.vbs
Du könntest etwa zwischen Zeile 6 und 7 einfügen:
WScript.Echo "Direkt: ", objGroup.CN
WScript.Echo "Indirekt: ", objNestedGroup.CN
Zu beachten wäre noch, dass in der derzeitigen Fassung die Groß-/Kleinschreibung berücksichtigt werden muss, also etwa "gp_CEPT005" nicht gefunden würde.
Grüße
bastla
Hallo free2k!
Auch wenn's noch unter den (sehr allgemein gehaltenen) Threadtitel passen würde, wäre das "Starten des Internet Explorers mit einer zu übergebenden Startzeit" ein Fall für einen neuen Beitrag - dort könntest Du dann auch etwas ausführlicher erklären, was eigentlich damit gemeint ist ...
Das Erstellen eines Shortcuts (in Deinem Batch wird ein solcher kopiert und nicht erstellt) wurde hier im Forum schon öfter abgehandelt.
Um das Änderungsdatum einer Datei auszulesen, benötigst Du zunächst ein "FileSystemObject" (auch hier gilt: wenn ein solches bereits vorher erzeugt wurde, einfach dieses verwenden), dann ein "File"-Objekt und schließlich dessen "DateLastModified"-Eigenschaft - diese kannst Du dann mit dem auf dem selben Weg ermittelten "DateLastModified" der zu kopierenden Datei vergleichen.
(Die letzte Zeile dient natürlich nur als Demo / zum Testen.)
Dass Du für das Schreiben unter "All Users" Admin- oder Systemrechte benötigst, setze ich als bekannt voraus (insofern wäre dieser Teil des Scripts eher als "StartUp"-Script und nicht als "Logon"-Script zu verwenden).
Grüße
bastla
Auch wenn's noch unter den (sehr allgemein gehaltenen) Threadtitel passen würde, wäre das "Starten des Internet Explorers mit einer zu übergebenden Startzeit" ein Fall für einen neuen Beitrag - dort könntest Du dann auch etwas ausführlicher erklären, was eigentlich damit gemeint ist ...
Also ich müsste wissen wie die Varibale für Desktop des Users und wie man einen Shortcut dafür dann macht....
Den Pfad zum Desktop erhältst Du so (Zeile 1 brauchst Du nur, wenn das "Shell"-Objekt nicht schon an anderer Stelle erzeugt wurde):Set WshShell = WScript.CreateObject("WScript.Shell")
strDesktop = WshShell.SpecialFolders("Desktop")
gibt es einen Befehlt was überprüft ob die Datei in der Quelle neuer ist als die auf dem Desktop?
Für den Pfad zum "AllUsersDesktop" gibt es ebenfalls einen gleichnamigen "SpecialFolder" (siehe oben).Um das Änderungsdatum einer Datei auszulesen, benötigst Du zunächst ein "FileSystemObject" (auch hier gilt: wenn ein solches bereits vorher erzeugt wurde, einfach dieses verwenden), dann ein "File"-Objekt und schließlich dessen "DateLastModified"-Eigenschaft - diese kannst Du dann mit dem auf dem selben Weg ermittelten "DateLastModified" der zu kopierenden Datei vergleichen.
Set WshShell = WScript.CreateObject("WScript.Shell")
strAllUsersDesktop = WshShell.SpecialFolders("AllUsersDesktop")
Set fso = CreateObject("Scripting.FileSystemObject")
Set f = fso.GetFile(strAllUsersDesktop & "\test.help")
dtHelpFile = f.DateLastModified
WScript.Echo "Änderungsdatum der vorhandenen ""test.help"": " & dtHelpFile
Dass Du für das Schreiben unter "All Users" Admin- oder Systemrechte benötigst, setze ich als bekannt voraus (insofern wäre dieser Teil des Scripts eher als "StartUp"-Script und nicht als "Logon"-Script zu verwenden).
Grüße
bastla