远程会话退出的PowerShell日志记录

37

我正在尝试制定一个Powershell命令来远程注销用户。我们有一台带有非常不稳定程序的终端服务器,有时会锁定会话。我们需要远程注销用户,但我正在尝试编写一个PowerShell语句,将注销运行该脚本的人。我在Google上搜到了这个命令:

Invoke-Command -ComputerName MyServer -Command {shutdown -l}

但是,该命令返回“不正确的函数”错误。我可以在括号中成功运行其他命令,例如Get-Process。

我的想法是将其放入用户可以运行的脚本中,以使他们注销服务器(因为当它锁定时,他们无法访问开始菜单或ALT + CTRL + END来通过GUI进行操作)。

流程如下: Bob通过RDP登录MyServer,但他的会话卡住了。在他的本地桌面上,他可以运行包含类似上述命令的MyScript,这将注销他在MyServer上的会话。


请查看此处 https://dev59.com/FKDia4cB1Zd3GeqPJtLu#43352906 - LT-
12个回答

0
以下简单的脚本将注销同一台计算机中所有已断开连接的用户。
$hostname = hostname
if (Test-Connection -ComputerName $hostname -Quiet -Count 1){
    $result = query session /server:$hostname
    $rows = $result -split "`n" 
    foreach ($row in $rows) {   
        if ($row -NotMatch "services|console" -and $row -match "Disc") {
            $sessionusername = $row.Substring(19,20).Trim()
            $sessionid = $row.Substring(39,9).Trim()
            Write-Output "Logging Off RDP Disconnected Sessions User $sessionusername"#, $session[2], $session[3]"
            logoff $sessionid /server:$hostname
        }
    }
}

输出将会是

Logging Off RDP Disconnected Sessions User xyz

0

这是我想出来的。结合了多个答案。

#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    
}

 }
 }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接