请教在powershell中如何像unix中的awk对管道输出后的结果进行进一步精细提取


PowerShell交流中心分类: Powershell基础请教在powershell中如何像unix中的awk对管道输出后的结果进行进一步精细提取
0
pendulum asked 6 年 ago

<pre class=”brush:powershell”>
PS C:\User\test> quser.exe 
USERNAME              SESSIONNAME        ID  STATE   IDLE TIME  LOGON TIME
User2                                                    3    Disc      23:11        12/29/2017 3:54 PM
user1                       rdp-tcp#0              4    Active    .               1/1/2018 3:01 PM
PS C:\User\test> quser.exe | where {$_ -like “User1”}
USERNAME              SESSIONNAME        ID  STATE   IDLE TIME  LOGON TIME
user1                         rdp-tcp#0                  4    Active    .               1/1/2018 3:01 PM
</pre>
大家好,本人是Powershell的新人,在此請教各位:在上述命令基礎上,如何運用管道進一步獲取用戶”User1″的 STATE狀態?
也就是類似Unix中的awk功能(awk -F {print $1, … , $NF} , 作爲菜鳥一名先謝謝各位了!
 

1 Answers
0
Mooser Lee 管理员 answered 6 年 ago

参考:PowerShell 查询登陆的用户

PS> (quser.exe) -replace '\s{2,}',',' | ConvertFrom-Csv | where { $_.USERNAME -eq '>user1'  }


USERNAME    : >user1
SESSIONNAME : console
ID          : 1
STATE       : Active
IDLE TIME   : none
LOGON TIME  : 12/19/2017 10:33 AM



PS> ((quser.exe) -replace '\s{2,}',',' | ConvertFrom-Csv | where { $_.USERNAME -eq '>user1'  }).STATE
Active

pendulum replied 6 年 ago

谢谢慷慨解答!!!

麻烦再请教一下,(quser.exe) -replace ‘\s{2,}’,’,’ 中的 “ ”’\s{2,}’,’,’ “ 是什么意思?

pendulum replied 6 年 ago

尤其是这一段 \s{2,} 是以什么为分割符?

天天不闲 replied 6 年 ago

(quser.exe) 是先执行括号的内容
-replace是替换,可以使用正则的
‘\s{2,}’,’,’ 是正则方式把2个以上的空白字符替换为逗号,就变成csv格式了
| ConvertFrom-Csv 然后管道过去装成csv
| where { $_.USERNAME -eq ‘>user1’ } 然后是条件