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