Uma boa maneira de reiniciar todos os computadores em um domínio do Windows a cada noite

9

O que é uma boa maneira de reiniciar uma lista de computadores Windows em um domínio do Windows? Supondo que o controlador de domínio do Windows não tenha um serviço para fazer isso, por favor, faça recomendações para um script.

Posso listar os nomes de host e iterar os nomes de host para enviar um comando de reinicialização para cada um deles? Posso obter uma lista de nomes de host do servidor DHCP em execução em uma caixa do Windows 2008 no tempo de execução do script?

Minhas linguagens de script preferidas, da mais para a menos desejável, são: PHP, javascript, Bash, Python (saiba muito pouco), VB (saiba, mas não goste)

    
por steampowered 21.10.2011 / 02:18

4 respostas

15

Se o GPO não é sua coisa, e você quiser ir com a segunda opção de Mark Henderson (batching shutdown /m ) você pode tornar seu trabalho mais fácil ao executar o desligamento em lote, assim ele será feito em paralelo em vez de serial . Ele requer o PowerShell por parte da estação de administração, mas é muito bacana .

foreach ($ComputerName in $ComputerList) {
    invoke-command -AsJob -ScriptBlock {
        params($ComputerName)
        shutdown /m $ComputerName /r /f /t 0
    } -ArgumentList $ComputerName
}

O que este fragmento faz é gerar tantos trabalhos em background executando em paralelo quanto existem máquinas em $ ComputerList. Isso pode fazer com que todas as coisas caiam muito mais rápido.

    
por 21.10.2011 / 03:05
7

Você pode fazer isso com as Preferências da Política de Grupo fazendo uma nova tarefa agendada que será executada todas as noites em um determinado horário. O comando para essa tarefa deve ser shutdown /r /t 0 . Em seguida, você pode vincular esse GPO à UO ou UOs com os computadores neles.

Você provavelmente desejará usar a opção "Executar este programa em um intervalo aleatório" em algum lugar entre 10 a 15 minutos. Ter cada computador ligado ao mesmo tempo pode ser ruim para seus disjuntores se você não for cuidadoso. Você também pode querer verificar a opção de executar a tarefa somente se o computador estiver ocioso por x horas, caso alguém esteja fazendo uma noite inteira. Você não quer matar uma noite inteira de trabalho reiniciando alguém que está tentando cumprir um prazo.

    
por 21.10.2011 / 02:51
6

Duas opções:

  1. Crie uma tarefa agendada por meio do GPO que executa shutdown /r /f /t 0 ou shutdown /g /f /t 0 em cada máquina que você deseja reinicializar. (confira shutdown /? para mais detalhes.

  2. Crie um lote que execute shutdown /m [computer name] /r /f /t 0 de um computador central (talvez o controlador de domínio?). Faça um loop para cada computador que você deseja reinicializar (altere o [computer name] ). Isso significa que o computador não será reiniciado se estiver inacessível por qualquer motivo e precisar ser executado a partir de uma conta que tenha os direitos para reiniciar computadores.

Você deve ser capaz de escrever um arquivo em lotes que percorra uma lista de computadores extraídos do diretório ativo e execute o comando, no entanto, não tenho tempo para escrever um hoje (e não estou disposto a testar mesmo que eu escrevesse, senão eu seria grelhado por reiniciar o computador de todos no meio do dia).

    
por 21.10.2011 / 02:44
4

A melhor maneira de fazer isso é despedir a pessoa com a ideia de que isso é necessário e fazer o que todas as outras pessoas fazem - não fazer isso.

    
por 21.10.2011 / 06:41