it-swarm.com.ru

Рекомендуемый способ загрузки URL-адреса с помощью запланированной задачи в Windows

У меня есть веб-страница, размещенная на коробке Windows, которая должна быть загружена хотя бы раз в день. Мой текущий план заключается в создании запланированной задачи, которая открывает Internet Explorer и обращается к URL:

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

Это было просто для установки и прекрасно работает, но это кажется мне взломом, потому что Internet Explorer на самом деле должен открыть и нажать этот URL. Мне не нужно ничего возвращать с этой страницы, она просто хранит кэшированные данные в файлах при нажатии.

Есть ли более приятный способ сделать это? В случае, если это имеет значение, это сайт VB.net.

Заранее спасибо!

57
Cory House

Как отметил Ремус Русану, PowerShell - это то, что нужно. Вот простой однострочник, который вы можете использовать для создания запланированного задания, без необходимости писать отдельный файл .ps1:

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

Обратите внимание, что разрывы строк добавляются только для ясности во всех этих командных строках. Удалите их, прежде чем пытаться запустить команды.

Вы можете создать запланированное задание следующим образом: (запустите это из командной строки с повышенными правами)

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

Вышеуказанное будет работать для PowerShell 3+. Если вам нужно что-то, что будет работать со старыми версиями, вот одна строка:

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

Вы можете создать запланированное задание следующим образом: (из командной строки с повышенными привилегиями)

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

Примеры schtasks настраивают задачу на ежедневное выполнение - обратитесь к документация по schtasks для получения дополнительных опций.

114
Nikhil Dabas

Вы можете запланировать сценарий PowerShell . PS довольно мощный и дает вам доступ ко всей .Net Framework, а также изменения. Вот пример:

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

Другой вариант - VB Сценарий. Например (сохранить как файл .vbs):

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

Начиная с PowerShell 5.0, curl является псевдонимом для Invoke-WebRequest, поэтому вы можете создать запланированное задание следующим образом:

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

Вы также можете использовать Invoke-WebRequest, но curl более кратко.

11
Johnny Oshika

Этот ответ SuperUser.com намного проще.

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

Более конкретно, вот как это выглядит в запланированной задаче Windows:

enter image description here

Хотя это, вероятно, запускает настроенный по умолчанию браузер в фоновом режиме. Если это должен быть IE, то это должно быть настроено. Это, вероятно, лучший вариант. Хорошо иметь решение, которое запускается непосредственно как шаг действия задачи. Вся информация тут же. Еще лучше, если это кратко, так что вы можете увидеть большую часть команды без прокрутки по текстовому полю.

WGET/CURL - хорошая альтернатива

Во всяком случае, WGET будет хорошей альтернативой cmd..start..url. я не первый, кто задумывается об этом . Недостатком является то, что вы должны загрузить WGET для Windows, чтобы он работал - это не готовое решение. Но WGET легче и, что важно, дает вам большую мощность . Вы можете отправлять множество других типов URL-вызовов. Это включает в себя различные методы HTTP, такие как POST, пользовательские заголовки и многое другое. Curl - хороший вариант, вместо Wget - у них разные наборы функций, многие из которых перекрывают друг друга.

PowerShell - не рекомендуется

PowerShell может считаться более "легким" вариантом, но вы также загружаете PowerShell (.Net AppDomain), который имеет небольшую задержку, а также намного длиннее команду, и, следовательно, ее сложнее запомнить, если вы делаю это регулярно. Так что PowerShell - не лучший вариант.

VBScript - не рекомендуется

Очевидно, VBScript менее рекомендуется. У вас есть гораздо больше, что вам нужно запомнить, и сценарий довольно большой. Если у вас нет других шагов, которые требуют сценария, не располагайте полностью отдельным ресурсом, чтобы просто выполнить то, что вы могли бы выполнить непосредственно в запланированной задаче.

Также смотрите похожие вопросы:

8
Todd

Существуют версии Windows наиболее распространенных инструментов http-запросов командной строки, таких как cURL и wget . Конечно, вы можете создать запланированное задание, которое будет запускать одно из них. Я также сделал это из скрипта Windows Scripting Host, если вам нужно было зациклить или создать параметры URL на лету, или что-то подобное.

5
Jacob Mattison

при использовании curl в PowerShell 4.0 curl является псевдонимом Invoke-WebRequest, поэтому вы можете создать запланированное задание следующим образом:

Действие: Запустить программу. Программа/скрипт: powershell Добавить аргументы: curl http://www.example.com/foo/bar

работал как шарм!

1
Johny papa