Ma che titolo del piffero! Hai ragione, eppure credo che renda perfettamente l’idea. Ma ciao, bentrovato! Hai visto? Ogni tanto mi faccio vivo. Sì, ho una marea di contenuti in bozze che devo ancora finire e non so se finirò mai, rilassati e goditi questi appunti di oggi. Sono dedicati esattamente a ciò che ho scritto nel titolo: far sparire la voce che permette all’utente di arrestare il sistema, riavviarlo o disconnettere il proprio utente. Ho scritto un batch semplicissimo.
Perché?
La domanda è “perché no?“. Nel senso: ci possono essere tanti buoni motivi per farlo. Nel mio caso si trattava di far sparire quelle voci agli occhi delle persone che usano una serie di macchine Windows 10 virtuali perché sui loro macOS non possono fare determinate operazioni. Sia chiaro: nulla che non si possa fare ugualmente con un minimo di conoscenza e un prompt dei comandi, lo so bene, ma lo scopo non è quello di inibire in sé l’operazione quanto di evitare che un clic distratto possa spegnere una macchina sul Data Center e causare una chiamata all’assistenza di primo livello che non dovrà fare altro che riaccenderla. Una scocciatura che puoi provare ad aggirare tu stesso, facilmente, ammesso tu abbia almeno Windows 10 1809 (ci sono metodi per farlo anche con le versioni precedenti, ma non ho approfondito perché non ne avevo la necessità).
Come?
Presto detto: tramite Registro di Sistema. Per la precisione con una chiave di registro che ne racchiude diverse altre, per modellare il funzionamento del menu di Start in base alle esigenze dell’utente finale:
HKLM\SOFTWARE\Microsoft\PolicyManager\default\Start
. Sotto questa chiave, troverai diverse sottochiavi che interessano certamente l’arresto del sistema, ma anche altre voci che ho volutamente ignorato perché fuori dallo scopo prefisso (e da questo articolo). Ti basterà dare una sbirciata per scoprire di cosa sto parlando.
Nel frattempo, parliamo di batch. Ne ho scritto uno che – una volta avviato – ti permetterà di scegliere se nascondere o mostrare il pulsante per arrestare il sistema, riavviarlo o disconnettere l’utente connesso alla macchina. Ti basterà specificare che opzione vuoi applicare e lo script penserà al resto. Se il pulsante interessato è attualmente visibile nel sistema, verrà fatto scomparire, diversamente verrà fatto ricomparire. Ho pubblicato il codice dello script su GitHub, è questo qui:
@echo off | |
:: Windows 10 Start Options Disable | |
:: https://gioxx.org/tag/StartOptionDisable | |
:: GSolone 2021 (ult.mod. 15112021-rev5) | |
:: Check Windows Version | |
for /f "tokens=4,5,6 delims=[]. " %%G in ('ver') Do (set _major=%%G& set _minor=%%H& set _build=%%I) | |
if '%_major%' NEQ '10' ( | |
echo Windows 10 non rilevato, premi un tasto per terminare lo script. | |
pause > NUL | |
goto END | |
) else ( | |
echo Windows 10 rilevato. | |
echo Major Version: [%_major%] | |
echo Minor Version: [%_minor%] | |
echo Build: [%_build%] | |
if %_build% LEQ 17134 ( | |
echo La versione minima di compatibilità con lo script è Windows 10 1809. | |
echo Rilevata versione inferiore, premi un tasto per terminare lo script. | |
pause > NUL | |
goto END | |
) | |
) | |
:: BatchGotAdmin | |
>nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\system32\config\system" | |
if '%errorlevel%' NEQ '0' ( | |
echo Richiedo utente amministratore ... | |
goto UACPrompt | |
) else ( goto gotAdmin ) | |
:UACPrompt | |
echo Set UAC = CreateObject^("Shell.Application"^) > "%temp%\getadmin.vbs" | |
set params = %*:"="" | |
echo UAC.ShellExecute "cmd.exe", "/c %~s0 %params%", "", "runas", 1 >> "%temp%\getadmin.vbs" | |
"%temp%\getadmin.vbs" | |
del "%temp%\getadmin.vbs" | |
exit /B | |
:: Menu Deactivator | |
:gotAdmin | |
cls | |
echo Microsoft Windows 10 (1809+) Options Deactivator | |
echo. | |
:menu | |
echo 1 - Hide/Restore Shutdown. | |
echo 2 - Hide/Restore Reboot. | |
echo 3 - Hide/Restore SignOut. | |
echo. | |
echo 4 - Exit from batch. | |
echo. | |
choice /C 1234 /M "Desired option:" | |
if errorlevel 4 goto END | |
if errorlevel 3 goto SignOut | |
if errorlevel 2 goto Reboot | |
if errorlevel 1 goto Shutdown | |
:Shutdown | |
echo. | |
echo Option Selected: Hide/Restore Shutdown | |
reg query "HKLM\SOFTWARE\Microsoft\PolicyManager\default\Start\HideShutDown" /v value | find "0x0" | |
if %errorlevel% == 0 ( | |
echo Hide Shutdown | |
REG ADD "HKLM\SOFTWARE\Microsoft\PolicyManager\default\Start\HideShutDown" /V value /T REG_DWORD /D 1 /F | |
) else ( | |
echo Show Shutdown | |
REG ADD "HKLM\SOFTWARE\Microsoft\PolicyManager\default\Start\HideShutDown" /V value /T REG_DWORD /D 0 /F | |
) | |
echo. | |
goto menu | |
:Reboot | |
echo. | |
echo Option Selected: Hide/Restore Reboot | |
reg query "HKLM\SOFTWARE\Microsoft\PolicyManager\default\Start\HideRestart" /v value | find "0x0" | |
if %errorlevel% == 0 ( | |
echo Hide Reboot | |
REG ADD "HKLM\SOFTWARE\Microsoft\PolicyManager\default\Start\HideRestart" /V value /T REG_DWORD /D 1 /F | |
) else ( | |
echo Show Reboot | |
REG ADD "HKLM\SOFTWARE\Microsoft\PolicyManager\default\Start\HideRestart" /V value /T REG_DWORD /D 0 /F | |
) | |
echo. | |
goto menu | |
:SignOut | |
echo. | |
echo Option Selected: Hide/Restore SignOut | |
reg query "HKLM\SOFTWARE\Microsoft\PolicyManager\default\Start\HideSignOut" /v value | find "0x0" | |
if %errorlevel% == 0 ( | |
echo Hide SignOut | |
REG ADD "HKLM\SOFTWARE\Microsoft\PolicyManager\default\Start\HideSignOut" /V value /T REG_DWORD /D 1 /F | |
) else ( | |
echo Show SignOut | |
REG ADD "HKLM\SOFTWARE\Microsoft\PolicyManager\default\Start\HideSignOut" /V value /T REG_DWORD /D 0 /F | |
) | |
echo. | |
goto menu | |
:END |
Per tua comodità metto a disposizione anche il batch già pronto da scaricare e usare: go.gioxx.org/win10disableshutdown. Ha necessità dei diritti di amministratore (locale o di dominio, poco importa), se li prenderà da solo (chiederà ovviamente a te tramite prompt UAC di farlo) nel caso si accorga di non averli.
In caso di dubbi amletici, suggerimenti o per farmi notare eventuali errori, l’area commenti è a tua totale disposizione, come sempre :-) (sì, quelli sono più facili da seguire rispetto allo scrivere nuovi articoli!).
#StaySafe
La foto nel corpo dell’articolo è di Piero Nigro.
L'articolo potrebbe non essere aggiornato
Questo post è stato scritto più di 5 mesi fa, potrebbe non essere aggiornato. Per qualsiasi dubbio ti invito a lasciare un commento per chiedere ulteriori informazioni! :-)