Назад | Перейти на главную страницу

Проверьте, вошел ли пользователь в ПК в сети

Как я могу проверить, вошел ли конкретный пользователь в систему на определенном компьютере в моей сети Active Directory? Я являюсь администратором этой сети и предпочел бы сделать это с помощью PowerShell, но я открыт для других вариантов.

PSLoggedOn от хороших ребят из SysInternals сделают это.

Вот небольшая функция, которую я придумал, чтобы сделать это изначально в PowerShell, не требуя PSLoggedOn.

Это очень грубо и, безусловно, может быть немного доработано, но оно демонстрирует важную информацию: используйте Get-WmiObject и запросите класс Wim32_ComputerSystem для свойства username.

К сожалению, я думаю, что это верно только для локально вошедших в систему пользователей - вы не сможете увидеть, вошел ли человек в систему через RDP с помощью этого метода.

Вот код:

function Test-LoggedOn {
    param(
        [parameter(Mandatory=$true,ValueFromPipeline=$true)][string]$username,
        [parameter(Mandatory=$true)][string]$computername
    )
    [regex]$pattern = "({\w}\\)?$($username.replace('\','\\'))"
    $wmi = Get-WmiObject -query "select username from win32_computersystem" -ComputerName $computername
    return $wmi.username -match $pattern
}

Я создал функцию PowerShell на основе этого ссылка на сайт. Он показывает некоторый текст команды psloggedon, которую я до сих пор не знаю, как удалить, и у функции есть много возможностей для улучшения ... Но она работает, так что HTH кто-то другой.

function UserLoggedOn{
    param($pc, $user)

    # creates an object with the fields Computer, Domain and User.  
    [object[]]$sessions = Invoke-Expression "d:\scripts\PsLoggedon.exe -x -l \\$pc" |
    Where-Object {$_ -match '^\s{2,}((?<domain>\w+)\\(?<user>\S+))|(?<user>\S+)'} |
    Select-Object @{ Name="Computer"
    Expression={"AGEXLUXS20"} 
    }, 
    @{ 
        Name='Domain' 
        Expression={$matches.Domain} 
    }, 
    @{ 
        Name='User' 
        Expression={$Matches.User} 
    }   

    $userfound = $false
    foreach($session in $sessions) {
        if ($session.User -eq $user) { $userfound = $true }
    }       

    if ($userfound) { Write-Host -ForegroundColor Green "$user is logged on \\$pc." }
    else  { Write-Host -ForegroundColor Red "$user is NOT logged on \\$pc." }

}