Выйти из системы всех пользователей, кроме одного - PullRequest
0 голосов
/ 05 июля 2019

У меня есть этот скрипт для выхода из системы всех отключенных пользователей от сервера. Проблема в том, что один из них должен быть отключен и не может выйти из системы.

Проблема в том, что скрипт работает со строковым результатом из query user, и я не знаю, как изолировать одного из пользователей.

$server = "localhost";

# Get all RDP sessions
$sessions = query user /server:$server | select -Skip 1;

# Loop through each session/line returned
foreach ($line in $sessions) {
    $line = -split $line;

    # Check for missing SessionName field/column
    if ($line.length -eq 8) {
        # Get current session state (column 4)
        $state = $line[3];

        # Get Session ID (column 3) and current idle time (column 5)
        $sessionid = $line[2];
        $idletime = $line[4];
    } else {
        # Get current session state (column 3)
        $state = $line[2];

        # Get Session ID (column 2) and current idle time (column 4)
        $sessionid = $line[1];
        $idletime = $line[3];
    }

    # If the session state is Disconnected
    if ($state -eq "Disc") {
        # Check if idle for more than 1 day (has a '+') and log off
        if ($idletime -like "*+*") {
            logoff $sessionid /server:$server /v
        } elseif ($idletime -like "*:*") {
            logoff $sessionid /server:$server /v
        }
    }
}

Это пример результата от query user. Пользователь, которого я хочу оставить как отключенный, это p.vbr.1

 USERNAME              SESSIONNAME        ID  STATE   IDLE TIME  LOGON TIME
 a2270725-3                               13  Disc      2+00:17  7/2/2019 1:50 PM
 a2232655-3                               14  Disc      4+09:54  7/1/2019 2:10 AM
 a2129521-3                               30  Disc      2+04:50  7/1/2019 4:52 AM
 a16991754-3                              49  Disc        22:51  7/1/2019 5:44 AM
 p.vbr.1                                  58  Disc      4+20:19  6/25/2019 11:20 AM
 a16990384-3                              59  Disc         1:43  6/27/2019 10:20 AM
 a2169135-3                               68  Disc      3+00:50  7/2/2019 11:13 AM
 a2289685-3                               79  Disc         6:40  7/2/2019 9:04 PM
>a2310806-3            rdp-tcp#93         85  Active          .  7/1/2019 9:05 AM
 a16991667-3                              98  Disc      3+00:31  6/26/2019 6:35 AM
 a2064837-3                              107  Disc         8:32  7/3/2019 12:47 AM
 a2282463-3                              108  Disc      2+01:51  7/3/2019 8:55 AM
 a2292833-3                              116  Disc      1+21:30  7/3/2019 2:06 PM
 a18005447-3                             126  Disc      8+20:09  6/26/2019 2:48 PM
 a2185113-3                              135  Disc         9:19  6/26/2019 9:14 PM
 a2067993-3                              139  Disc      1+03:58  7/4/2019 8:08 AM
 a2101008-3                              140  Disc         5:10  7/3/2019 10:00 PM
 a2256517-3                              141  Disc      1+03:32  7/4/2019 8:32 AM
 a2340150-3                              142  Disc        12:35  7/4/2019 9:53 PM
 a2076309-3                              143  Disc         3:37  7/5/2019 3:37 AM

Ответы [ 2 ]

1 голос
/ 05 июля 2019

Похоже, что имя пользователя будет заканчиваться на $line[0], поэтому просто добавьте это в начале цикла:

if ($line[0] -eq "p.vbr.1") {continue;}
0 голосов
/ 05 июля 2019

Рассмотрите возможность использования этого ConvertFrom-SourceTable командлета.
Он создает общие объекты из таблицы фиксированной ширины, что значительно упрощает чтение и управление сценарием:

$Query = query user /server:$server
$Sessions = ConvertFrom-SourceTable -Literal $Query

$Sessions | Where-Object {$_.State -eq 'Disc'} | ForEach-Object {
    If ($_.UserName -eq "p.vbr.1") {Continue}
    If ($_.'Idle Time' -like "*+*") {
        logoff $_.Id /server:$server /v
    } ElseIf ($_.'Idle Time' -like "*:*") {
        logoff $_.Id /server:$server /v
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...