Forçar logoff imediato do usuário autenticado (caso de emergência)

24

No Active Directory, se você deseja impedir que um usuário efetue login, você pode desativar a conta ou simplesmente redefinir a senha. No entanto, se você possui um usuário que já está conectado a uma estação de trabalho e precisa impedi-lo de acessar qualquer recurso o mais rápido possível - como você faz isso? Falo de uma situação de emergência em que um trabalhador é demitido com efeito imediato e existe o risco de causar estragos se não for bloqueado imediatamente para fora da rede.

Alguns dias atrás, fui confrontado com um caso semelhante. No começo, eu não tinha certeza de como agir. Impedir o acesso do usuário a compartilhamentos de rede é fácil, mas isso não é suficiente. Eventualmente, desliguei o computador de destino com o Stop-Computer -ComputerName <name> -Forcecmdlet do PowerShell e, no meu caso, isso resolveu o problema. No entanto, em alguns casos, essa pode não ser a melhor opção, digamos, se o usuário que você precisa cortar estiver conectado em várias estações de trabalho ou em um computador que fornece um serviço importante e você simplesmente não pode desligá-lo.

Qual é a melhor solução possível para forçar remotamente um logoff imediato do usuário em todas as estações de trabalho? Isso é possível no Active Directory?

Erathiel
fonte
5
Boa pergunta, e estou interessado em ver as respostas. No entanto, em uma situação como essa, o funcionário demitido não estaria com uma escolta de RH 100% do tempo desde o momento em que recebe a notícia de sua demissão até ser escoltado do prédio?
EEAA 14/02
Sim, claro que deveriam. No entanto, estou interessado em resolver esse problema do Active Directory :) #
Erathiel 14/02/14
Ligue para a segurança e faça com que eles vão fisicamente para o local da pessoa e os remova? Se eles estiverem fora da sua rede, bloqueie-os no seu firewall? Use o script do PowerShell para eliminar todos os processos em todos os seus computadores executando com essa conta de usuário.
precisa

Respostas:

20

Melhor solução: um segurança escolta a pessoa para fora ...

Segunda melhor solução:

  1. Primeiro, verifique o número da sessão com qwinsta: QWINSTA / server: computername
  2. Anote o ID da sessão.
  3. Em seguida, use o comando logoff: LOGOFF sessionID / server: computername.
C:\>qwinsta /?
Display information about Remote Desktop Sessions.

QUERY SESSION [sessionname | username | sessionid]
              [/SERVER:servername] [/MODE] [/FLOW] [/CONNECT] [/COUNTER] [/VM]

  sessionname         Identifies the session named sessionname.
  username            Identifies the session with user username.
  sessionid           Identifies the session with ID sessionid.
  /SERVER:servername  The server to be queried (default is current).
  /MODE               Display current line settings.
  /FLOW               Display current flow control settings.
  /CONNECT            Display current connect settings.
  /COUNTER            Display current Remote Desktop Services counters information.
  /VM                 Display information about sessions within virtual machines.


C:\>logoff /?
Terminates a session.

LOGOFF [sessionname | sessionid] [/SERVER:servername] [/V] [/VM]

  sessionname         The name of the session.
  sessionid           The ID of the session.
  /SERVER:servername  Specifies the Remote Desktop server containing the user
                      session to log off (default is current).
  /V                  Displays information about the actions performed.
  /VM                 Logs off a session on server or within virtual machine. The unique ID of the session needs to be specified.

Eu escrevi um script em lote rudimentar para isso. Eu preciso de alguns unixtoolsno caminho, bem como psexec.

@ECHO OFF
:: Script to log a user off a remote machine
::
:: Param 1: The machine
:: Param 2: The username

psexec \\%1 qwinsta | grep %2 | sed 's/console//' | awk '{print $2}' > %tmp%\sessionid.txt
set /p sessionid=< %tmp%\sessionid.txt
del /q %tmp%\sessionid.txt
psexec \\%1 logoff %sessionid% /v
ETL
fonte
2
É possível combinar esses dois comandos em um arquivo automatizado de lote / PowerShell? Pode ser muito útil executar apenas um script rápido para sair de todas as sessões.
EtherDragon 14/02
1
É possível obter uma lista de todos os computadores aos quais um usuário está conectado?
NothingsImpossible
@NothingsImpossible - a maneira como descubro isso é olhando para o meu servidor de arquivos, já que os usuários têm perfil redirecionado para um servidor, eu procuro sessões de compartilhamento de arquivos abertas.
ETL
@NothingsImpossible I tendem a conseguir isso usando PsLoggedOn
BE77Y
5

Não é totalmente baseado em AD, mas deve fazer o que você deseja.

Desativar ou expirar conta

import-module activedirectory
set-aduser -identity "username" -accountexperationdate "12:09 pm"

ou

set-aduser -identity "username" -enabled $false

Em seguida, desconecte o usuário da máquina

shutdown -m "\\computername" -l

Outra maneira de fazer logoff do usuário é usar um utilitário interno do Windows, em um prompt de comando administrativo

logoff 1 /SEVER:computername

Isso faz o logon da sessão 1 do computador remoto. Se você não souber o ID da sessão (1 é o padrão), poderá usar o quser na máquina remota para encontrá-lo.

David V
fonte
1
Isso desligará a máquina, não desconectará o usuário, pensou, qual era a pergunta.
slybloty
2
Por favor, não me interpretem mal, mas sua resposta é precisamente o que eu não queria e incluí tudo isso na minha pergunta: desabilitar / expirar a conta ou alterar a senha não força o logoff do usuário, apenas os impede de fazer logon no qual não é útil no caso descrito no OP.
Erathiel 14/02
3
O shutdowncomando por padrão não é realmente desligado, mas efetua logoff do usuário .
Michael Hampton
Adicionado um método alternativo para desconectar o usuário, deixe-me saber se isso é mais parecido com o que você está procurando. Edit: Não viu a resposta do ETL, então deu a ele +1 por me dar um soco.
David V
3
As políticas no meu trabalho normalmente são assim: a pessoa é chamada para uma "reunião" (encerramento), enquanto na reunião a conta é desativada e a sessão é desconectada remotamente (os desktops têm servidores VNC protegidos instalados).
Avery Payne
4

Você pode bloquear a sessão do usuário remotamente com wmic:

1 - Primeiro, altere a senha do usuário:

C:\> wmic /node:[IPaddr] /user:[Admin] /password:[password] process call
  create "net user [user] [NewPassword]"

2 - Desative a conta:

C:\> wmic /node:[IPaddr] /user:[Admin] /password:[password] process call
  create "net user [user] /active:no"

3 - Em seguida, desconecte a sessão do usuário:

C:\> wmic /node:[IPaddr] /user:[Admin] /password:[password] process call
  create "tsdiscon"

Isso tem um valor agregado, já que você não perderá a sessão do usuário atual e, portanto, ao desbloquear as estações de trabalho, poderá ver se ele estava tentando fazer algo desagradável antes de ser levado até a porta.

Todos os créditos no Blog Kung Fu da Linha de Comando . Há um monte de coisas loucas relacionadas à segurança / forense lá!

ATUALIZAÇÃO: as duas primeiras etapas são destinadas a usuários locais, em um ambiente de diretório ativo é realmente mais fácil, desabilite a conta e altere a senha no AD e execute o terceiro comando no endereço IP do usuário mal-intencionado.

Gabriel Talavera
fonte
Infelizmente, o comando wmic..."tsdiscon" funciona apenas no XP . No Vista + este comando não pode desconectar a sessão do console.
Eu digo Restabelecer Monica
0

Basta alterar as horas de logon para logon negado por todas as horas nas propriedades do usuário. Isso os desconectará imediatamente de onde quer que eles estejam conectados.

Guestposter
fonte