Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

VBS Script: Rechner Namen aus TXT mit VBS verknüpfen

Frage Entwicklung VB for Applications

Mitglied: lukyluky

lukyluky (Level 1) - Jetzt verbinden

30.07.2013, aktualisiert 31.07.2013, 1654 Aufrufe, 9 Kommentare

Hallo zusammen,

ich hoffe Ihr könnt mir helfen.

Habe ein kleines Script geschrieben.
01.
set wshell = CreateObject("Wscript.shell") 
02.
Set oFSO = CreateObject ("Scripting.FileSystemObject")  
03.
Dim fso, destfolder,sourcefolder, f 
04.
Set WshShell = CreateObject("WScript.Shell") 
05.
Set FSO = CreateObject("Scripting.FileSystemObject") 
06.
Sourcefolder = "\\abc\defl$\test3" 
07.
Destfolder = "\\Rechner" & "\C$\temp" 
08.
On Error resume next  
09.
If (FSO.FolderExists("\\Rechner" & "\C$\test")) THEN 
10.
msgbox "test vorhanden" 
11.
ELSE 
12.
If (FSO.FolderExists("\\Rechner" & "\C$\test2")) THEN 
13.
msgbox "test2 vorhanden" 
14.
ELSE 
15.
FSO.CopyFolder Sourcefolder, Destfolder, True 
16.
WshShell.run ("\\Rechner" & " > " & File ),0,true 
17.
  
18.
linefeed = CHR(10) 
19.
careturn = CHR(13) 
20.
Const ForReading = 1, ForWriting = 2, ForAppending = 8 
21.
	f.Write "\\Rechner\temp" 
22.
	f.Close 
23.
end If 
24.
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.
Mitglied: bastla
30.07.2013, aktualisiert um 17:01 Uhr
Hallo lukyluky!

Dein Scriptansatz hat noch Potenzial (nicht nur hinsichtlich der Formatierung als "Code" - bitte nachholen) - ungetestet eher so:
01.
Sourcefolder = "\\abc\defl$\test3" 
02.
Destfolder = "\C$\temp" 
03.
Computers = "\\abc\def1$\CompList.txt" 
04.
 
05.
Set fso = CreateObject("Scripting.FileSystemObject") 
06.
 
07.
Comps = Split(fso.OpenTextFile(Computers).ReadAll, vbNewline) 'Computernamen aus Textdatei in Array einlesen 
08.
For Each Comp In Comps 
09.
    If Trim(Comp) <> "" Then 'leere Zeilen nicht verarbeiten 
10.
        'On Error Resume Next 'während der Testphase nicht sinnvoll, da so keine Fehlermeldungen angezeigt werden 
11.
        If fso.FolderExists("\\" & Comp & "\C$\test") Then 
12.
            WScript.Echo Comp & ": test vorhanden" 
13.
        Else 
14.
            If fso.FolderExists("\\" & Comp & "\C$\test2") Then 
15.
                WScript.Echo Comp & ": test2 vorhanden" 
16.
            Else 
17.
                fso.CopyFolder Sourcefolder, "\\" & Comp & Destfolder, True 
18.
            End If 
19.
        End If 
20.
    End If 
21.
Next
Annahme hinsichtlich der "CompList.txt": In jeder Zeile steht ein Computername ohne "\\" davor.

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
Bitte warten ..
Mitglied: lukyluky
31.07.2013 um 07:07 Uhr
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.
Bitte warten ..
Mitglied: Biber
31.07.2013, aktualisiert um 10:19 Uhr
Moin lukyluky,


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".

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]
Bitte warten ..
Mitglied: bastla
31.07.2013, aktualisiert um 10:34 Uhr
Hallo lukyluky!

Dann (weiterhin ungetestet) etwa so:
01.
Sourcefolder = "\\abc\defl$\test3" 
02.
Destfolder = "\C$\temp" 
03.
Computers = "\\abc\def1$\CompList.txt" 
04.
Report = "\\abc\def1$\CompVorhanden.txt" 
05.
 
06.
Set fso = CreateObject("Scripting.FileSystemObject") 
07.
 
08.
Comps = Split(fso.OpenTextFile(Computers).ReadAll, vbNewline) 'Computernamen aus Textdatei in Array einlesen 
09.
For Each Comp In Comps 
10.
    If Trim(Comp) <> "" Then 'leere Zeilen nicht verarbeiten 
11.
        Existing = False 'Schalter "Vorhanden" für jeden Computer zunächst rücksetzen 
12.
        'On Error Resume Next 'während der Testphase nicht sinnvoll, da so keine Fehlermeldungen angezeigt werden 
13.
        If fso.FolderExists("\\" & Comp & "\C$\test") Then 
14.
            WScript.Echo Comp & ": test vorhanden" 
15.
            Existing = True 'Schalter "Vorhanden" setzen 
16.
        Else 
17.
            If fso.FolderExists("\\" & Comp & "\C$\test2") Then 
18.
                WScript.Echo Comp & ": test2 vorhanden" 
19.
                Existing = True 'Schalter "Vorhanden" setzen 
20.
            Else 
21.
                fso.CopyFolder Sourcefolder, "\\" & Comp & Destfolder, True 
22.
            End If 
23.
        End If 
24.
        If Existing Then Rep = Rep & vbNewline & Comp 'Wenn vorhanden, Eintragung in Liste (mit Zeilenschaltung) 
25.
    End If 
26.
Next 
27.
'Wenn Liste "Vorhanden" nicht leer ist, in Datei schreiben (und dabei die erste Zeilenschaltung überspringen) 
28.
If Rep <> "" Then fso.CreateTextFile(Report).Write Mid(Rep, 3)
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]
Bitte warten ..
Mitglied: lukyluky
31.07.2013 um 10:57 Uhr
Hallo Bastla,

vielen Dank für dein geschriebenes Script. Es funktioniert schon fast perfekt. Leider wird nichts in die CompVerhanden.txt geschrieben.
01.
27.'Wenn Liste "Vorhanden" nicht leer ist, in Datei schreiben (und dabei die erste Zeilenschaltung überspringen) 
Leider verstehe ich nicht was du damit meinst. Sorry.

@Biber: Ich habe meine Ausgabe Wünsch sehr oberflächlich gehalten da ich diese selbst anpassen wollte. Möchte ja auch noch etwas lernen.
Bin halt ein VBS Anfänger.
Hätte gerne eine Ausgabe die im optimalem Fall so aussieht:
Rechner1 Ordner vorhanden Datei nicht kopiert
Rechner2 Ordner nicht vorhanden Datei kopiert
Rechner3 Rechner nicht erreichbar

Es würde aber auch reichen wenn nur ein Punkt drin stehen würde:
Rechner1 Ordner nicht vorhanden oder Datei nicht kopiert

Wichtig wäre nur das ich im nachhinein ersehen kann bei welchen Rechnern die Ordnern nicht vorhanden sind oder die Dateien nicht kopiert wurden.
Bitte warten ..
Mitglied: bastla
31.07.2013, aktualisiert um 16:45 Uhr
Hallo lukyluky!

Versuch es damit (ungetestet):
01.
SourceFolder = "\\abc\defl$\test3" 
02.
DestFolder = "temp" 
03.
Computers = "\\abc\def1$\CompList.txt" 
04.
Report = "\\abc\def1$\CompVorhanden.txt" 
05.
 
06.
Set fso = CreateObject("Scripting.FileSystemObject") 
07.
 
08.
Comps = Split(fso.OpenTextFile(Computers).ReadAll, vbNewline) 'Computernamen aus Textdatei in Array einlesen 
09.
For Each Comp In Comps 
10.
    If Trim(Comp) <> "" Then 'leere Zeilen nicht verarbeiten 
11.
        Existing = False 'Schalter "Vorhanden" rücksetzen 
12.
        Rep = Rep & vbNewline & Comp 'Ausgabezeile für Computer erzeugen 
13.
        DestDrive = "\\" & Comp & "\C$\" 'Zielpfad festlegen ("\\Server\Share" ist für VBS ein "Drive") 
14.
        If fso.DriveExists(DestDrive) Then 'Ziel erreichbar? 
15.
            If fso.FolderExists(DestDrive & "test") Then  
16.
                WScript.Echo Comp & ": test vorhanden" 
17.
                Existing = True 'Schalter "Vorhanden" setzen 
18.
                Rep = Rep & ";test vorhanden" 'Hinweis in Ausgabezeile schreiben 
19.
            End If 
20.
            If fso.FolderExists(DestDrive & "test2") Then 
21.
                WScript.Echo Comp & ": test2 vorhanden" 
22.
                Existing = True 'Schalter "Vorhanden" setzen 
23.
                Rep = Rep & ";test2 vorhanden" 'Hinweis in Ausgabezeile schreiben 
24.
            End If 
25.
            If Not Existing Then 
26.
                fso.CopyFolder SourceFolder, DestDrive & DestFolder, True 
27.
                Rep = Rep & ";kopiert" 'Hinweis in Ausgabezeile schreiben 
28.
            End If 
29.
        Else 'Ziel nicht gefunden 
30.
            Rep = Rep & ";nicht erreicht" 'Hinweis in Ausgabezeile schreiben 
31.
        End If 
32.
    End If 
33.
Next 
34.
fso.CreateTextFile(Report).Write Mid(Rep, 3) 'gesamte Ausgabe schreiben
Grüße
bastla
Bitte warten ..
Mitglied: lukyluky
01.08.2013 um 16:26 Uhr
Hallo Bastla,

das Script funktioniert super!!
Vielen Dank

Habe versucht das Script alleine etwas zu erweitern, aber ohne eure Hilfe kriege ich das leider nicht hin.
Hintergrund meines Scripts:
Wenn Test oder Test2 nicht vorhanden sind wird eine Installationsdatei in den Ordner c:\Temp kopiert und diese sollte im Anschluss ausgeführt werden.

Habe meine Erweiterung zwischen deinen Code geschoben.

Bekomme immer die Meldung das er die Installationsdatei nicht finden kann.

01.
If Not Existing Then  
02.
fso.CopyFolder SourceFolder, DestDrive & DestFolder, True  
03.
Rep = Rep & ";kopiert" 'Hinweis in Ausgabezeile schreiben  
04.
End If  
05.
Else 'Ziel nicht gefunden  
06.
Rep = Rep & ";nicht erreicht" 'Hinweis in Ausgabezeile schreiben  
07.
End If  
08.
End If  
09.
 
10.
Next 
11.
'Script erweiterung 
12.
set wshell = CreateObject("Wscript.shell") 
13.
filespec = "\\" & Comp & "\c$\temp\1.exe" 
14.
WScript.Echo ReportFileStatus(filespec) 
15.
 
16.
Function ReportFileStatus(filespec) 
17.
  
18.
Dim fso, msg 
19.
 Set fso = CreateObject("Scripting.FileSystemObject") 
20.
 If (fso.FileExists(filespec)) Then 
21.
 wshell.run "c:\temp\psexec \\ & Comp c:\temp\1.exe" 
22.
 Else 
23.
WScript.Echo Comp & ": doesn't exist"   
24.
 
25.
 End If 
26.
 ReportFileStatus = WScript.Echo 
27.
 End Function 
28.
' Script erweiterung ende 
29.
 
30.
fso.CreateTextFile(Report).Write Mid(Rep, 3) 'gesamte Ausgabe schreiben
Ich hoffe das Ihr mir hierbei auch helfen könnt.

Danke
Bitte warten ..
Mitglied: Biber
01.08.2013 um 17:25 Uhr
Moin lukyluky,

ich will bastla da nicht vorgreifen, aber siehst du einen Unterschied zwischen Zeile 13 und Zeile 21?
In beiden Zeilen werden die vier Buchstaben "Comp" verwendet.
Einmal ist damit eine Variable gemeint, einmal ein beliebiger Test.

Grüße
Biber
Bitte warten ..
Mitglied: bastla
01.08.2013, aktualisiert um 22:26 Uhr
Hallo lukyluky!

Wie schon von Biber angesprochen kann Deine Zeile 21 so nicht funktionieren - versuch es damit:
01.
'Script erweiterung 
02.
Set WShell = CreateObject("WScript.Shell") 
03.
filespec = "\\" & Comp & "\c$\temp\1.exe" 
04.
If fso.FileExists(filespec) Then 
05.
    WShell.Run "c:\temp\psexec \\" & Comp & " c:\temp\1.exe" 
06.
Else 
07.
    WScript.Echo Comp & ": doesn't exist"   
08.
End If 
09.
' Script erweiterung ende
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
Bitte warten ..
Neuester Wissensbeitrag
CPU, RAM, Mainboards

Angetestet: PC Engines APU 3a2 im Rack-Gehäuse

(2)

Erfahrungsbericht von ashnod zum Thema CPU, RAM, Mainboards ...

Ähnliche Inhalte
VB for Applications
VBS Script zum versenden mehrerer Verknüpfungen zu Dateien per Lotus Notes

Frage von Sentinel87 zum Thema VB for Applications ...

Batch & Shell
gelöst VBS Script in eine Textdatei ausgeben (VBS mit Batch zusammenführen) (5)

Frage von Luuke257 zum Thema Batch & Shell ...

VB for Applications
gelöst VBS Script kann Prgramm nicht starten (15)

Frage von C.Boerner zum Thema VB for Applications ...

Windows Server
Aufgabenplanung bringt bei VBS Script immer 0x41301 (14)

Frage von 116480 zum Thema Windows Server ...

Heiß diskutierte Inhalte
Switche und Hubs
Trunk für 2xCisco Switch. Wo liegt der Fehler? (15)

Frage von JayyyH zum Thema Switche und Hubs ...

DSL, VDSL
DSL-Signal bewerten (13)

Frage von SarekHL zum Thema DSL, VDSL ...

Windows Server
Mailserver auf Windows Server 2012 (9)

Frage von StefanT81 zum Thema Windows Server ...