Start Kontakt

Dystrybucja oprogramowania za pomocą trzech plików .bat

Jakiś problem z systemem SCCM (czy jakimkolwiek innym do automatyzacji dystrybucji oprogramowania), a coś prostego trzeba szybko rozpowszechnić w organizacji? A może trzeba zainstalować jakiś program w grupie komputerów testowych?

W takich przypadkach można użyć skryptów .bat, które w połączeniu z programami z pakietu PsTools będą stanowić bardzo prostą alternatywę pozwalającą zainstalować/uaktualnić aplikację na komputerach działających w środowisku Active Directory.

Najlepiej opisać to na przykładzie. Załóżmy, że na komputerach użytkowników w dwóch jednostkach organizacyjnych (OU) Ksiegowosc i Place działa prosty program informujący o terminach. Program składa się z pliku wykonywalnego terminy.exe, biblioteki DLL libr.dll, a także wymaga odpowiednich wpisów w rejestrze, które są dostępne w pliku terminy.reg.

Pierwszym zadaniem będzie utworzenie pliku tekstowego z nazwami komputerów, na których zostanie umieszczone oprogramowanie. W tym celu należy wykonać poniższe polecenia (mogą zostać umieszczone w oddzielnym pliku .bat):

dsquery computer ou=Ksiegowosc,dc=fikcyjnafirma,dc=com,dc=pl -limit 1500 -o rdn > komputery.txt
dsquery computer ou=Place,dc=fikcyjnafirma,dc=com,dc=pl -limit 1500 -o rdn >> komputery.txt

W wyniku działania skryptu powstanie plik komputery.txt zawierający nazwy maszyn należących do jednostek organizacyjnych Ksiegowosc i Place. Oto jego fragment:

jasinska_m
kowalska_d
solek_r
katanski_z
gajdzinski_mb
kobiorska_a

Ten plik będzie daną wejściową dla głównego skryptu, który w pętli dla każdego komputera będzie przeprowadzał instalację oprogramowania:

for /F %%i in (komputery.txt) do (call :procedure %%i)
goto :installation_end

:procedure

SET _string=###%1###
SET _string=%_string:"###=%
SET _string=%_string:###"=%
SET _string=%_string:###=%

ping -n 1 -w 1000 %_string%
@if not errorlevel 1 goto :install
echo %_string% >> komp_err.txt
goto :installation_end

:install
echo %_string% >> komp_ok.txt
call modify.bat %_string%

:installation_end

Cztery wiersze kodu zaczynające się od SET _string=###%1### mają za zadanie usunąć ewentualne cudzysłowy z nazw komputerów. Najpierw za pomocą polecenia ping sprawdzamy, czy komputer jest włączony. Jeśli nie, zapisujemy jego nazwę do pliku komp_err.txt. W przeciwnym razie zapisujemy jego nazwę do pliku komp_ok.txt i wywołujemy skrypt wykonujący właściwą operację instalacji.

A oto zawartość przykładowego pliku modify.bat. Jeśli należałoby zainstalować/zmodyfikować inny program, odpowiednie zmiany trzeba wprowadzić jedynie w tym pliku:

taskkill /s %1 /f /im "terminy.exe"
pskill \\%1 terminy.exe

psexec \\%1 cmd.exe /c "c: && cd \ && cd ""Program Files (x86)"" && mkdir Terminy"

copy c:\program_src\terminy\terminy.exe \\%1\C$\"Program Files (x86)"\Terminy\
copy c:\program_src\terminy\libr.dll \\%1\C$\"Program Files (x86)"\Terminy\
copy c:\program_src\terminy\terminy.reg \\%1\C$\"Program Files (x86)"\Terminy\

psexec \\%1 cmd /c "c: && cd \ && cd ""C:\Program Files (x86)"" && cd Terminy && regedit /S terminy.reg"
psexec -d \\%1 "C:\Program Files (x86)\Terminy\terminy.exe"

@echo Gotowe

W dwóch pierwszych wierszach usuwamy proces programu z pamięci komputera zdalnego. Następnie tworzymy katalog (jeśli już istnieje, nic się nie stanie). W dalszej kolejności kopiujemy trzy pliki do katalogu programu. Jednym z nich jest plik rejestru, który wprowadzamy do bieżącej konfiguracji komputera za pomocą polecenia regedit. Wreszcie uruchamiamy zaktualizowany program terminy.exe.

Jeśli w pliku komp_err.txt zostaną zapisane jakieś nazwy komputerów (co oznacza, że podczas uruchomienia skryptu były niedostępne), wystarczy wykonać kolejną iterację zamieniwszy po prostu nazwę komp_err.txt na komputery.txt - program potraktuje ten plik jako nowe dane wejściowe i będzie próbować instalować program tylko na tych komputerach, które były poprzednio wyłączone. Takich iteracji można przeprowadzić kilka w różnych porach dnia i tygodnia, by w końcu zainstalować program na wszystkich maszynach. Za każdym razem trzeba jedynie zmienić nazwę najnowszego pliku komp_err.txt na komputery.txt.

Jedną z wad powyższego rozwiązania jest to, że trzeba pamiętać o uruchamianiu skryptu w określonych godzinach. Profesjonalne systemy dystrubucji oprogramowania same dbają o odpowiedni harmonogram. Zaletą jest jednak duża prostota.