确定哪个TS用户已启用,然后使用备用凭据强制注销用户?

时间:2017-02-16 15:46:27

标签: powershell

我们有3台终端服务器,最终每天都要启动用户。我是PS的新手并且学习我能做什么,但是在这里遇到问题。

脚本会提示输入用户名,然后搜索3台服务器,找到他们所在的服务器并提供他们的会话ID。然后我必须输入服务器#和会话ID并运行Invoke-RDUserLogoff命令,但问题是,我需要运行该命令作为我的域管理员帐户...我的标准用户帐户没有权限执行此操作。

也许还有一种完全不同/更好的方法吗?

提前致谢。

$user = read-host -prompt "What is the USERNAME you need to disconnect?"

$term1 = qwinsta /server:ts1 | findstr "$user"
$term2 = qwinsta /server:ts2 | findstr "$user"
$term3 = qwinsta /server:ts3 | findstr "$user"

write-host TS1
$term1

write-host TS2
$term2

write-host TS3
$term3

$term = read-host -prompt "Which terminal server is the user on? (1, 2, or 3?)"
$id = read-host -prompt "To logoff the user, enter their ID #:"

Invoke-RDUserLogoff -HostServer ts$term -UnifiedSessionID $id -Force 

1 个答案:

答案 0 :(得分:0)

以下是捕获服务器匹配的快速而简单的方法。如果您搜索用户'a.paris'并且有一个'a.paris2'用户登录,它将返回误报。如果有多个匹配项,$tsId捕获将失败。

$user = Read-Host -prompt "What is the USERNAME you need to disconnect?"
'ts1','ts2','ts3' | ForEach-Object {
  $server = $_
  $result = qwinsta /server:$server | Where-Object { $_ -match $user }
  if($result) {
    $tsId = ($result.Trim() -replace '\s+',',').Split(',')[1]
    Invoke-RDUserLogoff -HostServer $server -UnifiedSessionID $tsId -Force 
  }
}

$tsId行修剪结果行,用逗号替换空格。 Id是数组的第二个元素(PowerShell数组从零开始 - 因此是1

编辑1 :如果你所有人都是用来启动用户的GUI,那么试试这个: http://www.lazywinadmin.com/p/lazyts.html

编辑2 :如果您想以其他用户身份运行,请参阅两个有关创意的答案:SF; SO

或者,或者(稍微简单一些),您可以在PowerShell / ISE“开始”菜单项上右键单击,然后选择“以不同用户身份运行”。