TSS を使った Windows トラブルシューティング
TSS は Microsoft サポートの署名済み PowerShell ツールキットです。157 のシナリオ、約 400 のトレースコンポーネント、215 の CollectLog セット、9 つの SDP レポート、24 の自動停止トリガー、34 の xray 既知問題チェックを備えています。データの収集は非常に優れていますが、収集したデータの説明はほとんど行いません。このスキルは、その不足部分を補います。
- 何を収集するかの選択
- 収集前の簡易チェック
- 収集結果の読み取り
スキルフォルダには TSS の事前構築済みカタログ(references/tss-index.json)が含まれているため、TSS がインストールされていないマシンでも検索が可能です。
スクリプトの実行: パスはこのスキルのフォルダを基準とします。すべての Windows マシンに搭載されている Windows PowerShell 5.1 を使用します: powershell -NoProfile -ExecutionPolicy RemoteSigned -File <script>。pwsh 7 がインストールされていれば同様に動作します。
-ExecutionPolicy RemoteSignedはそのプロセスのみに適用されます。Windows クライアントはデフォルトでRestrictedであり、すべての.ps1ファイルをブロックするため必要です。Bypassは絶対に使用しないでください(references/safety.md参照)。- スキルが ZIP ファイルとしてダウンロードされたためにスクリプトがブロックされる場合(「デジタル署名されていません」)、このスキル自身の
scripts\*.ps1に対してUnblock-Fileを実行してください。TSS に対しては実行しないでください。 - グループポリシーで実行ポリシーが設定されている場合、スイッチは効果がありません。これは管理者の判断によるものですので、ユーザーにその旨を伝えてください。
TSS の場所: スクリプトは scripts/Resolve-TssRoot.ps1 を使用してローカルの TSS コピーを検出します。最初に $env:TSS_ROOT を確認し、次に Update-Tss.ps1 または Resolve-TssRoot.ps1 -Save <folder> で保存されたフォルダ、最後に C:\TSS を確認します。
- トリアージ、パッケージ分析、シナリオ検索にはローカルコピーは必要ありません。
- ローカルコピーを入手するには、
scripts/Update-Tss.ps1(tier 2) を実行します。検証済みのコピーをC:\TSS(または-TssRoot <folder>で指定した場所)にインストールし、その場所を保存します。
ワークフロー
すべてのリクエストですべてのステップが必要なわけではありません。ZIP ファイルを渡されたユーザーはステップ 5 に直接進みます。「X のシナリオはどれか」とだけ尋ねるユーザーにはステップ 3 だけで十分です。
1. 症状を特定する
以下の情報を最初に入手します:
- 何が失敗しているか、正確なエラーテキストまたはコード
- いつから発生しているか、その前後に何が変更されたか(アップデート、ドライバー、ポリシー、ネットワーク)
- 影響を受けるのは 1 人のユーザー/1 台のマシンか、多数か
- 再現可能か(オンデマンドで再現できるか、断続的か)
- クライアント/サーバー問題の場合、どちらの側を調査するか
推測できない項目のみ質問します。これらの回答がシナリオと実行場所を決定します。
2. クイック読み取り専用トリアージ(影響を受けるマシン上で)
powershell -NoProfile -ExecutionPolicy RemoteSigned -File scripts/Invoke-QuickTriage.ps1 [-Hours 72] [-NoNetworkTests]
- 約 20 秒で完了し、管理者権限は不要です。
%TEMP%\win-triage\<タイムスタンプ>\にtriage.mdとtriage.jsonを生成します。 - 何も変更しません。ネットワークテストはゲートウェイへの ping 1 回、DNS ルックアップ 1 回、msftconnecttest.com への HTTP GET 1 回を送信します。
-NoNetworkTestsでスキップできます。 - 昇格された状態では、セキュリティログ(ロックアウト、失敗したログオン)も読み取り、ドメインのセキュアチャネルをテストします。
-Hours には「いつから」に余裕を持たせた値を設定します。「先週から」の場合は -Hours 240 を使用します。
triage.md を読みます。Flags テーブルは一連の手がかりであり、最終的な判断ではありません。フラグをユーザーの症状に関連付け、残りは無視します。多くの問題はここで終了します: ディスクフル、再起動の保留、コアサービスの停止、APIPA アドレス、セキュアチャネルの破損、繰り返しのバグチェック。そのような場合は、修正方法を説明し、大規模なトレースを開始する前に中止することを提案します。
3. TSS シナリオを選択する
powershell -NoProfile -ExecutionPolicy RemoteSigned -File scripts/Find-TssScenario.ps1 "ユーザーがロックアウトされ続けている"
powershell -NoProfile -ExecutionPolicy RemoteSigned -File scripts/Find-TssScenario.ps1 -Name ADS_AccountLockout # 完全なエントリ
- ランク付けされたシナリオ、CollectLogs、SDP レポート、コンポーネントを返します。それぞれに正確なコマンド、「使用する状況」行、アドオンツール、副作用の説明が含まれます。
- 選択したシナリオの完全な説明を読むには
-Nameを使用します。そこにはシナリオを実行する場所と何が変更されるかが記載されています。 - 最も軽量なオプションを優先します:
-CollectLog(静的ログ)は-Scenario(ライブトレース)よりも優れており、「Ex」バリアントはネットワークキャプチャと PSR を追加するため、より重くなります。 - すべての問題が TSS の問題であるとは限りません。「弱い一致のみ」の警告は、適切なシナリオがないことを意味します。
- クラッシュとブルースクリーンはダンプから解決します: トリアージでリストされたミニダンプに対して WinDbg
!analyze -vを実行します。 - ディスクフル、ハードウェア(WHEA)、再起動保留の問題は、トリアージ自体から解決します。
- Learn ページの
-SDP Perfレポートは、この TSS バージョンでは非推奨です。
- クラッシュとブルースクリーンはダンプから解決します: トリアージでリストされたミニダンプに対して WinDbg
- オンデマンドで再現できない問題の場合は、
references/waitevent-recipes.mdから自動停止トリガーを追加します。例:-WaitEvent Evt:4740:Security。 references/scenario-index.mdは、エリアごとにグループ化された参照可能なリストです。
4. 収集を引き渡す(または実行する)
TSS トレースは references/safety.md の tier 3 です。監査ポリシー、デバッグレジストリキー、キャッシュを変更し、ギガバイト単位の機密データを生成する可能性があります。
- コマンド、実行場所、副作用、予想サイズ、および
references/running-tss.mdの前提条件(昇格されたコンソール、署名チェック、プロセススコープの実行ポリシー、新しい TSS(90 日経過後は実行を拒否))を提示します。Find-TssScenario.ps1は、すべての検索時に有効期限を出力します。コピーの有効期限が切れているか、その場合はscripts/Update-Tss.ps1を提案します(tier 2)。これはダウンロード、ハッシュと署名の検証、古いコピーの隣にインストールを行います。-CheckOnlyはバージョンのみを比較します。- 今すぐ更新できない場合(オフラインマシン、または以前のものと一致させる必要がある収集)、TSS コマンドに
-noExpireを追加するのが Microsoft の組み込みオーバーライドです。その代償を説明します: 定義がそのビルドで凍結され、サポートから現在のバージョンでの再実行を求められる可能性があります。
- 明示的な同意を得た後にのみ、自分で実行します。また、ユーザーが管理するマシン上でのみ実行します。
- 通常はユーザーが実行します。再現のためにユーザーがマシンの前にいる必要があるためです。
-Crash、notmyfault、またはマシン全体の実行ポリシー変更は、ユーザーから明示的に依頼されない限り使用しないでください。
5. 収集されたパッケージを分析する
powershell -NoProfile -ExecutionPolicy RemoteSigned -File scripts/Read-TssPackage.ps1 <C:\MS_DATA\TSS_...zip | フォルダ> [-OutDir <dir>] [-ExtractDir <短い dir>]
ZIP ファイルは、-ExtractDir を指定しない限り %TEMP%\tssx\<id> に展開されます。ユーザーがすべてを 1 つのケースフォルダにまとめておきたい場合に -ExtractDir を渡します。そのパスは短く保ちます。
- Windows PowerShell 5.1 は 260 文字を超えるパスを処理できず、TSS ファイル名は長くなります。スクリプトは 80 文字を超える
-ExtractDirまたは 200 文字を超える-OutDirを拒否します。C:\cases\<case>のようなパスを使用し、その後サマリーを必要な場所にコピーします。
スクリプトはパッケージを変更せずに読み取ります。package-summary.md と package-summary.json を生成し、以下を含みます:
- メタデータ(コンピューター、シナリオ、時刻、OS ビルド)
- 見つかった xray 問題
- イベントログごとの主要なイベントと上位のエラー
- テキストログの最も頻繁なエラーコード
- セットアップ/サービスログの最後の失敗行
- TSS 自体の収集警告、およびほぼ空のトレースファイル。6 バイトの
.etlはキャプチャが実行されなかったことを意味するため、そのファイルから推論する前にその旨を伝えます。 - インベントリ、特に機密ファイルのリスト。これには、メールアドレスやユーザープロファイル名を含むテキストを含むイベントログも含まれます(Outlook や Office のイベントでよく見られます)。
次に、サマリーを超えてさらに調査します:
- サマリーが指し示す特定のファイルを開きます。
references/package-anatomy.mdは、シナリオファミリごとに最初に読むべきものと、.etl、.blg、.pml、.dmpをデコードするツールを示しています。 - xray の結果やイベントパターンを仮説として扱い、それぞれをマシンの実際の構成と照らし合わせて検証します。影響を受けるマシンにアクセスできる場合(多くの場合、現在操作しているマシンです)、設定を読み取り専用で確認します。例: NRPT ルールの競合 →
Get-DnsClientNrptPolicyとマシンがドメインに参加しているかどうか。Tailscale や Zscaler などの VPN/オーバーレイクライアントはローカル NRPT ルールを正当に作成するため、マシンに適合しないチェックは誤検出として報告する価値があります。 - 問題が再現された時刻を尋ね、その時間枠内のイベントに重みを付けます。
- シグナルとバックグラウンドノイズを区別します。アナトミーページには通常のノイズがリストされています。次に、レポート(ステップ 6)でノイズを明記し、読者がそれを追いかけないようにします。
- TSS が収集警告を記録した場合、どのデータが欠落しているかを示します。
6. レポート
以下の形式を使用します。短く、症状に特化したものにします:
## 診断: <1 行>
**確信度:** 高 / 中 / 低、理由。
## 証拠
- <ファイルまたはチェック> → <何を示しているか、タイムスタンプ/カウント/コード付き>
## 関係なし(バックグラウンドノイズ)
- <プロバイダー/ID またはコード、カウント> → <この症状と無関係な理由、例: DCOM 10010、BitLocker 24641、Store 0x80073D02>
## 修正
1. <手順>(safety.md による tier 1/2/3、管理者権限が必要か)
## それでも解決しない場合
- 次の収集: <正確な .\TSS.ps1 コマンド>、<マシン> で実行、再現、<ZIP> を送信
## データを共有する前に
- <パッケージサマリーからの機密ファイル、および削除するもの>
見つけた個人データ(メールアドレス、SID、シリアル番号、IP、ユーザー名)を説明します。カウントとどのファイルにあるかを示しますが、回答にコピーしないでください。回答は、クリーンに保とうとしている同じチケットに含まれることがよくあります。
チェックしなかったこと、またはデータが示せないこと(例: Microsoft のみがデコードできるコンポーネント ETL)を明確に述べます。
注意点
- 一度に 1 つのシナリオのみ使用します。 コンポーネントと CollectLogs は組み合わせ可能ですが、シナリオは組み合わせ不可です。
- シナリオの実行場所を確認します。 ロックアウトと KDC シナリオはドメインコントローラーで実行します。SMB、RDS、DNS にはクライアントとサーバーで別々のシナリオがあります。間違った側で実行すると、クリーンなトレースと誤った結論が得られます。
- xray はほとんどがライブマシンを必要とします。 この TSS バージョンの 34 のチェックはすべてオフラインでは実行されないため、パッケージに対して
xray.ps1 -Offlineを実行しても何も見つかりません。代わりに、収集中に生成されたxray_*ファイルを読み取ってください(references/xray-checks.mdに KB 記事と共にチェックがリストされています)。 - TSS が変更されたらインデックスを更新します。
Update-Tss.ps1が自動的に再構築します。ユーザーが別の方法で新しい TSS を入手した場合は、scripts/Build-TssIndex.ps1 -TssRoot <folder>を実行して名前とオプションが一致するようにします。検索時には、インデックスとディスク上のコピーが異なる場合に警告が表示されます。 - バックグラウンドノイズは正常です。 正常な Windows では、DCOM 10010/10016、Perflib、BitLocker 24641、Store 0x80073D02 のエラーが常に記録されます。症状と時間的に一致しない限り、これらに基づいて診断を組み立てないでください。
ファイル
scripts/Invoke-QuickTriage.ps1: 読み取り専用のライブヘルススナップショット。scripts/Find-TssScenario.ps1: 症状 → TSS コマンド。-Nameで完全なエントリを取得。-AsJsonで解析用。scripts/Read-TssPackage.ps1: MS_DATA ZIP またはフォルダのオフライン分析。scripts/Update-Tss.ps1:-CheckOnlyはローカルコピーを公開バージョンと比較します。それ以外の場合、スクリプトは新しい TSS をダウンロード、検証、インストールし(TSS_<version>に)、インデックスを再構築します。scripts/Resolve-TssRoot.ps1: ローカルの TSS フォルダを表示します(存在する場合)。-Save <folder>は別の場所に保存されたコピーを記録します。scripts/Build-TssIndex.ps1: TSS フォルダからreferences/カタログを再生成します(JSON と xray ソースのみを読み取ります)。references/running-tss.md: 前提条件、コマンドパターン、出力レイアウト、90 日の有効期限。references/safety.md: ティア、ハードストップ、既知の副作用、データ共有。references/package-anatomy.md: シナリオファミリごとの読み取り対象、デコードツール、ノイズ、エラーコード。references/scenario-index.md、waitevent-recipes.md、xray-checks.md、tss-index.json: 生成されたカタログ。