您的位置:首页 > 运维架构 > Shell

PowerShell Search and Close Servers Session Automaticlly

2011-06-21 16:40 260 查看
如下脚本是源于因为我在公司工作时时常需要登录多台服务器,每次下班时可能会忘记一天之中登陆过哪些服务器或者没有正常退出,导致占用了1个Sesssion,而别人在登陆本台服务器时提示人数已满,为了避免此类麻烦而写,先看下整体代码:

param(
$serverList= $(Get-Content //server02/E$/tools/pscloseservers/all.txt)
)
Write-Host `n"Enter your alias you've searched:"
#get search name
$userName = Read-Host
#choose the servers name depends on file name
$serverList = Get-Content "//server02/E$/tools/pscloseservers/$serverList.txt"
$logs = @()
$HOSTNAME = hostname
#**********define a color result function***********
function OutputGreen
{
Write-Host CLOSED -ForegroundColor Green
}
function OutputRed
{
Write-Host FAILED -ForegroundColor Red
}
#***************************************************

#************get the correct user name*************
$searchTime = Measure-Command{
Write-Host `nSearching now...
foreach($serverName in $serverList)
{
$serverInfo = qwinsta /server:$serverName
if($serverInfo -match "$userName" -and $serverName -notmatch $HOSTNAME)
{
$logs += $serverName
}
}
$logs|Out-File E:/temp.temp}|?{$_.TotalSeconds}
#*************************************************
if($logs.Count -eq 0)
{
Write-Host "Sorry, <$userName> was not found on Servers.`n" -ForegroundColor Yellow
}
else
{
Write-Host `n"There are [" $logs.Count "] sessions on servers as shown in here:"
Get-Content E:/temp.temp

Write-Host "Would you close the session? <Y/N>"
$request = Read-Host
$runTime = Measure-Command{
$clsServer = Get-Content E:/temp.temp

if($request -eq "Y")
{
foreach($closeServer in $clsServer)
{
# get a job id number
$jobInfo = qwinsta /Server:$closeServer | findstr $userName
for($num=1; $i -le 50; $num++)
{
if($jobInfo -match " $num") # add the space " $num"
{
$jobID = $num
break
}
}

$verifyInfo = rwinsta /Server:$closeServer $jobID

if($verifyInfo -notmatch $userName)
{
Write-Host "$closeServer      " -NoNewline
OutputGreen
}
else
{
Write-Host "$closeServer      " -NoNewline
OutputRed
}
}
}
}|?{$_.TotalSeconds}
Write-Host `nClose_Time: $("{0:N}" -f $runTime)
}
Write-Host Search_Time: $("{0:N}" -f $searchTime)`n


运行界面如下:(因为一些敏感信息,我已用红色涂抹)



这里我先给大家简要罗列下执行步骤:

1、先运行放在服务器上的脚本,然后可以选择添加参数,参数为各区域的服务器名(可以自己根据配置文件定义)。

2、输入要查询的登陆用户名

3、接下来就会根据之前组合的参数查询指定区域范围的服务器,如搜索到给出服务器列表

4、(做判断)是否关闭session

其实核心代码主要是2个,一是调用windows的2个命令[qwinsta]和[rwinsta],二是检索和验证的功能块。[qwinsta]和[rwinsta]这2个命令分别是用来查询本台计算机有哪些用户已经登陆到本机和关闭断开指定的用户连接。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: