web-dev-qa-db-ja.com

Excelでタスクスケジューラから実行するとファイルを開けないのはなぜですか?

Excelワークブックを開いてマクロを実行するPowerShellスクリプトを作成しました。 PSコンソールから、またはpowershell.exe script.ps1を使用してコマンドラインからもそのスクリプトを実行すると、正常に機能します。 Windowsタスクスケジューラからタスクを設定すると、そのExcelファイルに関する例外が発生し、存在しないかすでに使用されていると通知されます。

スクリプトはコマンドラインから正常に実行されたので、ファイルは確かに存在し、使用されていないと確信しています。

ネットワークの信頼/管理者権限の問題を回避するために、Excelファイルをローカルの非特権領域に移動しようとしました。タスクは引き続き最高の特権で実行されます。パスにスペースまたは特殊文字が含まれていません。

ファイルシステムオブジェクトを使用してファイルにアクセスしようとすると、スケジューラーから実行した場合でもエラーは発生しないため、Excel.Application.Workbooks.Open("..")メソッドに固有であると思います。

私は今何を考慮すべきですか?

13
zrz

DCOM権限の問題である可能性があります。 Excelの自動化は時々危険に満ちています...

このような問題を回避する唯一の方法は、DCOM権限を通じて特定のユーザーとして実行するようにExcelを設定することです。

  1. コンポーネントサービスを開きます([スタート]-> [実行]、dcomcnfgと入力)。
  2. コンポーネントサービス->コンピュータ->マイコンピュータにドリルダウンし、DCOM Configをクリックします。
  3. Microsoft Excelアプリケーションを右クリックし、[プロパティ]を選択します
  4. [ID]タブで[このユーザー]を選択し、インタラクティブユーザーアカウント(ドメインまたはローカル)のIDとパスワードを入力して、[OK]をクリックします

マシンへの管理者アクセス権を持つアカウントでタスクを実行するように設定している場合でも、それをインタラクティブユーザーまたは起動で維持すると、残念ながらタスクスケジューラでは機能しません。

8
squillman

次の2つのフォルダーを作成します。

32ビット:

C:\Windows\System32\config\systemprofile\Desktop  

64ビット:

C:\Windows\SysWOW64\config\systemprofile\Desktop

Excelがインタラクティブに実行されない場合、これらのフォルダーが必要です。 64ビットOSを使用している場合でも、両方のフォルダーを作成します。

41
eric

DCOM権限を設定するときに、Microsoft Excelがdcomcnfgに表示されない場合は、試してくださいmmc comexp.msc /32

参照

2
cmo