Удалить локального администратора

Предыстория очень быстро: по какой-то причине на некоторых серверах есть 2 локальных административных аккаунта ... Понятия не имею, я взял на себя эту работу и все очистил вверх.

Мне нужно пройти через 600 (или больше) серверов, чтобы удалить дополнительную учетную запись.

PowerShell великолепен, но не может с этим справиться. Как я могу изменить и прочитать это местоположение в PowerShell?

Я могу прочитать здесь: HKLM: \ SAM, но не вижу HKLM: \ SAM \ SAM ...? Как я могу заставить PowerShell редактировать разрешения и читать это местоположение?

Как только я увижу это местоположение, я решу, как его удалить remove-item-somethingsomething

Всем спасибо :)

1
задан 8 April 2019 в 04:29
3 ответа

Вы можете использовать такой сценарий, если у вас есть правильный доступ к удаленные серверы:

$scriptBlock = 
{
Remove-LocalUser -Name UserToDelete
}
Invoke-Command -ComputerName RemoteServerName -ScriptBlock $scriptBlock
0
ответ дан 3 December 2019 в 23:05

Я предлагаю:

  • сначала получить список всех учетных записей LocalAdmin,
  • без встроенного администратора, чей SID заканчивается на -500,
  • используйте следующее (непроверено ) скрипт, который использует подстановочный знак для возможно локализованного имени группы
    (например, Administratoren на немецком языке)

## Q:\Test\2019\04\08\SO_961951.ps1

$scriptBlock = { Get-LocalGroup Admin* |
                  Get-LocalGroupMember | 
                   Where SID -notmatch '-500$' | 
                    Select-Object * }

$Servers = Get-ADComputer -Filter 'OperatingSystem -like "*windows*server*"' |
    Select-Object Name,OperatingSystem

$LocalAdmins = foreach($Server in $Servers){
    Invoke-Command -ComputerName $Server.Name -ScriptBlock $scriptBlock
}

$LocalAdmins | Export-Csv .\LocalAdmins.csv -NoTypeInformation

Пример вывода:

Name              SID                                            PrincipalSource ObjectClass
----              ---                                            --------------- -----------
Server\LotPings   S-1-5-21-1234567890-987654321-1234567890-1001            Local Benutzer
1
ответ дан 3 December 2019 в 23:05

Это был мой способ сделать это.

&"\\ServerExes\PavlesFolder\PsExec64.exe" \\$Computer -accepteula -nobanner -i -s cmd /c "echo . | powershell.exe (Remove-Item HKLM:\SAM\SAM\Domains\Account\Users\Names\$account -Force)"

он должен запускаться как «СИСТЕМА», поэтому я использую PsExec. Когда он удаляет из реестра, учетная запись все еще отображается в compmgmt.msc, поэтому, чтобы обойти это, я заново создаю пользователя и снова удаляю (с помощью ADSI) ... и его нет.

беспорядочно, но работает ...

функция, созданная для выполнения этой работы:

Function Delete-Account-AsSystem {

    Param (
        [string]$Computer,
        [string]$Account
    )

    &"\\ServerExes\PavlesFolder\PsExec64.exe" \\$Computer -accepteula -nobanner -i -s cmd /c "echo . | powershell.exe (Remove-Item HKLM:\SAM\SAM\Domains\Account\Users\Names\$Account -Force)"

    If($LASTEXITCODE -eq 0){

        If(Get-WmiObject -Class win32_UserAccount -Filter "LocalAccount=True" -ComputerName $Computer | Where-Object {$_.Name -eq "Admin"} -eq $null){

            $temppassword = "P@ssword1!"
            $objOu = [ADSI]”WinNT://$Computer“

            $objUser = $objOU.Create("User", $Account)
            $objUser.SetPassword($temppassword)
            $objUser.SetInfo()

            $objOuDelete = [ADSI]”WinNT://$Computer“
            $objOuDelete.Delete("User",$Account)

            Write-Output "Deleted account."

        }#end if

    }Else{

        Write-Output "Didnt delete account."

    }#end if


}#end function


Delete-Account-AsSystem -Computer server01 -Account Admin
0
ответ дан 3 December 2019 в 23:05

Теги

Похожие вопросы