Principais conclusões
- A personalização das mensagens de login do Windows aumenta a segurança e a experiência do usuário.
- O script do PowerShell fornecido oferece um método rápido para atualizar títulos e mensagens de login.
- Os privilégios de administrador são necessários devido a alterações no registro do sistema.
- O script é compatível com o Windows 10 e o Windows Server 2016 em diante.
- Embora os objetos de política de grupo possam executar tarefas semelhantes, esse script oferece ajustes mais rápidos e ágeis.
- O uso indevido, como o compartilhamento de informações confidenciais por meio de mensagens de login, pode representar ameaças à segurança.
- Sempre teste o script em um ambiente de área restrita antes da ampla implementação.
- Plataformas como o NinjaOne facilitam ainda mais o gerenciamento e a implementação de tais scripts em grandes redes.
Com um cenário em constante evolução de necessidades de segurança e aprimoramento da experiência do usuário, os administradores de TI se veem em busca de ferramentas mais refinadas para gerenciar sistemas de forma eficaz. Uma área frequentemente ignorada, mas essencial, é a personalização das mensagens de login no Windows. A capacidade de alterar as mensagens de login no Windows é vital, pois pode comunicar as informações necessárias aos usuários, reforçar a segurança e fornecer uma camada de personalização em um ambiente corporativo.
Histórico
Nosso ponto focal para a discussão de hoje é um script do PowerShell desenvolvido para atualizar a mensagem de login nos sistemas Windows. Esse script pequeno, mas eficiente, destaca uma combinação de segurança e aprimoramento da experiência do usuário. Ao controlar o título e a mensagem que os usuários veem no momento do login, os profissionais de TI e os provedores de serviços gerenciados (MSPs) podem transmitir atualizações críticas, avisos ou apenas fornecer coesão de marca em toda a frota de máquinas sob sua alçada.
O roteiro
#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 {
}
Acesse mais de 300 scripts no NinjaOne Dojo
Detalhamento
Vamos nos aprofundar na mecânica do script:
- Vinculação e parâmetros do cmdlet: O script é projetado como uma função do PowerShell usando o atributo CmdletBinding. Isso significa que o script pode ser usado como uma função reutilizável e pode aceitar parâmetros, especificamente o título e a mensagem do prompt de login.
- Verificação do administrador: Duas funções incorporadas são utilizadas, Test-IsElevated e Set-ItemProp. O primeiro verifica se o script é executado com privilégios de administrador, o que é vital, pois a modificação de chaves de registro (que o script faz) exige permissões elevadas.
- Modificações no registro: A função Set-ItemProp modifica os valores de registro existentes ou cria novos valores. O script tem como alvo duas chaves primárias, legalnoticecaption (para o título) e legalnoticetext (para a mensagem), que controlam a mensagem de login no Windows.
Casos de uso em potencial
Imagine que o administrador de TI de uma corporação global queira alertar todos os usuários sobre a próxima manutenção do servidor. Em vez de confiar em e-mails que podem ser ignorados, eles implementam esse script em todas as estações de trabalho. Quando os funcionários fazem login no dia seguinte, eles são recebidos com o alerta, garantindo o máximo de visibilidade.
Comparações
Embora os objetos de política de grupo (GPO) também possam ser usados para definir mensagens de login, esse script oferece uma abordagem mais ágil. As GPOs podem levar tempo para se propagar e podem não ser adequadas para mudanças rápidas. O script do PowerShell, por outro lado, pode ser executado rapidamente máquina por máquina ou implantado amplamente por meio de uma ferramenta de gerenciamento de sistema.
Implicações
Embora o script ajude na comunicação e na marca, seu uso incorreto pode resultar em confusão ou até mesmo em possíveis problemas de segurança. Não é recomendável transmitir informações confidenciais em uma mensagem de login. Além disso, mudanças frequentes podem dessensibilizar os usuários em relação a essas mensagens, potencialmente diluindo seu impacto.
Recomendações
- Garanta clareza e brevidade em suas mensagens de login.
- Teste o script em um ambiente controlado antes de uma ampla implementação.
- Mantenha backups regulares do registro do sistema.
Considerações finais
O uso de ferramentas como esse script é apenas um fragmento do kit de ferramentas abrangente de gerenciamento de TI. Plataformas como o NinjaOne ampliam esses esforços, fornecendo um ambiente integrado para implementar, gerenciar e monitorar scripts como esse em vastas redes, garantindo consistência, segurança e experiência aprimorada do usuário.