我有一个简单的问题,但我也是PowerShell的初学者.我认为这与ps命令的输出是对象而不是文本的事实有关.
我想要做的是获取一个名为"sql"的服务列表.
这是我到目前为止所尝试的但是每次尝试都没有返回:
Get-Service | where {$_ -match 'sql'}
Get-Service | where {$_ -like 'sql'}
Get-Service | Select-String sql
Run Code Online (Sandbox Code Playgroud)
我正在寻找一种模式,让我将每个命令的输出视为可搜索的文本.
mjo*_*nor 10
你的工作太过努力了:
Get-Service *sql*
Run Code Online (Sandbox Code Playgroud)
JPB*_*anc 10
汤姆只是'忘记它':o)输出你正确的对象,你将使用它.
所以@mjolinor答案最短,但为了您的知识,只需测试:
Get-Service | Get-Member
Run Code Online (Sandbox Code Playgroud)
所以你会明白的
Get-Service | Where-Object {$_.name -match ".*sql.*" }
Run Code Online (Sandbox Code Playgroud)
也有效,在那里你有你的文本作为对象的属性
Get-Service | Select-String -Pattern "sql"
Run Code Online (Sandbox Code Playgroud)
这就像grep一样.你甚至可以排序
Get-Service | Select-String -Pattern "sql" | sort
Run Code Online (Sandbox Code Playgroud)
其他答案当然是关于您在其名称中启动具有"sql"的服务的具体问题,但回答一般性问题:
您可以这样做Get-Service | Out-String,您将获得输出为字符串,就像Unix命令的工作方式一样.
此外,当输出通过管道输出到非powershell命令时,它会转换为文本,因此例如:Get-Service | grep sql将按照您想要的方式工作.
但同样,就像@JPBlanc所说的那样,很好地接受Powershell的工作方式,即输出是对象.它为您提供了更多控制并保持简单和可读的方式(使用sed,awk的Unix命令以及在其他命令输出的文本输出上运行的内容可能会变得非常神秘!)
此处的大多数答案都集中在查找名称中带有“ sql”的服务名称,而不是像过滤文本一样过滤整个输出。另外,接受的答案使用非PowerShell函数“ findstr”。
因此,理所当然的是,这并不是最优雅的解决方案,但是出于完整性考虑,我想提供100%PowerShell解决方案,该解决方案从字面上考虑了OP的问题:
(get-Service | Out-String) -split "`r`n" | Select-String sql
Run Code Online (Sandbox Code Playgroud)
Out-String,因为使用其他答案中提供的解决方案并不能为我们提供Get-Service命令的全文输出,而只能为Name参数提供。这是一个纯粹的答案,在实践中,对于此特定用例,我不建议这样做。但是对于根据问题标题通过Google搜索来到这里的人们来说,这是一个更准确的答案...
小智 5
如果有人想了解有关逻辑操作的更多信息,请参阅使用Where-Object Cmdlet:
\n\n\xe2\x80\xa2 -lt -- 小于
\n\n\xe2\x80\xa2 -le -- 小于或等于
\n\n\xe2\x80\xa2 -gt -- 大于
\n\n\xe2\x80\xa2 -ge -- 大于或等于
\n\n\xe2\x80\xa2 -eq -- 等于
\n\n\xe2\x80\xa2 -ne -- 不等于
\n\n\xe2\x80\xa2 -like - 喜欢;使用通配符进行模式匹配
\n\nGet-Service | where {$_ -match \'sql\'}将会Get-Service | where {$_ -eq "sql"}
Get-Service | where {$_ -like \'sql\'}将会Get-Service | where {$_ -like "sql"}
现在是一个实际的例子。
\n\nPS C:\\> Get-Service | where {$_.name -like "net*"}\n\nStatus Name DisplayName\n------ ---- -----------\nRunning Net Driver HPZ12 Net Driver HPZ12\nRunning Netlogon Netlogon\nRun Code Online (Sandbox Code Playgroud)\n