Предыстория очень быстро: по какой-то причине на некоторых серверах есть 2 локальных административных аккаунта ... Понятия не имею, я взял на себя эту работу и все очистил вверх.
Мне нужно пройти через 600 (или больше) серверов, чтобы удалить дополнительную учетную запись.
PowerShell великолепен, но не может с этим справиться. Как я могу изменить и прочитать это местоположение в PowerShell?
Я могу прочитать здесь: HKLM: \ SAM, но не вижу HKLM: \ SAM \ SAM ...? Как я могу заставить PowerShell редактировать разрешения и читать это местоположение?
Как только я увижу это местоположение, я решу, как его удалить remove-item-somethingsomething
Всем спасибо :)
Вы можете использовать такой сценарий, если у вас есть правильный доступ к удаленные серверы:
$scriptBlock =
{
Remove-LocalUser -Name UserToDelete
}
Invoke-Command -ComputerName RemoteServerName -ScriptBlock $scriptBlock
Я предлагаю:
## 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
Это был мой способ сделать это.
&"\\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