A capacidade de gerenciar o acesso e as credenciais dos usuários é um componente essencial da administração de TI. Seja em uma grande organização com necessidades complexas de TI ou em uma empresa menor com requisitos simples, uma tarefa comum é o gerenciamento de senhas. O script fornecido apresenta um método para redefinir senhas de usuários usando o PowerShell, seja para usuários locais do Windows ou em um ambiente do Active Directory.
Histórico
O script foi projetado principalmente para oferecer aos profissionais de TI e aos provedores de serviços gerenciados (MSPs) uma abordagem simplificada para redefinir as senhas dos usuários sem se aprofundar nas interfaces de usuário do sistema. Com o número cada vez maior de usuários e a necessidade constante de aplicar práticas de segurança, ter uma ferramenta que realize essas operações de forma rápida e confiável é inestimável. Esse script, especialmente quando combinado com ferramentas como o NinjaOne, oferece automação e eficiência para essas tarefas.
O roteiro
#Requires -Version 5.1
<#
.SYNOPSIS
Resets a users password.
.DESCRIPTION
Resets a users password. Either a local user that this script runs on, or in Active directory.
.EXAMPLE
-UserName "Fred" -Password "Somepass1"
Resets Fred's password to Somepass1 .
.EXAMPLE
-UserName "Fred" -Password "Somepass1" -IsDomainUser
Resets Fred's password to Somepass1 in Active Directory.
.EXAMPLE
PS C:> .Reset-User-Password.ps1 -UserName "Fred" -Password "Somepass1" -IsDomainUser
Resets Fred's password to Somepass1 in Active Directory.
.OUTPUTS
None
.NOTES
Minimum OS Architecture Supported: Windows 10, Windows Server 2012
The RSAT feature for Active Directory needs to be installed on the computer this runs on.
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).
.COMPONENT
ManageUsers
#>
[CmdletBinding()]
param (
[Parameter(Mandatory = $true)]
[String]
$UserName,
[Parameter(Mandatory = $true)]
[String]
$Password,
[Switch]
$IsDomainUser
)
begin {
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 }
}
}
process {
if (-not (Test-IsElevated)) {
Write-Error -Message "Access Denied. Please run with Administrator privileges."
exit 1
}
if ($IsDomainUser) {
# Active Directory
# Check if the ActiveDirectory module is installed
if ((Get-Module -Name ActiveDirectory -ListAvailable -ErrorAction SilentlyContinue)) {
try {
# Try to import the ActiveDirectory module
Import-Module -Name ActiveDirectory
}
catch {
Write-Error -Message "Ninja Agent could not access AD, either RSAT was not installed or that the agent does not have permissions to add and remove users from groups."
exit 5 # Access Denied exit code
}
try {
$User = Get-ADUser -Identity $UserName
Set-ADAccountPassword -Identity $User -Reset -NewPassword $(ConvertTo-SecureString -String $Password -AsPlainText -Force)
Write-Host "Reset Password for user: $UserName"
exit 0
}
catch {
Write-Host "Failed to Reset Password for user: $UserName"
exit 1
}
}
else {
Write-Host "User ($UserName) does not exist."
exit 1
}
}
else {
$User = Get-LocalUser -Name $UserName -ErrorAction SilentlyContinue
if ($User) {
try {
Set-LocalUser -Name $UserName -Password $(ConvertTo-SecureString -String $Password -AsPlainText -Force) -Confirm:$false
Write-Host "Reset Password for user: $UserName"
exit 0
}
catch {
Write-Host "Failed to Reset Password for user: $UserName"
exit 1
}
}
else {
Write-Host "User ($UserName) does not exist."
exit 1
}
}
}
end {}
Acesse mais de 300 scripts no NinjaOne Dojo
Detalhamento
Parâmetros: O script começa definindo os parâmetros necessários, ou seja, o UserName e a Password. Há também uma chave opcional para IsDomainUser que, quando usada, especifica que a operação se destina a um usuário do Active Directory.
Inicialização:
Antes da operação principal, o script verifica se está sendo executado com privilégios de administrador. Isso é feito usando a função Test-IsElevated, que verifica a função de execução atual do script.
Processo:
Dependendo do valor da chave IsDomainUser, o script se divide em duas operações distintas:
- Active Directory: Se a opção IsDomainUser estiver definida, o script verificará a presença do módulo ActiveDirectory, importará o módulo e tentará redefinir a senha do usuário no Active Directory.
- Usuário local: Sem a opção IsDomainUser, o script visa um usuário local, verificando sua existência e tentando redefinir a senha.
Casos de uso em potencial
Imagine um administrador de TI, John, gerenciando a infraestrutura de rede de uma empresa de médio porte. Ele recebeu várias solicitações de funcionários que esqueceram suas senhas. Em vez de redefini-los manualmente por meio da GUI, John usa este script. Com um único comando, ele agora pode redefinir a senha de cada usuário, economizando tempo e garantindo uma abordagem consistente.
Comparações
Tradicionalmente, a redefinição de senhas no Windows ou no Active Directory exigiria ferramentas baseadas em GUI, como “Gerenciamento de computadores” para usuários locais ou “Usuários e computadores do Active Directory” para usuários do AD. Embora essas ferramentas sejam robustas e ricas em recursos, elas geralmente envolvem várias etapas. Esse script do PowerShell oferece uma abordagem de linha de comando mais simplificada, que pode ser facilmente integrada aos fluxos de trabalho de automação.
Implicações
Embora o script ofereça eficiência, ele também carrega o peso da segurança. O uso indevido pode resultar em acesso não intencional ou bloqueio de contas. Certifique-se sempre de que as senhas sejam redefinidas de forma responsável e com o conhecimento do usuário.
Recomendações
- Sempre faça um backup antes de fazer alterações em grande escala.
- Teste o script em um ambiente controlado antes de usá-lo na produção.
- Use senhas fortes e exclusivas ao redefinir.
Considerações finais
Para os profissionais de TI que buscam mais automação e operações simplificadas, ferramentas como o NinjaOne podem complementar esse script. A NinjaOne fornece soluções robustas de gerenciamento de TI que se integram bem a scripts personalizados como esse, permitindo que os profissionais obtenham o máximo de sua infraestrutura. Garantir que os usuários possam acessar suas contas com segurança é fundamental no gerenciamento de TI. Ao aproveitar o PowerShell e ferramentas como o NinjaOne, as complexidades de tarefas como redefinições de senha podem ser reduzidas, permitindo que as equipes de TI se concentrem em questões mais urgentes.