2

У меня есть несколько рабочих станций Windows 7/2008 в моей доменной среде. у нас есть объект групповой блокировки, который автоматически блокирует окно, если над ним никто не работает (в режиме ожидания). (Нет заставки просто заблокировать)

Как я могу удаленно проверить, заблокирована ли удаленная рабочая станция или разблокирована? Я попытался запросить пользователя с помощью команды quser (проверено на пользователе, чьи окна заблокированы, или на другом пользователе, чьи окна разблокированы, тот же результат)

C:\>psexec \\REMOTEPC1 quser

 USERNAME              SESSIONNAME        ID  STATE   IDLE TIME  LOGON TIME
 USER1                 console             1  Active      none   1/24/2017 11:21 AM

Приведенный выше результат показывает STATE = ACTIVE, но я не могу запросить, если рабочая станция заблокирована / разблокирована. Как получить требуемый результат мгновенно с помощью команды или метода?

2 ответа2

1

Я не могу запросить, если рабочая станция заблокирована / разблокирована

Используйте следующий скрипт PowerShell (GetRemoteLogonStatus.ps1).

Этот скрипт вернет статус входа на локальный или удаленный компьютер. Типы возврата включают "Не вошли в систему", "Заблокировано", "Вошли в систему" и "Не в сети". Наиболее полезной частью этого является проверка того, находится ли компьютер в заблокированном состоянии, хотя другие типы возврата также могут быть полезны.

Это простая функция, и ее можно легко включить в более крупный скрипт. Типы возврата могут быть изменены на числа для вызывающего скрипта, чтобы легче анализировать возвращаемое значение.

# This function will return the logged-on status of a local or remote computer 
# Written by BigTeddy 10 September 2012 
# Version 1.0 
# Sample usage: 
# GetRemoteLogonStatus '<remoteComputerName>' 

function GetRemoteLogonStatus ($computer = 'localhost') { 
if (Test-Connection $computer -Count 2 -Quiet) { 
    try { 
        $user = $null 
        $user = gwmi -Class win32_computersystem -ComputerName $computer | select -ExpandProperty username -ErrorAction Stop 
        } 
    catch { "Not logged on"; return } 
    try { 
        if ((Get-Process logonui -ComputerName $computer -ErrorAction Stop) -and ($user)) { 
            "Workstation locked by $user" 
            } 
        } 
    catch { if ($user) { "$user logged on" } } 
    } 
else { "$computer Offline" } 
}

Source Get Remote Logon Status - Powershell

0

Я забыл обновить пост. Поскольку я использую свой Ubuntu box для управления большинством функций Active Directory с помощью сценариев Webmin/BASH, поэтому я создал небольшой сценарий bash, который запрашивает удаленные окна, вошедшие в систему в сеансе пользователя, и состояние заблокированных / разблокированных окон.

Результат:

root@linux:/temp# /temp/winuserstatus.sh WORKSTAION-1

Remote PC = WORKSTAION-1
IP Details =
Address: 10.0.0.20
Address: 10.0.0.21

User Status = Logged in User found ... details as below ...
jahan.zaib console 13 Active 1+00:53 1/23/2017 1:57 PM
Windows Status = Windows is LOCKED

Сценарий bash выполняет следующие действия:

  • Проверьте состояние PING удаленного ПК, если ping не удается, завершите работу с ошибкой

Получить удаленный IP-адрес Windows через NSLOOKUP, используя локальный DNS

Текущий зарегистрированный пользователь и его статус

Текущее состояние окон либо заблокировано / разблокировано.

TRIM результаты и отображение в соответствии с нашим вкусом

Я выложил подробности здесь

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .