如何解决Powershell:如何使用“选择字符串”“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总是输出对象,而不是简单的字符串——即使输出看起来是一个字符串,它实际上是一个{{ 3}} 对象。您可以使用 System.String:
检查命令的输出类型(以及相关的属性和方法)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)具有针对您要执行的操作的内置过滤,但更通用的替代方案是更灵活(虽然通常速度较慢){{ 3}}:
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"
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。