65 Stimmen

Empfohlene Methode zum Laden einer URL über eine geplante Aufgabe unter Windows

Ich habe eine Webseite, die auf einem Windows-Rechner gehostet wird und bei der ich sicherstellen muss, dass sie mindestens einmal pro Tag geladen wird. Mein derzeitiger Plan ist es, eine geplante Aufgabe zu erstellen, die den Internet Explorer öffnet und die URL aufruft:

"C:\Program Files\Internet Explorer\iexplore.exe" myurl.com/script_to_run_daily.aspx

Das war einfach einzurichten und funktioniert gut, aber es kommt mir wie ein Hack vor, weil der Internet Explorer diese URL tatsächlich öffnen und aufrufen muss. Ich brauche keine Eingaben von dieser Seite, sie speichert einfach Daten in Dateien im Cache, wenn sie aufgerufen wird.

Gibt es eine elegantere Methode, dies zu tun? Falls es eine Rolle spielt, dies ist eine VB.net-Seite.

Vielen Dank im Voraus!

129voto

Nikhil Dabas Punkte 2283

Wie von Remus Rusanu erwähnt, wäre PowerShell der richtige Weg. Hier ist ein einfacher Einzeiler, mit dem Sie eine geplante Aufgabe erstellen können, ohne eine separate .ps1-Datei schreiben zu müssen:

powershell -ExecutionPolicy Bypass -Command
    Invoke-WebRequest 'http://localhost/cron.aspx' -UseBasicParsing

Beachten Sie, dass die Zeilenumbrüche in all diesen Befehlszeilen nur der Übersichtlichkeit halber eingefügt wurden. Entfernen Sie diese, bevor Sie versuchen, die Befehle auszuführen.

Sie können die geplante Aufgabe wie folgt erstellen: (führen Sie dies von einer erweiterten Eingabeaufforderung aus)

schtasks /create /tn "MyAppDailyUpdate"
    /tr "powershell -ExecutionPolicy Bypass -Command
        Invoke-WebRequest 'http://localhost/cron.aspx' -UseBasicParsing"
    /sc DAILY /ru System

Die obigen Schritte funktionieren für PowerShell 3+. Wenn Sie etwas brauchen, das mit älteren Versionen funktioniert, hier ist der Einzeiler:

powershell -ExecutionPolicy unrestricted -Command
    "(New-Object Net.WebClient).DownloadString(\"http://localhost/cron.aspx\")"

Sie können die geplante Aufgabe wie folgt erstellen: (über eine erweiterte Eingabeaufforderung)

schtasks /create /tn "MyAppDailyUpdate"
    /tr "powershell -ExecutionPolicy unrestricted -Command
        \"(New-Object Net.WebClient).DownloadString(\\\"http://localhost/cron.aspx\\\")\""
    /sc DAILY /ru System

El schtasks Beispiele, bei denen die Aufgabe täglich ausgeführt werden soll - siehe schtasks Dokumentation für weitere Optionen.

42voto

Remus Rusanu Punkte 280155

Sie können einen Termin PowerShell Skript. PS ist ziemlich mächtig und gibt Ihnen Zugriff auf das gesamte .Net Framework, plus Änderungen. Hier ist ein Beispiel:

$request = [System.Net.WebRequest]::Create("http://www.example.com")
$response = $request.GetResponse()
$response.Close()

18voto

RickNZ Punkte 18158

Eine andere Möglichkeit ist VB Script. Zum Beispiel (als Datei.vbs speichern):

sSrcUrl = "http://yourdomain.com/yourfile.aspx"
sDestFolder = "C:\yourfolder\"
sImageFile = "filename.txt"
set oHTTP = WScript.CreateObject("MSXML2.ServerXMLHTTP")
oHTTP.open "GET", sSrcUrl, False
oHTTP.send ""
set oStream = createobject("adodb.stream")
Const adTypeBinary = 1
Const adSaveCreateOverWrite = 2
oStream.type = adTypeBinary
oStream.open
oStream.write oHTTP.responseBody
oStream.savetofile sDestFolder & sImageFile, adSaveCreateOverWrite
set oStream = nothing
set oHTTP = nothing
WScript.Echo "Done..."

16voto

Kind Contributor Punkte 16008

Diese Antwort von SuperUser.com ist viel einfacher.

cmd /c start http://example.com/somePage.html

Genauer gesagt, so sieht es in einem geplanten Windows-Task aus:

enter image description here

Allerdings wird dabei wahrscheinlich der standardmäßig konfigurierte Browser im Hintergrund ausgeführt. Wenn es IE sein muss, dann sollte dieser konfiguriert werden. Dies ist wahrscheinlich die beste Option. Es ist gut, eine Lösung zu haben, die direkt als Aktionsschritt des Tasks ausgeführt wird. Alle Informationen befinden sich direkt dort. Noch besser ist es, wenn sie kurz und bündig sind, so dass Sie den größten Teil des Befehls sehen können, ohne über das Textfeld scrollen zu müssen.

WGET / CURL - eine gute Alternative

Wenn überhaupt, dann wäre WGET eine gute Alternative zu cmd..start..url . Ich bin nicht der Erste, der daran denkt . Der Nachteil ist, dass Sie WGET für Windows herunterladen müssen, damit es funktioniert - es ist keine sofort einsatzbereite Lösung. Aber WGET ist leichter und bietet vor allem mehr Macht . Sie können viele andere Arten von URL-Aufrufen senden. Dazu gehören verschiedene HTTP-Methoden wie POST, benutzerdefinierte Header und mehr. Curl ist eine gute Option anstelle von Wget - sie haben unterschiedliche Funktionen, die sich oft überschneiden.

PowerShell - nicht empfohlen

PowerShell könnte als "leichtere" Option angesehen werden, aber Sie laden auch eine PowerShell (.Net AppDomain), die ein wenig verzögert, und außerdem ist der Befehl viel länger und daher schwerer zu merken, wenn Sie dies regelmäßig tun. PowerShell ist also nicht die beste Option.

VBScript - nicht empfohlen

VBScript ist eindeutig weniger empfehlenswert. Sie müssen sich so viel mehr merken, und das Skript ist ziemlich umfangreich. Wenn Sie nicht noch andere Schritte haben, die ein Skript rechtfertigen, sollten Sie nicht eine völlig separate Ressource verwenden, nur um etwas zu tun, das Sie auch direkt in einem geplanten Task hätten erledigen können.

Siehe auch ähnliche Fragen:

12voto

Johnny Oshika Punkte 49503

Ab PowerShell 5.0, curl ist ein Alias für Invoke-WebRequest so können Sie einen geplanten Task wie folgt erstellen:

Action: Start a program
Program/script: powershell
Add arguments: curl http://www.example.com/foo/bar

Sie können auch Folgendes verwenden Invoke-WebRequest pero curl ist prägnanter.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X