管道sc查询输出到PowerShell的方法?

时间:2018-08-26 22:38:10

标签: powershell

我想将sc查询的输出通过管道传递给powershell中的方法。例如,检查服务的状态并找到显示“已停止”的部分,然后根据该输出执行操作。

从sc查询的输出中有没有办法做到这一点?还是我需要将结果输出到文本文件,然后..我不确定,请运行for循环来查找我要查找的片段,以使if条件为true / false。

这是我到目前为止所拥有的:

Function IsStopped {
    sc.exe query remoteregistry >> RemoteRegistry.txt
    Get-Content -Path C:\RemoteRegistry.txt | Where-Object {$_ -like '*stopped*'} | ForEach-Object {


}

不确定下一步要去哪里吗?

1 个答案:

答案 0 :(得分:1)

PowerShell具有一个用于检查服务的cmdlet。在不使用参数的情况下运行Get-Service会以与sc.exe相同的方式为您提供所有正在运行的服务(实际上,在研究此过程时,我提醒自己,在没有sc的PowerShell .exe中, Set-Content的别名,所以我最终生成了一些无用的文件。这可能是使用Get-Service以避免与Set-Content混淆的另一个很好的理由。

运行Get-Service | Get-Member给出命令输出中的属性和方法的列表。 Status是您感兴趣的属性,因此我们运行:

Get-Service | Where-Object { $_.Status -eq 'Stopped' }

然后,按照您的建议,可以将此命令的输出通过管道传递给for每个循环,并且可以使用$_速记来访问每个服务的属性或方法:

Get-Service | Where-Object { $_.Status -eq 'Stopped' } | ForEach-Object {
    Write-Host "Do something with $($_.ServiceName)"
}

可以使用$_.Start()以这种方式重新启动服务,但是如果您的最终目的是,我建议向该过程中写入一些错误处理。”

如果您需要更多信息(例如可执行文件),则可能需要在这里查看:

How can I extract "Path to executable" of all services with PowerShell