2017-02-16 49 views
0

我们有3台终端服务器,最终每天都要启动用户。我对PS完全陌生并且学习了我所能做的,但是在这里遇到问题。确定使用哪个TS用户,然后用备用凭证强制注销用户?

脚本提示输入用户名,然后搜索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

使用具有足够权限的帐户打开PowerShell窗口,然后运行脚本。 –

回答

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

,或者(和简单一点),你可以使用shift +右键点击PowerShell/ISE开始菜单项,然后选择'以d运行不同的用户“。

+0

谢谢,我会仔细研究并试验,并试图了解发生了什么,因为我想强迫自己学习PS。 但我想再次说明,我的普通帐户对TS上的RDUserLogoff没有权限,那么是否有办法使用具有权限的其他帐户运行该调用命令? –

+0

现在我会坚持使用简单的解决方案 - 如果您只想将用户从TS会话中踢出,请尝试使用懒人。 'Invoke-RDUserLogOff'没有'-Credential'参数,所以你必须像其他用户一样运行脚本块,作业或PS会话。我会添加几个链接到我的答案,给你一些想法。 – TechSpud