実現したいこと
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
