我们有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
答案 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“开始”菜单项上右键单击,然后选择“以不同用户身份运行”。