ADS

Visualizzazione post con etichetta Server. Mostra tutti i post
Visualizzazione post con etichetta Server. Mostra tutti i post

giovedì 28 maggio 2026

Rimuovere Software da Client DC

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 

Ecco il contenuto da copiare ed incollare in un file RimuoviSoftware.bat

@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


La schermata principale


lunedì 18 maggio 2026

Quando la sicurezza di rete "brikka" la stampante: il caso HP M110we, reti ministeriali e il ricatto dell'Always-On

Analisi Tecnica del Problema

Prima di passare all'articolo, smarchiamo i punti chiave a livello tecnico:

  1. La Topologia di Rete: L'infrastruttura descritta prevede un doppio salto (Double NAT potenziale). La "saponetta" ministeriale fornisce internet al PC tramite Tethering USB; il PC Windows 11 funge a sua volta da router tramite la funzione Hotspot Wi-Fi per la stampante.

  2. Il Blocco di Rete: Le reti fornite da enti governativi (come il Ministero della Salute per i MMG) sono soggette a rigide policy di sicurezza per la protezione dei dati sensibili (GDPR/Dati sanitari). Utilizzano firewall di livello 7 e filtri DNS molto aggressivi. Il blocco del sito di OAuth di HP non è un bug, ma una feature di sicurezza della rete ministeriale che mette in blackhole o filtra traffico API/telemetrico non esplicitamente in whitelist.

  3. Il Vincolo Architetturale di HP+: Le stampanti HP con il suffisso "e" (es. M110we) richiedono un check-in costante con i server api.hp.com o hpsmart.com per convalidare l'abbonamento Instant Ink e lo stato DRM delle cartucce. Senza la risoluzione di questo handshake OAuth, il firmware disabilita la coda di stampa locale. La periferica cessa di essere un dispositivo hardware indipendente e diventa un client dipendente da un servizio cloud.



Oggi vi racconto di un vero e proprio delirio informatico che mi ha tenuto occupato recentemente e che solleva questioni tecniche (ed etiche) molto interessanti sul modo in cui stiamo progettando l'hardware "smart".

L'intervento riguardava l'assistenza a un Medico di Medicina Generale (MMG) con un'esigenza di mobilità. Il setup sembrava lineare, ma si è trasformato in un incubo di troubleshooting.

La Topologia del Disastro

Il setup operativo del medico era il seguente:

  • Una connessione internet mobile fornita tramite "saponetta" istituzionale del Ministero della Salute.

  • Il router mobile connesso al PC Windows 11 in Tethering USB.

  • Una stampante HP M110we connessa al PC tramite l'Hotspot Wi-Fi nativo di Windows.

Il sintomo? La stampante ha improvvisamente smesso di comunicare con i server HP e, di conseguenza, si è rifiutata categoricamente di stampare anche un solo foglio di testo in locale.

Il Troubleshooting e la Scoperta

Dopo i classici test di raggiungibilità locale, ho avviato un'epopea con l'assistenza HP (routata in India). Dopo vari tentativi di re-inizializzazione, l'intuizione: e se il problema non fosse il doppio NAT causato dal bridge tra tethering e hotspot, ma la rete stessa?

Ho disconnesso il PC dalla rete ministeriale e l'ho collegato a una connessione cellulare standard. Magia: il server HP è tornato immediatamente raggiungibile e la stampante si è sbloccata.

La diagnosi: Le reti del Ministero della Salute, giustamente blindate per proteggere i dati sanitari dei pazienti, applicano policy di web filtering (probabilmente tramite DNS sinkhole o proxy trasparenti) che finiscono per bloccare i domini di autenticazione (OAuth) e la telemetria di HP.

HP Instant Ink: Convenienza vs. Controllo

Per capire questo blocco, dobbiamo analizzare l'ecosistema in cui opera la M110we. Quella piccola "e" nel nome del modello indica l'appartenenza alla famiglia HP+, un ecosistema indissolubilmente legato al servizio Instant Ink.

  • I Pro (La Convenienza): Instant Ink è un modello Print-as-a-Service. Non paghi la cartuccia, ma un piano di pagine mensili. La stampante monitora i livelli e ordina automaticamente l'inchiostro prima che finisca. Per chi stampa volumi costanti e non vuole il pensiero dei consumabili, è economicamente e logisticamente sensato.

  • I Contro (Il Vincolo): Le cartucce fornite sono dotate di un DRM rigoroso. Se annulli l'abbonamento, la cartuccia si disattiva anche se ancora mezza piena.

L'assurdità dell'Always-On per l'Hardware Locale

Ed eccoci al nocciolo del problema tecnico. Che un servizio cloud richieda internet è lapalissiano. Che una stampante fisica, posta a mezzo metro da un PC, debba trasformarsi in un fermacarte in plastica se non riesce a fare "ping" a un server in California, è un difetto di progettazione grave.

Per proteggere il proprio modello di business (evitare che un utente usi cartucce Instant Ink staccando la stampante da internet), HP ha introdotto un Single Point of Failure devastante. Nel nostro caso, una rete aziendale/istituzionale con policy stringenti ha interpretato le continue chiamate API della stampante come traffico non essenziale o potenzialmente malevolo, bloccando l'endpoint di OAuth.

Il risultato? L'impossibilità di svolgere l'operazione base per cui l'hardware è stato acquistato: trasferire inchiostro dal PC alla carta tramite protocollo di rete locale.

Conclusioni

Cosa ci insegna questa storia?

  1. Evitate l'hardware "Cloud-Bound" in ambienti di produzione critici. Se state configurando dispositivi in uffici pubblici, scuole, reti mediche o bancarie, evitate come la peste le stampanti "Always-On" (come la serie HP+). Le restrizioni dei firewall di livello aziendale o ministeriale finiranno inevitabilmente per bloccarne l'uso.

  2. Il confine tra periferica e servizio è scomparso. Quando acquistate una stampante oggi, leggete bene le specifiche. Se c'è scritto "richiede connessione internet attiva", sappiate che non siete più proprietari dell'hardware, ma semplici usufruttuari di un servizio in abbonamento.

Avete mai avuto problemi simili con le reti aziendali o firewall che bloccano l'hardware di casa? Fatemelo sapere nei commenti.

venerdì 3 ottobre 2025

Rimuovere le GPO da un PC Locale

Ecco un semplice file BAT, da eseguire con account locale e in modalità amministratore, per rimuovere eventuali GPO da un client rimasto fuori dominio e quindi non aggiornabile con gpupdate /force.

@echo off

title Reset GPO Locale

echo =====================================================

echo   Script per rimuovere le GPO locali da questo PC

echo   ATTENZIONE: eseguilo come Amministratore!

echo =====================================================

echo.


:: Crea cartella di backup

set BACKUP=C:\GPO-backup

if not exist %BACKUP% mkdir %BACKUP%


echo [1/6] Backup delle cartelle GroupPolicy...

robocopy /mir %SystemRoot%\System32\GroupPolicy %BACKUP%\GroupPolicy >nul

robocopy /mir %SystemRoot%\System32\GroupPolicyUsers %BACKUP%\GroupPolicyUsers >nul


echo [2/6] Rimozione cartella GroupPolicy...

takeown /f %SystemRoot%\System32\GroupPolicy /r /d y >nul

icacls %SystemRoot%\System32\GroupPolicy /grant Administrators:F /t >nul

rd /s /q %SystemRoot%\System32\GroupPolicy


echo [3/6] Rimozione cartella GroupPolicyUsers...

takeown /f %SystemRoot%\System32\GroupPolicyUsers /r /d y >nul

icacls %SystemRoot%\System32\GroupPolicyUsers /grant Administrators:F /t >nul

rd /s /q %SystemRoot%\System32\GroupPolicyUsers


echo [4/6] Backup e cancellazione chiavi registro Policies...

reg export "HKLM\SOFTWARE\Policies" %BACKUP%\HKLM_SOFTWARE_Policies.reg >nul 2>&1

reg delete "HKLM\SOFTWARE\Policies" /f >nul 2>&1


reg export "HKCU\Software\Policies" %BACKUP%\HKCU_Software_Policies.reg >nul 2>&1

reg delete "HKCU\Software\Policies" /f >nul 2>&1


echo [5/6] Ripristino configurazione di sicurezza di default...

secedit /configure /cfg %windir%\inf\defltbase.inf /db defltbase.sdb /verbose >nul


echo [6/6] Aggiornamento criteri e riavvio...

gpupdate /force >nul

shutdown /r /t 30


echo.

echo Operazione completata!

echo Il sistema verra' riavviato tra 30 secondi...

pause


Come usarlo:
Copia il codice in un file chiamato ad esempio ResetGPO.bat.
Tasto destro → Esegui come amministratore.
Lo script creerà C:\GPO-backup con copia dei file/chiavi prima di eliminarli.
Dopo 30 secondi il PC si riavvierà pulito da tutte le policy applicate localmente.

mercoledì 3 settembre 2025

I Servizi Occulti di Windows

I Servizi Occulti di Windows

Chi lavora con Windows, che sia Home, Pro o Server, si sarà imbattuto almeno una volta nella gestione dei servizi. Lì dentro troviamo centinaia di voci, ed è facile perdersi quando cerchiamo un servizio specifico: magari qualcosa che contiene “stampa”, oppure “utente” o “sql”.

Il problema? Non c’è una ricerca integrata comoda. Bisogna scorrere a mano riga dopo riga. Così ho pensato a uno script PowerShell che chiede una parola da cercare e mostra solo i servizi pertinenti, con la possibilità di avviarli, fermarli o riavviarli.

Lo Script PowerShell


# Script PowerShell - Ricerca e gestione servizi
$keyword = Read-Host "Inserisci la parola da cercare (es. stampa, utente, sql)"

$results = Get-Service | Where-Object { 
    $_.DisplayName -like "*$keyword*" -or $_.Name -like "*$keyword*" 
}

if ($results) {
    $results | Format-Table -AutoSize Status, Name, DisplayName

    $serviceName = Read-Host "Inserisci il nome del servizio da gestire"
    $action = Read-Host "Vuoi Avviare (A), Fermare (F), Riavviare (R)?"

    switch ($action.ToUpper()) {
        "A" { Start-Service -Name $serviceName; Write-Host "Servizio avviato!" }
        "F" { Stop-Service -Name $serviceName; Write-Host "Servizio fermato!" }
        "R" { Restart-Service -Name $serviceName; Write-Host "Servizio riavviato!" }
        default { Write-Host "Azione non valida." }
    }
}
else {
    Write-Host "Nessun servizio trovato contenente '$keyword'"
}

Il Lanciatore da CMD


@echo off
PowerShell -ExecutionPolicy Bypass -File "C:\Scripts\servizi.ps1"
pause

In questo modo basta fare doppio clic sul .bat e il gioco è fatto: si apre lo script PowerShell che ti permette di esplorare i “servizi occulti” di Windows in maniera semplice e rapida.

giovedì 21 settembre 2023

File Batch (BAT) per eseguire software remoto

Chi come me usa PC in un dominio a volte deve installare software EXE o MSI su molti PC. Se non si vuole ricorrere alle GPO si può fare usando due programmi forniti da Microsoft: Il primo è MSIEXEC già incluso nei PC e nel server. L'altro è PSEXEC scaricabile per pacchetto PSTools di Microsoft da qui:

https://learn.microsoft.com/en-us/sysinternals/downloads/psexec

Il piccolo programma si occupa con pochissime righe di diffrenziare gli exe dagli msi che altrimenti potrebbero dare errore durante l'installazione. Chiede il nome utente amministrativo e la relativa password.

Il numero dei pc fa riferimento ad una consapevole identificazione del tipo:

Computer-01
Computer-02

....

Oppure 

PC01
PC02

...

Se avete nomi diversi purtroppo andrebbe modificato il programmino che aggiunge lo zero per numeri inferiori a 9...

Eccolo:


@echo off


COLOR 4F

echo By Marco Mira 2023

echo.

setlocal enabledelayedexpansion


rem Richiedi l'utente e la password

set /p "user=Inserisci il nome utente completo di DOMINIO\: "

set /p "password=Inserisci la password senza essere visto: "

echo.

echo CTRL+C per uscire con S in qualsiasi momento!

echo.


:menu

echo Richiedi il nome del PC, il numero di partenza, il numero di fine e il percorso del file .exe o .msi

echo.

set /p "computer_name=Inserisci il nome del PC: "

set /p "start_number=Inserisci il numero di partenza (da): "

set /p "end_number=Inserisci il numero di fine (a): "


echo.

echo Scegli se EXE(1) o MSI(2)

echo.

echo 1 - Esegui PSEXEC con EXE

echo 2 - Esegui MSIEXEC con MSI

echo x - Uscita

echo.

set /p "scelta=Inserire il numero desiderato: "


if "%scelta%"=="1" (


goto :exe


) else if "%scelta%"=="2" (


goto :msi


) else (


goto :fine

)


:exe


rem Richiedi il percorso del file .exe

echo Non dimenticare il percorso completo \\server\cartella\programma.exe

echo e gli eventuali / con opzioni (silent, verysilent, allusesrs, etc)

echo.

set /p "file_path=Inserisci il percorso e il nome del file .exe: "


rem Ciclo attraverso l'intervallo di numeri

for /l %%i in (%start_number%,1,%end_number%) do (

    

    rem Genera il nome del computer con zero davanti ai numeri da 1 a 9

    set "computer=!computer_name!%%i"

    if %%i leq 9 set "computer=!computer_name!0%%i"

echo Eseguo il comando su  !computer!

    psexec \\!computer! -u !user! -p !password! -d -i !file_path!

)


goto :fine


:msi


rem Richiedi il percorso del file .msi

echo Immetti il percorso completo \\server\cartella\programma.msi

echo Ricorda che le opzioni sono di msiexec e /passive   gi  incluso

echo.

set /p "msi_path=Inserisci il percorso del file .msi: "


rem Ciclo attraverso la serie di numeri

for /l %%i in (%start_number%,1,%end_number%) do (

    

    rem Genera il nome del computer con zero davanti ai numeri da 1 a 9

    set "computer=!computer_name!%%i"

    if %%i leq 9 set "computer=!computer_name!0%%i"

echo Eseguo il comando su  !computer!

    psexec \\!computer! -u !user! -p !password! -s -i msiexec /i !msi_path! /passive

)


:fine

echo Fatto!

pause


:endlocal


mercoledì 5 aprile 2023

Maledetto 0x0000011b

Questo errore ha iniziato ad assillarmi su alcuni PC della mia rete Windows Server 2012 R2... Dopo vari tentativi ho capito, finalmente, che la modifica al registro lo devo fare sul server e riavviare il servizio di spooling...

KEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Control \ Print \

Aggiungere la chiave DWORD32

RpcAuthnLevelPrivacyEnabled e lasciare a 0

L'altra soluzione molto più complessa ma magari adatta a piccole situazioni casalinghe è collegarsi alla stampante con il suo IP e non tramite la condivisione \\server\printer

Esiste anche la possibilità di installare la stampante sulla localPort \\server\print ma poi si devono recuperare manualmente i driver per avere la corretta installazione, quindi sconsigliato.

Buon lavoro

lunedì 28 novembre 2022

Un Backup semplice da CMD

 Mi dimentico sempre di quanto sia funzionale ed elegante il comando ROBOCOPY!


Avevo necessità di copiare dei file da un NAS ad un altro disco esterno visto da un secondo NAS come unità USB... Ho provato i vari backup inclusi in Synology e QNAP ma con pessimi risultati.

Alla fine ho montato due dischi con le rispettive cartelle e ho dato un comando in un file che viene eseguito ogni notte:

@ECHO Copia mirroring Backup Didattica

NET USE T: \\192.168.xx.242\Backup_Didattica

NET USE P: \\192.168.yy.2\Backup_Didattica

RoboCopy t:\ p:\  /MIR  /FFT  /Purge  /LOG+:c:\Backup\Didattica.txt  /TEE

NET USE T: /DELETE

NET USE P: /DELETE

Ditemi cos'è più elegante? Crea tutte le cartelle (MIR) ed eventualmente cancella quelle non più presenti in origine (PURGE), tiene conto del tempo diverso fra sistemi operativi e file system diversi (FFT) inoltre crea un log appeso al precedente... (LOG+ e TEE)

Buon Backup!