
Windows環境でPowerShellスクリプトを実行していると、突然「Class not registered(クラスが登録されていません)」というエラーに遭遇することがあります。これはCOMオブジェクトに関係した典型的なエラーです。
この記事では、PowerShellとCOMの基本から、よくあるエラーの原因、具体的な対処法までを、初心者の方にもわかるよう丁寧に解説します。
PowerShellとCOMって何?
PowerShellとは?
PowerShell(パワーシェル)は、Windowsに標準搭載されている高機能なコマンドラインシェルです。コマンドプロンプトとは異なり、スクリプト言語としても利用でき、システム管理やタスクの自動化に向いています。
COMとは?
COM(Component Object Model)は、Microsoftが開発したコンポーネント技術で、異なるソフトウェア間でオブジェクト(機能)を共有・呼び出すための仕組みです。PowerShellからは、たとえば以下のように呼び出します。
$excel = New-Object -ComObject Excel.Applicationこのようにして、PowerShellスクリプトからExcelやWordなどのアプリケーションを操作できます。
COMオブジェクトとは?(ExcelやWScriptの例)
PowerShellからCOMオブジェクトを使うことで、次のような自動化が可能になります。
- Excel/Wordを操作する(Office自動化)
- ショートカットを作成する/ファイル操作を自動化する
たとえば以下のようなコード
$wsh = New-Object -ComObject WScript.Shell$wsh.Popup("Hello, World!")このようにCOMオブジェクトを呼び出すことで、Windowsの機能を柔軟に活用できるのですが、時折エラーを引き起こすこともあります。
よくあるエラーとその意味(0x80040154など)
PowerShellでCOMオブジェクトを作成する際に、以下のようなエラーに遭遇することがあります。
代表的なエラーメッセージ
HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG)
この 0x80040154 は「クラスが登録されていない」という意味で、Windowsのレジストリ上に必要なCOMコンポーネントが見つからないか、登録されていない状態です。
最初に確認:Officeは入っていますか?(Excel COMの場合)
ExcelのCOM(Excel.Application)を使う場合、Microsoft Excel(デスクトップ版)がPCにインストールされていることが前提です。Web版のみ・未インストールの場合は、COMが作れず「Class not registered」になることがあります。
エラーの原因とチェックポイント
原因① COMコンポーネントが未インストール
該当するCOMオブジェクトがシステムにインストールされていない、または破損している場合に発生します。
原因② レジストリ登録が不完全
インストールされていても、レジストリに適切な情報が登録されていない場合もあります。
原因③ 32bit/64bitの不一致
32bitアプリのCOMコンポーネントを64bitのPowerShellから呼び出そうとすると失敗することがあります。
原因④ 管理者権限が不足している
特定のCOMオブジェクトには、管理者権限が必要なものもあります。
原因⑤ 実行ポリシーや制限付き環境
企業PCや学校のPCなどではセキュリティ設定によってCOMの呼び出しがブロックされている場合があります。※「Class not registered(0x80040154)」自体は、主にCOMの登録・インストール・32/64bit不一致が原因です。実行ポリシー(ExecutionPolicy)は「スクリプトが起動できない/ブロックされる」別タイプの問題なので、ここでは混同しないように注意してください。
対処法の解説・32bit版PowerShellを起動する手順(Windows 64bitの場合)
PowerShellのビット数が原因でエラーが発生している可能性がある場合、32bit版PowerShellを使ってみるのが有効です。以下の手順で起動できます。
【手順】(Windows 64bit版の場合)
- エクスプローラーを開く
キーボードで Windowsキー + E を押して、エクスプローラー(ファイル管理)を開きます。 - 次のフォルダに移動する
アドレスバーに以下をコピー&ペーストして、Enterキーを押します
- powershell.exe を起動
通常はダブルクリックでOKです。必要な操作(登録や修復など)を行う場合のみ「管理者として実行」を使います。
これで32bit版PowerShellが起動します。
【補足】
COMオブジェクトとPowerShellのビット数は一致していないと正しく動作しません。64bit OSでも、32bitアプリに合わせたスクリプト実行が必要になる場合があります。
対処法① PowerShellのビット数を切り替えて実行する
上記手順で32bit版PowerShellを起動し、対象のスクリプトを再実行してみましょう。特に「Class not registered」などのCOMエラーが解消される可能性があります。
対処法② 管理者権限で実行する
COMオブジェクトの中には、通常のユーザー権限では呼び出せないものがあります。そのため、PowerShellを「管理者として実行」することで、エラーが解消されることがあります。
【手順】
- スタートボタンを右クリック
画面左下の「Windowsマーク(スタート)」を右クリックします。 - 「Windows PowerShell(管理者)」または「ターミナル(管理者)」を選択
表示されたメニューから、以下のどちらかを選びます。
- Windows 10の場合 → 「Windows PowerShell(管理者)」
- Windows 11の場合 → 「Windows ターミナル(管理者)」
- ユーザーアカウント制御(UAC)が表示されたら「はい」
これで管理者権限のPowerShellが起動します。
【補足】
「右クリック→管理者として実行」はWindows操作の基本テクニックです。COM関連のエラーに限らず、システム設定やアプリ制御が絡む処理では必須になる場面が多いので、ぜひ覚えておきましょう。
対処法③ COMコンポーネントの再インストール
たとえばOfficeを再インストール、または「プログラムの修復」からCOM登録を修正できます。
対処法④ Regsvr32で手動登録する
「Class not registered」エラーは、COMオブジェクトに関連するDLLやOCXファイルが、Windowsに正しく登録されていない場合にも発生します。
こうした場合、regsvr32 というWindows標準のツールを使って、手動でCOMコンポーネントを登録し直すことで解決できる可能性があります。
regsvr32による登録の手順
① 管理者としてコマンドプロンプトを開く
スタートメニューで「cmd」と入力し、表示された「コマンドプロンプト」を右クリック →「管理者として実行」を選びます。
② 次のようにコマンドを入力する
または.ocxファイルの場合は
※DLLやOCXのパスにスペースが含まれる場合は、上記のように "(ダブルクォーテーション) で囲んでください。
③ 「登録に成功しました」というメッセージが出れば完了です。
※64bit版と32bit版で使用すべきregsvr32が異なります。使用するDLLやOCXのビット数に合わせて、正しいregsvr32を使う必要があります。例えば、64bit DLLなら C:\Windows\System32\regsvr32.exe、32bit DLLなら C:\Windows\SysWOW64\regsvr32.exe を使います。
⚠️ 注意
regsvr32 はDLL/OCXを手動登録する強い操作です。対象ファイルの場所と入手元が明確な場合のみに行ってください。分からない場合は、先にアプリの修復/再インストールをおすすめします。
対処法⑤ セキュリティポリシーの確認
ローカルグループポリシーや企業管理ポリシーでCOMが無効化されていないか確認します。
再発防止策について
- スクリプトの最初にチェックを入れる:バージョンや実行環境を明示的に確認
- ドキュメント化しておく:どのCOMオブジェクトが必要なのか、セットアップ手順を記録
- 他人のPCで動かすときは注意:環境が違えばエラーが出ることを前提に作る
また、COMを使わない別手段(たとえばExcelの場合はImportExcelモジュールなど)に切り替えるのも有効です。
まとめ
PowerShellでのCOMトラブルは焦らず確認を
PowerShellでCOMオブジェクトを使うと非常に強力な自動化が可能になりますが、「Class not registered」などのエラーでつまずくこともあります。
エラーの多くは、
- 64bit/32bitの不一致
- インストール不備やレジストリの問題
- 権限不足
といった環境的な要因であるため、慌てずに一つずつ確認することが大切です。
【おすすめ記事】
▶︎WSUS同期エラーが多発!世界中で発生した重大障害の原因と対策をわかりやすく解説

