Powershell GET-PSSession输出用户名作为列表框

时间:2019-12-12 11:57:52

标签: powershell session listbox output

如果我输入以下调用命令:

Invoke-Command -ComputerName REMOTE-COMPUTER -scriptBlock {query session} -credential CREDENTIALS  | Select-String PART-OF-USERNAME

我在命令行中得到如下输出:

SITZUNGSNAME      BENUTZERNAME       ID  STATUS 
>services                             0  Getr.                       
 console                              1  Verb.                       
 rdp-tcp#61        User1              2  Aktiv                       
 rdp-tcp#93        User2              3  Aktiv                       
 rdp-tcp#35        User3              4  Aktiv   

现在,它应该仅在以下列表框中显示用户名:

# Listbox

$listBox = New-Object System.Windows.Forms.ListBox 
$listBox.Location = New-Object System.Drawing.Point(10,60) 
$listBox.Size = New-Object System.Drawing.Size(260,20) 
$listBox.Height = 350

[void] $listBox.Items.Add("User1")
[void] $listBox.Items.Add("User2")
[void] $listBox.Items.Add("User3")
$form.Controls.Add($listBox) 

static output (example picture)

但是我们要动态显示所有已登录的用户。

有人像上面的示例(示例图片)那样将命令行输出显示为列表框吗?

非常感谢!

2 个答案:

答案 0 :(得分:0)

欢迎,朱利安! 您需要做的第一件事是解析query session的输出并将其放入一组对象中。我发现this example用于解析,简化了流程。

接下来,您需要遍历该列表,并将每个用户名添加到列表框中。这应该可以工作-如果将“ localhost”替换为目标计算机:

Get-ComputerSessions 'localhost' | %{ [void] $listBox.Items.Add($_.Username) }

答案 1 :(得分:0)

感谢您的建议,但对我不起作用。 “ Get-ComputerSessions”不是Cmdlet,函数等的一部分。pp”

但是我找到了另一种方法来填充我的列表框:

$sessions = Invoke-Command -ComputerName COMPUTERNAME -scriptBlock {query.exe user /server:'localhost'} -credential CREDENTIALS | Select-String SEACHSTRING | sort-object 

[void] $listBox.Items.AddRange($sessions)

OR(我的最爱

Invoke-Command -ComputerName COMPUTERNAME -scriptBlock {query session} -credential CREDENTIALS | %{ [void] $listBox.Items.Add($_) } | Select-String SEARCHSTRING | sort-object 

但是我只想显示用户名和(可选)rdp用户的状态。

它看起来应该像:

User1            active
User2            disconnected

原始输出包括一些我需要的信息。对我也不起作用的示例:

是否可以制作“表格”或“网格视图”并将其放入列表框?参见上面的示例。

非常感谢!

相关问题