この質問の重点は後半にあります。
すべてのサービスのリストを抽出する方法と、それらの状態をフィルタリングする方法を知っています。ただし、サービスが「別のユーザーとして実行」に設定されているユーザーアカウントを抽出する方法がわかりません。
(残念ながら)PowerShellを使用するオプションがないので、ネイティブCMDの方法を探しています。 sc queryコマンドを使用する方法があると思いましたが、そのリストはすべて次のとおりです。
SERVICE_NAME
TYPE
STATE
WIN32_EXIT_CODE
SERVICE_EXIT_CODE
CHECKPOINT
WAIT_HINT
参考までに-OSはWindows 2003 SP2であり、すべてのサービスでこの情報が必要なので、サービスごとに手動で実行する必要がある場合、時間のかかるプロセスになります。
wmic:
すべてのサービスの名前とアカウント:wmic service get name,startname
開始されたサービスのみ:wmic service where started=true get name, startname
名前に特定のパターンがあるサービス:wmic service where 'name like "%sql%"' get name, startname
htmlテーブルとしてうまくフォーマットされた(そしてブラウザで開かれた):(wmic service where 'name like "%sql%"' get name, startname /format:htable >out.html) && out.html
ここに完全な構文: https://msdn.Microsoft.com/en-us/library/aa394531%28v=vs.85%29.aspx
これは、次の2つの手順で実行できます。
sc \\localhost query | findstr SERVICE_NAME
sc \\localhost qc
+ SERVICE_NAME + | findstr SERVICE_START_NAME
次のようなバッチスクリプトをお勧めします。
@echo off
setlocal EnableDelayedExpansion
sc \\localhost query | findstr SERVICE_NAME > services.lst
for /f "tokens=1,2" %%A in (services.lst) do (
echo %%B
sc \\localhost qc %%B | findstr SERVICE_START_NAME
)
del services.lst
これにより、次のような出力が得られます。
もちろん、その出力をさらにクリーンアップしたり、好きな方法でCSVファイルに書き込んだりできます。
CMDには、ネイティブな方法はありません。 SCおよびNETは、Windowsに付属している組み込みアプリケーションですが、それがネイティブであるという意味ではありません。管理者はいつでもそれらを削除でき、CMDでさえ暗いままです。
sc sdshowはセキュリティ記述子を取得するものですが、SDDL文字列の読み取り方法がわからない場合は複雑になります。
最も簡単な方法は、ツールパッケージからSysinternals PsService.exeを取得して、psservice security [サービス]として使用することです。 SDDLは、アカウント名を含む読み取り可能な形式でリストされます。
PowerShellは使用できませんが、VBScriptを使用してWMIから情報を取得できるはずです。
以下は、すべてのサービスとそれらが開始するアカウントをリストするVBSスクリプトです。
strComputer = "."
Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colServices = objWMIService.ExecQuery ("Select * from Win32_Service")
For Each objService in colServices
wscript.echo objService.Name & ": " & objService.StartName
Next
それを保存し、cscript ScriptName.vbs
で実行します。
objService.State
は、サービスの現在の状態を提供します(あなたがそれでフィルタリングしようとしていると述べたので)。
Win32_Serviceクラス に関する詳細情報。