Zur Verteilung des Agent war mir aufgefallen, dass bei recht vielen Clients die Softwareaktualisierung erfolgreich ist, nicht jedoch unmittelbar danach der Dienst und zwei Prozesse aktiviert werden. Zur Lösung des Problems habe ich folgende kleine Batch-Datei geschrieben. Diese Datei muss ins gleiche Verzeichnis mit den Dateien ocslogon.exe und ocspackage.exe kopiert werden. Bei Ausführung wird ocslogon.exe mit dem Parameter der Mindestversion des Clients gestartet. Anschließend wird über eine Schleife geprüft, ob Prozesse zur Installation noch aktiv sind. Wenn diese beendet sind, wird geprüft, ob die Prozesse zum Agent laufen, wenn nicht werden diese gestaret.

@echo off
setlocal enabledelayedexpansion

set MYPATH=%~dp0
set PATHOCSINVENTORY=("%ProgramFiles%\OCS Inventory Agent\" "%ProgramFiles(x86)%\OCS Inventory Agent\")
set OCSRUNNINGPROCESS=(Ocsinventory.exe OcsSystray.exe)
set OCSLOGONPROCRESS=ocslogon.exe
set OCSSERVICE="OCS Inventory Service"
set INSTALLPROCESSES=(instOCS.exe OcsSetup.exe OCS-NG_Agent_setup.exe)

:setDisableUNCCheck
reg add "HKCU\SOFTWARE\Microsoft\Command Processor" /v DisableUNCCheck /t REG_DWORD /d 1 /f

:runOcsLogon
%MYPATH%\ocslogon.exe /GPO /PACKAGER /NP /DEBUG=2 /DEPLOY=2.1.1.3 /NOW

:LOOP
for %%p in %INSTALLPROCESSES% do (
    tasklist /fi "IMAGENAME eq %%p" 2>NUL | find /I /N "%%p">NUL
    if "!ERRORLEVEL!"=="0" (
        echo Programm %%p is running
        GOTO LOOP
        )
    )

ping -n 1 127.0.0.1 > nul

:CheckRunningProcesses
for %%r in %OCSRUNNINGPROCESS% do (
    tasklist /fi "IMAGENAME eq %%r" 2>NUL | find /I /N "%%r">NUL
    if "!ERRORLEVEL!"=="1" (

        echo try to run program %%r

        for %%p in %PATHOCSINVENTORY% do (
            if exist %%p (
                start "" %%p%%r
                )
            )        

        ) else (
            echo programm %%r is running
        )
    )


net start %OCSSERVICE%

ping -n 2 127.0.0.1 > nul
Advertisements