Eu precisava do mesmo hoje, então é assim que resolvi:
function Get-TSSessions {
param(
$ComputerName = "localhost"
)
query user /server:$ComputerName |
#Parse output
ForEach-Object {
# trim spaces at beginning and end
$_ = $_.trim()
# insert , at specific places for ConvertFrom-CSV command
$_ = $_.insert(22,",").insert(42,",").insert(47,",").insert(56,",").insert(68,",")
# Remove every space two or more spaces
$_ = $_ -replace "\s\s+",""
# for debug purposes, comment out above row and uncomment row below
#$_ = $_ -replace "\s","_"
# output to pipe
$_
} |
#Convert to objects
ConvertFrom-Csv
}
Se você executar agora o Get-TSSessions, ele retornará uma matriz de objetos para cada usuário que o Powershell entender.
Veja um exemplo que mostra quais usuários desconectados estão executando o chrome.exe:
foreach ($user in GET-TSSessions)
{
if($user.state -ne "Active")
{ #User is not active
$user
tasklist /FI '"USERNAME eq '$user.USERNAME'"' /FI "IMAGENAME eq chrome.exe"
}
else
{
"User "+$user.USERNAME+" is currently active."
}
}