【问题标题】:Powershell script to log out users without specific processPowershell脚本在没有特定过程的情况下注销用户
【发布时间】: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-Process cmdlet 有一个-Name 参数......这就是我所指的。 [grin] 类似的东西>>> Get-Process -Name 'thunderbird' -IncludeUserName

标签: powershell


【解决方案1】:
$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*"
        }
    }
}

foreach ($inactiveusers in $ActiveUsers){
logoff $inactiveuser
}

【讨论】:

    猜你喜欢
    • 2015-10-26
    • 1970-01-01
    • 2015-10-20
    • 2018-09-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多