qwinsta /server:somesrv equivalent in Powershell?

試著忘記壹切 提交于 2019-11-30 20:21:17

There are multiple alternatives:

  • Use the Terminal Services PowerShell Module. Easy solution.
  • Writing a powershell wrapper that parses the output of qwinsta to objects. Easy solution. See example below
  • Use the Cassia.DLL .Net wrapper to access the native APIs that qwinsta runs behind the scene. This is the class that the TS Module uses. More difficult, but will have the benefit of being customized to your needs.
  • Go crazy and use the Native Methods that Cassia.DLL accesses using P/Invoke (wtsapi32.dll, kernel32.dll, winsta.dll). Hard and overcomplicated.

PowerShell-wrapper for qwinsta

function Get-TSSessions {
    param(
        $ComputerName = "localhost"
    )

    qwinsta /server:$ComputerName |
    #Parse output
    ForEach-Object {
        $_.Trim() -replace "\s+",","
    } |
    #Convert to objects
    ConvertFrom-Csv
}

Get-TSSessions -ComputerName "localhost" | ft -AutoSize

SESSIONNAME USERNAME ID     STATE  TYPE DEVICE
----------- -------- --     -----  ---- ------
services    0        Disc                     
console     Frode    1      Active            
rdp-tcp     65537    Listen     

#This is objects, so we can manipulate the results to get the info we want. Active sessions only:
Get-TSSessions -ComputerName "localhost" | ? { $_.State -eq 'Active' } | ft -AutoSize SessionName, UserName, ID

SESSIONNAME USERNAME ID
----------- -------- --
console     Frode    1 

I used to use Terminal Services PowerShell Module, but it was two years ago. I can't put my hand on it, but it also exists a function on gitshub or another site that embeded QWinsta/RmWinsta.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!