![](/img/trans.png)
[英]Using PowerShell sls (Select-String) vs grep vs findstr
[英]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.