sc.exe、Get-Service、そしてこれ
どちらもすでにマシンにあり、どちらも引き続き役に立ちます。このページは、それらがどこで限界になるかについてです。そして、どこでそれらが今も優れた答えなのかを、率直に述べます。
それぞれの限界
sc.exe
サービス コントロール マネージャーが知っているほとんどすべてに手が届きますが、どう尋ねればいいかは何も教えてくれません。構文は 1990 年代のものです。sc config X start= auto のように、等号の後ろのスペースが必須で、それがないと、意図したことを行わずに黙って失敗します。
一度に 1 つのエントリについてしか答えません。絞り込みはなく、パーサーを書かずにスクリプトが解析できる出力もなく、プレビューもありません。sc stop は、成功するか、数字を返すかのどちらかです。
Get-Service と *-Service コマンドレット
きちんとしたオブジェクト、パイプライン、そして浅い視点です。Windows に付属する Windows PowerShell 5.1 の Get-Service は、サービスを実行しているアカウントも説明も表示しません。PowerShell 7 はどちらも表示し、起動パスも表示しますが、別途インストールが必要です。
Stop-Service -Force は「何かが依存していても」を意味します。依存するサービスを停止し、そのことを事前ではなく事後に伝えます。
同じ質問を、3 つの方法で
| 質問 | マシンにあるもので | ここでは |
|---|---|---|
| 起動しているはずなのに起動していないもの | Get-Service | Where-Object { $_.StartType -eq 'Automatic' -and $_.Status -ne 'Running' } |
bws list --query "start:auto !status:running" |
| 署名のない実行ファイルを持つサービスはどれか | 各起動パスを読み取り、解決し、それぞれに Get-AuthenticodeSignature を呼び出す。コマンドではなくスクリプトです |
bws list --query "signed:no" |
| これを停止すると何が巻き込まれるか | sc enumdepend X、そのあと一覧を読んで自分で判断する |
bws stop X --dry-run --dependents、つまり実行されるプランです |
| 先週から何が変わったか | 自分でコレクターを書かない限り、何もありません | bws snapshot diff before.json --live |
| 誰がいつスタートアップの種類を変更したか | Get-WinEvent -FilterHashtable @{ LogName = 'System'; Id = 7040 }、そのあと各イベントのメッセージを読む |
bws history Spooler。最初の行に、ログがどこまでさかのぼるかが書かれます |
| 機械可読な出力 | PowerShell ではオブジェクト、sc.exe ではテキスト |
すべてのコマンドで --json。標準出力に出て、警告は標準エラーに出ます |
サービスについてこのツールが sc.exe と食い違う場合、それはここのバグです。テストスイートの一部が、実行しているマシンに対して両方を実行し、エントリごとに比較しています。2 つの違いは、課題に貼り付けるものとして最も役に立ちます。
今あるものを使い続けたほうがよい場合
- 1 回しか触らないマシンにいる。どちらもすでにそこにあり、ポリシーを通す必要がありません。
- アカウント、起動パス、回復のアクションを変更する必要がある。
sc.exeは 3 つとも行えます。このツールはアカウントと起動パスを表示しますが、どちらも変更しません。回復のアクションは、プロセスを終了する前に警告するためだけに読み取ります。 - サービスを作成または削除する必要がある。
sc createとsc delete。ここにはありません。意図的です。 - すでに PowerShell のパイプラインの深いところにいる。
bws list --jsonはConvertFrom-Jsonを通してオブジェクトとして戻るため、パイプラインを置き換えるのではなく、そこに加わります。
置き換えではなく、併用
このマシンの何がおかしいのかに答えるツールと、1 つの設定を変更するツールは、同じツールではありません。質問はここで行い、プランはここで読み、実行にはお好きなものを使ってください。プランは同じことを要求するコマンドラインを表示します。その行はコピーするためのものです。