PSLoggedOn do pessoal da SysInternals fará isso.
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.
PSLoggedOn do pessoal da SysInternals fará isso.
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
}
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." }
}