End RemoteDesktop Session and Standby
create a batch file (or really something) which i can activate from my remote-pc to end the session and put the pc to sleep (does not have to log out the user)
Dois exemplos de scripts abaixo:
- com
LOGOFF
; e, - outro com um RDP
DISCONNECT
(sem logoff)
Eu não tinha certeza se você queria um ou outro, então eu coloquei os dois abaixo, que deve funcionar bem a partir do Windows 7 do que eu testei.
Para o script de logoff, coloco alguma lógica if para não fazer logoff das sessões de escuta do console, do sistema ou do rdp-tpc, já que você só é interessante em sessões remotas conectadas ao RDP.
Para o script de desconexão, você simplesmente desconectará a sessão que a executa, conforme necessário, de modo que não há necessidade de lógica adicional neste (essa é a que você provavelmente precisará) .
A suposição é que você executará isso como um script em lote salvo manualmente e, se decidir usar o script de logoff em vez do script de desconexão, terá permissão para fazer logoff de todas as sessões aplicáveis.
SCRIPTS DE LOTE
(Este script também irá esperar 5 segundos após a desconexão da sessão atual e, em seguida, colocar o PC para dormir.)
Exemplo de script em lote ( DISCONNECT
todas as sessões)
@ECHO OFF
::: Disconnected current RDP session
TSDISCON
::: Pause 5seconds before going to sleep ensuring enough time
PING -n 5 127.0.0.1 > NUL
::: Put computer to sleep
%systemroot%\System32\rundll32.exe powrprof.dll,SetSuspendState 0,1,0
GOTO EOF
(Este script também irá esperar 30 segundos após o logoff de todas as sessões e, em seguida, colocar o PC para dormir.)
AVISO: Este script não poderá ser executado ad hoc clicando duas vezes nesse arquivo em lote para as necessidades do OP especificamente, mas eu o mantive aqui como um item bônus no caso de alguém encontra uso com isso de outra forma. Como ele efetuará logoff das contas antes da execução da lógica do sono, essa lógica de suspensão não funcionará nesse caso específico. Isso precisaria ser executado a partir do Agendador de Tarefas, with Highest Privileges
e Run whether the user is logged on or not
- supus que você poderia configurar dessa forma e NÃO em um agendamento e apenas iniciar / executar conforme necessário do Agendador de Tarefas também. (captura de tela abaixo)
Exemplo de script em lote ( LOGOFF
todas as sessões)
@ECHO OFF
FOR /F %%S IN (
'"QUERY SESSION /SM"'
) DO (
IF NOT %%~S==0 IF NOT %%~S==1 IF NOT %%~S==65536 RWINSTA %%~S
)
::: Pause 5 seconds before going to sleep ensuring enough time
PING -n 5 127.0.0.1 > NUL
::: Put computer to sleep
%systemroot%\System32\rundll32.exe powrprof.dll,SetSuspendState 0,1,0
GOTO EOF
Opções de tarefas agendadas da captura de tela