【发布时间】:2019-05-25 09:15:53
【问题描述】:
我有这个 PowerShell 脚本可以在空闲时间超过 1 小时的情况下注销用户:
#Force script to run.
Set-ExecutionPolicy Unrestricted -force
#Check connected users and save output.
quser|out-file C:\Users\Administrator\Documents\disconectAgora\quser.txt
#Read output with logged in users.
$file = Get-Content C:\Users\Administrator\Documents\disconectAgora\quser.txt
#Obtain IDLE time by using patters.
$pattern = "Disc(.*?)11"
#Obtaons session ID by using patther.
$pattern2 = "adminagora(.*?)Disc"
#Execute query using above patterns.
$result = [regex]::Match($file,$pattern).Groups[1].Value
$result2 = [regex]::Match($file,$pattern2).Groups[1].Value
#Trim file and save both session id and username.
$result = $result -replace(' ','')
$result |out-file C:\Users\Administrator\Documents\disconectAgora\getDCUser.txt
$result2 = $result2 -replace(' ','')
$result2 |out-file C:\Users\Administrator\Documents\disconectAgora\getDCUserID.txt
#If IDLE time is greater than 1 hour user is disconnected.
if ($result -gt '1:00'){
logoff $result2
}
else{
write-host "No users with IDLE time greater than 1 hour found.No users to be logged off."
}
我要做的是检查 cmd 进程是否正在运行,以便用户可以保持登录状态,直到该进程结束。
我认为,也许通过运行此命令 get-process | where-object {$_.mainwindowhandle -ne 0} | select-object name, mainwindowtitle 并使用正则表达式仅获取 cmd 进程可能会成功,但这是一种非常原始的方法。
如果你们对如何执行此操作有任何线索,请告诉我。
根据要求,这是 quser 的输出:
长话短说
除了检查 CPU 使用率之外,我还需要一种方法来了解 CMD 是否正在执行某些操作:
【问题讨论】:
-
您应该发布实际代码而不是屏幕截图。如果有人想尝试一下,他们不会为了帮助你而坐下来重新输入。
-
你说得对,谢谢
-
如果您向我们展示您的(可能已本地化)
quser的示例输出,我认为您的大部分代码都可以使用命名捕获组通过 RegEx 缩短 -
为什么
$pattern中有11? -
@LievenKeersmaekers,它是用于测试目的,当我执行
quser时,我要提取的部分位于光盘和登录时间之间。在本例中,11是月份中的某一天。
标签: powershell session user-management usersession