chrismass
Goto Top

Datei auf mehrere PC kopieren (VB Skript) funktioniert nicht immer

Hallo zusammen. Ich habe mir ein VB Skript zusammengebastelt welches mir eine Liste von PC aus einer Textdatei ausliest und versucht eine bestimmte Datei in ein Zielverzeichnis auf jedem PC zu kopieren. Das skript läuft so weit. Allerdings kann es aus irgend einem Grund nicht auf jeden PC kopieren. Zu einigen PC kann anscheinend keine Verbindung aufgebaut werden. Manuell konnte ich die Ziel PC sowohl anpingen als auch manuell kopieren. Ich kann es mir monentan nicht so ganz erklären. Liegt es an meinem Skript?? Ich bin in der VB Programmierung nicht sehr erfahren, vielleicht kann ja mal jemand meinen Code gegenlesen. face-wink

Option Explicit
Dim fso, f, objEingabe, source, exists
Dim EingabePfad, EingabeDatei, pathToClientFile, pathToRemoteFolder, programPath, client, Zeile, Position, i

REM EingabePfad = "D:\Arbeitsbereich BitBox\BitBoxConfigFiles\"  
EingabePfad = ".\"  
EingabeDatei = "hosts.txt"  
source = ".\config\dispatch.pac"  
programPath = "c$\Program Files (x86)\sirrix AG\BitBox\dispatch.pac"  

Const ForReading = 1
Const ForWriting = 2

set fso = CreateObject("Scripting.FileSystemObject")  

Set objEingabe = fso.OpenTextFile(EingabePfad & EingabeDatei, ForReading)

Do Until objEingabe.AtEndOfStream
    client = objEingabe.Readline
	pathToClientFile = "\\"&client&"\"&programPath  
	pathToRemoteFolder ="\\"&client&"\c$\Program Files (x86)\sirrix AG\BitBox\"  
	REM msgbox pathToClientFile
	exists = fso.FolderExists(pathToRemoteFolder)
	REM msgbox exists
	if (exists) then
	fso.CopyFile source, pathToClientFile
	Set f = fso.OpenTextFile(".\log\log.txt", 8, True)  
	f.WriteLine vbCr & "succesfully copied to " & client & i   
    f.Close
	else
	Set f = fso.OpenTextFile(".\log\failed.txt", 8, True)  
    f.WriteLine vbCr & client & i 
    f.Close
	end if
Loop
	
Msgbox "Fertig!"  
set fso = nothing

Content-ID: 232275

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

Ausgedruckt am: 25.11.2024 um 22:11 Uhr

colinardo
colinardo 11.03.2014 aktualisiert um 08:52:33 Uhr
Goto Top
Hallo chrismass,
bist du sicher das auf den entsprechenden Rechnern die Administrative Shares aktiviert sind, Wenn es ein WIN7 oder WIN8 Rechner ist, muss ja erst durch einen Registry-Eintrag (LocalAccountTokenFilterPolicy) der Zugriff aktiviert werden wenn es sich um PCs ohne Domänenmitgliedschaft handelt, oder sind die Rechner Mitglied einer Domäne (hier ist dies nicht nötig) ?

Grüße Uwe
chrismass
chrismass 11.03.2014 um 09:08:42 Uhr
Goto Top
Die PC sind alle Mitglied einer Domäne.
Die Ziel PC sind Win7.
Alle PC sind identisch, dh. durch ein und das selbe Image installiert.
Ich starte den Kopiervorgang als Domänenadmin, habe also die höchsten Zugriffsrechte.
colinardo
colinardo 11.03.2014 aktualisiert um 09:22:44 Uhr
Goto Top
bist du sicher das in der Textdatei worin die Namen der Rechner stehen kein Leerzeichen hinter oder vor dem Namen steht, denn du entfernst diese eventuellen Leerzeichen nicht mit Trim() in deinem Script.
client = Trim(objEingabe.Readline)
chrismass
chrismass 11.03.2014 um 09:35:29 Uhr
Goto Top
Ok ich werde es mal einbauen.
Ich bereite allerdings die Liste durch eine dsquery Abfrage an der Domäne vor und lasse mir das Ergebnis in eine Textdatei ausgeben. Anschließend bearbeite ich die Datei mit notepad++ , entferne alles unnötige und lasse zum Abschluss die Funktion"Trim Trailing Spaces" drüberlaufen.

Also ja eigentlich bin ich sicher dass keine Spaces mehr drin sind ... face-smile

Momentan habe ich aber eine andere Vermutung. Die PC stehen teilweise an einem entfernten Standort. Ich vermute dass die PC nicht in einer angemessenen Zeit antworten und deshalb nichts kopiert wird.
colinardo
colinardo 11.03.2014 aktualisiert um 10:01:32 Uhr
Goto Top
Zitat von @chrismass:
Momentan habe ich aber eine andere Vermutung. Die PC stehen teilweise an einem entfernten Standort. Ich vermute dass die PC nicht in einer angemessenen Zeit antworten und deshalb nichts kopiert wird.
dann benutze zum kopieren Robocopy in deinem Script, mit dem kann man Timeouts und Verbindungswiederholungen bei solchen Szenarien festlegen.
Set objShell = CreateObject("Wscript.Shell")  
objShell.Run "robocopy ""C:\Sourcefolder"" ""\\server\targetfolder"" ""dispatch.pac"" /R:10 /W:5"  
oder du pingst die Rechner voher ein paar mal in deinem Script an.

Grüße Uwe
chrismass
chrismass 11.03.2014 um 10:04:14 Uhr
Goto Top
Ich habe nun in einem Fall auch noch festgestellt, dass im DNS wohl ein falscher Eintrag ist. Das kann aber nicht in der Masse sein.
Ich werde das mit Robocopy gleich mal ausprobieren.
Vielen Dank!
chrismass
chrismass 11.03.2014 um 12:35:31 Uhr
Goto Top
Auch mit Robocopy und dem Repeat-Schalter hat es nicht funktioniert. Interessanterweise klappts sofort wenn ich den Robocopybefehl einfach in der Shell absetze.
colinardo
colinardo 11.03.2014 aktualisiert um 12:48:40 Uhr
Goto Top
habt Ihr einen WINS Server in eurer Domain? ansonsten mach die Pfadangabe mal in DNS-Schreibweise
\\pc1.domain.local\c$\......**
und lösch mal den DNS-Cache ipconfig /flushdns
Teste auch mal nur über die IP-Adresse