Powershell: busque una cuenta de administrador local integrada
Administrar cuentas en computadoras locales (clientes de servidores) no es tan común en un entorno de dominio, pero hay una cuenta de la que se habla a menudo: la del administrador local.
Algunas empresas desactivan esta cuenta en las máquinas, algunas establecen su contraseña en una contraseña estándar y otras asignan una contraseña al azar durante la implementación y realizan un seguimiento de ellas en una base de datos o similar. La cuestión es que a veces, a menudo en escenarios de solución de problemas, es muy conveniente tener a mano la contraseña de la cuenta de administrador local en un servidor, pero puede ser complicado realizar un seguimiento de qué contraseña usar en qué servidor.
Algunas empresas utilizan versiones localizadas del sistema operativo, lo que significa que la cuenta del administrador local no siempre se denomina Administrador; podría ser Järjestelmänvalvoja, Administrateur, Rendszergazda, Administrador, Администратор, Administrador o Administratör, y algunas empresas cambian el nombre de la cuenta del administrador local a algo completamente diferente.
Entonces, ¿cómo obtenemos el nombre de la cuenta de administrador local en una máquina?
Cada cuenta tiene un identificador único llamado Identificador de seguridad (SID). No voy a profundizar en cómo se genera un SID, pero algunas cuentas tienen SID que siempre coinciden con un patrón determinado. Estos SID se denominan identificadores de seguridad conocidos.
La cuenta de Administrador es la única cuenta que tiene un SID que termina en “-500”. Usando este conocimiento, escribí una función simple en PowerShell que enumerará todos los usuarios locales en una máquina y devolverá el nombre de la cuenta con un SID que termina en "-500".
function Get-SWLocalAdmin {
[CmdletBinding()]
param (
[Parameter(Mandatory=$true)]
$ComputerName
)
Process {
Foreach ($Computer in $ComputerName) {
Try {
Add-Type -AssemblyName System.DirectoryServices.AccountManagement
$PrincipalContext = New-Object System.DirectoryServices.AccountManagement.PrincipalContext([System.DirectoryServices.AccountManagement.ContextType]::Machine, $Computer)
$UserPrincipal = New-Object System.DirectoryServices.AccountManagement.UserPrincipal($PrincipalContext)
$Searcher = New-Object System.DirectoryServices.AccountManagement.PrincipalSearcher
$Searcher.QueryFilter = $UserPrincipal
$Searcher.FindAll() | Where-Object {$_.Sid -Like "*-500"}
}
Catch {
Write-Warning -Message "$($_.Exception.Message)"
}
}
}
}
En publicaciones futuras explicaré cómo determinar cuándo se configuró la contraseña por última vez, cómo cambiarla y cómo verificar que la contraseña se configuró correctamente.