Teste se o usuário logado no PC na rede

4

Como posso verificar se um usuário específico está logado em um computador específico na minha rede de diretórios ativa? Eu sou administrador nesta rede e preferiria fazê-lo com o powershell, mas estou aberto a outras opções.

    
por Artur Carvalho 18.07.2011 / 11:17

3 respostas

3

PSLoggedOn do pessoal da SysInternals fará isso.

    
por 18.07.2011 / 13:05
2

Aqui está uma pequena função que eu preparei para fazer isso nativamente no powershell, sem precisar do PSLoggedOn.

É muito difícil e certamente poderia usar algum refinamento, mas demonstra as informações importantes: use Get-WmiObject e consulte a classe Wim32_ComputerSystem para obter a propriedade username.

Infelizmente, acho que isso é preciso apenas para usuários conectados localmente - você não poderá ver se uma pessoa está conectada por RDP com esse método.

Este é o código:

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
}
    
por 21.07.2011 / 21:34
0

Eu criei uma função powershell com base neste link . Ele mostra algum texto do comando psloggedon que eu ainda não sei como remover e a função tem um monte de espaço para melhorias ... Mas funciona, então HTH outra pessoa.

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." }

}
    
por 19.07.2011 / 17:26