Come abilitare o disabilitare la finestra di dialogo Esegui di Windows con PowerShell

Nell’intricato mondo dell’IT, la gestione dell’accesso degli utenti a determinate funzioni del sistema è di estrema importanza. Una di queste funzioni è la finestra di dialogo Esegui di Windows. Ma perché i professionisti IT potrebbero voler limitarne l’accesso? Questa guida approfondisce lo script PowerShell progettato per abilitare o disabilitare la finestra di dialogo Esegui e le implicazioni di questa scelta.

Panoramica della finestra di dialogo Esegui di Windows

  • Che cos’è la finestra di dialogo Esegui di Windows?

    La finestra di dialogo Esegui di Windows è una funzione che offre agli utenti un modo rapido per lanciare programmi, aprire cartelle ed eseguire comandi di sistema. Premendo Windows + R, appare una piccola finestra di dialogo che consente di digitare direttamente i comandi. 

  • Come si usa la finestra di dialogo Esegui di Windows?

    È utilizzata principalmente per l’accesso rapido. Invece di navigare in più menu o cartelle, gli utenti possono semplicemente digitare un comando o un percorso nella finestra di dialogo Esegui per lanciare istantaneamente un programma o aprire una directory. 

Implicazioni per la sicurezza del disabilitare la finestra di dialogo Esegui di Windows

  • Quali sono i rischi?

    Disabilitare la finestra di dialogo Esegui comporta il rischio di ostacolare inavvertitamente la produttività. Alcuni utenti avanzati si affidano alla finestra di dialogo Esegui per attività rapide e per la gestione del sistema. Inoltre, se non viene fatto correttamente, manipolare le impostazioni di sistema può portare ad altri problemi indesiderati. 

  • Quali sono i vantaggi?

    Il vantaggio principale di disabilitare la finestra di dialogo Esegui è una maggiore sicurezza. Disabilitare la finestra di dialogo Esegui può prevenire azioni non autorizzate o dannose, soprattutto da parte di utenti che potrebbero non essere esperti nelle operazioni di sistema. Inoltre, riduce il rischio di modifiche accidentali o di esecuzione di comandi dannosi. 

  • Come si possono ridurre i rischi?

    Prima di implementare qualsiasi modifica, è fondamentale: 

    1. Comunicare con gli utenti, soprattutto con quelli che potrebbero essere interessati dal cambiamento. 
    2. Fornire metodi o strumenti alternativi per le attività che in precedenza venivano eseguite con la finestra di dialogo Esegui. 
    3. Assicurarsi che ci sia un modo per ripristinare rapidamente le modifiche, se necessario.

Background

Lo script PowerShell fornito è un valido strumento per i professionisti IT e i Managed Service Provider (MSP) per abilitare o disabilitare la finestra di dialogo Esegui. In ambienti in cui la sicurezza è una priorità assoluta, strumenti come questo diventano indispensabili. La capacità dello script di escludere utenti specifici da queste restrizioni aggiunge un livello di flessibilità, garantendo che l’accesso, se necessario, non venga revocato.

Lo script per disabilitare la finestra di dialogo Esegui

#Requires -Version 2.0

<#
.SYNOPSIS
    Disables or enables the Run Dialog for all users and new users.
.DESCRIPTION
    Disables or enables the Run Dialog for all users and new users, and there is an option to exclude users.
    Reboot is required to apply changes.
.EXAMPLE
    -Disable
    Disables the Run Dialog for all users and new users.
.EXAMPLE
    -Disable -ExcludeUsers "Test1", "Test2"
    Disables the Run Dialog for all users and new users, but excludes Test1 and Test2 users.
.EXAMPLE
    -Enable
    Enables the Run Dialog for all users and new users.
.EXAMPLE
    -Enable -ExcludeUsers "Test1", "Test2"
    Enables the Run Dialog for all users and new users, but excludes Test1 and Test2 users.
.OUTPUTS
    None
.NOTES
    General notes
    Release Notes:
    Initial Release
By using this script, you indicate your acceptance of the following legal terms as well as our Terms of Use at https://www.ninjaone.com/terms-of-use.
    Ownership Rights: NinjaOne owns and will continue to own all right, title, and interest in and to the script (including the copyright). NinjaOne is giving you a limited license to use the script in accordance with these legal terms. 
    Use Limitation: You may only use the script for your legitimate personal or internal business purposes, and you may not share the script with another party. 
    Republication Prohibition: Under no circumstances are you permitted to re-publish the script in any script library or website belonging to or under the control of any other software provider. 
    Warranty Disclaimer: The script is provided “as is” and “as available”, without warranty of any kind. NinjaOne makes no promise or guarantee that the script will be free from defects or that it will meet your specific needs or expectations. 
    Assumption of Risk: Your use of the script is at your own risk. You acknowledge that there are certain inherent risks in using the script, and you understand and assume each of those risks. 
    Waiver and Release: You will not hold NinjaOne responsible for any adverse or unintended consequences resulting from your use of the script, and you waive any legal or equitable rights or remedies you may have against NinjaOne relating to your use of the script. 
    EULA: If you are a NinjaOne customer, your use of the script is subject to the End User License Agreement applicable to you (EULA).
#>

[CmdletBinding()]
param (
    [Parameter(Mandatory = $true, ParameterSetName = "Disable")]
    [Switch]
    $Disable,
    [Parameter(Mandatory = $true, ParameterSetName = "Enable")]
    [Switch]
    $Enable,
    [Parameter(Mandatory = $false, ParameterSetName = "Disable")]
    [Parameter(Mandatory = $false, ParameterSetName = "Enable")]
    [String[]]
    $ExcludeUsers
)

begin {
    function Set-ItemProp {
        param (
            $Path,
            $Name,
            $Value,
            [ValidateSet("DWord", "QWord", "String", "ExpandedString", "Binary", "MultiString", "Unknown")]
            $PropertyType = "DWord"
        )
        # Do not output errors and continue
        $ErrorActionPreference = [System.Management.Automation.ActionPreference]::SilentlyContinue
        if (-not $(Test-Path -Path $Path)) {
            # Check if path does not exist and create the path
            New-Item -Path $Path -Force | Out-Null
        }
        if ((Get-ItemProperty -Path $Path -Name $Name)) {
            # Update property and print out what it was changed from and changed to
            $CurrentValue = Get-ItemProperty -Path $Path -Name $Name
            try {
                Set-ItemProperty -Path $Path -Name $Name -Value $Value -Force -Confirm:$false -ErrorAction Stop | Out-Null
            }
            catch {
                Write-Error $_
            }
            Write-Host "$Path$Name changed from $CurrentValue to $(Get-ItemProperty -Path $Path -Name $Name)"
        }
        else {
            # Create property with value
            try {
                New-ItemProperty -Path $Path -Name $Name -Value $Value -PropertyType $PropertyType -Force -Confirm:$false -ErrorAction Stop | Out-Null
            }
            catch {
                Write-Error $_
            }
            Write-Host "Set $Path$Name to $(Get-ItemProperty -Path $Path -Name $Name)"
        }
        $ErrorActionPreference = [System.Management.Automation.ActionPreference]::Continue
    }
}
process {
    $Path = "SoftwareMicrosoftWindowsCurrentVersionPoliciesExplorer"
    $Name = "NoRun"
    $Value = if ($Disable) { 1 }elseif ($Enable) { 0 }else {
        Write-Host "Either -Enable or -Disable is required to function."
        exit 0
    }

    # Get each user profile SID and Path to the profile
    $UserProfiles = Get-ItemProperty "HKLM:SOFTWAREMicrosoftWindows NTCurrentVersionProfileList*" |
        Where-Object { $_.PSChildName -match "S-1-5-21-(d+-?){4}$" } |
        Select-Object @{Name = "SID"; Expression = { $_.PSChildName } }, @{Name = "UserHive"; Expression = { "$($_.ProfileImagePath)NTuser.dat" } }, @{Name = "UserName"; Expression = { "$($_.ProfileImagePath | Split-Path -Leaf)" } } |
        Where-Object { $ExcludeUsers -notcontains $_.UserName }
    
    # Add in the .DEFAULT User Profile
    $DefaultProfile = "" | Select-Object SID, UserHive, UserName
    $DefaultProfile.SID = ".DEFAULT"
    $DefaultProfile.UserHive = "C:UsersPublicNTuser.dat"
    try {
        # Fix for edge case where PSObject is missing the add operator
        $UserProfiles = {
            $UserProfiles | ForEach-Object { $_ }
            $DefaultProfile
        }.Invoke()
    }
    catch {
        Write-Host "Failed to update default profile, skipping."
    }
    

    # Loop through each profile on the machine
    Foreach ($UserProfile in $UserProfiles) {
        # Load User ntuser.dat if it's not already loaded
        If (($ProfileWasLoaded = Test-Path -Path "Registry::HKEY_USERS$($UserProfile.SID)") -eq $false) {
            Start-Process -FilePath "cmd.exe" -ArgumentList "/C reg.exe LOAD HKU$($UserProfile.SID) $($UserProfile.UserHive)" -Wait -WindowStyle Hidden
        }
        # Manipulate the registry
        $key = "Registry::HKEY_USERS$($UserProfile.SID)$($Path)"
        Set-ItemProp -Path $key -Name $Name -Value $Value
 
        # Unload NTuser.dat
        If ($ProfileWasLoaded -eq $false) {
            [gc]::Collect()
            Start-Sleep 1
            Start-Process -FilePath "cmd.exe" -ArgumentList "/C reg.exe UNLOAD HKU$($UserProfile.SID)" -Wait -WindowStyle Hidden | Out-Null
        }
    }
}
end {}

 

Accedi a oltre 700 script nel Dojo di NinjaOne

Ottieni l’accesso

Analisi dettagliata

Lo script inizia impostando dei parametri, per consentire di abilitare o disabilitare la finestra di dialogo Esegui e di escludere utenti specifici dalle restrizioni. Viene quindi definita una funzione, Set-ItemProp, per gestire la creazione o la modifica delle chiavi di registro. Il processo principale prevede la definizione del percorso del registro di sistema relativo alla finestra di dialogo Esegui, il recupero di tutti i profili utente e l’esecuzione di un ciclo per ogni profilo per modificare il registro di conseguenza e abilitare o disabilitare la finestra di dialogo Esegui per tutti o per alcuni utenti.

Situazioni d’uso potenziali

Consideriamo una professionista dell’IT, Sarah, in un’università. Per garantire che i computer del laboratorio siano utilizzati esclusivamente per scopi accademici, Sarah decide di disabilitare la finestra di dialogo Esegui, escludendo dalle restrizioni i profili degli assistenti di laboratorio. Questo script per disabilitare la finestra di dialogo Esegui consente a Sarah di raggiungere un equilibrio tra sicurezza e accessibilità.

Confronti

Sebbene i Criteri di gruppo offrano un modo per disabilitare la finestra di dialogo Esegui, potrebbero non fornire la granularità offerta da questo script. L’approccio diretto di questo script offre maggiore agilità, soprattutto nelle organizzazioni più grandi.

Domande frequenti

  • Posso utilizzare questo script per disabilitare la finestra di dialogo Esegui escludendo più utenti?
    Sì, è possibile escludere più utenti utilizzando il parametro -ExcludeUsers. 
  • È necessario un riavvio dopo l’esecuzione dello script per disabilitare la finestra di dialogo Esegui?
    Sì, un riavvio assicura l’applicazione delle modifiche.

Raccomandazioni

  • Esegui il backup dello stato attuale del registro prima di apportare modifiche. 
  • Testa prima lo script in un ambiente controllato. 
  • Mantieni aggiornato l’elenco degli utenti esclusi.

Considerazioni finali

Nel mondo dinamico dell’IT, strumenti come NinjaOne offrono una piattaforma centralizzata per la gestione dell’IT. L’’integrazione di script come quello per disabilitare la finestra di dialogo Esegui garantisce che i professionisti IT siano in grado di affrontare qualsiasi sfida, soprattutto quando si tratta di gestire funzionalità come la finestra di dialogo Esegui di Windows.

Passi successivi

La creazione di un team IT efficiente ed efficace richiede una soluzione centralizzata che funga da principale strumento per la fornitura di servizi. NinjaOne consente ai team IT di monitorare, gestire, proteggere e supportare tutti i dispositivi, ovunque essi si trovino, senza la necessità di una complessa infrastruttura locale.

Per saperne di più su NinjaOne Endpoint Management, fai un tour dal vivo, o inizia la tua prova gratuita della piattaforma NinjaOne.

Ti potrebbe interessare anche

Guarda una demo×
×

Guarda NinjaOne in azione!

Inviando questo modulo, accetto La politica sulla privacy di NinjaOne.

Termini e condizioni NinjaOne

Cliccando sul pulsante “Accetto” qui sotto, dichiari di accettare i seguenti termini legali e le nostre condizioni d’uso:

  • Diritti di proprietà: NinjaOne possiede e continuerà a possedere tutti i diritti, i titoli e gli interessi relativi allo script (compreso il copyright). NinjaOne ti concede una licenza limitata per l’utilizzo dello script in conformità con i presenti termini legali.
  • Limitazione d’uso: Puoi utilizzare lo script solo per legittimi scopi personali o aziendali interni e non puoi condividere lo script con altri soggetti.
  • Divieto di ripubblicazione: In nessun caso ti è consentito ripubblicare lo script in una libreria di script appartenente o sotto il controllo di un altro fornitore di software.
  • Esclusione di garanzia: Lo script viene fornito “così com’è” e “come disponibile”, senza garanzie di alcun tipo. NinjaOne non promette né garantisce che lo script sia privo di difetti o che soddisfi le tue esigenze o aspettative specifiche.
  • Assunzione del rischio: L’uso che farai dello script è da intendersi a tuo rischio. Riconosci che l’utilizzo dello script comporta alcuni rischi intrinseci, che comprendi e sei pronto ad assumerti.
  • Rinuncia e liberatoria: Non riterrai NinjaOne responsabile di eventuali conseguenze negative o indesiderate derivanti dall’uso dello script e rinuncerai a qualsiasi diritto legale o di equità e a qualsiasi rivalsa nei confronti di NinjaOne in relazione all’uso dello script.
  • EULA: Se sei un cliente NinjaOne, l’uso dello script è soggetto al Contratto di licenza con l’utente finale (EULA) applicabile.