【发布时间】:2019-11-28 10:07:59
【问题描述】:
我正在尝试编写一个脚本,该脚本将注销没有在会话中运行特定进程的用户。
我猜工作流程应该是这样的: 获取所有登录用户的用户名,获取工作站上运行的所有进程列表,检查X进程是否为Y用户运行,如果没有,则注销用户Y。
到目前为止,我设法创建了所有当前登录用户的对象:
((quser) -replace '^>', '') -replace '\s{2,}', ',' | ConvertFrom-Csv
以及使用用户名运行的所有进程的列表:
get-process -IncludeUserName
我相信带有 if inside 的 foreach 应该可以完成这项工作,但我无法完全理解它。我将不胜感激。
谢谢!
编辑:
$process = get-process -IncludeUserName|Where-Object{
($_.ProcessName -Like "processIneed1*") -or
($_.ProcessName -Like "processIneed2*") -or
($_.ProcessName -Like "processIneed") -or
($_.ProcessName -like 'processIneed3*') -and
($_.username -notlike '*userIwantToSkip1*') -and
($_.username -notlike '*userIwantToSkip2*')
}
$users = Get-RDUserSession | Where-Object -Property UserName -NE 'administrator'
$ActiveUsers = $users.username
foreach ($ProcUser in $process.username){
foreach ($ActiveUser in $ActiveUsers){
if ($ProcUser -like "*$ActiveUser*"){
$ActiveUsers = $ActiveUsers -notlike "*$ActiveUser*"
}
}
}
在$activeusers 中,我们留下了不活跃的用户。
我很可能会将用户名更改为会话 ID 并以这种方式进行检查。
下一步将注销断开连接的用户。
【问题讨论】:
-
[1] 将相关进程的名称添加到您的
Get-Process调用中。 [2] 将其保存到 $Var。 [3] 使用foreach循环遍历您的quser列表。 [4] 检查当前 quser 项是否与进程列表中的名称匹配。 [5] 为每个案例做适当的事情。 [咧嘴] -
@Lee_Dailey 至于选择我需要的进程
get-process -IncludeUserName | Where ($_.ProcessName -eq 'rdpshell')不起作用,我做错了吗? -
Get-Processcmdlet 有一个-Name参数......这就是我所指的。 [grin] 类似的东西>>>Get-Process -Name 'thunderbird' -IncludeUserName
标签: powershell