Olá pessoal, tudo bem? Espero que sim!
Hoje irei apresentá-los a mais um exemplo de script que pode ser muito útil quando o assunto é segurança local de uma estação de trabalho ou servidor. O script da vez garante que o grupo de administradores local estará com os devidos membros de acordo com as suas especificações de segurança.
Como funciona? Basicamente o script irá retornar os usuários membros do grupo de administradores local e irá compará-lo a sua lista de usuários declarados no script. Se houver um usuário na lista declarada que não estiver no grupo, o script irá adicioná-lo como administrador local. Em contrapartida, se houver algum usuário do grupo que não estiver na lista declarada, este será removido do grupo. Caso nenhum dos dois critérios sejam atendidos, o script não tomará nenhuma ação.
Utilizei neste script a declaração de um parâmetro para especificar uma array de usuários que necessitam ser membros do grupo de administradores local, os cmdlets Get-WinSystemLocale para definir o idioma da interface do Windows (basicamente para definir a tradução do nome da conta de grupo dos Administradores Local), Get-LocalGroupMember, Add-LocalGroupMember, Remove-LocalGroupMember, para listar, adicionar e remover membros do grupo de admins local, Compare-Object para realizar a comparação de objetos listados, o operador de loops Foreach-Object para realizar a análise em cada item do objeto e os operadores condicionais If e Else para realizar simples testes lógicos para indicar as orientações e ações que deverão ser tomadas.
Validação de Grupo de Administradores Local
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 |
<# raphaelgomes.net .SYNOPSIS Este script valida e corrige os membros do grupo de Administradores Local de estações e servidores a partir de uma lista de usuários. .AUTHOR Raphael Gomes - contato@raphaelgomes.net .FILENAME Check-LocalAdminGroupMember.ps1 .PARAMETER HelpDeskAdmins Espelhar membros de grupo de Administradores Local com usuários declarados .\Check-LocalAdminGroupMember.ps1 -HelpDeskAdmins <DOMINIO\Admin1>, <DOMINIO\Admin2>, <DOMINIO\Admin3> .EXAMPLE .\Check-LocalAdminGroupMember.ps1 -HelpDeskAdmins CONTOSO\Administrator .EXAMPLE .\Check-LocalAdminGroupMember.ps1 -HelpDeskAdmins CONTOSO\Administrator, CONTOSO\LocalAdmins, CONTOSO\HelpDesk .LINK Dúvidas? Comente em: https://raphaelgomes.net/ps-script-4-validacao-do-grupo-de-administradores-local .TIP Criar GPO para script de logon: https://devblogs.microsoft.com/scripting/using-group-policy-to-deploy-a-windows-powershell-logon-script/ #> Param([array]$HelpDeskAdmins) If($HelpDeskAdmins){ $Local = Get-WinSystemLocale # Consulte as linguagens disponíveis aqui: https://docs.microsoft.com/en-us/openspecs/office_standards/ms-oe376/6c085406-a698-4e12-9d4d-c3b0ee3dbc4a # Adicione novos idiomas para a nomenclatura da conta de grupo de Administradores Local, copiando o If abaixo e adicionando novos LCIDs com as respectivas traduções. # pt-BR If($Local.LCID -eq 1046){$Grupo = "Administradores"} # en-US If($Local.LCID -eq 1033){$Grupo = "Administrators"} $MembrosAdminLocal = Get-LocalGroupMember -Group $Grupo $Compare = Compare-Object $HelpDeskAdmins -DifferenceObject $MembrosAdminLocal.Name If($Compare){ $Compare | ForEach-Object { If($_.SideIndicator -eq "<="){Add-LocalGroupMember -Group Administradores -Member $_.InputObject -ErrorVariable AddEV -ErrorAction SilentlyContinue If($AddEV){Write-Host -ForegroundColor Red "ERRO:"$AddEV[0]} Else{Write-Host -ForegroundColor Green "SUCESSO: Usuário adicionado ao grupo:" $_.InputObject} } If($_.SideIndicator -eq "=>"){Remove-LocalGroupMember -Group Administradores -Member $_.InputObject -ErrorVariable RemEV -ErrorAction SilentlyContinue If($RemEV){Write-Host -ForegroundColor Red "ERRO:"$RemEV[0]} Else{Write-Host -ForegroundColor Cyan "SUCESSO: Usuário removido do grupo:" $_.InputObject} } } } Else{Write-Host -ForegroundColor Yellow "ATENÇÃO: Nenhuma alteração foi necessária."} Clear-Variable HelpDeskAdmins -ErrorAction SilentlyContinue Clear-Variable Compare -ErrorAction SilentlyContinue } Else{Write-Host -ForegroundColor Yellow "ATENÇÃO: Você precisa especificar pelo menos um usuário como membro do grupo de Administradores Local."} |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 |
<# raphaelgomes.net .SYNOPSIS Esta função valida e corrige os membros do grupo de Administradores Local de estações e servidores a partir de uma lista de usuários. .AUTHOR Raphael Gomes - contato@raphaelgomes.net .FILENAME Check-LocalAdminGroupMember.psm1 .USAGE Importar a função para o PowerShell Import-Module .\Check-LocalAdminGroupMember.psm1 .PARAMETER HelpDeskAdmins Espelhar membros de grupo de Administradores Local com usuários declarados Check-LocalAdminGroupMember -HelpDeskAdmins <DOMINIO\Admin1>, <DOMINIO\Admin2>, <DOMINIO\Admin3> .EXAMPLE Check-LocalAdminGroupMember -HelpDeskAdmins CONTOSO\Administrator .EXAMPLE Check-LocalAdminGroupMember -HelpDeskAdmins CONTOSO\Administrator, CONTOSO\LocalAdmins, CONTOSO\HelpDesk .LINK Dúvidas? Comente em: https://raphaelgomes.net/ps-script-4-validacao-do-grupo-de-administradores-local .TIP Criar GPO para script de logon: https://devblogs.microsoft.com/scripting/using-group-policy-to-deploy-a-windows-powershell-logon-script/ #> Function Check-LocalAdminGroupMember{Param([array]$HelpDeskAdmins) If($HelpDeskAdmins){ $Local = Get-WinSystemLocale # Consulte as linguagens disponíveis aqui: https://docs.microsoft.com/en-us/openspecs/office_standards/ms-oe376/6c085406-a698-4e12-9d4d-c3b0ee3dbc4a # Adicione novos idiomas para a nomenclatura da conta de grupo de Administradores Local, copiando o If abaixo e adicionando novos LCIDs com as respectivas traduções. # pt-BR If($Local.LCID -eq 1046){$Grupo = "Administradores"} # en-US If($Local.LCID -eq 1033){$Grupo = "Administrators"} $MembrosAdminLocal = Get-LocalGroupMember -Group $Grupo $Compare = Compare-Object $HelpDeskAdmins -DifferenceObject $MembrosAdminLocal.Name If($Compare){ $Compare | ForEach-Object { If($_.SideIndicator -eq "<="){Add-LocalGroupMember -Group Administradores -Member $_.InputObject -ErrorVariable AddEV -ErrorAction SilentlyContinue If($AddEV){Write-Host -ForegroundColor Red "ERRO:"$AddEV[0]} Else{Write-Host -ForegroundColor Green "SUCESSO: Usuário adicionado ao grupo:" $_.InputObject} } If($_.SideIndicator -eq "=>"){Remove-LocalGroupMember -Group Administradores -Member $_.InputObject -ErrorVariable RemEV -ErrorAction SilentlyContinue If($RemEV){Write-Host -ForegroundColor Red "ERRO:"$RemEV[0]} Else{Write-Host -ForegroundColor Cyan "SUCESSO: Usuário removido do grupo:" $_.InputObject} } } } Else{Write-Host -ForegroundColor Yellow "ATENÇÃO: Nenhuma alteração foi necessária."} Clear-Variable HelpDeskAdmins -ErrorAction SilentlyContinue Clear-Variable Compare -ErrorAction SilentlyContinue } Else{Write-Host -ForegroundColor Yellow "ATENÇÃO: Você precisa especificar pelo menos um usuário como membro do grupo de Administradores Local."} } |
DICA: Você pode utilizar este script como uma resiliência à política de grupo de administradores local. Pense em casos onde eventualmente um computador falha em receber especificamente a política que define os administradores do sistema. Neste cenário, o script poderá atuar como uma contingência da aplicação da política. Você poderá distribuí-lo como um script de logon para ser validado a cada vez que um usuário abre uma sessão, ou entregando o script no computador e criando uma tarefa agendada para ser executada em determinado agendamento, ou mesmo com algum recurso de execução de scripts programada por ferramentas de Gerenciamento de Sistemas como o System Center Configuration Manager, Altiris, Flexera, KACE, etc.
É isso aí galera, por hoje é só. Até o próximo post!
Dúvidas, sugestões, críticas sobre o blog? Entre em contato aqui!
Gostou? Deixe seu comentário e não se esqueçam de curtir a página do Facebook na barra lateral!