Excelワークブックを開いてマクロを実行するPowerShellスクリプトを作成しました。 PSコンソールから、またはpowershell.exe script.ps1を使用してコマンドラインからもそのスクリプトを実行すると、正常に機能します。 Windowsタスクスケジューラからタスクを設定すると、そのExcelファイルに関する例外が発生し、存在しないかすでに使用されていると通知されます。
スクリプトはコマンドラインから正常に実行されたので、ファイルは確かに存在し、使用されていないと確信しています。
ネットワークの信頼/管理者権限の問題を回避するために、Excelファイルをローカルの非特権領域に移動しようとしました。タスクは引き続き最高の特権で実行されます。パスにスペースまたは特殊文字が含まれていません。
ファイルシステムオブジェクトを使用してファイルにアクセスしようとすると、スケジューラーから実行した場合でもエラーは発生しないため、Excel.Application.Workbooks.Open("..")
メソッドに固有であると思います。
私は今何を考慮すべきですか?
DCOM権限の問題である可能性があります。 Excelの自動化は時々危険に満ちています...
このような問題を回避する唯一の方法は、DCOM権限を通じて特定のユーザーとして実行するようにExcelを設定することです。
マシンへの管理者アクセス権を持つアカウントでタスクを実行するように設定している場合でも、それをインタラクティブユーザーまたは起動で維持すると、残念ながらタスクスケジューラでは機能しません。
次の2つのフォルダーを作成します。
32ビット:
C:\Windows\System32\config\systemprofile\Desktop
64ビット:
C:\Windows\SysWOW64\config\systemprofile\Desktop
Excelがインタラクティブに実行されない場合、これらのフォルダーが必要です。 64ビットOSを使用している場合でも、両方のフォルダーを作成します。
DCOM権限を設定するときに、Microsoft Excelがdcomcnfg
に表示されない場合は、試してくださいmmc comexp.msc /32