8

サードパーティのツールを使用せずに、すべての service_name とそのステータスを取得したいと考えています。これまでのところ、 SCコマンドは次のような値の 1 つを取得するのに十分でした。

sc query | findstr SERVICE_NAME

STATUSしかし、リストされているそれぞれについても必要ですSERVICE_NAME

4

5 に答える 5

9

これを行うコマンドは次のとおりです。

for /f "tokens=2" %s in ('sc query state^= all ^| find "SERVICE_NAME"') do
    @(for /f "tokens=4" %t in ('sc query %s ^| find "STATE     "') do @echo %s is %t)

使い方:

まずはsc query state= all | find "SERVICE_NAME"実行です。このコマンドは、サービス名を 1 行に 1 つずつ表示するように設計されています。キャレット(ここでは削除しました) は、コマンド自体ではなく、コマンド^に影響を与えたい特殊文字をエスケープするために必要です。scfor

次に、最初for /fは上記の出力を解析して、各行から標準の「SERVICE_NAME:」プレフィックスを削除し、純粋なサービス名を提供します。この時点で、出力は次のようになります。

C:\>for /f "tokens=2" %s in ('sc query state^= all ^| find "SERVICE_NAME"') do @echo %s
AdobeFlashPlayerUpdateSvc
AeLookupSvc
ALG
AppIDSvc
Appinfo
AppMgmt
aspnet_state
AudioEndpointBuilder
AudioSrv

次に、この出力は次のに渡されfor /f、 が実行されsc query servicename、状態の行が検索され、4 番目の「単語」(現在の状態) が分離されます。

最後に、各サービスの名前がその状態とともに出力されます (この時点で、必要に応じて別のことを選択できます)。

重要な注意:これをバッチ ファイル内で実行する場合、パーセント記号 (たとえば at %s) を 2 倍にする必要があります。

于 2012-08-29T07:58:48.280 に答える
2

Get-Service を試す

PowerShell にはGet-Service. sc.exe よりも詳細が少し劣ります。

SC.exeを試す

sc.exe query state= all

(注: sc query state=all動作しません。等号の後にスペース記号が必要です。そうしないと、この奇妙なエラーが発生します[SC] EnumQueryServicesStatus:OpenService FAILED 1060: The specified service does not exist as an installed service.:)

ソース: https://ss64.com/nt/sc.html

于 2019-01-04T14:12:59.447 に答える
1

ss64.com/nt/sc.html

sc state= active¦inactive¦all
于 2012-08-29T07:58:34.863 に答える