繁体   English   中英

Powershell:如何使用“选择字符串”“grep”命令的输出?

[英]Powershell: how to “grep” the output of a command by using “select-string”?

当我发出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
...

这应该做

Get-Service -Name "nginx"

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM