Подтвердить что ты не робот

Powershell script, чтобы видеть в данный момент зарегистрированных пользователей (домен и машину) + статус (активный, простой, прочь)

Я ищу простую команду для входа в систему на сервере. Я знаю это:

Get-WmiObject -Class win32_computersystem

но это не даст мне необходимую мне информацию. Он возвращает: домен Manufactureer Модель Имя (имя машины) PrimaryOwnerName TotalPhysicalMemory

Я запускаю Powershell 3.0 на сервере Windows 2012.

Также

Get-WmiObject Win32_LoggedOnUser -ComputerName $Computer | Select Antecedent -Unique

не дает мне точных ответов. Я хотел бы видеть также время простоя, или если они активны или прочь.

4b9b3361

Ответ 1

В поисках этого же решения я нашел то, что мне нужно, по другому вопросу в stackoverflow: Powershell-log-off-remote-session. Следующая строка возвращает список зарегистрированных пользователей.

query user /server:$SERVER

Ответ 2

Нет такой простой команды. Вы можете написать функцию или выбрать свой выбор из нескольких доступных в Интернете в различных хранилищах кода. Я использую это:

function get-loggedonuser ($computername){

#mjolinor 3/17/10

$regexa = '.+Domain="(.+)",Name="(.+)"$'
$regexd = '.+LogonId="(\d+)"$'

$logontype = @{
"0"="Local System"
"2"="Interactive" #(Local logon)
"3"="Network" # (Remote logon)
"4"="Batch" # (Scheduled task)
"5"="Service" # (Service account logon)
"7"="Unlock" #(Screen saver)
"8"="NetworkCleartext" # (Cleartext network logon)
"9"="NewCredentials" #(RunAs using alternate credentials)
"10"="RemoteInteractive" #(RDP\TS\RemoteAssistance)
"11"="CachedInteractive" #(Local w\cached credentials)
}

$logon_sessions = @(gwmi win32_logonsession -ComputerName $computername)
$logon_users = @(gwmi win32_loggedonuser -ComputerName $computername)

$session_user = @{}

$logon_users |% {
$_.antecedent -match $regexa > $nul
$username = $matches[1] + "\" + $matches[2]
$_.dependent -match $regexd > $nul
$session = $matches[1]
$session_user[$session] += $username
}


$logon_sessions |%{
$starttime = [management.managementdatetimeconverter]::todatetime($_.starttime)

$loggedonuser = New-Object -TypeName psobject
$loggedonuser | Add-Member -MemberType NoteProperty -Name "Session" -Value $_.logonid
$loggedonuser | Add-Member -MemberType NoteProperty -Name "User" -Value $session_user[$_.logonid]
$loggedonuser | Add-Member -MemberType NoteProperty -Name "Type" -Value $logontype[$_.logontype.tostring()]
$loggedonuser | Add-Member -MemberType NoteProperty -Name "Auth" -Value $_.authenticationpackage
$loggedonuser | Add-Member -MemberType NoteProperty -Name "StartTime" -Value $starttime

$loggedonuser
}

}

Ответ 3

Возможно, вы можете что-то сделать с помощью

    get-process -includeusername

Ответ 4

Если вы хотите найти интерактивно зарегистрированный на пользователя, я нашел отличный совет здесь: https://p0w3rsh3ll.wordpress.com/2012/02/03/get-logged-on-users/ (Win32_ComputerSystem мне не помог)

$explorerprocesses = @(Get-WmiObject -Query "Select * FROM Win32_Process WHERE Name='explorer.exe'" -ErrorAction SilentlyContinue)
If ($explorerprocesses.Count -eq 0)
{
    "No explorer process found / Nobody interactively logged on"
}
Else
{
    ForEach ($i in $explorerprocesses)
    {
        $Username = $i.GetOwner().User
        $Domain = $i.GetOwner().Domain
        Write-Host "$Domain\$Username logged on since: $($i.ConvertToDateTime($i.CreationDate))"
    }
}