Powershell: Yerleşik yerel Yönetici hesabını bulun


Yerel bilgisayarlardaki (sunucuların istemcileri) hesapları yönetmek, etki alanı ortamında o kadar yaygın değildir, ancak sıklıkla tartışılan bir hesap vardır: yerel yönetici.

Bazı şirketler bu hesabı makinelerde devre dışı bırakır, bazıları şifresini standart bir şifreye ayarlar ve bazıları dağıtım sırasında bir şifreyi rastgele belirler ve bunları bir veritabanında veya benzeri bir yerde takip eder. Sorun şu ki, bazen, genellikle sorun giderme senaryolarında, yerel yönetici hesabının şifresini elinizde bir sunucuda bulundurmak gerçekten kullanışlıdır, ancak hangi şifrenin hangi sunucuda kullanılacağını takip etmek zor olabilir.

Bazı şirketler işletim sisteminin yerelleştirilmiş sürümlerini kullanır; bu, yerel yönetici hesabının her zaman Yönetici olarak adlandırılmadığı anlamına gelir; Järjestelmänvalvoja, Administrateur, Rendszergazda, Administrador, Администратор, Administrador veya Administratör olabilir ve bazı şirketler yerel yönetici hesabını tamamen farklı bir adla yeniden adlandırır.

Peki bir makinedeki yerel yönetici hesabının adını nasıl alırız?

Her hesabın Güvenlik Tanımlayıcısı (SID) adı verilen benzersiz bir tanımlayıcısı vardır. Bir SID'nin nasıl oluşturulduğu konusunda daha derinlere inmeyeceğim, ancak birkaç hesapta her zaman belirli bir kalıpla eşleşen SID'ler var. Bu SID'lere iyi bilinen güvenlik tanımlayıcıları denir.

Yönetici hesabı “-500” ile biten SID'ye sahip tek hesaptır. Bu bilgiyi kullanarak powershell'de bir makinedeki tüm yerel kullanıcıları listeleyecek ve hesabın adını "-500" ile biten bir SID ile döndürecek basit bir fonksiyon yazdım.

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)"
            }
        }
    }
}

Gelecek yazılarda şifrenin en son ne zaman ayarlandığının nasıl belirleneceğini, nasıl değiştirileceğini ve şifrenin doğru şekilde ayarlandığının nasıl doğrulanacağını anlatacağım.

İlgili makaleler