No sofisticado ecossistema de gerenciamento de TI, é fundamental garantir que os dispositivos sejam corretamente conectados ou removidos de um domínio de rede. Para os profissionais de TI, essa tarefa geralmente é repetitiva, mas a importância de uma execução perfeita não pode ser subestimada. Hoje, vamos nos aprofundar em um script do PowerShell criado para remover um computador de um domínio sem esforço.
Histórico
O script fornecido atende à necessidade específica de automatizar as operações de saída do domínio. Os domínios servem para conglomerar contas de usuários, computadores e políticas de grupo em um único local centralizado. Há vários motivos pelos quais um profissional de TI pode querer remover um computador de um domínio, seja por segurança, alterações na infraestrutura ou desativação de hardware. A execução manual dessa tarefa não só consome tempo como também está sujeita a erros humanos. Portanto, um script robusto do PowerShell como o descrito acima é inestimável para profissionais de TI e provedores de serviços gerenciados (MSPs).
O roteiro
#Requires -Version 2.0
<#
.SYNOPSIS
Removes the computer from the domain.
.DESCRIPTION
Removes the computer from the domain.
.EXAMPLE
-UserName "MyDomainUser" -Password "Somepass1" -LocalUserName "Administrator" -LocalPassword "Somepass1"
Removes the computer from the domain and restarts the computer.
.EXAMPLE
-UserName "MyDomainUser" -Password "Somepass1" -LocalUserName "Administrator" -LocalPassword "Somepass1" -NoRestart
Removes the computer from the domain and does not restart the computer.
.EXAMPLE
PS C:> Leave-Domain.ps1 -UserName "MyDomainUser" -Password "Somepass1" -LocalUserName "Administrator" -LocalPassword "Somepass1" -NoRestart
Removes the computer from the domain and does not restart the computer.
.OUTPUTS
String[]
.NOTES
Minimum OS Architecture Supported: Windows 7, Windows Server 2012
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 (
# Use a Domain UserName to remove this computer to a domain, this requires the Password parameter to be used as well
[Parameter(Mandatory = $true)]
[String]
$UserName,
# Use a Domain Password to remove a computer from a domain
[Parameter(Mandatory = $true)]
$Password,
# Use a local admin's UserName to remove this computer from a domain, this requires the Password parameter to be used as well
[Parameter(Mandatory = $true)]
[String]
$LocalUserName,
# Use a local admin's Password to remove this computer from a domain
[Parameter(Mandatory = $true)]
$LocalPassword,
# Do not restart computer after leaving to a domain
[Switch]
$NoRestart
)
begin {
Write-Output "Starting Leave Domain"
# Converts username and password into a credential object
$LeaveCred = [PSCredential]::new($UserName, $(ConvertTo-SecureString -String $Password -AsPlainText -Force))
# Converts username and password into a credential object
$LocalCred = [PSCredential]::new($LocalUserName, $(ConvertTo-SecureString -String $LocalPassword -AsPlainText -Force))
}
process {
Write-Output "Removing computer($env:COMPUTERNAME) from domain"
$script:LeaveResult = $false
try {
$LeaveResult = if ($NoRestart) {
(Remove-Computer -UnjoinDomainCredential $LeaveCred -PassThru -Force -LocalCredential $LocalCred -Confirm:$false).HasSucceeded
# Do not restart after leaving
}
else {
# Restart after leaving
(Remove-Computer -UnjoinDomainCredential $LeaveCred -PassThru -Force -Restart -LocalCredential $LocalCred -Confirm:$false).HasSucceeded
}
}
catch {
Write-Error "Failed to Leave Domain"
}
if ($LeaveResult) {
if ($NoRestart) {
Write-Output "Removed computer($env:COMPUTERNAME) from domain and not restarting computer"
}
else {
Write-Output "Removed computer($env:COMPUTERNAME) from domain and restarting computer"
}
}
else {
Write-Output "Failed to remove computer($env:COMPUTERNAME) from domain"
# Clean up credentials so that they don't leak outside this script
$LeaveCred = $null
$LocalCred = $null
exit 1
}
}
end {
# Clean up credentials so that they don't leak outside this script
$LeaveCred = $null
$LocalCred = $null
Write-Output "Completed Leave Domain"
}
Acesse mais de 300 scripts no NinjaOne Dojo
Detalhamento
O script segue uma abordagem modular, abrangendo três seções principais: início, processo e fim.
- Na seção begin, ele inicializa o script, aceita parâmetros como domínio e nomes de usuário/senhas locais e constrói objetos de credenciais a partir desses parâmetros.
- A seção de processo é onde ocorre a operação real. Ele usa o cmdlet Remove-Computer do PowerShell, uma ferramenta avançada projetada para remover o computador de seu domínio atual. A flexibilidade do script permite a opção de reiniciar o computador após a remoção ou deixá-lo em execução, dependendo da preferência do usuário.
- A seção final trata da limpeza, garantindo que as credenciais usadas sejam apagadas para evitar possíveis problemas de segurança.
Casos de uso em potencial
Imagine um profissional de TI, Alex, gerenciando a infraestrutura de rede de uma organização de médio porte. Eles acabaram de desativar várias estações de trabalho antigas, substituindo-as por novas. Em vez de desassociar manualmente cada computador do domínio, Alex usa esse script, economizando horas de trabalho e garantindo que nenhuma credencial residual seja deixada nas máquinas desativadas.
Comparações
Embora o método baseado em GUI, feito por meio de “Propriedades do sistema”, ofereça uma abordagem mais visual, o script do PowerShell se destaca pela automação, escalabilidade e precisão. Para remover um único computador, a GUI pode ser suficiente, mas para operações em massa, o PowerShell é incomparável.
Implicações
O uso de scripts como esse para gerenciar as operações do domínio não é apenas uma questão de conveniência, mas de segurança. Garantir que as credenciais não vazem, como o script faz corretamente, é de suma importância. Uma remoção de domínio mal gerenciada pode deixar brechas para os invasores cibernéticos.
Recomendações
- Sempre teste o script em um ambiente controlado antes de implementá-lo em um cenário real.
- Certifique-se de que os mecanismos de backup estejam em vigor, especialmente ao fazer alterações em massa.
- Atualize regularmente o script para acomodar alterações no sistema operacional ou nos cmdlets do PowerShell.
Considerações finais
Embora os scripts do PowerShell, como o discutido, ofereçam imensa utilidade, o aproveitamento de plataformas como o NinjaOne pode otimizar ainda mais as operações de TI. O NinjaOne fornece uma plataforma unificada de monitoramento e gerenciamento de TI, integrando perfeitamente scripts, automação e uma infinidade de tarefas de TI sob o mesmo teto. Para os profissionais que buscam otimizar suas tarefas de gerenciamento de TI, ferramentas como esse script, quando integradas a plataformas como o NinjaOne, oferecem um horizonte promissor.