Win11 23H2 端末が Tenable で「脆弱」と判定され、原因が Microsoft 3D Viewer(View 3D)の残存・旧バージョンだった…というケースがあります。本記事では Intune から PowerShell を配布して 3D Viewer を削除する手順と、削除後に“復活”させないための実務ポイントをまとめます。
Tenable で「Microsoft 3D Viewer」が脆弱判定される典型パターン
セキュリティスキャンの結果、「Microsoft 3D Viewer が脆弱」と出る場合、よくある構図はシンプルです。端末にインストールされている 3D Viewer のバージョンが基準より古く、リモートコード実行などの脆弱性に該当してしまう、というものです。Tenable の Nessus プラグイン例では、3D Viewer が特定バージョン未満の場合に RCE 脆弱性として判定し、Microsoft Store での更新を推奨しています。
| 状況 | 現場で起きがちな原因 | 現実的な対処 |
|---|---|---|
| Win11 23H2 が「脆弱」扱いになる | Win10→Win11 アップグレード端末に 3D Viewer が残り続け、ストア更新が追随していない | 不要なら削除(Intune でアンインストール)、必要なら更新(ストアアプリの更新運用を整備) |
| 削除したのに別ユーザーで復活する | 「プロビジョニング(既定配布)」として残っており、新規ユーザー作成時に再インストールされる | Remove-AppxProvisionedPackage で“既定の入り口”も除去する |
| 大型アップデート後に戻る | 機能更新でストアアプリが再導入された/既定アプリ構成がリセットされた | 再検出→再削除の仕組み(定期リメディエーション、アンインストール割り当て等)を用意する |
Microsoft 3D Viewer は「Appx(ストア)アプリ」なので、消し方が少し特殊
Microsoft 3D Viewer は、一般的な MSI/EXE の “デスクトップアプリ” とは扱いが異なり、Microsoft Store 由来の Appx(AppxBundle)として入っていることが多いアプリです。つまり、コントロールパネル系のアンインストールだけでなく、PowerShell の Appx 系コマンド(Get-AppxPackage / Remove-AppxPackage など)で管理するのが手っ取り早い場面が多いです。
そして厄介なのが、端末が「Win10 から Win11 へアップグレードされたもの」の場合、当初の状態や過去のユーザーで入った Appx アプリが“そのまま引き継がれる”ことがある点です。OS を上げたからといって、古いストアアプリが常に自動的に最新版へ統一されるとは限りません。だからこそ、Intune で「狙って削除する」運用が効いてきます。
結論:Intune から PowerShell スクリプトを配布して Appx をアンインストールする
今回の主目的は、Intune から対象デバイスへ PowerShell を配布し、Microsoft 3D Viewer(Microsoft.Microsoft3DViewer)をアンインストールすることです。
最小構成での代表的なアンインストール例は、次の 1 行です(質問で提示されていたコマンドと同様です)。Microsoft Q&A の同様の相談でも、このコマンドを Intune で配布して削除できたことが確認されています。
Get-AppxPackage -AllUsers -PackageTypeFilter Bundle -Name Microsoft.Microsoft3DViewer | Remove-AppxPackage -AllUsers
ただし、企業運用として “確実に消す/戻さない” を狙うなら、もう少し丁寧に作り込むのがおすすめです。特に次の 2 点が重要です。
- 端末に複数ユーザーがいる場合:あるユーザーでは消えたが、別ユーザーでは残っている…が起こり得ます(AllUsers での削除を基本にします)。
- 新規ユーザー作成で復活する場合:既定で入る“プロビジョニング”が残っていると、再導入されます。必要ならプロビジョニングも併せて除去します。
Remove-AppxPackage と Remove-AppxProvisionedPackage の違いを押さえる
| コマンド | 主な目的 | 効く範囲 | 注意点 |
|---|---|---|---|
| Remove-AppxPackage | インストール済み Appx を削除 | ユーザー単位(環境によっては -AllUsers で複数ユーザー対象) | “既定配布(プロビジョニング)”を消すものではない |
| Remove-AppxProvisionedPackage | Windows イメージ側の“既定配布”を削除 | 新規ユーザー作成時に入らないようにする | 既存ユーザーからは削除されない(別途 Remove-AppxPackage が必要) |
配布用 PowerShell スクリプト例(ログ付き・復活対策込み)
以下は、Intune から配布することを前提にした例です。
- インストール済みの 3D Viewer を 全ユーザー対象で削除
- プロビジョニング(既定で入る仕組み)が残っていれば 併せて削除
- ログを
C:\ProgramData\IntuneScripts\に残す
# Remove-Microsoft3DViewer.ps1
# Intune 配布を想定(端末側での手動実行も可)
$ErrorActionPreference = "Stop"
$appName = "Microsoft.Microsoft3DViewer"
$logPath = "C:\ProgramData\IntuneScripts\Remove-Microsoft3DViewer.log"
# ログフォルダ作成
$logDir = Split-Path -Path $logPath -Parent
New-Item -Path $logDir -ItemType Directory -Force | Out-Null
function Write-Log {
param([string]$Message)
$ts = Get-Date -Format "yyyy-MM-dd HH:mm:ss"
Add-Content -Path $logPath -Value "[$ts] $Message"
}
Write-Log "=== Start uninstall: $appName ==="
# 1) インストール済み Appx(全ユーザー)を削除
try {
$installed = Get-AppxPackage -AllUsers -PackageTypeFilter Bundle -Name $appName -ErrorAction SilentlyContinue
if ($installed) {
foreach ($pkg in $installed) {
Write-Log "Removing installed package: $($pkg.PackageFullName)"
Remove-AppxPackage -Package $pkg.PackageFullName -AllUsers -ErrorAction Stop
}
} else {
Write-Log "No installed packages found for $appName"
}
}
catch {
Write-Log "ERROR (installed remove): $($_.Exception.Message)"
throw
}
# 2) プロビジョニング(新規ユーザー作成時の既定配布)を削除
# これをやらないと「新規ユーザーで復活」が起こることがあります
try {
$prov = Get-AppxProvisionedPackage -Online | Where-Object { $_.DisplayName -eq $appName }
if ($prov) {
foreach ($p in $prov) {
Write-Log "Removing provisioned package: $($p.PackageName)"
Remove-AppxProvisionedPackage -Online -PackageName $p.PackageName -ErrorAction Stop | Out-Null
}
} else {
Write-Log "No provisioned package found for $appName"
}
}
catch {
Write-Log "ERROR (provisioned remove): $($_.Exception.Message)"
throw
}
# 3) 最終確認
$remainInstalled = Get-AppxPackage -AllUsers -Name $appName -ErrorAction SilentlyContinue
$remainProv = Get-AppxProvisionedPackage -Online | Where-Object { $_.DisplayName -eq $appName }
if (-not $remainInstalled -and -not $remainProv) {
Write-Log "SUCCESS: $appName removed (installed + provisioned)."
Write-Log "=== End ==="
exit 0
} else {
$installedCount = @($remainInstalled).Count
$provCount = @($remainProv).Count
Write-Log "WARNING: $appName still present. InstalledCount=$installedCount / ProvCount=$provCount"
Write-Log "=== End ==="
exit 1
}
ポイントは「既存ユーザーからの削除」と「新規ユーザーに入る経路の遮断」を分けて考えることです。後者がプロビジョニング除去です。Remove-AppxProvisionedPackage は “新規ユーザー作成時に入らないようにするが、既存ユーザーからは消さない” と明記されています。
Intune での配布手順(Platform scripts)
PowerShell スクリプト配布は、Intune 管理センターの「スクリプト」機能(Platform scripts)で行います。Intune の PowerShell 配布は Intune Management Extension(IME)を利用する形で、スクリプトや Win32 アプリ等が割り当たると IME が自動導入されます。
- Intune 管理センターで、デバイス → スクリプトと修復 → プラットフォーム スクリプト を開きます。
- 追加 から Windows 10/11 向け(Windows 10 and later)を選び、スクリプトをアップロードします。
- スクリプト設定で、後述の推奨値に合わせて保存します。
- 対象のデバイス(またはユーザー)グループに割り当てて配布します。
- 実行結果はスクリプトの モニター(Device status / User status)で確認します。
| Intune の設定項目 | 推奨 | 理由 |
|---|---|---|
| Run this script using the logged on credentials | No(System context) | Appx の全ユーザー削除やプロビジョニング除去は、ユーザー権限よりも SYSTEM 実行の方が安定しやすい |
| Run script in 64-bit PowerShell host | Yes | 64bit OS では 64bit ホスト実行の方がトラブルを避けやすい(Intune の設定項目として明示) |
| Enforce script signature check | 組織ポリシー次第 | 署名必須の組織は Yes。そうでなければ検証しやすい No で開始し、運用が固まったら署名へ |
なお、Intune の PowerShell スクリプトは「一度実行されたら、基本は再実行されない(変更があった場合に再実行)」という挙動です。失敗時には IME のチェックインに合わせて複数回リトライされます。
削除後の確認方法(端末・Intune・スキャン)
端末側での確認コマンド
端末で “本当に消えたか” を見るなら、次の 2 系統を確認します。
- インストール済み(ユーザーにひもづく)Appx が残っていないか
- プロビジョニング(新規ユーザー作成時の既定配布)が残っていないか
# インストール済み(全ユーザー)確認
Get-AppxPackage -AllUsers -Name Microsoft.Microsoft3DViewer
# プロビジョニング確認(DisplayName で絞る)
Get-AppxProvisionedPackage -Online | Where-Object DisplayName -eq "Microsoft.Microsoft3DViewer"
Intune 側での確認ポイント
Intune 管理センターでは、スクリプトの「モニター」からデバイス単位の成功/失敗を確認できます。
ログで深掘りしたい場合
IME のログは端末の C:\ProgramData\Microsoft\IntuneManagementExtension\Logs 配下にあり、スクリプト実行の追跡には AgentExecutor.log などが役立ちます。
| 確認したいこと | 見る場所 | 具体例 |
|---|---|---|
| スクリプトが配布・実行されたか | Intune 管理センター | Platform scripts → Monitor → Device status |
| 端末での実行ログ | IME ログ | C:\ProgramData\Microsoft\IntuneManagementExtension\Logs\AgentExecutor.log |
| 今回のスクリプト独自ログ | スクリプトで出力 | C:\ProgramData\IntuneScripts\Remove-Microsoft3DViewer.log |
“新規ユーザーで復活する”問題の考え方と対処
「削除したのに、別の人が初回ログオンしたら 3D Viewer が戻ってきた」という現象は、運用現場でよく遭遇します。原因は、アプリが プロビジョニング(既定配布)として Windows イメージ側に残っていることです。
この場合、既存ユーザーからの削除(Remove-AppxPackage)だけでは足りず、プロビジョニング自体を Remove-AppxProvisionedPackage で落とします。Remove-AppxProvisionedPackage は “新規ユーザー作成時にインストールされなくなるが、既存ユーザーからは削除されない” という性質なので、順番としては「既存ユーザーから削除 → プロビジョニング削除」が分かりやすいです。
最小のコマンド例は次の通りです。
Get-AppxProvisionedPackage -Online |
Where-Object DisplayName -eq "Microsoft.Microsoft3DViewer" |
Remove-AppxProvisionedPackage -Online
大型アップデートやストア更新で再導入される場合の運用案
Windows の機能更新(大型アップデート)や、組織のストア制御方針の変更などを契機に、ストアアプリが再導入・再表示されることがあります。ここで重要なのは「一度消して終わり」ではなく、再発を検知して自動で戻す仕組みに寄せることです。
- 再検知→再削除を回す:リメディエーション(検出スクリプト+修復スクリプト)を定期実行できる環境なら、3D Viewer が入ったら自動で除去する形にできます(スケジュール実行の仕組み)。
- アプリ管理で「アンインストール割り当て」を併用:3D Viewer をストアアプリとして Intune で管理できるなら、割り当てを Uninstall にしておくと運用が安定しやすいです。
- 例外運用を作る:一部の設計部門など 3D Viewer が必要な端末は、削除対象グループから外す(または更新を強制)など、グルーピングを明確にします。
Intune の PowerShell スクリプト(Platform scripts)は、基本的に “割り当て時に実行し、同じ内容なら繰り返し実行しない” 挙動です。継続監視が目的なら、定期実行できる仕組み(修復)や、アプリ割り当ての考え方を組み合わせると、再発に強くなります。
うまく削除できないときのチェックリスト
ローカルで手動実行すると消えるのに、Intune 配布だと消えない…という場合、だいたいは “実行コンテキスト” と “確認方法” が原因です。以下を順に潰すと解決が早いです。
- System context で動いているか:Intune の「logged on credentials」を Yes にしていると、ユーザー権限で動いて削除範囲が限定されることがあります。System 実行(No)に寄せます。
- 64-bit PowerShell host で動いているか:64-bit OS なら、64-bit 実行の方が引っかかりにくいです。
- “そのユーザーだけ消えた”状態になっていないか:Get-AppxPackage を -AllUsers で見て、別ユーザー分が残っていないか確認します。
- プロビジョニングが残っていないか:新規ユーザーで復活するなら、Get-AppxProvisionedPackage で残存確認します。
- IME のログを確認する:実行の痕跡やエラーは IME ログで追えます。
補足として、環境によっては Remove-AppxPackage -AllUsers が使えない(古い Appx モジュールが読み込まれている等)ケースもあります。その場合は OS/モジュールの状況確認や、別アプローチ(ユーザー SID を列挙して削除する等)が必要です。
削除か更新か迷う場合の判断軸
最後に、「脆弱判定を消したいが、3D Viewer を業務で使う可能性もゼロではない」という場合の判断軸です。
| 方針 | 向いている組織 | 注意点 |
|---|---|---|
| 削除(アンインストール) | 3D Viewer を使わない/代替手段がある/標準イメージを軽くしたい | 大型アップデート等で再導入される可能性を見込み、再削除の仕組みを用意 |
| 更新(最新版へ) | 3D Viewer を利用する部門がある/アプリの存在は許容できる | ストア更新の運用・制御が必要(スキャン基準に追随できる仕組みが要る) |
まとめ:Intune で “消して終わり” にしない設計が重要
- Win11 23H2 の脆弱判定が 3D Viewer 起因なら、Intune から PowerShell 配布で Appx をアンインストールするのが早い
- 複数ユーザー端末は AllUsers を前提に考える
- “新規ユーザーで復活” は プロビジョニング除去(Remove-AppxProvisionedPackage)までやると安定する
- 機能更新で戻ることを想定し、再検知→再削除の運用(修復やアンインストール割り当て)までセットで設計する

コメント