testing用户是否在networking上loginPC

如何检查特定用户是否在我的活动目录networking上的特定计算机上login? 我是这个networking的pipe理员,宁愿用PowerShell来做,但我愿意接受其他的select。

来自SysInternals的好人PSLoggedOn会这样做。

这里有一个小小的function,我勉强在PowerShell中做到这一点,而不需要PSLoggedOn。

这是非常粗糙的,当然可以使用一些波兰语,但它演示了重要的信息:使用Get-WmiObject并查询Wim32_ComputerSystem类的用户名属性。

不幸的是,我认为这只适用于本地login的用户 – 您将无法通过此方法查看某个人是否通过RDPlogin。

代码如下:

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 } 

我已经创build了一个基于这个链接的PowerShellfunction。 它显示了psloggedon命令的一些文本,我仍然不知道如何删除和function有一个改善的空间掠夺…但它的作品,所以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." } }