Uma boa maneira de reiniciar todos os computadores em um domínio do Windows todas as noites

9

Qual é uma boa maneira de reiniciar uma lista de computadores com 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, faça recomendações para um script.

Posso listar os nomes dos hosts e repetir os nomes dos hosts para enviar um comando de reinicialização para cada um? 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, do mais ao menos desejável, são: PHP, javascript, Bash, Python (sei muito pouco), VB (sei, mas não gosto)

a vapor
fonte
8
vire o disjuntor. Eu brinco
gravyface
isso causaria um desligamento, preciso de uma reinicialização.
usar o seguinte
@JM - não se eles estiverem definidos como "Reiniciar estado de energia anterior" no BIOS.
Fake Name
Nome @Fake - que soa como um monte de trabalho
steampowered

Respostas:

15

Se o GPO não é o seu problema, e você deseja ir com a segunda opção de Mark Henderson (lote shutdown /m), você pode facilitar seu trabalho enviando o desligamento em lote para que ele seja executado em paralelo e não em série. 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 esse fragmento faz é gerar tantos trabalhos em segundo plano executados em paralelo quanto as máquinas em $ ComputerList. Isso pode fazer com que o desligamento do All The Things aconteça muito mais rápido.

sysadmin1138
fonte
2
Esta é uma solução interessante - se você tiver muitos computadores para reinicializar, recomendo essa solução, pois ela executará os comandos de desligamento em paralelo.
Richard West
2
A -AsJobé a magia pouco aqui.
Jscott #
Estou curioso para saber por que você está usando o comando "shutdown" em vez do cmdlet Restart-Computer.
precisa saber é o seguinte
@CharlesBurge Isso foi respondido 5 anos atrás e o PS3 não foi amplamente implantado. Além disso, isso demonstra a técnica de executar comandos em outros sistemas. Em 2017, faríamos tudo no PowerShell e não nos incomodaríamos com os comandos. Os tempos mudam.
sysadmin1138
7

Você pode fazer isso com as Preferências de Diretiva de Grupo criando 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 que possuem seus computadores.

Você provavelmente desejará usar a opção "Executar este programa em um intervalo aleatório" definida entre 10 e 15 minutos. Ter todos os computadores ligados ao mesmo tempo pode ser ruim para os disjuntores, se você não tomar cuidado. Você também pode marcar a opção para executar a tarefa apenas se o computador estiver ocioso por x horas, caso alguém esteja puxando a noite toda. Você não quer matar uma noite inteira de trabalho reinicializando alguém que está tentando estabelecer um prazo.

MDMarra
fonte
Não estou familiarizado com a configuração de tarefas agendadas com o GPO, por isso estou me perguntando: se uma máquina for movida de uma UO para outra sem a tarefa definida, a Tarefa de barramento desaparecerá ou permanecerá após ser aplicada pela primeira vez?
MaCuban
6

Duas opções:

  1. Crie uma tarefa agendada via GPO que seja executada shutdown /r /f /t 0ou shutdown /g /f /t 0em cada máquina que você deseja reiniciar. (confira shutdown /?para mais detalhes.

  2. Crie um lote que é executado a shutdown /m [computer name] /r /f /t 0partir de um computador central (talvez o controlador de domínio?). Faça um loop para cada computador que você deseja reiniciar (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 com direitos para reiniciar os computadores.

Você deve poder escrever um arquivo em lotes que percorre uma lista de computadores extraídos do diretório ativo e executa o comando, no entanto, não tenho tempo para escrever um hoje (e não estou disposto a testá-lo, mesmo que Eu escrevi, caso contrário, eu estaria preparado para reiniciar todos os computadores no meio do dia).

Mark Henderson
fonte
Além disso, há um comando PsShutdown que pode ser executado através de um arquivo de lote, bem como, parte da suíte sysinternals ...
Bart Silverstrim
Eu usei 1 e 2. Agora me divirto com o Powershell. Se estiver usando o número 2, considere o processo principal de geração de script separado para cada computador (por exemplo start cmd /c shutdown /m computer /r /f /t 0) ou use alguma lógica para verificar se está online, caso contrário, o atraso para computadores offline pode ser significativo.
Jscott # 21/11
4

A melhor maneira de fazer isso é demitir a pessoa que tem a idéia de que isso é necessário e fazer o que todas as outras pessoas fazem - não faça isso.

TomTom
fonte
O redirecionamento de pasta parece estar vinculando recursos quando as pessoas ficam logadas da noite para o dia. Suponho que eu poderia tentar configurar um logout em massa em vez de uma reinicialização em massa, mas a reinicialização parece resolver muitos problemas. As pessoas passam semanas ou meses sem reiniciar. Normalmente, não invisto muito tempo para aprender a maneira correta de executar sistemas Windows, porque esse não é meu trabalho principal. O que você recomenda?
steampowered
1
Ah não. Toneladas de empresas não exigem que seu pessoal seja reinicializado - você acha que elas nunca usam o redirecionamento de pastas? Sugiro corrigir o problema em questão. Pessoalmente, eu ficaria chateado se eu estivesse desconectado da minha estação de trabalho todos os dias - eu geralmente deixo os trabalhos funcionarem da noite para o dia. Sua preguiça pode custar muitas dificuldades para as pessoas - faça seu trabalho corretamente ou contrate alguém que o faça.
TomTom
Bem, fazer o meu trabalho corretamente significa não gastar muito tempo cuidando do nosso pequeno sistema Windows.
steampowered
Não sabendo o que você faz? ;) Demito pessoas dizendo que são incompetentes no trabalho, independentemente do desempenho delas.
TomTom
O sysadmin é um trabalho secundário que faço para minha família ajudá-los. Se eu tivesse tempo infinito com certeza, leria mais livros nas janelas e outras tangentes. Mas minha melhor maneira de ganhar dinheiro é manter o software da web. Eu acho que você respondeu que não tinha o espírito de oferecer uma solução técnica para a pergunta que fiz.
usar o seguinte