Cómo desactivar o activar el cuadro de diálogo Ejecutar de Windows con PowerShell

En el intrincado mundo de las TI, gestionar el acceso de los usuarios a determinadas funciones del sistema es de suma importancia. Una de estas funciones es el cuadro de diálogo Ejecutar de Windows. Pero, ¿por qué los profesionales de TI podrían querer restringir el acceso? Esta guía profundiza en el script PowerShell diseñado para controlar la accesibilidad del cuadro de diálogo Ejecutar y las implicaciones de dichas acciones.

Panorámica del cuadro de diálogo Ejecutar de Windows

  • ¿Qué es el cuadro de diálogo Ejecutar de Windows?

    • El cuadro de diálogo Ejecutar de Windows es una función que proporciona a los usuarios una forma rápida de iniciar programas, abrir carpetas y ejecutar comandos del sistema. Al pulsar Windows + R, aparece un pequeño cuadro de diálogo que permite a los usuarios escribir directamente los comandos.
  • ¿Cómo se utiliza el cuadro de diálogo Ejecutar de Windows?

    • Se utiliza principalmente para un acceso rápido. En lugar de navegar por múltiples menús o carpetas, los usuarios pueden simplemente escribir un comando o una ruta en el cuadro de diálogo Ejecutar de Windows para iniciar instantáneamente un programa o abrir un directorio.

La opinión de Gavin

El cuadro de diálogo Ejecutar es uno de los principales lugares a los que la gente acude si quiere acceder o ejecutar comandos en el sistema en general. Como punto principal para ejecutar comandos y programas, bloquearlo presenta un entorno más controlado y reduce significativamente el riesgo.

Aunque no es el único punto de ejecución de comandos y programas, es el más utilizado por las personas que no tienen necesariamente experiencia en la administración de sistemas. Este bloqueo debe utilizarse en combinación con otras restricciones de seguridad (como impedir el acceso al registro o al símbolo del sistema).

Consecuencias para la seguridad de desactivar el cuadro de diálogo Ejecutar de Windows

¿Cuáles son los riesgos?

Desactivar el cuadro de diálogo Ejecutar puede obstaculizar involuntariamente la productividad. Algunos usuarios avanzados confían en el cuadro de diálogo Ejecutar para realizar tareas rápidas y gestionar el sistema. Además, si no se hace correctamente, la manipulación de los ajustes del sistema puede provocar otros problemas no deseados.

¿Cuáles son las ventajas?

La principal ventaja es una mayor seguridad. Desactivar el cuadro de diálogo Ejecutar de Windows puede evitar acciones no autorizadas o malintencionadas, especialmente por parte de usuarios poco versados en el funcionamiento del sistema. Además, reduce el riesgo de cambios accidentales o la ejecución de comandos dañinos.

¿Cómo reducir los riesgos?

Antes de aplicar cualquier cambio, es fundamental:

  • Comunicarse con los usuarios, especialmente con los que puedan verse afectados por el cambio.
  • Proporcionar métodos o herramientas alternativos para tareas que antes se realizaban mediante el cuadro de diálogo Ejecutar de Windows.
  • Asegurarse de que existe una forma de revertir rápidamente los cambios en caso necesario.

Antecedentes

El script PowerShell proporcionado es una herramienta sólida para que los profesionales de TI y los proveedores de servicios gestionados (MSP) controlen la accesibilidad del cuadro de diálogo Ejecutar. En los entornos en los que la seguridad es una prioridad absoluta, estas herramientas se vuelven indispensables. La capacidad del script para excluir a usuarios específicos de estas restricciones añade una capa de flexibilidad, garantizando que el acceso necesario no se revoque por completo.

El script para desactivar la recopilación de datos de Windows 10

#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 {}

 

Accede a más de 300 scripts en el Dojo de NinjaOne

Obtén acceso

Análisis detallado

El script comienza estableciendo parámetros, permitiendo a los usuarios desactivar o activar el cuadro de diálogo Ejecutar e incluso excluir a usuarios específicos. A continuación, se define una función, Set-ItemProp, para gestionar la creación o modificación de claves de registro. El proceso principal consiste en definir la ruta del registro relacionada con el cuadro de diálogo Ejecutar de Windows, recuperar todos los perfiles de usuario y, a continuación, recorrer cada perfil para modificar el registro en consecuencia.

Posibles casos de uso

Imaginemos a Sara, profesional de TI en una universidad. Para garantizar que los ordenadores del laboratorio se utilicen estrictamente con fines académicos, Sara decide desactivar el cuadro de diálogo Ejecutar de Windows, excluyendo los perfiles de los ayudantes de laboratorio. Este script para desactivar el cuadro de diálogo Ejecutar permite a Sara lograr este equilibrio entre seguridad y accesibilidad.

Comparaciones

Aunque la directiva de grupo ofrece una forma de desactivar el cuadro de diálogo Ejecutar de Windows, puede que no proporcione la granularidad que ofrece este script. El enfoque directo de este script ofrece más agilidad, especialmente en las grandes organizaciones.

Preguntas frecuentes

  • ¿Puedo utilizar este script para desactivar el cuadro de diálogo Ejecutar de Windows para excluir a varios usuarios?
    Sí, es posible excluir varios usuarios mediante el parámetro -ExcludeUsers.
  • ¿Es necesario reiniciar el sistema después de ejecutar el script?
    Sí, un reinicio asegura que los cambios se apliquen.

Recomendaciones

  • Haz una copia de seguridad del estado actual del registro antes de realizar modificaciones
  • Prueba el script en un entorno controlado primero.
  • Mantén actualizada la lista de usuarios excluidos.

Reflexiones finales

En el dinámico mundo de las TI, herramientas como NinjaOne ofrecen una plataforma centralizada para la gestión de TI. La integración de scripts como el que hemos visto garantiza que los profesionales de TI estén preparados para afrontar cualquier reto, especialmente cuando se trata de gestionar funciones como el cuadro de diálogo Ejecutar de Windows.

Próximos pasos

La creación de un equipo de TI próspero y eficaz requiere contar con una solución centralizada que se convierta en tu principal herramienta de prestación de servicios. NinjaOne permite a los equipos de TI supervisar, gestionar, proteger y dar soporte a todos sus dispositivos, estén donde estén, sin necesidad de complejas infraestructuras locales.

Obtén más información sobre NinjaOne Endpoint Management, echa un vistazo a un tour en vivoo tu prueba gratuita de la plataforma NinjaOne.

Categorías:

Quizá también te interese…

×

¡Vean a NinjaOne en acción!

Al enviar este formulario, acepto la política de privacidad de NinjaOne.

Términos y condiciones de NinjaOne

Al hacer clic en el botón «Acepto» que aparece a continuación, estás aceptando los siguientes términos legales, así como nuestras Condiciones de uso:

  • Derechos de propiedad: NinjaOne posee y seguirá poseyendo todos los derechos, títulos e intereses sobre el script (incluidos los derechos de autor). NinjaOne concede al usuario una licencia limitada para utilizar el script de acuerdo con estos términos legales.
  • Limitación de uso: solo podrás utilizar el script para tus legítimos fines personales o comerciales internos, y no podrás compartirlo con terceros.
  • Prohibición de republicación: bajo ninguna circunstancia está permitido volver a publicar el script en ninguna biblioteca de scripts que pertenezca o esté bajo el control de cualquier otro proveedor de software.
  • Exclusión de garantía: el script se proporciona «tal cual» y «según disponibilidad», sin garantía de ningún tipo. NinjaOne no promete ni garantiza que el script esté libre de defectos o que satisfaga las necesidades o expectativas específicas del usuario.
  • Asunción de riesgos: el uso que el usuario haga del script corre por su cuenta y riesgo. El usuario reconoce que existen ciertos riesgos inherentes al uso del script, y entiende y asume cada uno de esos riesgos.
  • Renuncia y exención: el usuario no hará responsable a NinjaOne de cualquier consecuencia adversa o no deseada que resulte del uso del script y renuncia a cualquier derecho o recurso legal o equitativo que pueda tener contra NinjaOne en relación con su uso del script.
  • CLUF: si el usuario es cliente de NinjaOne, su uso del script está sujeto al Contrato de Licencia para el Usuario Final (CLUF).