如果我输入以下调用命令:
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)
但是我们要动态显示所有已登录的用户。
是否有人像上面的示例(示例图片)那样将命令行输出显示为列表框?
非常感谢!
欢迎,朱利安!您需要做的第一件事是解析query session
的输出并将其放入一组对象中。我发现解析使用this example可以简化过程。
接下来,您需要遍历该列表,并将每个用户名添加到列表框中。这应该可以工作-如果用目标计算机替换“ localhost”:
Get-ComputerSessions 'localhost' | %{ [void] $listBox.Items.Add($_.Username) }
感谢您的建议,但对我不起作用。 “ 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
原始输出包括一些我需要的信息。对我也不起作用的示例:
是否可以制作“表格”或“网格视图”并将其放入列表框?参见上面的示例。
非常感谢!