Anmeldeskript in VB
Hallo zusammen.
Ich habe hier ein aktuelles VB Skript was bei uns zur Anmeldung verwendet wird. Am Ende des Skripts werden diverse Notes speziefische Dateien in das P Laufwerk des Users kopiert.
Das Skript würde ich gerne um eine Kopier Funktion erweitern.
In unregelmäßigen Abständen wird eine Datei ersetzt die vom Server (UNC Pfad) auf den Client kopiert wird.
Quellpfad: \\SERVER_XY\VERZEICHNIS\ORDNER\DATEI.DLL
Zielpfad C:\Program Files (x86)\procad\profile\dbanw\Assembly\DATEI.DLL
Hat mir hierzu jemand den passenden Code?
Vielen Dank schonmal!
Ich habe hier ein aktuelles VB Skript was bei uns zur Anmeldung verwendet wird. Am Ende des Skripts werden diverse Notes speziefische Dateien in das P Laufwerk des Users kopiert.
Das Skript würde ich gerne um eine Kopier Funktion erweitern.
In unregelmäßigen Abständen wird eine Datei ersetzt die vom Server (UNC Pfad) auf den Client kopiert wird.
Quellpfad: \\SERVER_XY\VERZEICHNIS\ORDNER\DATEI.DLL
Zielpfad C:\Program Files (x86)\procad\profile\dbanw\Assembly\DATEI.DLL
Hat mir hierzu jemand den passenden Code?
Vielen Dank schonmal!
' Zentrales Loginscript zum Mappen der Netzlaufwerke über die Gruppenzugehörigkeit
'
' Stand XY
' EDV-Abteilung
' Update: Abfrage des Flagfiles
Dim IWshShell3, WshNet, oExec, Dir, driveletter1, driveletter2, driveletter3, driveletter4, driveletter5,driveletter6,driveletter7,driveletter8
Dim share1, share2, share3 ,share4 ,share5, share6,share7,share8,folder
driveletter1 = "R:"
driveletter2 = "J:"
driveletter3 = "X:"
driveletter4 = "Q:"
driveletter5 = "T:"
driveletter6 = "K:"
driveletter7 = "M:"
driveletter8 = "S:"
share1 = "\\Server1\share1"
share2 = "\\Server2\share2"
share3 = "\\Server3\share3"
share4 = "\\Server4\share4"
share5 = "\\Server5\share5"
share6 = "\\Server6\share6"
share7 = "\\Server7\share7"
share8 = "\\Server\share8"
'Im Fehlerfall zur nächsten Zeile gehen
On Error Resume Next
Set IFileSystem = CreateObject("Scripting.FilesystemObject")
Set IFileSystem1 = CreateObject("Scripting.FilesystemObject")
Set IWshShell3 = CreateObject("WScript.Shell")
Set WshNet = WScript.CreateObject("WScript.Network")
'Falls Anmeldung auf Terminalserver dann vorzeitiges Beenden des Loginscripts da bei neuer Farm Preferences benutzt werden
If IFileSystem.FileExists("C:\windows\scripts\ts.txt") then WScript.Quit
Set oExec = IWshShell3.Exec("\\SERVER_XY\NETLOGON\IFMEMBER.exe /l")
'Im Fehlerfall zur nächsten Zeile gehen
'On Error Resume Next
Do while oExec.Status=0
Dir = Dir & oExec.StdOut.ReadAll
Loop
'R-Laufwerk mappen
If InStr(Dir,"GRUPPE5") then
WshNet.MapNetworkDrive driveletter1, share1
If err.number <>0 then
'MsgBox "Laufwerk konnte nicht verbunden werden!" & err.Description
End If
End If
'J-Laufwerk mappen
If InStr(Dir,"GRUPPE6") then
WshNet.MapNetworkDrive driveletter2, share2
If err.number <>0 then
'MsgBox "Laufwerk konnte nicht verbunden werden!" & err.Description
End If
End If
'X-Laufwerk mappen
If InStr(Dir,"GRUPPE1") then
WshNet.MapNetworkDrive driveletter3, share3
If err.number <>0 then
'MsgBox "Laufwerk konnte nicht verbunden werden!" & err.Description
End If
End If
'Q-Laufwerk mappen
If InStr(Dir,"GRUPPE7") then
WshNet.MapNetworkDrive driveletter4, share4
If err.number <>0 then
'MsgBox "Laufwerk konnte nicht verbunden werden!" & err.Description
End If
End If
'T-Laufwerk mappen
If InStr(Dir,"GRUPPE2") then
WshNet.MapNetworkDrive driveletter5, share5
If err.number <>0 then
'MsgBox "Laufwerk konnte nicht verbunden werden!" & err.Description
End If
End If
'K-Laufwerk mappen
If InStr(Dir,"GRUPPE3") then
WshNet.MapNetworkDrive driveletter6, share6
If err.number <>0 then
'MsgBox "Laufwerk konnte nicht verbunden werden!" & err.Description
End If
End If
'M-Laufwerk mappen
If InStr(Dir,"GRUPPE4") or InStr(Dir,"vredenu.lg.pictures_l") then
'WshNet.RemoveNetworkDrive driveletter7,true,true
WshNet.MapNetworkDrive driveletter7, share7
End If
'S-Laufwerk mappen( KOM-Archiv )
If InStr(Dir,"GRUPPE5") then
WshNet.MapNetworkDrive driveletter8, share8
If err.number <>0 then
'MsgBox "Laufwerk konnte nicht verbunden werden!" & err.Description
End If
End If
'Notesdaten am Freitag sichern
if weekday(date) = 6 then
On Error Resume next
'Falls kein Thinclient
If not IFileSystem.FileExists("C:\windows\ts.txt")then
'Ordner erstellen
If not IFileSystem.FolderExists("P:\NotesEDV")then
IFileSystem.CreateFolder "P:\NotesEDV"
end if
'Backup auf P:\NotesEDV
IFileSystem.CopyFile "C:\Notes\Data\*.id","P:\NotesEDV\",true
IFileSystem.CopyFile "C:\Notes\Data\names.nsf","P:\NotesEDV\",true
IFileSystem.CopyFile "C:\Notes\Data\bookmark.nsf","P:\NotesEDV\",true
IFileSystem.CopyFile "C:\Notes\Data\desktop*.*","P:\NotesEDV\",true
IFileSystem.CopyFile "C:\Notes\notes.ini","P:\NotesEDV\",true
'Cache.ndk löschen für Fatclients
If IFileSystem.FileExists("C:\Notes\data\cache.ndk")then
IFileSystem.DeleteFile "C:\Notes\data\cache.ndk",true
end if
'ID's kopieren falls Fatclient && ICA-ClientUser sowie erstellungsdatumsabhängig
If IFileSystem.FolderExists("P:\TSNotes\de\data")then
Set folder = IFileSystem.GetFolder("C:\Notes\Data")
Set file = folder.Files
For Each item In file
if IFileSystem.getextensionname(item.Name) = "id" then
'Nur ID-File kopieren falls Erstellungsdatum auf C jünger ist als das auf P
help = "P:\TSNotes\de\Data\" & item.Name
'msgbox help
Set Pdrivedat = IFileSystem1.getfile(help)
if item.DateLastModified > Pdrivedat.DateLastModified then
IFileSystem.CopyFile item,"P:\TSNotes\de\data\",true
end if
end if
Next
end if
end if
'Cache.ndk für Thinclients löschen
If IFileSystem.FileExists("P:\TSNotes\de\data\cache.ndk")then
IFileSystem.DeleteFile "P:\TSNotes\de\data\cache.ndk",true
end if
end if
'allokierten Speicher der Objekte freigeben
Set WshNet = nothing
Set IWshShell3 = nothing
Set IFileSystem = nothing
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 242071
Url: https://administrator.de/contentid/242071
Ausgedruckt am: 25.11.2024 um 23:11 Uhr
7 Kommentare
Neuester Kommentar
Moin,
ansonsten so
Grüße Uwe
p.s. bitte überprüfe ob du in deinem Code-Post nicht zu viel aus deiner Firma preis gibst. Wir hatten hier schon Fälle da ließ ein User alle seine Beiträge löschen weil er einfach zu viel preisgegeben hat ! Merci.
in unregelmäßigen Abständen wird eine Datei ersetzt die vom Server (UNC Pfad) auf den Client kopiert wird.
definiere unregelmäßig ?ansonsten so
if IFileSystem.FileExists("\\SERVER_XY\VERZEICHNIS\ORDNER\DATEI.DLL") then
IFileSystem.CopyFile "\\SERVER_XY\VERZEICHNIS\ORDNER\DATEI.DLL", "C:\Program Files (x86)\procad\profile\dbanw\Assembly\", true
end if
p.s. bitte überprüfe ob du in deinem Code-Post nicht zu viel aus deiner Firma preis gibst. Wir hatten hier schon Fälle da ließ ein User alle seine Beiträge löschen weil er einfach zu viel preisgegeben hat ! Merci.
was meinst du mit besser ??? was funktioniert denn nicht ?
das könnte dann insgesamt so aussehen:
-edit- noch was korrigiert
Dim strPathLocal, strFileRemote, f_remote, f_local, fso, objShell
Set fso = CreateObject("Scripting.Filesystemobject")
Set objShell = CreateObject("Wscript.Shell")
'RemoteFile
strFileRemote = "\\SERVER_XY\VERZEICHNIS\ORDNER\DATEI.DLL"
'je nach OS-Bitnes den lokalen Pfad setzen
If is64Bit() Then
strPathLocal = objShell.ExpandEnvironmentStrings("%programfiles(x86)%") & "\procad\profile\dbanw\Assembly\"
Else
strPathLocal = objShell.ExpandEnvironmentStrings("%programfiles%") & "\procad\profile\dbanw\Assembly\"
End If
' nur wenn beide Dateien existieren ...
If fso.FileExists(strFileRemote) And fso.FileExists(strPathLocal & fso.GetFileName(strFileRemote)) Then
'Dateireferenzen holen
Set f_remote = fso.GetFile(strFileRemote)
Set f_local = fso.GetFile(strPathLocal & fso.GetFileName(strFileRemote))
'Dateien vergleichen und nur kopieren wenn Remote-Datei neuer ist
If f_remote.DateLastModified > f_local.DateLastModified Then
fso.CopyFile strFileRemote, strPathLocal, True
End If
End If
'Funktion zum überprüfen ob 64bit
Function is64Bit()
Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2")
Set colItems = objWMIService.ExecQuery("Select OSArchitecture from Win32_OperatingSystem")
For Each objItem in colItems
If LCase(objItem.OSArchitecture) = "64-bit" Then
is64Bit = True
Else
is64Bit = False
End If
Next
End Function
bei dem Anmeldeskript wird jedesmal die Datei kopiert ohne das sie wirklich erneurt wurde.
Das kann man auch mit VBScript realisieren. In der Praxis ist mir das regelmäßig zu aufwändig das Dateidatum gegeneinander zu prüfen. Ich helfe mir dann immer mit einen run indem ich damit ein ganz normales xcopy mit der Option /d aufrufe. Ist zwar quick&dirty aber es erfüllt seinen Zweck.
Berücksichtigen müsste man auch noch ob Windows 7 32 / 64 Bit und Windows XP 32 / 64 Bit vorhanden ist.
Die Prozessorarchitektur kannst du ermitteln indem du mit deinem Script auf die Systemvariable %PROCESSOR_ARCHITECTURE% prüfst. Bei AMD64 hast du 64Bit und bei x86 32Bit. An die OS-Version kommst du mit Win32_OperatingSystem.Version; an das Servicepack mit Win32_OperatingSystem.ServicePackMajorVersion.Manuel