Powershell Log Off Remote Session

前端 未结 11 1187
情话喂你
情话喂你 2020-12-02 13:15

I am trying to formulate a Powershell command to remotely log off a user. We have a terminal server with a very unstable program that sometimes locks sessions. We have to re

相关标签:
11条回答
  • 2020-12-02 14:07

    here is what i came up with. combining multiple answers

    #computer list below
    $computers = (
    'computer1.domain.local',
    'computer2.domain.local'
    
    )
     
    foreach ($Computer in $computers) {
    
     Invoke-Command -ComputerName $Computer -ScriptBlock { 
      Write-Host '______  '$Env:Computername
      $usertocheck = 'SomeUserName'
    $sessionID = ((quser | Where-Object { $_ -match $usertocheck }) -split ' +')[2]
     
    
    If([string]::IsNullOrEmpty($sessionID)){            
        Write-Host -ForegroundColor Yellow  "User Not Found."           
    } else {            
        write-host -ForegroundColor Green  'Logging off ' $usertocheck 'Session ID' $sessionID
        logoff $sessionID    
    }
    
     }
     }
    
    0 讨论(0)
  • 2020-12-02 14:10

    Try the Terminal Services PowerShell Module:

    Get-TSSession -ComputerName comp1 -UserName user1 | Stop-TSSession -Force
    
    0 讨论(0)
  • 2020-12-02 14:14

    Adding plain DOS commands, if someone is so inclined. Yes, this still works for Win 8 and Server 2008 + Server 2012.

    Query session /server:Server100
    

    Will return:

    SESSIONNAME       USERNAME                 ID  STATE   TYPE        DEVICE
    rdp-tcp#0         Bob                       3  Active  rdpwd
    rdp-tcp#5         Jim                       9  Active  rdpwd
    rdp-tcp                                 65536  Listen
    

    And to log off a session, use:

    Reset session 3 /server:Server100
    
    0 讨论(0)
  • 2020-12-02 14:15

    Perhaps surprisingly you can logoff users with the logoff command.

    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.

    The session ID can be determined with the qwinsta (query session) or quser (query user) commands (see here):

    $server   = 'MyServer'
    $username = $env:USERNAME
    
    $session = ((quser /server:$server | ? { $_ -match $username }) -split ' +')[2]
    
    logoff $session /server:$server
    
    0 讨论(0)
  • 2020-12-02 14:15

    You can use Invoke-RDUserLogoff

    An example logging off Active Directory users of a specific Organizational Unit:

    $users = Get-ADUser -filter * -SearchBase "ou=YOUR_OU_NAME,dc=contoso,dc=com"
    
    Get-RDUserSession | where { $users.sAMAccountName -contains $_.UserName } | % { $_ | Invoke-RDUserLogoff -Force }
    

    At the end of the pipe, if you try to use only foreach (%), it will log off only one user. But using this combination of foreach and pipe:

    | % { $_ | command }

    will work as expected.

    Ps. Run as Adm.

    0 讨论(0)
提交回复
热议问题