powershell - 使用 Qwinsta 导出断开连接会话的缩短列表
问题描述
我需要在 Powershell 中创建一个应用程序,它将列出“断开连接”的远程会话,它必须输出会话的用户名和 ID,稍后将与 rwinsta 一起使用以删除会话
我在 stackoverflow 上找到了一个脚本,它几乎可以通过搜索会话并提供一个仅显示用户名和会话 ID 的简短列表来进行概念验证,但我正在努力解决格式问题。Foreach 和替换正在修剪空格并导致行切换列。
function Get-TSSessions
{
param ($ComputerName = "SERVER")
qwinsta /server:$ComputerName | ForEach-Object {$_.Trim() -replace "\s+","," } | ConvertFrom-Csv
}
Get-TSSessions -ComputerName "SERVER2016" | ft -Property USERNAME, ID -AutoSize
然后我得到以下信息:
USERNAME ID
-------- --
0 Disc
1 Conn
Administrator 5
6 Disc
65536 Listen
如果我从 Qwinsta 命令中删除 ForEach-Object {$_.Trim() -replace "\s+","," } 然后从 Get-TSSessions 中删除 Format-Table -Property USERNAME, ID -Autosize - 我得到下表:
SESSIONNAME USERNAME ID STATE TYPE DEVICE
services 0 Disc
console 1 Conn
31c5ce94259d4... Administrator 5 Active
admin2 6 Disc
31c5ce94259d4... 65536 Listen
rdp-tcp 65537 Listen
如您所见,当该列不包含条目时,第一个表中的结果被移动到左侧的空白区域,因此两个断开连接的会话未显示正确的用户名和 ID。
我基本上只需要显示第二个表中的用户名和 ID 列。
解决方案
编辑:根据对问题的更清晰描述进行更新
它似乎qwinsta.exe
在固定宽度的列中输出其文本,因此以下内容应正确替换空格以提供有效的 CSV 输出:
function Get-TSSessions
{
param ($ComputerName = "SERVER")
qwinsta /server:$ComputerName |
ForEach-Object {$_ -replace "\s{2,18}","," } |
ConvertFrom-Csv
}
Get-TSSessions -ComputerName "SERVER2016" |
Where-Object State -eq 'Disc' |
Format-Table UserName, ID -AutoSize
推荐阅读
- java - 用相机拍照并保存在 FileProvider 中
- c# - Asp-MVC 中用于在 ViewModel 中填充查找值的最佳实践
- google-analytics - 在 Google Analytics 上更改 uid (UserID) 的值
- reactjs - 使用 cURL 浏览器中的慢请求明显更快
- javascript - 使用 jscolor 更改文本颜色
- python - 从 pandas 数据框中提取类似 JSON 的数据以分隔列
- graphql - UnhandledPromiseRejectionWarning:错误:类型查询必须定义一个或多个字段
- php - 如何在laravel查询构建器中获取列具有最高值且另一列具有特定值的行
- qb64 - 使用带有用户定义类型的 QB64 函数 SWAP 的分段错误问题
- ios - 在点击期间格式化 TextField 文本