Powershell:查找内置本地管理员帐户
在本地计算机(服务器的客户端)上管理帐户在域环境中并不常见,但有一个帐户经常被讨论——本地管理员。
一些公司在计算机上禁用此帐户,一些公司将其密码设置为标准密码,一些公司在部署时随机化密码并在数据库或类似数据库中跟踪它们。问题是,有时,在故障排除场景中,手头有服务器上的本地管理员帐户的密码确实很方便,但跟踪在哪台服务器上使用哪个密码可能很棘手。
一些公司使用操作系统的本地化版本,这意味着本地管理员帐户并不总是命名为 Administrator,它可能是 Järjestelmänvalvoja、Administrateur、Rendszergazda、Administrador、Администратор、Administrador 或 Administratör,有些公司将本地管理员帐户重命名为完全不同的名称。
那么我们如何获取机器上本地管理员帐户的名称呢?
每个帐户都有一个称为安全标识符 (SID) 的唯一标识符。我不会深入探讨 SID 是如何生成的,但一些帐户的 SID 始终与特定模式匹配。这些 SID 称为众所周知的安全标识符。
管理员帐户是唯一一个 SID 以“-500”结尾的帐户。利用这些知识,我在 powershell 中编写了一个简单的函数,它将列出计算机上的所有本地用户,并返回 SID 以“-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)"
}
}
}
}
在以后的文章中,我将介绍如何确定上次设置密码的时间、如何更改密码以及如何验证密码设置是否正确。