powershell - Powershell:如何使用“select-string”“grep”命令的输出?
问题描述
当我发出get-service
命令时,我得到了整个服务列表。
我只想列出特定的服务。
有问题的服务列在以下输出中get-service
:
Running nginx nginx
但是,如果我尝试使用以下任何一种:
PS C:\Users\x> get-service | Select-String "nginx"
PS C:\Users\x> get-service | Select-String -Pattern "nginx"
PS C:\Users\x> get-service | Select-String -Pattern 'nginx'
我没有输出。
那么我如何在 Powershell 中“grep”呢?
解决方案
需要注意的重要一点是 PowerShell cmdlet始终输出对象,而不是简单的字符串 - 即使输出看起来是字符串,它实际上也是一个System.String对象。您可以使用Get-Member检查命令输出的类型(以及相关的属性和方法):
Get-Service | Get-Member
TypeName: System.ServiceProcess.ServiceController
Name MemberType Definition
---- ---------- ----------
Name AliasProperty Name = ServiceName
RequiredServices AliasProperty RequiredServices = ServicesDependedOn
Disposed Event System.EventHandler Disposed(System.Object, System.EventArgs)
Close Method void Close()
Continue Method void Continue()
...
正如其他人所提到的,Get-Service
(和其他 cmdlet)具有针对您要执行的操作的内置过滤,但更通用的替代方案是Where-Object ,它更灵活(虽然通常更慢) :
Get-Service | Where-Object {$_.Name -like 's*' -and $_.Status -eq 'Running'}
Status Name DisplayName
------ ---- -----------
Running SamSs Security Accounts Manager
Running SCardSvr Smart Card
Running Schedule Task Scheduler
Running SecurityHealthS... Windows Security Service
Running SENS System Event Notification Service
...
推荐阅读
- amazon-ec2 - 使用 putty 连接到实例
- service - 如何在 XP 中卸载 NetWare 客户端服务 (CSNW)?
- java - 未创建 Hibernate 自动生成的 SQL 表
- c# - COM互操作程序集/包装器的调试源代码
- mysql - MYSQL 和 Node.js 使用 where 子句插入多条记录
- jquery - 如何从 JSON 中提取一个“列”属性
- android - 关于 sdk 版本的 ionic android 构建失败
- mysql - 生成存储过程失败
- .net - AuthorizationCodeReceived 会话为空
- r - R highcharter 图形 x 轴 1 1970 年 1 月 1 日