Come ben sapete ho la gestione di più computer all'interno della mia rete e molti di questi sono utilizzati per tutto il tempo della mia presenza a scuola... Come fare manutenzione ad esempio rimuovendo Software non necessari senza disturbare ragazzi e docenti? Ho creato un piccolo programma DOS molto pratico che fa uso di PSEXEC. Si esegue dalla cartella del server dove presente psexec.exe e con diritti amministrativi di dominio!
Chiede il nome del PC che deve essere inserito correttamente nel dominio, una parte del nome del Software da rimuovere
@echo off
color 17
setlocal enabledelayedexpansion
title Tool di Rimozione Remota con PsExec
:INIZIO
cls
echo ============================================================
echo TOOL DI RIMOZIONE SOFTWARE REMOTA (PsExec)
echo ============================================================
echo.
:: 1. Richiesta input all'utente
set /p TARGET_PC="1. Inserisci il nome del PC remoto (es. mltm03): "
if "%TARGET_PC%"=="" goto INIZIO
set /p SOFTWARE_SEARCH="2. Inserisci parte del nome del software da cercare (es. Adobe): "
if "%SOFTWARE_SEARCH%"=="" goto INIZIO
echo.
echo Connessione a \\%TARGET_PC% e ricerca in corso...
echo Attendi qualche istante...
echo.
:: 2. Esegue WMIC tramite PsExec e salva il risultato in un file temporaneo locale
psexec \\%TARGET_PC% wmic product where "name like '%%%SOFTWARE_SEARCH%%%'" get identifyingnumber,name > temp_risultato.txt 2>nul
:: 3. Elabora il risultato
set /a conteggio=0
set "CODICI="
:: Salta le prime 2 righe dell'header WMIC
for /f "skip=2 tokens=1,*" %%a in (temp_risultato.txt) do (
set "PROD_CODE=%%a"
set "PROD_NAME=%%b"
:: Salta righe vuote o solo spazi
if not "!PROD_CODE!"=="" (
set /a conteggio+=1
echo [!conteggio!] Trovato: !PROD_NAME!
echo Codice: !PROD_CODE!
echo ------------------------------------------------------------
:: Accumula i codici e nomi in array virtuali
set "code[!conteggio!]=!PROD_CODE!"
set "name[!conteggio!]=!PROD_NAME!"
)
)
if %conteggio%==0 (
echo [!] Nessun software trovato con "%SOFTWARE_SEARCH%" su %TARGET_PC%.
echo.
pause
goto PULIZIA
)
:: 4. Se più di un software, chiede quale disinstallare
if %conteggio% gtr 1 (
echo.
echo Trovati %conteggio% software corrispondenti alla ricerca.
echo.
set /p SCELTA="Inserisci il numero del software da disinstallare (1-%conteggio%): "
:: Validazione input
set "valido=0"
for /l %%i in (1,1,%conteggio%) do (
if "!SCELTA!"=="%%i" set "valido=1"
)
if "!valido!"=="0" (
echo Scelta non valida.
pause
goto PULIZIA
)
set "PROD_CODE=!code[%SCELTA%]!"
set "PROD_NAME=!name[%SCELTA%]!"
) else (
:: Solo un software trovato
set "PROD_CODE=!code[1]!"
set "PROD_NAME=!name[1]!"
)
echo.
echo [INFO] Selezionato per la disinstallazione:
echo Nome : !PROD_NAME!
echo Codice : !PROD_CODE!
echo.
:: 5. Richiesta di conferma rimozione
choice /M "Vuoi procedere alla rimozione di questo specifico software?"
if errorlevel 2 goto ANNULLATO
if errorlevel 1 goto DISINSTALLA
:DISINSTALLA
echo.
echo [!] Disinstallazione in corso su \\%TARGET_PC%...
echo.
:: Opzionale: kill processi Adobe SOLO SE il software contiene "Adobe" nel nome
echo !PROD_NAME! | findstr /i "Adobe" >nul
if not errorlevel 1 (
echo [!] Rilevato software Adobe, chiusura processi correlati...
psexec \\%TARGET_PC% taskkill /f /im acrobat.exe /im acrotray.exe /im AdobeARM.exe 2>nul
echo.
)
:: Esegue la disinstallazione silenziosa del software specifico
echo [!] Esecuzione disinstallazione per: !PROD_NAME!
psexec \\%TARGET_PC% msiexec /x !PROD_CODE! /qn /norestart
:: Controllo se il comando msiexec ha avuto successo
if errorlevel 0 (
echo.
echo [OK] Disinstallazione avviata con successo!
) else (
echo.
echo [ATTENZIONE] La disinstallazione potrebbe aver fallito. Controllare manualmente.
)
echo.
echo [!] Pulizia database Windows Installer...
psexec \\%TARGET_PC% net stop msiserver 2>nul
psexec \\%TARGET_PC% net start msiserver 2>nul
echo.
echo [OK] Operazione completata!
pause
goto PULIZIA
:ANNULLATO
echo.
echo [X] Operazione annullata dall'utente.
pause
goto PULIZIA
:PULIZIA
:: Rimuove i file temporanei
if exist temp_risultato.txt del temp_risultato.txt
cls
choice /M "Vuoi analizzare un altro PC?"
if errorlevel 2 exit /b
if errorlevel 1 goto INIZIO
Nessun commento:
Posta un commento