Мне нужен скрипт, который можно запустить на недавно установленной Windows XP + и загрузить указанные файлы из Интернета, например http://www.python.org/ftp/python/2.6.2/python-2.6.2.msi Есть ли простой способ сделать это, не создавая вручную HTTP / FTP-запросы или используя сторонние программы, такие как wget? Я могу предположить, что WScript.CreateObject ("internetexplorer.application") сотворит чудеса, но документация по нему чрезвычайно обширна, а Google, как всегда, молчит :).
Только что нашел это один наклеил ниже. Вы можете запустить его с помощью cscript и запланировать его.
'Set your settings
strFileURL = "http://www.domain.com/file.zip" strHDLocation = "D:\file.zip" ' Fetch the file Set objXMLHTTP = CreateObject("MSXML2.XMLHTTP") objXMLHTTP.open "GET", strFileURL, false objXMLHTTP.send() If objXMLHTTP.Status = 200 Then Set objADOStream = CreateObject("ADODB.Stream") objADOStream.Open objADOStream.Type = 1 'adTypeBinary objADOStream.Write objXMLHTTP.ResponseBody objADOStream.Position = 0 'Set the stream position to the start Set objFSO = Createobject("Scripting.FileSystemObject") If objFSO.Fileexists(strHDLocation) Then objFSO.DeleteFile strHDLocation Set objFSO = Nothing objADOStream.SaveToFile strHDLocation objADOStream.Close Set objADOStream = Nothing End if Set objXMLHTTP = Nothing
VBScript раздражает, когда дело доходит до подобных вещей. Для этого всегда требуются COM-серверы, которые формально не являются частью механизма сценариев.
Предложение Максвелла об использовании MSXML2.XMLHTTP кажется отличным решением. Должен признаться, я раньше не сталкивался с этой уловкой. Существуют также различные коммерческие COM-серверы, которые выполняют загрузку файлов.
Проблема такого типа - одна из причин, по которой я собираюсь перенести большую часть своего VBScript на Powershell. Поскольку Powershell может беспрепятственно использовать объекты .Net, делать такие вещи намного проще.
JR
Метод с использованием
Set objXMLHTTP = CreateObject("MSXML2.XMLHTTP")
более элегантен, к сожалению, не очень переносим, поскольку версия объекта сильно меняется в версиях и обновлениях Windows.
С помощью
WScript.CreateObject("internetexplorer.application")
возможно лучше, но менее элегантно.
MSXML2.XMLHTTP построен на основе старого WinInet. Есть более новый интерфейс Msxml2.ServerXMLHTTP, который более надежен. Он построен на новом стеке MS WinHTTP. Я предлагаю напрямую позвонить в WinHTTP.
Просто используйте CreateObject ("WinHttp.WinHttpRequest.5.1") вместо создания объекта MSXML2.XMLHTTP. Остальной код остается прежним.