VBS Script: Rechner Namen aus TXT mit VBS verknüpfen
Hallo zusammen,
ich hoffe Ihr könnt mir helfen.
Habe ein kleines Script geschrieben.
Momentan wird im Script ein Rechner direkt angesprochen. Das Script soll überprüfen ob entweder der Ordner Test oder Test2 vorhanden sind. Falls beide nicht vorhanden sind soll dann vom Server \\abc der Inhalt des Ordners Test3 auf den Client kopiert werden.
Gibt es eine möglichkeit das Script so umzuschreiben das er sich die Rechner Namen aus einer TXT Datei nimmt?
Ich Danke euch schon mal für eure Hilfe.
ich hoffe Ihr könnt mir helfen.
Habe ein kleines Script geschrieben.
set wshell = CreateObject("Wscript.shell")
Set oFSO = CreateObject ("Scripting.FileSystemObject")
Dim fso, destfolder,sourcefolder, f
Set WshShell = CreateObject("WScript.Shell")
Set FSO = CreateObject("Scripting.FileSystemObject")
Sourcefolder = "\\abc\defl$\test3"
Destfolder = "\\Rechner" & "\C$\temp"
On Error resume next
If (FSO.FolderExists("\\Rechner" & "\C$\test")) THEN
msgbox "test vorhanden"
ELSE
If (FSO.FolderExists("\\Rechner" & "\C$\test2")) THEN
msgbox "test2 vorhanden"
ELSE
FSO.CopyFolder Sourcefolder, Destfolder, True
WshShell.run ("\\Rechner" & " > " & File ),0,true
linefeed = CHR(10)
careturn = CHR(13)
Const ForReading = 1, ForWriting = 2, ForAppending = 8
f.Write "\\Rechner\temp"
f.Close
end If
end if
Momentan wird im Script ein Rechner direkt angesprochen. Das Script soll überprüfen ob entweder der Ordner Test oder Test2 vorhanden sind. Falls beide nicht vorhanden sind soll dann vom Server \\abc der Inhalt des Ordners Test3 auf den Client kopiert werden.
Gibt es eine möglichkeit das Script so umzuschreiben das er sich die Rechner Namen aus einer TXT Datei nimmt?
Ich Danke euch schon mal für eure Hilfe.
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 212898
Url: https://administrator.de/contentid/212898
Ausgedruckt am: 15.11.2024 um 07:11 Uhr
9 Kommentare
Neuester Kommentar
Hallo lukyluky!
Dein Scriptansatz hat noch Potenzial (nicht nur hinsichtlich der Formatierung als "Code" - bitte nachholen) - ungetestet eher so:
Annahme hinsichtlich der "CompList.txt": In jeder Zeile steht ein Computername ohne "\\" davor.
Noch als Anmerkung: Mit "
Grüße
bastla
Dein Scriptansatz hat noch Potenzial (nicht nur hinsichtlich der Formatierung als "Code" - bitte nachholen) - ungetestet eher so:
Sourcefolder = "\\abc\defl$\test3"
Destfolder = "\C$\temp"
Computers = "\\abc\def1$\CompList.txt"
Set fso = CreateObject("Scripting.FileSystemObject")
Comps = Split(fso.OpenTextFile(Computers).ReadAll, vbNewline) 'Computernamen aus Textdatei in Array einlesen
For Each Comp In Comps
If Trim(Comp) <> "" Then 'leere Zeilen nicht verarbeiten
'On Error Resume Next 'während der Testphase nicht sinnvoll, da so keine Fehlermeldungen angezeigt werden
If fso.FolderExists("\\" & Comp & "\C$\test") Then
WScript.Echo Comp & ": test vorhanden"
Else
If fso.FolderExists("\\" & Comp & "\C$\test2") Then
WScript.Echo Comp & ": test2 vorhanden"
Else
fso.CopyFolder Sourcefolder, "\\" & Comp & Destfolder, True
End If
End If
End If
Next
Noch als Anmerkung: Mit "
WScript.Echo
" anstatt "MsgBox
" kannst Du das Script über "cscript
" starten und musst nicht jede MessageBox wegklicken - wenn Du trotzdem über "wscript
" startest, erhältst Du weiterhin mit "WScript.Echo
" eine Standard-MessageBox angezeigt ...Grüße
bastla
Moin lukyluky,
Um es vorwegzunehmen: Bei den meisten so genannten Logfiles hat sich vor deren Entstehung jemand überlegt,
a) wo die entstehen sollen
b) was denn der Inhalt sein soll.
Hast du da schon etwas weniger abstrakte Vorstellungen?
Wir könnten naürlich in irgendeine Textdatei reinschreiben "Einer dieser Ordner war vorhanden", wie du es oben spezifiziert hast.
Grüße
Biber
[Edit] @bastla
Okay, dann lass doch mal einem Handwerker mit den paar Informationen freie Hand.
Sag zum Beispiel "Ich hätte gern meine Wohnung in anderen Farben" zu einem Maler oder zu einem Arbeitsvermittler "Ich hätte gern einen anderen Job."
[/Edit]
Zitat von @lukyluky:
Super vielen Dank.
Die Formatierung holle ich gleich noch nach.
Einen Punkt habe ich leider vergessen.
Es müsste noch eine Ausgabe in eine Data entstehen in welcher die Information ersiehtlich sind ob bei Rechner1,2,3,4,5 einer
dieser Ordner vorhanden war oder nicht.
Befrage mal eine Suchmaschine nach dem Stichwort "Logfile".Super vielen Dank.
Die Formatierung holle ich gleich noch nach.
Einen Punkt habe ich leider vergessen.
Es müsste noch eine Ausgabe in eine Data entstehen in welcher die Information ersiehtlich sind ob bei Rechner1,2,3,4,5 einer
dieser Ordner vorhanden war oder nicht.
Um es vorwegzunehmen: Bei den meisten so genannten Logfiles hat sich vor deren Entstehung jemand überlegt,
a) wo die entstehen sollen
b) was denn der Inhalt sein soll.
Hast du da schon etwas weniger abstrakte Vorstellungen?
Wir könnten naürlich in irgendeine Textdatei reinschreiben "Einer dieser Ordner war vorhanden", wie du es oben spezifiziert hast.
Grüße
Biber
[Edit] @bastla
Okay, dann lass doch mal einem Handwerker mit den paar Informationen freie Hand.
Sag zum Beispiel "Ich hätte gern meine Wohnung in anderen Farben" zu einem Maler oder zu einem Arbeitsvermittler "Ich hätte gern einen anderen Job."
[/Edit]
Hallo lukyluky!
Dann (weiterhin ungetestet) etwa so:
Grüße
bastla
[Edit] @ Biber
Es geht hier doch eher vorrangig um das Handwerkszeug (obwohl natürlich Deine Hinweise völlig berechtigt sind) ...
[/Edit]
[Edit2] @ Biber
Ist doch aber seine Wohnung (oder vermutlich eher eine Ecke im Keller ) ...
... wobei ich natürlich zugebe, dass mich das Szenario "Wenn's gar keinen Ordner gibt, na dann kopieren wir eben einen." auch überrascht hat - aber gelegentlich bekomme sogar ich meine angeborene Neugier in den Griff ...
[/Edit2]
Dann (weiterhin ungetestet) etwa so:
Sourcefolder = "\\abc\defl$\test3"
Destfolder = "\C$\temp"
Computers = "\\abc\def1$\CompList.txt"
Report = "\\abc\def1$\CompVorhanden.txt"
Set fso = CreateObject("Scripting.FileSystemObject")
Comps = Split(fso.OpenTextFile(Computers).ReadAll, vbNewline) 'Computernamen aus Textdatei in Array einlesen
For Each Comp In Comps
If Trim(Comp) <> "" Then 'leere Zeilen nicht verarbeiten
Existing = False 'Schalter "Vorhanden" für jeden Computer zunächst rücksetzen
'On Error Resume Next 'während der Testphase nicht sinnvoll, da so keine Fehlermeldungen angezeigt werden
If fso.FolderExists("\\" & Comp & "\C$\test") Then
WScript.Echo Comp & ": test vorhanden"
Existing = True 'Schalter "Vorhanden" setzen
Else
If fso.FolderExists("\\" & Comp & "\C$\test2") Then
WScript.Echo Comp & ": test2 vorhanden"
Existing = True 'Schalter "Vorhanden" setzen
Else
fso.CopyFolder Sourcefolder, "\\" & Comp & Destfolder, True
End If
End If
If Existing Then Rep = Rep & vbNewline & Comp 'Wenn vorhanden, Eintragung in Liste (mit Zeilenschaltung)
End If
Next
'Wenn Liste "Vorhanden" nicht leer ist, in Datei schreiben (und dabei die erste Zeilenschaltung überspringen)
If Rep <> "" Then fso.CreateTextFile(Report).Write Mid(Rep, 3)
bastla
[Edit] @ Biber
Es geht hier doch eher vorrangig um das Handwerkszeug (obwohl natürlich Deine Hinweise völlig berechtigt sind) ...
[/Edit]
[Edit2] @ Biber
Ist doch aber seine Wohnung (oder vermutlich eher eine Ecke im Keller ) ...
... wobei ich natürlich zugebe, dass mich das Szenario "Wenn's gar keinen Ordner gibt, na dann kopieren wir eben einen." auch überrascht hat - aber gelegentlich bekomme sogar ich meine angeborene Neugier in den Griff ...
[/Edit2]
Hallo lukyluky!
Versuch es damit (ungetestet):
Grüße
bastla
Versuch es damit (ungetestet):
SourceFolder = "\\abc\defl$\test3"
DestFolder = "temp"
Computers = "\\abc\def1$\CompList.txt"
Report = "\\abc\def1$\CompVorhanden.txt"
Set fso = CreateObject("Scripting.FileSystemObject")
Comps = Split(fso.OpenTextFile(Computers).ReadAll, vbNewline) 'Computernamen aus Textdatei in Array einlesen
For Each Comp In Comps
If Trim(Comp) <> "" Then 'leere Zeilen nicht verarbeiten
Existing = False 'Schalter "Vorhanden" rücksetzen
Rep = Rep & vbNewline & Comp 'Ausgabezeile für Computer erzeugen
DestDrive = "\\" & Comp & "\C$\" 'Zielpfad festlegen ("\\Server\Share" ist für VBS ein "Drive")
If fso.DriveExists(DestDrive) Then 'Ziel erreichbar?
If fso.FolderExists(DestDrive & "test") Then
WScript.Echo Comp & ": test vorhanden"
Existing = True 'Schalter "Vorhanden" setzen
Rep = Rep & ";test vorhanden" 'Hinweis in Ausgabezeile schreiben
End If
If fso.FolderExists(DestDrive & "test2") Then
WScript.Echo Comp & ": test2 vorhanden"
Existing = True 'Schalter "Vorhanden" setzen
Rep = Rep & ";test2 vorhanden" 'Hinweis in Ausgabezeile schreiben
End If
If Not Existing Then
fso.CopyFolder SourceFolder, DestDrive & DestFolder, True
Rep = Rep & ";kopiert" 'Hinweis in Ausgabezeile schreiben
End If
Else 'Ziel nicht gefunden
Rep = Rep & ";nicht erreicht" 'Hinweis in Ausgabezeile schreiben
End If
End If
Next
fso.CreateTextFile(Report).Write Mid(Rep, 3) 'gesamte Ausgabe schreiben
bastla
Hallo lukyluky!
Wie schon von Biber angesprochen kann Deine Zeile 21 so nicht funktionieren - versuch es damit:
Die Option "-c" von "psexec" könnte vielleicht hilfreich sein, und vermutlich wirst du auch noch jeweils eine Ausgabezeile für die Log-Datei ergänzen wollen ...
Grüße
bastla
Wie schon von Biber angesprochen kann Deine Zeile 21 so nicht funktionieren - versuch es damit:
'Script erweiterung
Set WShell = CreateObject("WScript.Shell")
filespec = "\\" & Comp & "\c$\temp\1.exe"
If fso.FileExists(filespec) Then
WShell.Run "c:\temp\psexec \\" & Comp & " c:\temp\1.exe"
Else
WScript.Echo Comp & ": doesn't exist"
End If
' Script erweiterung ende
Grüße
bastla