BAT-скрипты, или как не нужно скачивать файлы из интернета.

Возьмём некоего сферического системного администратора в вакууме.  Представим, что под его присмотром находится множество компьютеров, которые:

  • находятся в разных концах света;
  • у них нет доменной структуры;
  • на них установлены разномастные операционные системы (от Windows Home до профессиональной “десятки”).

А теперь представим, что системному администратору нужно на всех этих компьютерах:

  • установить какую-то программу ;
  • обновить какую-то программу;
  • сделать массовую настройку…

Понятно, что для обслуживания такого парка компьютеров необходимо иметь какую-то систему централизованного управления, которая бы позволяла управлять всеми устройствами при помощи скриптов написанных на VBScript, JavaScript, BAT…

У меня такая система есть. 🙂

Сразу сделаю небольшое отступление. Большинство систем управления устанавливаются на компьютер и работают “в режиме службы” и от имени… Правильно, – пользователя SYSTEM.  Это ВАЖНО!

Далее… Как устанавливаемая программа попадёт на компьютер клиента? Правильно! Из интернета!  Для этого организовываем у себя небольшое хранилище с дистрибутивами, доступное по по FTP или HTTP/HTTPS. Как из этого хранилища  скачать программу? Правильно, – скриптом.

А вот теперь расскажу, как не нужно скачивать файлы из интернета скриптами.

Вариант первый.

В интернете часто рекомендуют скачивать файлы при помощи bitsadmin. Например -=ТУТ=- можно почитать как именно это сделать.

Приведу короткий пример

bitsadmin /addfile myDownloadJob https://downloadsrv/10mb.zip c:\10mb.zip

Пример хороший! Правильный! Запустив эту команду в консоли, вы скачаете файл куда нужно.

Ура? НЕТ!

Если вы запустите bat-скрипт с данной командой на компьютере при помощи вашей системы управления, то ничего не получится. Скрипт не выполнится по соображениям безопасности. А сам bitsadmin ругнётся, что-то про то, что он запускается от имени пользователя не вошедшего в систему… Но вы этого можете и не узнать, а будете просто ломать голову в попытках заставить команду работать.

Вариант второй.

Скачивать программы из интернета при помощи BAT-скриптов, например, так…

Ниже идёт практически реальный текст bat-файла. Есть только одно “но”. Файл один, но состоит как бы из двух частей. Часть первая – это обычный батник, который запускается и осуществляет основную логику действий. Часть вторая, – это небольшой javascript, который, собственно, и производит скачивание программы.

@set @x=0 /*
@echo off

echo Downloading Skype…
cscript /nologo /e:jscript “%~f0” “http://sitename/Skype.exe” “C:/Windows/Temp/Skype.exe”
echo Done!
echo Result – %errorlevel%

rem Устанавливаем Skype
start /wait C:\Windows\Temp\Skype.exe /silent
ping -n 20 127.0.0.1 >> nul

EXIT /B
*/

var http = new ActiveXObject(“MSXML2.XMLHTTP”)

http.open(“GET”, WScript.Arguments(0), false)
http.send()

var ado = new ActiveXObject(“ADODB.Stream”)
ado.mode = 3
ado.type = 1
ado.open()
ado.Write(http.responseBody)
ado.SaveToFile(WScript.Arguments(1), 2)

Такие скрипты очень мне нравятся, т.к. используют, по-моему, нетривиальную логику выполнения скрипта. Но об этом нужно писать отдельно…

Ура? НЕТ!

Такого рода скрипты очень часто “рубятся” антивирусными программами.

Вариант 3.

Писать VBS-скрипты, которые скачивают файлы из интернета.

Примеры легко можно найти -=ТУТ=-

Сразу скажу, что у меня не получилось написать скрипт, который бы не “рубился” антивирусами. 🙂

То “Касперскому” что-то не нравится, то Avast ругается, то Comodo что-то подозревает…

Вместо итога.

Испробовав несколько вариантов (их было более 10), я всё-таки нашёл способ решить свою задачу по загрузке файлов на удалённый компьютер стандартными средствами Windows без дополнительных программ и PowerShell…

Сейчас для меня уже не составляет труда на несколько десятков компьютеров  поставить какую-то программу: хоть Skype, хоть 1С Предприятие…

Как ?

А это уже отдельная история, которую, может быть, расскажу потом.

🙂