Cómo modificar los mensajes de inicio de sesión en Windows usando PowerShell

Puntos clave

  • Personalizar los mensajes de inicio de sesión de Windows mejora la seguridad y la experiencia del usuario.
  • El script PowerShell proporcionado ofrece un método rápido para actualizar los títulos y mensajes de inicio de sesión.
  • Se requieren privilegios de administrador debido a los cambios en el registro del sistema.
  • El script es compatible con Windows 10 y Windows Server 2016 en adelante.
  • Aunque los objetos de directiva de grupo pueden realizar tareas similares, este script proporciona ajustes más rápidos y ágiles.
  • Un uso indebido, como compartir información sensible a través de mensajes de inicio de sesión, puede suponer una amenaza para la seguridad.
  • Prueba siempre el script en un entorno aislado antes de su despliegue generalizado.
  • Plataformas como NinjaOne facilitan aún más la gestión y el despliegue de estos scripts en grandes redes.

Con un panorama de necesidades de seguridad y mejora de la experiencia del usuario en constante evolución, los administradores de TI se encuentran en la búsqueda de herramientas más refinadas para gestionar los sistemas con eficacia. Un aspecto que a menudo se pasa por alto, pero que es esencial, es la personalización de los mensajes de inicio de sesión en Windows. La posibilidad de modificar los mensajes de inicio de sesión en Windows es vital, ya que puede comunicar la información necesaria a los usuarios, reforzar la seguridad y proporcionar una capa de personalización en un entorno corporativo.

Antecedentes

Nuestro punto central para la discusión de hoy es un script PowerShell diseñado para modificar los mensaje de inicio de sesión en sistemas Windows. Este pequeño pero potente script supone una mezcla de seguridad y mejora de la experiencia del usuario. Al controlar el título y el mensaje que ven los usuarios al iniciar sesión, los profesionales de TI y los proveedores de servicios gestionados (MSP) pueden desplegar actualizaciones críticas, enviar advertencias o simplemente ofrecer coherencia de marca en toda la flota de máquinas bajo su supervisión.

El script para modificar los mensajes de inicio de sesión en Windows

#Requires -Version 5.1

<#
.SYNOPSIS
    Changes the logon title and message.
.DESCRIPTION
    Changes the logon title and message.
.EXAMPLE
     -Title "My Title" -Message "My Logon Message"
    Set the title and message.
.EXAMPLE
    PS C:> Set-LogonMessage.ps1 -Title "My Title" -Message "My Logon Message"
    Set the title and message.
.OUTPUTS
    None
.NOTES
    Minimum OS Architecture Supported: Windows 10, Windows Server 2016
    Release Notes: Renamed script and added Script Variable support, updated Set-ItemProp
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).
.COMPONENT
    OSSecurity
#>

[CmdletBinding()]
param (
    [Parameter()]
    [String]$Title,
    [Parameter()]
    [String]$Message
)

begin {
    if ($env:title -and $env:title -notlike "null") {
        $Title = $env:title
    }

    if ($env:message -and $env:message -notlike "null") {
        $Message = $env:Message
    }
    function Test-IsElevated {
        $id = [System.Security.Principal.WindowsIdentity]::GetCurrent()
        $p = New-Object System.Security.Principal.WindowsPrincipal($id)
        if ($p.IsInRole([System.Security.Principal.WindowsBuiltInRole]::Administrator))
        { Write-Output $true }
        else
        { Write-Output $false }
    }
    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 {
    if (-not (Test-IsElevated)) {
        Write-Error -Message "Access Denied. Please run with Administrator privileges."
        exit 1
    }
    try {
        Set-ItemProp -Path "HKLM:SOFTWAREMicrosoftWindowsCurrentVersionPoliciesSystem" -Name "legalnoticecaption" -Value $Title -PropertyType String
        Set-ItemProp -Path "HKLM:SOFTWAREMicrosoftWindowsCurrentVersionPoliciesSystem" -Name "legalnoticetext" -Value $Message -PropertyType String
    }
    catch {
        Write-Error $_
        exit 1
    }
}
end {
    
    
    
}

 

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

Obtén acceso

Análisis detallado

Profundicemos en la mecánica del script:

  • Vinculación y parámetros del cmdlet: el script está diseñado como una función PowerShell utilizando el atributo CmdletBinding. Esto significa que el script puede ser utilizado como una función reutilizable y puede aceptar parámetros, específicamente el título y el mensaje para el prompt de login.
  • Comprobación del administrador: se utilizan dos funciones integradas, Test-IsElevated y Set-ItemProp. El primero comprueba si el script se ejecuta con privilegios de administrador, algo vital ya que la modificación de claves del registro (que es lo que hace el script) requiere permisos elevados.
  • Modificaciones del registro: la función Set-ItemProp modifica los valores del registro existentes o crea otros nuevos. El script se dirige a dos claves primarias, legalnoticecaption (para el título) y legalnoticetext (para el mensaje), que rigen el mensaje de inicio de sesión en Windows.

Posibles casos de uso

Imaginemos que un administrador de TI de una multinacional quiere avisar a todos los usuarios del próximo mantenimiento del servidor. En lugar de confiar en correos electrónicos que podrían ser ignorados, despliegan este script en todas las estaciones de trabajo. Cuando los empleados se conectan al día siguiente, reciben la alerta, lo que garantiza la máxima visibilidad.

Comparaciones

Aunque también se pueden utilizar objetos de directiva de grupo (GPO) para establecer mensajes de inicio de sesión, este script ofrece un enfoque más ágil. Los GPO pueden tardar en propagarse y no ser adecuados para cambios rápidos. El script PowerShell, por su parte, puede ejecutarse rápidamente máquina por máquina o desplegarse ampliamente a través de una herramienta de gestión del sistema.

FAQ

  • ¿Se puede ejecutar este script en cualquier máquina Windows? 
    Está diseñado para Windows 10 y Windows Server 2016 y superiores. Es posible que las versiones anteriores no admitan los cmdlets correspondientes.
  • ¿Es necesario ejecutar el script con derechos administrativos? 
    Sí, ya que modifica el registro del sistema, los permisos elevados son obligatorios.

Implicaciones

Aunque el script ayuda a la comunicación y al branding, su uso incorrecto puede dar lugar a confusión o incluso a posibles problemas de seguridad. No es aconsejable difundir información sensible en un mensaje de inicio de sesión. Además, los cambios frecuentes pueden insensibilizar a los usuarios a estos mensajes, diluyendo potencialmente su impacto.

Recomendaciones

  • Asegúrate de que los mensajes de acceso sean claros y breves.
  • Prueba el script en un entorno controlado antes de su despliegue general.
  • Realiza copias de seguridad periódicas del registro del sistema.

Reflexiones finales

El uso de herramientas como este script es sólo un fragmento del amplio conjunto de herramientas para la gestión de TI. Plataformas como NinjaOne amplifican estos esfuerzos al proporcionar un entorno integrado para desplegar, gestionar y supervisar scripts de este tipo a través de vastas redes, garantizando la coherencia, la seguridad y la mejora de la experiencia del usuario.

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).