質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.33%
PowerShell

Windows PowerShellはコマンドラインインターフェースであり、システム管理を含むWindowsタスク自動化のためのスクリプト言語です。

Q&A

1回答

497閲覧

Windows11でPower Shellを起動するとエラーになる。

aomi333

総合スコア1

PowerShell

Windows PowerShellはコマンドラインインターフェースであり、システム管理を含むWindowsタスク自動化のためのスクリプト言語です。

0グッド

0クリップ

投稿2025/02/07 12:35

編集2025/02/09 14:37

実現したいこと

WIndows10で動作している.ps1をWindows11で動くようにしたいです。

発生している問題・分からないこと

Windows10で問題なく、動作していますが、WIndows11では添付のようなエラーメッセージが表示されます。

2/9追記
Officeは一度64ビットをインストールしたのち32ビットにダウングレードしております。

エラーメッセージ

error

1PS C:\Users\aokih2> $file = "C:\DIAB_SF\01_PowerQuery\DIAB_SFDC_UploadFile.accdb" 2PS C:\Users\aokih2> $access = New-Object -ComObject Access.Application 3PS C:\Users\aokih2> $access.OpenCurrentDatabase($file) 4"1" 個の引数を指定して "OpenCurrentDatabase" を呼び出し中に例外が発生しました: "型 'Microsoft.Office.Interop.Access.App 5licationClass' の COM オブジェクトをインターフェイス型 'Microsoft.Office.Interop.Access._Application' にキャストできま 6せん。IID '{68CCE6C0-6129-101B-AF4E-00AA003F0F07}' が指定されたインターフェイスの COM コンポーネント上での QueryInterfa 7ce 呼び出しのときに次のエラーが発生したため、この操作に失敗しました: タイプ ライブラリ/DLL の読み込みエラーです。 (HRES 8ULT からの例外:0x80029C4A (TYPE_E_CANTLOADLIBRARY))。" 9発生場所 行:1 文字:1 10+ $access.OpenCurrentDatabase($file) 11+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 12 + CategoryInfo : NotSpecified: (:) [], MethodInvocationException 13 + FullyQualifiedErrorId : InvalidCastException 14 15PS C:\Users\aokih2>

該当のソースコード

Upload.ps1

1プログラムの概要:SAPからダウンロードしたデータを加工して、DataLoader経由でSalesforceにアップロードするバッチ処理を行う。 2各プロセスが完了した後、次のプロセスに進むようにwaitを入れています。 3#> 4 5#SAPのデータとSFのデータを加工する処理 6Start-Process powershell.exe -ArgumentList "C:\DIAB_SF\02_BatchJob\Refresh_PowerQuery.ps1 " -Wait 7#加工したデータの内insertするデータをSFにアップロード 8Start-Process -FilePath "C:\DIAB_SF\02_BatchJob\Upload_insert.bat" -Wait 9#加工したデータの内deleteするデータをSFにアップロード 10Start-Process -FilePath "C:\DIAB_SF\02_BatchJob\Upload_delete.bat" -Wait 11#上記の処理後、メールで処理結果を送信 12Start-Process powershell.exe -ArgumentList "C:\DIAB_SF\02_BatchJob\Upload_ResultMail.ps1" -Wait

Refresh_PowerQuery.ps1

1<# 2プログラムの概要:AccessのVBA'DataLoader'を実行する。 3#> 4 5$file = "C:\DIAB_SF\01_PowerQuery\DIAB_SFDC_UploadFile.accdb" 6$access = New-Object -ComObject Access.Application 7$access.OpenCurrentDatabase($file) 8 9$access.Run("DataLoader") 10$access.Quit()

試したこと・調べたこと

  • teratailやGoogle等で検索した
  • ソースコードを自分なりに変更した
  • 知人に聞いた
  • その他
上記の詳細・結果

下記の点を確認しました。CurrentUserはUndefinedでしたが、RemoteSignedに変更いたしましたが、エラーとなります。イメージ説明

1.Windows11の権限確認
添付の通り、Power Shellはオンになっています。

2.Power ShellのGet-ExecutionPolicy -Listは以下の通りです。
PS C:\Users\user2> Get-ExecutionPolicy -List
Scope ExecutionPolicy
----- ---------------
MachinePolicy Undefined
UserPolicy Undefined
Process Undefined
CurrentUser RemoteSigned
LocalMachine RemoteSigned

3.下記の実行時エラーを記述いたします。2/9追記
【実行したコード】
[System.Environment]::Is64BitProcess
$file = "C:\DIAB_SF\01_PowerQuery\DIAB_SFDC_UploadFile.accdb"
$access = New-Object -ComObject Access.Application
Write-Host $access.Caption
$access.OpenCurrentDatabase($file)

実行結果
PS C:\Users\aokih2> [System.Environment]::Is64BitProcess
True
PS C:\Users\aokih2> $file = "C:\DIAB_SF\01_PowerQuery\DIAB_SFDC_UploadFile.accdb"
PS C:\Users\aokih2> $access = New-Object -ComObject Access.Application
PS C:\Users\aokih2> Write-Host $access.Caption

PS C:\Users\aokih2> $access.OpenCurrentDatabase($file)
"1" 個の引数を指定して "OpenCurrentDatabase" を呼び出し中に例外が発生しました: "型 'Microsoft.Office.Interop.Access.App
licationClass' の COM オブジェクトをインターフェイス型 'Microsoft.Office.Interop.Access._Application' にキャストできま
せん。IID '{68CCE6C0-6129-101B-AF4E-00AA003F0F07}' が指定されたインターフェイスの COM コンポーネント上での QueryInterfa
ce 呼び出しのときに次のエラーが発生したため、この操作に失敗しました: タイプ ライブラリ/DLL の読み込みエラーです。 (HRES
ULT からの例外:0x80029C4A (TYPE_E_CANTLOADLIBRARY))。"
発生場所 行:1 文字:1

  • $access.OpenCurrentDatabase($file)
  • + CategoryInfo : NotSpecified: (:) [], MethodInvocationException + FullyQualifiedErrorId : InvalidCastException

補足

WIndows11のAccessはデスクトップ版になると思います。
Win10もWin11も32bitを使用しております。
Microsoft® Access® for Microsoft 365 MSO (Version 2411 Build 16.0.18227.20082) 32-bit

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

umimi

2025/02/07 13:19

ワシのパソコンでは、エラー・メッセージのスクリーンショットが、潰れて、読見とれないです。 リダイレクトして、テキストにして、 up 出来ないですか ? あ、ChatGPT OCR を使ったら、 -------------------- --- OCR Start --- Windows PowerShell X ULTからの例外: 0x0029C4A (TYPE_E_CANTLOADLIBRARY))。 発生場所 C:\DIAB_SF\02_BatchJob\Refresh_PowerQuery.ps1:9 文字:1 + $access.OpenCurrentDatabase($file) + CategoryInfo : NotSpecified: (:) (), MethodInvocationException + FullyQualifiedErrorId: InvalidCastException "1" 個の引数を指定して "Run"を呼び出し中に例外が発生しました: "型 'Microsoft.Office.Interop. Access.ApplicationClass' のCOM オブジェクトをインターフェイス型 Microsoft.Office.Interop.Access._Application' にキャストできません。IID '{68CC E6C0-6129-101B-AF4E-00AA003F0F07}が指定されたインターフェイスの COM コンポーネント上での QueryInterface 呼び出しのと きに次のエラーが発生したため、この操作に失敗しました: タイプ ライブラリ/DLLの読み込みエラーです。(HRESULT からの例外: 0x80029C4A (TYPE_E_CANTLOADLIBRARY))." 発生場所 C:\DIAB_SF\02_BatchJob\Refresh_PowerQuery.ps1:11 文字:1 + $access.Run("DataLoader") + + CategoryInfo : NotSpecified: (:) (), MethodInvocationException + FullyQualifiedErrorId: InvalidCastException "0" 個の引数を指定して "Quit"を呼び出し中に例外が発生しました: 中に例外が発生しました: "型 'Microsoft.Office.Interop. Access. ApplicationClass' のCOM オブジェクトをインターフェイス型 'Microsoft.Office.Interop. Access. Application'にキャストできません。IID {68CC E6C0-6129-101B-AF4E-00AA003F0F07}・ が指定されたインターフェイスの COM コンポーネント上での QueryInterface 呼び出しのと きに次のエラーが発生したため、この操作に失敗しました: タイプ ライブラリ/DLLの読み込みエラーです。(HRESULTからの例外: 0x80029C4A (TYPE_E_CANTLOADLIBRARY))." 発生場所 C:\DIAB_SF\02_BatchJob\Refresh_PowerQuery.ps1:12 文字:1 + $access.Quit() + CategoryInfo : NotSpecified: (:) [], MethodInvocationException + FullyQualifiedErrorId: InvalidCastException X --- OCR End --- -------------------- と出ました。
aomi333

2025/02/07 14:33

umimiさん OCRしていただきありがとうございます。 OCRしていただいた内容になりますが、解決方法はございますでしょうか?
dodox86

2025/02/07 23:09

@質問者 aomi333さん PowerShellのスクリプトを実行する為のExecutionPolicyは設定できていて、スクリプトの実行自体はできています。Refresh_PowerQuery.ps1を見るに、 > $access = New-Object -ComObject Access.Application とあり、エラーメッセージでは「Microsoft.Office.Interop.Access.ApplicationClassのCOMオブジェクト...QueryInterface呼び出し タイプライブラリの読み込みエラー」とあるので、対象のWindows 11にMS AccessとかOffice製品がインストールされていなかったり、動作しているというWindows 10の環境とは違うのではないですか? そういった詳細も質問文中に提示しましょう。 あと、エラーメッセージは画面のキャプチャーではなくコンソール(ターミナル)のテキストを選択~コピー&ペーストしてテキストで提示しましょう。(その際は質問文に追記、修正するかたちでお願いします)
hiroki-o

2025/02/07 23:32

Windows 11のAccessは、デスクトップ版、ストア版のどちらですか?
aomi333

2025/02/08 10:04

@dodox86さん すいません、次回よりテキストで提示するようにいたします。 Accessは手動で起動することができており、Accessのクエリも実行することができます。
aomi333

2025/02/08 10:06

@hiroki-o さん WIndows11のAccessはデスクトップ版になると思います。 Win10もWin11も32bitを使用しております。 Microsoft® Access® for Microsoft 365 MSO (Version 2411 Build 16.0.18227.20082) 32-bit
dodox86

2025/02/09 03:41

@質問者 aomi333さん 確認させてもらいたいことがいくつかあるものの長くなるのでいったん回答しようかとも思いましたが、やはり回答未満なので本欄にて失礼します。 (1) ご提示のエラーが画像で途切れているので判然としませんが、以下の質問回答記事に状況が似ているように思います。 [Microsoft Office アプリケーションの COM 呼び出しでエラー - Microsoftコミュニティ] https://answers.microsoft.com/ja-jp/msoffice/forum/all/microsoft-office/a7cc100b-920b-43b5-8d28-d6246a7314bf 当該記事ではWindows 10に64ビット版のOfficeをインストール後、アンインストールして改めて32ビット版をインストールしてExcel 2019で発生するエラーですが、 質問者さんのケースでは同じようにMS Accessを64ビット版をインストールしてアンインストール、その後32ビット版をインストール、とのようにしていませんでしょうか。 (2) あと、PowerShellを手動で起動して、Refresh_PowerQuery.ps1に沿った以下のコードを手入力で実行するとどうなりますでしょうか。 [System.Environment]::Is64BitProcess $file = "C:\DIAB_SF\01_PowerQuery\DIAB_SFDC_UploadFile.accdb" $access = New-Object -ComObject Access.Application Write-Host $access.Caption $access.OpenCurrentDatabase($file) 結果は本コメント欄ではなく、質問本文に追記、修正するかたちにすると質問内容がより詳細になり、他閲覧者さんらの目にも留まりやすくなりますのでお願いします。
aomi333

2025/02/09 14:39

@dodox86さん コメントありがとうございます。質問を修正したのでご確認よろしくお願いいたします。 ※やり方が間違っているかもしれませんので、ここにも追記させていただきます。 (1)確認したところOfficeを64ビットから32ビットにダウングレードしておりました。 (2)実行結果は下記の通りとなります。 PS C:\Users\aokih2> [System.Environment]::Is64BitProcess True PS C:\Users\aokih2> $file = "C:\DIAB_SF\01_PowerQuery\DIAB_SFDC_UploadFile.accdb" PS C:\Users\aokih2> $access = New-Object -ComObject Access.Application PS C:\Users\aokih2> Write-Host $access.Caption PS C:\Users\aokih2> $access.OpenCurrentDatabase($file) "1" 個の引数を指定して "OpenCurrentDatabase" を呼び出し中に例外が発生しました: "型 'Microsoft.Office.Interop.Access.App licationClass' の COM オブジェクトをインターフェイス型 'Microsoft.Office.Interop.Access._Application' にキャストできま せん。IID '{68CCE6C0-6129-101B-AF4E-00AA003F0F07}' が指定されたインターフェイスの COM コンポーネント上での QueryInterfa ce 呼び出しのときに次のエラーが発生したため、この操作に失敗しました: タイプ ライブラリ/DLL の読み込みエラーです。 (HRES ULT からの例外:0x80029C4A (TYPE_E_CANTLOADLIBRARY))。" 発生場所 行:1 文字:1 + $access.OpenCurrentDatabase($file) + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : NotSpecified: (:) [], MethodInvocationException + FullyQualifiedErrorId : InvalidCastException
umimi

2025/02/10 03:04

ワシは、PowerShell から Office 関連を呼び出すのは、わからないで、他の方々に、まかせます。
dodox86

2025/02/11 18:52

@質問者 aomi333さん 試していただきどうもありがとうございました。当方ではMS AccessやWindows 11を持っていなかったりしてまったく同じようには再現できないですが、MS Officeの64ビット/32ビット版の移行に関わっていて、いくつか報告がある既知の問題であることが分かりました。こちらで少し調べてみていたのと、回答が悩ましいなぁ、と言うことで遅れています。追って回答するつもりですので少々お待ちください。(もちろん既に解決した、とか他の回答者様からの回答を待っていても良いと思います)
dodox86

2025/02/12 05:58

@質問者 aomi333さん 長々とした回答となりましたが、投稿しました。参考になれば幸いです。
guest

回答1

0

本件はOffice製品のインストール状況とエラーの内容からしてMicrosoft Office製品を64ビット版から32ビット版、あるいはその逆に移行したときに起きる問題のようです。

以下はコメント欄での私の[2025/02/09 12:41]のコメントから転載したものです。Windows 10に64ビット版のOfficeをインストール後、アンインストールして改めて32ビット版をインストールしてExcel 2019で発生したエラーに関する質問回答です。残念ながら解決には至らなかったようですが。質問者さんのケースでは同じようにMS Accessの64ビット版をインストール後、アンインストールして改めて32ビット版をインストールされたとのことなので、本質的には同じだと判断します。

Microsoft Office アプリケーションの COM 呼び出しでエラー - Microsoftコミュニティ

回答の為に簡単に説明しますと、Accessを含むExcelやWord等のMicrosoft Office製品は、COM(Component Object Model)と言う機能を持ち、COMサーバーとして動作します。実行ファイルである*.DLLや*.EXEがCOMの機能を提供していて、VBAやVBScript、PowerShell等の別のプログラムからその機能を呼び出し、使うことができるものです。例えば質問者さんのPowerShellスクリプトのコードに沿って言うと以下のようなかんじです。

PowerShell

1# "Access.Application"で参照できるAccessのCOMサーバーを新規に作成する 2$access = New-Object -ComObject Access.Application 3 4# AccessのCOMサーバーが持つOpenCurrentDatabaseメソッドを引数"C:\hoge.accdb" で呼び出す 5$access.OpenCurrentDatabase("C:\hoge.accdb")

ここで、COMの機能を持つ実行ファイル(.DLLとか.EXE)について、同じ名前のものでも32ビット用と64ビット用があります。64ビット版Windowsで実行する場合、64ビット版のCOMが登録されていればそれがそのまま使われます、64ビット版のCOMが登録されていなく、32ビット版のCOMが登録されていればWindowsが自動的にうまく仲介してくれます。これらの登録情報はレジストリに64ビット版COM用、32ビット版COM用でそれぞれ別に保存されています。

MS Office製品をインストールする時、先に64ビット版をインストールし、これをアンインストールしてから32ビット版をインストールすると、32ビット版COM用のレジストリ情報が登録されたにも関わらず、先に登録された64ビット版COM用のレジストリ登録情報がきれいに削除されない不具合が昔のバージョンからあるようです。64ビット版のCOMの孤立化(orphaned)と言えます。その反対もあって、32ビット版のCOMの孤立化もあります。

以下はMicrosoftが情報として挙げているものです。このケースでは32ビット版から64ビット版に移行したときの話です。質問者さんのケースとは反対で、32ビット版COMの孤立化ですね。

Office アーキテクチャの移行後の COM エラーと .NET エラー - Microsoft Learn

現象
Microsoft Office アーキテクチャを 32 ビットから 64 ビットに移行すると、COM アプリケーションまたは.NET Framework クライアントが使用されている場合にエラーが発生します。

この記事中で、孤立化したレジストリの検査・修復ツールが、PowerShellのスクリプトとしてgithubの以下のリポジトリに挙がっています。ただし、コードを軽く確認、実行して試したところでは32ビット版から64ビット版へ移行して孤立した時に使うもので、質問者さんのケースでは使えません。

Office TypeLib Remediation - github

昔から報告されている不具合にも関わらず新しいバージョンのOfficeでも発生する、と言うことは、簡単には直せないインストーラー・アンインストーラーの深い問題があるのでしょう。これまで述べたことが本質的な原因だとして、これを解決する方法ですが、現状で大きく2つ考えられます。

1.PowerShellの32ビット版のPowerShellでPowerShellスクリプトを実行する

この意図としては32ビットのプロセスは64ビットCOM用のレジストリを使わないようWindowsが自動的に仲介することを利用します。もしかするとこれで動くかもしれません。

32 ビット版の Windows PowerShell を起動する - Microsoft Learn

Windows 10での実行例、あくまでサンプルを示します。まず、32ビット版のPowerShell「C:\Windows\SysWOW64\WindowsPowerShell\v1.0\powershell.exe」を起動します。
で、[System.Environment]::Is64BitProcessで64ビットプロセスではないことを確認し、実行ポリシー(Execution Policy)を設定してPowerShellスクリプトを実行します。

PowerShell

1Windows PowerShell 2Copyright (C) Microsoft Corporation. All rights reserved. 3 4新しいクロスプラットフォームの PowerShell をお試しください https://aka.ms/pscore6 5 6PS > [System.Environment]::Is64BitProcess 7False 8 9PS > Set-ExecutionPolicy Unrestricted -Scope Process -Force 10PS > C:\DIAB_SF\02_BatchJob\Refresh_PowerQuery.ps1

これでエラー無く実行、完了すれば代替策として使えると思います。次の方法ですが

2.64ビットCOM用のレジストリを削除する
64ビットCOM用のレジストリを、レジストリエディターを使用して手動で削除します。こちらの方がある意味で正攻法ですが、レジストリのキーや値の削除を伴うので作業内容を充分理解して行わないと危険です。Windowsの復元ポイントやレジストリのエクスポート等をしてバックアップをしてから行いましょう。例えば以下のサイト様の記事では、そういったことも含めて説明されています。

Microsoft Office アプリケーションの COM 呼び出しでエラー - エレン・イーストのブログ

似たトピックの記事は他のサイト様でも挙げられていると思います。

ややこしいことにレジストリエディターにも64ビット版と32ビット版があり、レジストリのキーにも64ビット用と32ビット用で見え方が違います。上記WEBサイトの記事については少し前のOfficeのバージョンについてであり、それらのバージョンの差異の話もあるので、レジストリの編集を含む操作は安易にはお勧めしかねる作業です。当方では問題を再現する環境が無く、責任を負いかねますので、あくまで自己責任にてお願いします。

投稿2025/02/12 05:57

dodox86

総合スコア9320

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

aomi333

2025/02/13 13:55

@dodox86さん とても詳しく調べていただき、ありがとうございます。 時間空いてしまうかもしれませんが、週末の時間のある時に確認させていただきます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.33%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問