Ich habe ein Skript zum Pingen von Servern, das ich ausführte, indem ich in CMD zu dem Pfad ging, in dem sich meine Datei befindet, und die folgende Zeile eingab
FileName ip logname.log
Dies ist das Skript, das ich ausführe
hostIp = wscript.arguments(0)
logfilename = wscript.arguments(1)
Set fso = CreateObject("Scripting.FileSystemObject")
Set Shell = CreateObject("Wscript.Shell")
' OpenTextFile Method requires a Const value
' (Over)Write = 2 Append = 8
Set logfile = fso.OpenTextFile(logfilename, 8, True)
shellstring = "%comspec% /c ping -t -f -l 32 -w 1000 " & hostIP
Set oExec = Shell.Exec(shellstring)
wscript.echo "Ping Error log With Timestamp - Ctrl + C to halt"
Do While oExec.StdOut.AtEndOfStream <> True
pingline = Date & " " & Time & " " & oExec.StdOut.ReadLine
' If InStr(pingline, "TTL=") = 0 Then
logfile.WriteLine(pingline)
' End If
Loop
es funktioniert jedoch nicht mehr, wenn ich es jetzt ausführe, öffnet es die Datei, anstatt sie auszuführen. Irgendwelche Ideen, wie sich dieses Problem beheben lässt?
Antwort1
Wenn Sie die Syntax verwenden:
Filename ip logname.log
dann wird die Aktion aus der Registry abgeleitet.
Auf meinem Computer habe ich Folgendes.
- Computer\HKEY_CLASSES_ROOT.vbs
- (Standard) REG_SZ VBS-Datei
- Computer\HKEY_CLASSES_ROOT\VBSFile\Shell\Open\Command
- (Standard) REG_EXPAND_SZ "%SystemRoot%\System32\WScript.exe" "%1" %*
Wenn Sie es nicht dem Zufall überlassen wollen, müssen Sie WScript oder CScript explizit in Ihre Kommandozeile einbinden, zB
CScript Filename ip logname.log
Der auffälligste Unterschied zwischen CScript und WScript ist das Verhalten von WScript.Echo
. Bei CScript wird der Text nicht blockierend an die Standardausgabe ausgegeben. Bei WScript wird der Text blockierend in einem modalen Dialogfeld angezeigt. Ersteres ist im Allgemeinen vorzuziehen, wenn (1) Sie das Skript von einer Eingabeaufforderung aus aufrufen, (2) Sie das Skript von einer geplanten Aufgabe aus aufrufen.