usuarios users remote machine inactivos active powershell active-directory powershell-v2.0 powershell-v3.0 windows-server-2012

users - powershell logged user



Script Powershell para ver los usuarios actualmente conectados(dominio y máquina)+estado(activo, inactivo, ausente) (6)

Aquí está mi enfoque basado en la sugerencia de DarKalimHero seleccionando solo en los procesos de Explorer.exe

Function Get-RdpSessions { param( [string]$computername ) $processinfo = Get-WmiObject -Query "select * from win32_process where name=''explorer.exe''" -ComputerName $computername $processinfo | ForEach-Object { $_.GetOwner().User } | Sort-Object -Unique | ForEach-Object { New-Object psobject -Property @{Computer=$computername;LoggedOn=$_} } | Select-Object Computer,LoggedOn }

Estoy buscando un comando simple para ver usuarios conectados en el servidor. Conozco esta :

Get-WmiObject -Class win32_computersystem

pero esto no me proporcionará la información que necesito. Devuelve: nombre del modelo del fabricante del dominio (nombre de la máquina) PrimaryOwnerName TotalPhysicalMemory

Ejecuto Powershell 3.0 en un servidor de Windows 2012.

también

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

no me da las respuestas exactas que necesito. Me encantaría ver también el tiempo de inactividad, o si están activos o ausentes.


Dado que estamos en el área de PowerShell, es especialmente útil si podemos devolver un objeto PowerShell adecuado ...

Personalmente me gusta este método de análisis, por la concisión:

((quser) -replace ''^>'', '''') -replace ''/s{2,}'', '','' | ConvertFrom-Csv

Nota: esto no representa a los usuarios desconectados ("discos"), pero funciona bien si solo desea obtener una lista rápida de usuarios y no le importa el resto de la información. Solo quería una lista y no me importaba si estaban actualmente desconectados.

Si te importa el resto de los datos, es un poco más complejo:

(((quser) -replace ''^>'', '''') -replace ''/s{2,}'', '','').Trim() | ForEach-Object { if ($_.Split('','').Count -eq 5) { Write-Output ($_ -replace ''(^[^,]+)'', ''$1,'') } else { Write-Output $_ } } | ConvertFrom-Csv

Doy un paso más y te doy un objeto muy limpio en mi blog.

Terminé haciendo esto en un módulo.


En busca de esta misma solución, encontré lo que necesitaba bajo una pregunta diferente en : Powershell-log-off-remote-session . La siguiente línea devolverá una lista de usuarios conectados.

query user /server:$SERVER


No hay un "comando simple" para hacer eso. Puede escribir una función o elegir entre varias que están disponibles en línea en varios repositorios de códigos. Yo uso esto:

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


Si desea encontrar usuarios conectados interactivamente, encontré un gran consejo aquí: https://p0w3rsh3ll.wordpress.com/2012/02/03/get-logged-on-users/ (Win32_ComputerSystem no me ayudó)

$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))" } }


Tal vez puedas hacer algo con

get-process -includeusername