【Windows】SNMPインストール時の 0x8024401cエラー(Add-WindowsCapability COMException) 対応 

# はじめに
Windows 10 Pro 通常版では、SNMPが非推奨コンポーネントになりました。

https://win2k.org/blog/2023/08/27/post-11903/

※Windows 10 IoT版では、まだ「Windows の機能の有効化または無効化」にメニューがあります。

# インスール方法
非推奨コンポーネントになったため、 Power Shell の Get-WindowsCapability コマンドを使ってインストールする必要があります。

```
add-windowscapability -online -name "snmp.client~~~~0.0.1.0"
```

## 正常
正常にインスールできた場合、下記のような結果になります。

```
Path          :
Online        : True
RestartNeeded : False
```

## 失敗
0x8024401cエラーとなります。

```:text:結果
add-windowscapability : Add-WindowsCapability に失敗しました。エラー コード = 0x8024401c
発生場所 行:1 文字:1
+ add-windowscapability -online -name "snmp.client~~~~0.0.1.0"
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [Add-WindowsCapability], COMException
    + FullyQualifiedErrorId : Microsoft.Dism.Commands.AddWindowsCapabilityCommand
```

## 調査
この問題についてネットで検索しても、なかなかいい情報が見つかりませんでした。

FOD(Feature On Demand) という、オプションとしてインストールできる OS コンポーネントであり、オンデマンドでいつでも追加・削除が可能な機能があります。

SNMP FOD ダウンロード　コメント欄のYou can download it here:
https://techwithjasmin.com/monitoring/how-to-enable-snmp-on-windows-without-internet-access/

C:\workフォルダにSNMPのcabファイル一覧を配置して、DISMコマンドを実行しました。

```
Dism /online /add-package /packagepath:"C:\work\Microsoft-Windows-SNMP-Client-Package~31bf3856ad364e35~amd64~~.cab"
```

```:text:結果
展開イメージのサービスと管理ツール
バージョン: 10.0.19041.3636

イメージのバージョン: 10.0.19045.4291

1 / 1 を処理しています - エラーが発生しました - Microsoft-Windows-SNMP-Client-Package エラー: 0x800f0955

エラー: 0x800f0955

DISM が失敗しました。操作は実行されませんでした。
詳細については、ログ ファイルを確認してください。

DISM ログ ファイルは C:\Windows\Logs\DISM\dism.log にあります
```

## 対応
2ヶ月くらい解決できずにいましたが、ふとお風呂場でWindows Updateの設定が悪さしているのかもと思いつきます。
エラーコードではなく、エラー内容の「Add-WindowsCapability COMException」で検索すると下記サイトがヒットしました。

https://qiita.com/iShinkai/items/a12c9d26f8f4264897f9

>これは WSUS 導入環境など、 Windows のコンポーネントをインターネット経由ではなく WSUS サーバから配信しているような環境で起こる現象です。
これはグループポリシーエディタで解決する事ができます。
[OpenSSH Server Install failed, contact your administrator to get this feature](https://social.technet.microsoft.com/Forums/en-US/251804c1-883e-4ec8-a378-352dabbe87dd/openssh-server-install-failed-contact-your-administrator-to-get-this-feature?forum=ws2019)

エラーコードは0x800f0954と違いますが、Windows Updateの設定が怪しいと思っていたため、グループポリシーの変更を行いました。

1.ファイル名の実行で「gpedit.msc」を入力して、ローカルグループポリシーエディタを起動します。

2.「コンピューターの構成->管理用テンプレート->システム」へ移動し、「オプションコンポーネントのインストールおよびコンポーネントの修復のための設定を指定する」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/14053/efdd578a-f9d6-4ab7-9b4f-b8d5a42623f3.png)

3.「オプションコンポーネントのインストールおよびコンポーネントの修復のための設定を指定する」の「Windows Server Update Service (WSUS) の代わりに、Windows Update から修復コンテンツとオプションの機能を直接ダウンロードする」にチェックを付ける。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/14053/c031fa09-4998-42e6-949c-03f2da2140cb.png)

PowerShell（管理者モード）で以下のように実行します。

```
gpupdate /force
```

もう一度インストールを試行します。

```
add-windowscapability -online -name "snmp.client~~~~0.0.1.0"
```

0x8024401cから0x8024002eにエラーの内容が変更されました。

Windows Update エラー 0x8024002Eのトラブルシューティング にあるグループポリシーの変更も実行しました。
https://learn.microsoft.com/ja-jp/troubleshoot/windows-server/installing-updates-features-roles/troubleshoot-windows-update-error-code-0x8024002e

`gpupdate /force`を実行するとエラーで未指定に戻されました。
もう一度インストールを試行してみると

```
add-windowscapability -online -name "snmp.client~~~~0.0.1.0"
```

正常にインスールできたようです。

```:text:結果
Path          :
Online        : True
RestartNeeded : False
```

# 最後に
ついつい、エラーコードで検索しがちですが、エラー内容の「Add-WindowsCapability COMException」で検索すれば、もっと早く解決できたと思われる。

この記事を書いている時に調べ直したが、エラーコード`0x800f0955`で検索したら、最終的には辿り着いたかも知れない。

https://jp.easeus.com/data-recovery-solution/windows-10-0x800f0954-solution.html