remote application inventoryでは、hostとremote sessionに加え、Machine64、Machine32、CurrentUserRegistry、CurrentUserAppx、AllUsersAppxのscopeを分けて保存します。別userのHKCU Uninstallはそのuser contextまたは承認済みのprofile hive inventoryが必要であり、現在sessionのHKCUだけを全user inventoryと呼びません。
この手順の合格条件は「source・scope・Name・Version付きinventoryになる状態」です。Microsoft Learn:Invoke-Commandのremote scopeとGet-AppxPackageのuser/package scopeが定義するInvoke-Commandのremote scopeとGet-AppxPackageのuser/package scopeを根拠にし、画面へ値が出たことだけを成功とは判定しません。
停止条件:remote command権限や対象userを確定できない。該当するときは操作を進めず、remote sessionを閉じ読み取り結果だけを破棄するを実行可能な形で確認してから再計画します。
remote application inventory|最短の答えを実測へ落とす:source・scope・Name・Version付きinventoryになる状態
リモートPCのアプリ導入状況の成果物は変更済み設定ではなく、再現可能な確認結果です。Test-WSManの実行条件、時刻、件数とInvoke-Commandの照合結果を残します。
Win32_ProductはMSI再構成を誘発し得るため棚卸しに使わない。Storeアプリと従来型アプリを別取得し、権限失敗を未導入と誤認しない。 そのため、リモートPCのアプリ導入状況の合格判定にはInvoke-Commandだけでなく、DNS、WinRMまたはRDS到達性、認証、対象側の取得結果を段階確認する手順を組み合わせます。
| 判断要素 | リモートPCのアプリ導入状況で記録する内容 |
| 対象の識別 | 接続先FQDN、セッション、認証方式、対象ユーザー |
| 最初の確認 | Test-WSMan |
| 変更または操作 | Invoke-Command |
| 再確認 | Invoke-Command |
| 中止条件 | 接続を切ると復旧操作ができず、ローカル担当者にも連絡できない |
リモートPCのアプリ導入状況の基準値を得るコマンドが次の例です。端末名、パス、ポート、ユーザーは説明用なので、実環境の固有IDを確認してから置き換えます。
Test-WSMan -ComputerName 'PC-OPS-021'
Invoke-Command -ComputerName 'PC-OPS-021' -ScriptBlock {
$registrySources = @(
@{ Scope='Machine64'; Path='HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall\*' }
@{ Scope='Machine32'; Path='HKLM:\Software\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\*' }
@{ Scope='CurrentUserRegistry'; Path='HKCU:\Software\Microsoft\Windows\CurrentVersion\Uninstall\*' }
)
foreach ($source in $registrySources) {
Get-ItemProperty -Path $source.Path -ErrorAction SilentlyContinue |
Where-Object DisplayName |
Select-Object @{n='InventoryScope';e={$source.Scope}}, DisplayName, DisplayVersion, Publisher
}
}
Test-WSManが返す表示名は人向けで、復旧対象の識別には不足することがあります。接続先FQDN、セッション、認証方式、対象ユーザーをCSVやJSONへ残します。
remote application inventory|対象を一件へ固定する:host・Cim/WinRM session・user scope
リモートPCのアプリ導入状況で使うPowerShellの版は $PSVersionTable で、コマンドの提供元は Get-Command Test-WSMan で確認します。対象端末のリモート管理権限。対象候補が複数なら接続先FQDN、セッション、認証方式、対象ユーザーを使い、表示名の部分一致だけで選びません(リモートPCのアプリ導入状況ではInvoke-Commandが同じ対象を返さない場合、読み取りのみなら復旧不要)。
- リモートPCのアプリ導入状況: 実行端末と現在ユーザーを記録する
- Test-WSMan: Source、Version、利用可能なパラメーターを確認する
- 接続先FQDN、セッション、認証方式、対象ユーザー: 変更前の値を日時付きで保存する
- 接続先、現在セッション、代替管理経路、資格情報を含まない構成情報: 復旧に使えることを読み取り確認する(リモートPCのアプリ導入状況ではTest-WSManの対象件数とInvoke-Commandの再取得値を一致させます)。
- 接続を切ると復旧操作ができず、ローカル担当者にも連絡できない: 該当すれば本番実行を見送る
リモートPCのアプリ導入状況の「なぜPowerShellか」では、Test-WSManの取得時刻と対象件数を残します。後からInvoke-Commandを実行したとき、なぜPowerShellかの差分理由を説明できる形にします。
PowerShellの特長の確認結果はリモートPCのアプリ導入状況の変更可否に直結します。接続を切ると復旧操作ができず、ローカル担当者にも連絡できないなら、PowerShellの特長の調査記録を残して実行を見送ります。
リモートPCのアプリ導入状況の「環境設定」では、Test-WSManの取得時刻と対象件数を残します。後からInvoke-Commandを実行したとき、環境設定の差分理由を説明できる形にします。
前提条件の確認結果はリモートPCのアプリ導入状況の変更可否に直結します。接続を切ると復旧操作ができず、ローカル担当者にも連絡できないなら、前提条件の調査記録を残して実行を見送ります(リモートPCのアプリ導入状況ではInvoke-Commandが同じ対象を返さない場合、読み取りのみなら復旧不要)。
「環境設定手順」の値が想定と違う場合、権限不足、名前解決失敗、ファイアウォール、対象側サービス停止を切り分けます。Win32_ProductはMSI再構成を誘発し得るため棚卸しに使わない。Storeアプリと従来型アプリを別取得し、権限失敗を未導入と誤認しない。 ため、環境設定手順を強制的に書き換えて症状を隠しません。
リモートPCのアプリ導入状況で「基本的なコード例」を扱うときは、基本的なコード例の表示名だけでなく接続先FQDN、セッション、認証方式、対象ユーザーを記録します。Invoke-Commandでも同じ対象が返ることを確かめます。
Test-WSManの空結果は成功とは限りません。リモートPCのアプリ導入状況では権限不足、名前解決失敗、ファイアウォール、対象側サービス停止を調べ、エラーを非表示にした場合も件数へ含めます。
リモートPCのアプリ導入状況でInvoke-Commandを使う前に、Get-Command Invoke-CommandでSourceとVersionを確認します。別モジュールの同名コマンドを実行しないためです。
Get-ItemPropertyはリモートPCのアプリ導入状況の3番目の確認手段です。Get-Help Get-ItemProperty -Fullで利用できるパラメーターを調べ、出力型と対象件数を記録します(リモートPCのアプリ導入状況ではTest-WSManの対象件数とInvoke-Commandの再取得値を一致させます)。
リモートPCのアプリ導入状況でSelect-Objectが利用できない場合、Editionやモジュールを確認します。存在しない代替コマンドを作らず、公式の設定経路へ切り替えます。
Get-AppxPackageはリモートPCのアプリ導入状況の5番目の確認手段です。Get-Help Get-AppxPackage -Fullで利用できるパラメーターを調べ、出力型と対象件数を記録します(リモートPCのアプリ導入状況ではInvoke-Commandが同じ対象を返さない場合、読み取りのみなら復旧不要)。
リモートPCのアプリ導入状況でGet-Commandが利用できない場合、Editionやモジュールを確認します。存在しない代替コマンドを作らず、公式の設定経路へ切り替えます。
remote application inventory|rollback可能性を実行前に測る:remote sessionを閉じ読み取り結果だけを破棄する
リモートPCのアプリ導入状況は読み取り中心ですが、出力には端末名、SID、IP、メールアドレスなどが含まれる場合があります。保存先のACLと保管期限を決め、共有時は必要列だけに限定します。
リモートPCのアプリ導入状況の追加確認例です。システムを変更する命令ではなく、Test-WSManの結果を別の列や範囲で確かめる目的で使います(リモートPCのアプリ導入状況ではTest-WSManの対象件数とInvoke-Commandの再取得値を一致させます)。
Invoke-Command -ComputerName 'PC-OPS-021' -ScriptBlock {
Get-AppxPackage | Select-Object @{n='InventoryScope';e={'CurrentUserAppx'}}, Name, Version, Status
$principal = [Security.Principal.WindowsPrincipal]([Security.Principal.WindowsIdentity]::GetCurrent())
if ($principal.IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)) {
Get-AppxPackage -AllUsers |
Select-Object @{n='InventoryScope';e={'AllUsersAppx'}}, Name, Version, Status
}
}
リモートPCのアプリ導入状況の操作後は次の変更へ進まず、Invoke-Commandで同じ接続先FQDN、セッション、認証方式、対象ユーザーを再取得します。
remote application inventory|再取得値を完了条件へ結ぶ:source・scope・Name・Version付きinventoryになる状態
Invoke-Commandでは、変更前に保存した接続先FQDN、セッション、認証方式、対象ユーザーと同じ対象を選びます。DNS、WinRMまたはRDS到達性、認証、対象側の取得結果を段階確認することで、別スコープの値を成功結果として採用しません(リモートPCのアプリ導入状況ではInvoke-Commandが同じ対象を返さない場合、読み取りのみなら復旧不要)。
Invoke-Command -ComputerName 'PC-OPS-021' -ScriptBlock { Get-Command powershell.exe | Select-Object Source, Version }
- Invoke-Command: 同じ対象IDを再取得できた
- リモートPCのアプリ導入状況: 意図した値または件数だけが変化した
- DNS、WinRMまたはRDS到達性、認証、対象側の取得結果を段階確認する: 関連機能も異常がない
- 権限不足、名前解決失敗、ファイアウォール、対象側サービス停止: 取得失敗をゼロ件として扱っていない
- Win32_ProductはMSI再構成を誘発し得るため棚卸しに使わない。Storeアプリと従来型アプリを別取得し、権限失敗を未導入と誤認しない。: 環境固有の制約に反していない
remote application inventory|再試行より保全を優先する:remote command権限や対象userを確定できない
Test-WSManが「見つからない」ときは、Get-CommandとGet-Module -ListAvailableで提供元を確認します。リモートPCのアプリ導入状況が非対応のEditionなら、名前が似たコマンドへ置き換えません。
Invoke-Commandで別の対象が返った場合、表示名の一致ではなく接続先FQDN、セッション、認証方式、対象ユーザーで取り直します。誤対象への変更があれば追加操作を止めます。
接続を切ると復旧操作ができず、ローカル担当者にも連絡できない状態はリモートPCのアプリ導入状況の中止条件です。復旧に必要な人・経路・データが揃うまで、本番端末ではInvoke-Commandを実行しません。
断定できません。リモートPCのアプリ導入状況では権限不足、名前解決失敗、ファイアウォール、対象側サービス停止でも空になります。エラーを表示し、権限とスコープを確認してからInvoke-Commandまたは別の公式な取得方法で照合します。
remote application inventory|変更前状態へ戻す順番を決める:remote sessionを閉じ読み取り結果だけを破棄する
読み取りのみなら復旧不要。PSSessionを作った場合は閉じ、資格情報・アプリ一覧・端末名をアクセス制御された場所で扱う。
リモートPCのアプリ導入状況を戻した後はTest-WSManとInvoke-Commandを再実行し、接続先FQDN、セッション、認証方式、対象ユーザーが変更前記録と一致することを確認します。復旧処理にも失敗したら連続操作を止め、保存した接続先、現在セッション、代替管理経路、資格情報を含まない構成情報とログを担当者へ渡します(リモートPCのアプリ導入状況ではTest-WSManの対象件数とInvoke-Commandの再取得値を一致させます)。
remote application inventory|定期実行へ渡す記録を決める:uninstall registryとAppx packageの二系統
- Test-WSManの実行時刻、対象件数、エラー件数を残した
- 接続先FQDN、セッション、認証方式、対象ユーザーで対象を一意に特定した
- 接続先、現在セッション、代替管理経路、資格情報を含まない構成情報を変更前に保存して読めることを確認した(リモートPCのアプリ導入状況ではInvoke-Commandが同じ対象を返さない場合、読み取りのみなら復旧不要)。
- Invoke-Commandの対象を一端末・一ユーザー・一設定に限定した
- Invoke-Commandと実利用テストの両方を確認した
- 接続を切ると復旧操作ができず、ローカル担当者にも連絡できない場合は実行を中止した
remote application inventory|似た機能との違いを確認する:MSIとAppxをどう統合するか
権限だけが原因とは限りません。Win32_ProductはMSI再構成を誘発し得るため棚卸しに使わない。Storeアプリと従来型アプリを別取得し、権限失敗を未導入と誤認しない。 接続を切ると復旧操作ができず、ローカル担当者にも連絡できないなら昇格して続行せず、対応Edition、対象ID、ポリシー、復旧経路を確認します(リモートPCのアプリ導入状況ではTest-WSManの対象件数とInvoke-Commandの再取得値を一致させます)。

コメント