Как я могу проверить, вошел ли конкретный пользователь в систему на определенном компьютере в моей сети 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." }
}