【发布时间】:2015-03-18 14:55:30
【问题描述】:
我是 PowerShell 新手(Bash 通常是我的事),我目前正试图获取 qwinsta 输出以显示谁以“rdpwd”(rdesktop)用户身份登录,以便我可以根据用户名列表检查每个用户名,如果不匹配,请注销。
我目前正在解决两个问题:
- 我无法将 qwinsta 输出拆分为仅保留用户名 - 我尝试了“拆分”功能,但目前遇到语法问题或奇怪的结果;一个抱怨似乎是 '\s+' 匹配字母 S 而不是空格;其他时候我设法拆分到第二列,但只出现第 1 行的输出
- 虽然我还没有到那里,但我感觉我在第二步也会遇到问题,即遍历不可注销用户数组(将从本地用户组获取)
我现在将专注于问题 1!
我得到的文字是:
SESSIONNAME USERNAME ID STATE TYPE DEVICE
services 0 Disc
console 1 Conn
rdp-tcp#0 user.name1 2 Active rdpwd
rdp-tcp#1 user.name2 3 Active rdpwd
rdp-tcp#1 user.name3 4 Active rdpwd
rdp-tcp 65536 Listen
我想要的输出是:
user.name1
user.name2
user.name3
(然后创建一个循环,简而言之,“foreach user in list, if not in localgroup, logoff user”。)
到目前为止,我已经使用 'rdpwd' 选择文本,但是使用“split”的各种变体,我没有比这更进一步。
我很高兴分享我已经拥有的东西,但是我认为这对任何人都没有帮助!
任何帮助将不胜感激。 :)
【问题讨论】:
-
我假设你上面提到的文本是一个 psobject 数组?在这种情况下,您只需执行
$users = $array | select Username即可为您提供一个仅包含user.name1...的数组 -
@DaneBoulton OP 说输出来自
qwinsta.exe所以这行不通
标签: regex powershell select awk