Caroline… Carolzinha… ou simplesmente Carol!

Comece pelo simples e não pare de tentar.

Recentemente me deparei com um problema, os usuários não desligavam suas máquinas ao final do dia e pra quem trabalha em ambientes com estações e servidores Microsoft sabe que será necessário em algum momento reiniciá-los para finalizar atualizações críticas e de segurança.

Daí surgiu a ideia de criar um script em PowerShell para verificar as máquinas que estão ligadas e enviar um comando de shutdown.

Esses foram os passos que segui para criar o script:

  • Primeiramente crio uma lista com as estações através do DHCP
  • Trato a lista para tirar os caracteres e espaçamentos que não são necessários
  • E a partir daí gero uma nova lista com apenas as estações que estão realmente ligadas
  • Por fim, envio o comando de desligamento para as estações

############### Lista de máquinas via DHCP ###############

Clear-Content “D:\ScriptsAD\shutdown_pcs.txt”

$dhcplist = Get-DhcpServerv4Lease -ComputerName “ad.dominio.local” -ScopeId 192.168.0.0 |Select-Object -property HostName

“Flushing DNS”
#ipconfig /flushdns | out-null

“Registering DNS”
#ipconfig /registerdns | out-null

echo $dhcplist

$dhcplist = $dhcplist -replace ‘@{HostName=’,”
$dhcplist = $dhcplist -replace ‘}’,”
$dhcplist = $dhcplist -replace ‘\s’,”

$shutdownlist = New-object System.Collections.ArrayList

Foreach($dhcphost in $dhcplist) {

if (!(Test-Connection -Cn $dhcphost -BufferSize 16 -Count 1 -ea 0 -quiet))
{
$ping = 1
“Cliente $dhcphost inacessível”
}

Else

{$ping = 0}

if ($ping -eq 0)
{
$shutdownlist.Add($dhcphost)
“Incluindo cliente $dhcphost na lista de estacoes ativas”
}

}

$shutdownlist | Out-File “D:\ScriptsAD\shutdown_pcs.txt”

############### Shutdown de estações ###############

foreach ($_ in get-content “D:\ScriptsAD\shutdown_pcs.txt”) {(gwmi Win32_OperatingSystem -ComputerName $_).Win32Shutdown(8)}

# Lista de códigos para o uso do Win32Shutdown( )
# 0 – logoff
# 4 – logoff forçado
# 1 – desligamento
# 5 – desligamento forçado
# 2 – reiniciar
# 6 – reinicialização forçada
# 8 – desligar
# 12 – desligamento forçado

Bem, espero que tenham gostado da ideia e sugestões de melhoria são sempre bem-vindas!

Categorias: Divulgação, PowerShell

Sobre Carol Souza

Caroline de Souza Vieira, mais conhecida como Carol Souza, formada em Análise de Sistemas, administradora de redes Linux, incentivadora do uso de Software Livre e usuária OpenSuse. Membro atuante da Comunidade Software Livre no Rio de Janeiro, colaboradora voluntária de eventos como Hack’n Rio 2011, IV FSLDC e DFDRJ, blogueira em sites como Cotidiano Linux, Gmigos, Mulheres na Tecnologia e CooperaTI além de manter o próprio blog Carolinux. Sonhadora, amiga, determinada, criativa e movida à desafios. Uma “padawan” amante de tecnologia, aspirante a corredora, ritmista e blogueira.

Posts Populares

Remote Desktop via W

Recentemente precisei usar o Remote Desktop do Windows para acessar ...

Extraindo textos a p

Realizando um atendimento (quem lê até pensa que sou médica ...

À caça de um Malwa

Escrevendo novos posts até tarde da noite, divulgando e acompanhando ...

Erro no "apt-get upd

Essa é mais uma daquelas histórias em que a simples ...

Mulheres em moviment

Neste último domingo consegui realizar um grande desejo, participar de ...