PowerShell Search and Close Servers Session Automaticlly
2011-06-21 16:40
260 查看
如下脚本是源于因为我在公司工作时时常需要登录多台服务器,每次下班时可能会忘记一天之中登陆过哪些服务器或者没有正常退出,导致占用了1个Sesssion,而别人在登陆本台服务器时提示人数已满,为了避免此类麻烦而写,先看下整体代码:
运行界面如下:(因为一些敏感信息,我已用红色涂抹)
这里我先给大家简要罗列下执行步骤:
1、先运行放在服务器上的脚本,然后可以选择添加参数,参数为各区域的服务器名(可以自己根据配置文件定义)。
2、输入要查询的登陆用户名
3、接下来就会根据之前组合的参数查询指定区域范围的服务器,如搜索到给出服务器列表
4、(做判断)是否关闭session
其实核心代码主要是2个,一是调用windows的2个命令[qwinsta]和[rwinsta],二是检索和验证的功能块。[qwinsta]和[rwinsta]这2个命令分别是用来查询本台计算机有哪些用户已经登陆到本机和关闭断开指定的用户连接。
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个命令分别是用来查询本台计算机有哪些用户已经登陆到本机和关闭断开指定的用户连接。
相关文章推荐
- UNIGUI:How to redirect and close session?
- SharePoint 2007 Full Text Searching PowerShell and CS file content with SharePoint Search
- vim :nerdtree close automaticlly
- Add and Search Word - Data structure design - LeetCode
- 检查和修复mysql表:mysql table is marked as crashed and last (automatic?) repair failed
- Script To Monitor RDBMS Session UGA and PGA Current And Maximum Usage Over Time
- Search and Replace搜寻与替换工具
- Installing Oracle and ArcSDE on separate servers
- 【Data Structures】 3. ArrayList and Binary Search
- 6.00 Introduction to Computer Science and Programming Lec 9: Lecture 9: Memory and Search Methods
- LeetCode: Add and Search Word - Data structure design
- Warning: session_write_close() [function.session-write-close]:..\index.php on line 44
- Create a httpmodule and session authentification
- Leetcode - Add and Search Word - Data structure design
- Binary search and its variation
- 项目经验分享--今天数据库的一张表挂了is marked as crashed and last (automatic?) repair failed
- 【LeetCode】211. Add and Search Word - Data structure design
- Fine-Grained Recognition with Automatic and Efficient Part Attention
- PowerShell----Automatic_Variables(预定义变量)
- Divide and Conquer -- Leetcode problem240. Search a 2D Matrix II