none
Controllo esecuzione script di avvio RRS feed

  • Domanda

  • Ciao a tutti,

    vorrei implementare un controllo per far si che gli script di avvio non vengano eseguiti ciclicamente ad ogni avvio. Ad es. se faccio l'installazione di un software tramite script bat, non voglio che questo venga reinstallato ad ogni avvio della macchina.

    Per far ciò, al momento uso un banale controllo "IF" - Ad esempio lo script controlla se nel pc esiste la cartella del programma e se non esiste procede con l'installazione, altrimenti skippa. Questo comporta che se lo script si interrompe a metà (magari per problemi di connettività), la cartella viene comunque creata e lo script non verrà più avviato a meno di interazioni manuali.

    Ora, pensavo di implementare la creazione di un file a fine script. Ad esempio, al completamento dell'esecuzione dello script, viene creato un file su uno share di rete chiamato "hostname.txt" - lo script come prima cosa cercherà questo file sullo share e se c'è salta.

    Che ne pensate? Mi suggerite altri modi?

    Grazie mille

    FR


    Francesco Rozier CCNA - CCAI - IVL - LPI101

    lunedì 22 ottobre 2012 15:20

Risposte

  • Può andare bene, l'importante è esseri sicuri che l'installazione sia andata a buon fine .. poi scrivere \\tuoserver\tuashare\pcinstallati.txt

    per la verifica io uso il seguente comando

    (findstr /i  "%computername%"  \\tuoserver\tuashare\pcinstallati.txt  1>nul 2>nul) && (echo %computername% già installato & goto :EOF)

    Ciao Gas


    Gastone Canali >http://www.armadillo.it

    Se alcuni post rispondono al tuo quesito (non necessariamente i miei), ricorda di contrassegnarli come risposta e non dimenticare di contrassegnare anche i post utili . GRAZIE!


    lunedì 22 ottobre 2012 18:46
    Moderatore
  • Ho diversi software distribuiti in modo simile. Ti allego un .bat per uno di questi. Devi adattare ovviamente il nome del prodotto, i path e la chiave di registro di verifica in base alla quale viene determinato lo stato di installazione del sw in questione.

    Fammi sapere.

    Ciao,

    ------------

    setlocal

    REM Setta il nome del prodotto
    set ProductName=Nero BurnRights

    REM Setta la directory di origine
    set DeployServer=\\geminifs\Client_Apps\NeroBurnRights

    REM Setta la directory di scrittura del log di installazione
    set LogLocation=\\geminifs\install_logs

    REM Controlla se il prodotto è già installato e procedi di conseguenza
    reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Ahead\%ProductName%"
    if %errorlevel%==1 (goto DeploySW) else (goto End)

    REM Se il check sul registro di windows ha ritornato come valore 0 o un errore
    REM diverso da 1 termina subito. Se ritorna 1 procedi con l'installazione

    REM Routine di installazione
    :DeploySW
    start /wait %DeployServer%\NeroBurnRightsInstaller.exe /silent /burnrights:all
    echo %date% %time% Setup ended with error code %errorlevel%. >> "%LogLocation%\%computername%_-_%ProductName%.txt"

    :End

    Endlocal


    Dario Palermo

    • Contrassegnato come risposta -F R- lunedì 22 ottobre 2012 22:12
    lunedì 22 ottobre 2012 19:50

Tutte le risposte

  • Può andare bene, l'importante è esseri sicuri che l'installazione sia andata a buon fine .. poi scrivere \\tuoserver\tuashare\pcinstallati.txt

    per la verifica io uso il seguente comando

    (findstr /i  "%computername%"  \\tuoserver\tuashare\pcinstallati.txt  1>nul 2>nul) && (echo %computername% già installato & goto :EOF)

    Ciao Gas


    Gastone Canali >http://www.armadillo.it

    Se alcuni post rispondono al tuo quesito (non necessariamente i miei), ricorda di contrassegnarli come risposta e non dimenticare di contrassegnare anche i post utili . GRAZIE!


    lunedì 22 ottobre 2012 18:46
    Moderatore
  • Ho diversi software distribuiti in modo simile. Ti allego un .bat per uno di questi. Devi adattare ovviamente il nome del prodotto, i path e la chiave di registro di verifica in base alla quale viene determinato lo stato di installazione del sw in questione.

    Fammi sapere.

    Ciao,

    ------------

    setlocal

    REM Setta il nome del prodotto
    set ProductName=Nero BurnRights

    REM Setta la directory di origine
    set DeployServer=\\geminifs\Client_Apps\NeroBurnRights

    REM Setta la directory di scrittura del log di installazione
    set LogLocation=\\geminifs\install_logs

    REM Controlla se il prodotto è già installato e procedi di conseguenza
    reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Ahead\%ProductName%"
    if %errorlevel%==1 (goto DeploySW) else (goto End)

    REM Se il check sul registro di windows ha ritornato come valore 0 o un errore
    REM diverso da 1 termina subito. Se ritorna 1 procedi con l'installazione

    REM Routine di installazione
    :DeploySW
    start /wait %DeployServer%\NeroBurnRightsInstaller.exe /silent /burnrights:all
    echo %date% %time% Setup ended with error code %errorlevel%. >> "%LogLocation%\%computername%_-_%ProductName%.txt"

    :End

    Endlocal


    Dario Palermo

    • Contrassegnato come risposta -F R- lunedì 22 ottobre 2012 22:12
    lunedì 22 ottobre 2012 19:50
  • Ciao Gastone e ciao Dario

    grazie per i suggerimenti. Sono riuscito ad ottenere quello che volevo partendo dai vostri suggerimenti - Di seguito un esempio che potrebbe essere utile alla community:

    @echo OFF

    REM Eseguo la ricerca dell'hostname all'interno del file "hostname.txt" sullo share.
    find /i "%computername%" \\miodominio\share\hostname.txt > nul

    REM Se l'hostname è già presente nel file lo script termina, viceversa parte il setup.
    If errorlevel 1 (
    goto Setup
    ) else (
    goto End
    )

    REM Definisco la variabile Setup.
    :Setup
    title Please wait, setup in progress...
    echo Setup in progress, please wait.

    REM Effettuo le operazioni di installazione.
    start /wait \\miodominio\share\miosoftware.exe /silent

    REM Scrivo l'hostname della macchina nel quale ho appena effettuato il setup all'interno del file "hostname.txt"
    echo %computername% - Installato il giorno: %date%, alle ore %time% >> "\\miodominio\share\hostname.txt"

    Exit

    REM Definisco la variabile di uscita.
    :End
    title Installazione non possibile.
    echo Il software e' gia' installato su questo client.
    Exit


    Francesco Rozier CCNA - CCAI - IVL - LPI101


    • Contrassegnato come risposta -F R- lunedì 22 ottobre 2012 22:28
    • Contrassegno come risposta annullato -F R- lunedì 22 ottobre 2012 22:28
    • Modificato -F R- lunedì 22 ottobre 2012 22:29
    lunedì 22 ottobre 2012 22:10
  • Ciao Francesco,

    con lo script che hai postato, cosa succede se l'installazione non va a buon fine? Da quanto capisco scrivi lo stesso l'hostname nel file di log e non tenti più di installare il software in futuro. Idem se rimuovi per un qualsiasi motivo il software dal computer di destinazione: a me succede spesso di formattare i client e con questo tuo metodo dovrei andare manualmente a cancellare l'hostname dai file di log pena la mancata reinstallazione dei software.

    In sintesi, il check così impostato è in qualche modo spurio e meno efficiente, imho. La chiave di registro è più intimamente legata alla presenza effettiva del software sulla macchina di destinazione.

    Gastone, tu che ne pensi?

    Ciao,


    Dario Palermo

    lunedì 22 ottobre 2012 22:58
  • Concordo Dario - di contro avrei però un report che mi consente di sapere "quando è stato installato cosa, e dove". Però effettivamente scritto così è decisamente meno efficace del tuo che elimina del tutto le interazioni manuali.

    Francesco Rozier CCNA - CCAI - IVL - LPI101

    lunedì 22 ottobre 2012 23:06
  • Il mio script tiene comunque i log con le informazioni utili, divisi in file %ComputerName%_-_%ProductName%

    Anche io non rinuncio mai al logging.... ;)

    Tra l'altro, io mi limito ad una singola chiave di registro per applicativo ma, volendo e se necessario, puoi istituire dei check anche molto complessi (chiavi di registro, files, il tutto sempre a livello locale) per essere certo della corretta installazione di particolari applicativi, magari addirittura lanciando il setup in recover mode in particolari casi. Pensa ad applicativi client server aziendali fondamentali per il core business: sarebbe di un'utilità incalcolabile un check completo di funzionamento preventivo ad ogni riavvio, no?

    Ciao,


    Dario Palermo

    lunedì 22 ottobre 2012 23:12