Desligar clientes quando ninguém estiver logado em um horário especificado

2

Na nossa empresa, as pessoas param de trabalhar às 19h. Às 20h, executamos uma tarefa agendada com o GPO para avisar ao usuário conectado que o computador será desligado. Isso funciona bem.

Quando ninguém está logado e o computador ainda está em execução, gostaríamos de desligar o computador. Alguém tem alguma ideia de como fazer isso?

Nós executamos o Windows Server 2012 e nossos clientes são o Windows 7.

    
por glendc 28.04.2014 / 15:14

5 respostas

1

O desligamento do computador é bastante fácil - como outros notaram, você pode usar o comando shutdown para isso. Se você configurou os firewalls locais de suas máquinas para permitir SMB e RPC de hosts de gerenciamento (por exemplo, habilitando exceções de administração remota em políticas de grupo), você poderia disparar os desligamentos centralmente para todas as máquinas em seu domínio usando o parâmetro /m \computername para seu desligamento ligar:

shutdown /s /f /t 30 /m \pcXXX /c "Automatic shutdown"

Uma versão mais flexível do comando de desligamento é oferecida pela SysInternals como psshutdown . Entre outras coisas, permite a interação do usuário (ou seja, um usuário teria a oportunidade de interromper um pedido de desligamento, se desejado)

Agora, para determinar se um usuário está conectado a uma máquina, você teria que testar cada um deles, por exemplo, usando o comando quser . A saída típica ficaria assim:

C:\Users\denis>quser
 USERNAME              SESSIONNAME        ID  STATE   IDLE TIME  LOGON TIME
>denis                 console             1  Active      none   22.04.2014 15:11

Você pode filtrar por uma string como "Ativo" para determinar se pode desligar com segurança. Uma versão em lote pode ter esta aparência:

shutdownunused.bat

ping %1
if errorlevel 1 ( echo %1 seems offline && exit 1)
quser /SERVER:%1 | find "Active"
if %errorlevel% == 1 shutdown /s /f /t 30 /M \%1 /c "Automatic shutdown"

chamando shutdownunused.bat pc1234 testaria e desligaria o pc1234 se ele fosse a) pingável eb) não tivesse nenhum usuário logado ativamente (ele desligaria um host se o usuário estivesse logado, mas estivesse desconectado ou tivesse sua máquina bloqueada) . Isso pode ser feito por script do seu agrado - usando uma versão somente local como uma tarefa agendada ou acionado centralmente de um host de gerenciamento por meio da enumeração de todas as estações em seu domínio. A vantagem da última abordagem é que seria mais fácil manter registros e criar estatísticas.

    
por 07.05.2014 / 08:26
0

Fora do que foi mencionado sobre atualizações do Windows, verificações de AV e tempo de inicialização. Você pode aproveitar o mesmo GPO da tarefa agendada que está mencionando para executar um arquivo em lotes no computador com shutdown /f /t 0 .

Localização da política de grupo: Computer Configuration, expand the Preferences folder, and then expand the Control Panel Settings, Right-click the Scheduled Tasks node, point to New

.

    
por 28.04.2014 / 19:58
0

Nixphoe tem o comando que você está procurando. Algumas sugestões: Primeiro, ao criar a tarefa agendada, certifique-se de definir na guia "Condições" (em Criar nova tarefa) que ela não será acionada até que o computador fique ocioso por xxx minutos. Isso ajudará a evitar chamadas de usuários que ficam atrasados, tendo seus computadores "desligados" enquanto estão trabalhando.

Além disso, o uso de um arquivo em lote - embora bom - é desnecessário para um "one liner" como esse, você pode simplesmente ir para a aba "Action" em create new task, em "Program / Script" simplesmente digite " Shutdown "e sob argumentos" / s / f / t 30 "(ou qualquer número) ele irá executar a linha inteira

Shutdown /s /f /t 30

Sugiro / t 30 em vez de / t 0, já que isso dará ao usuário final um pequeno aviso antes de forçar o desligamento. Deixe-nos saber como é isso!

    
por 07.05.2014 / 06:25
0

Eu uso o seguinte comando em um arquivo de lote, que é então emitido para cada máquina selecionada como uma tarefa agendada pela minha solução de implantação:

for /f %%i IN ('quser ^| find /c /i "active"') DO (if %%i EQU 0 shutdown /s)
    
por 11.01.2015 / 09:28
0

Você também pode usar o CMDLet Stop-Computer. por padrão, se um usuário ainda estiver logado, ele não desligará o computador, nesse caso você precisaria usar -Force

    
por 17.09.2016 / 15:01