Pgpでファイルを暗号化する必要があるバッチスクリプトファイルがあります。これを行うためにタスクスケジューラでタスクを定義しましたが、「指定されたファイルが見つかりません」というエラーが表示され続けます。
興味深いことに、Powershellで同じスクリプト行を実行すると、暗号化されたファイルが正常に生成されます。
私は誰かがここで何が間違っているのかを知っているのかと思っていましたか?
バッチスクリプトでフルパスを指定しようとしましたが、アクションを定義するときに、部分的にパスを追加しました。
バッチスクリプトコードはここにあります::
rem @echo off
@set path=c:\test;%path%
@set d=%date:~-4,4%%date:~4,2%%date:~-7,2%
@set d=%d: =_%
@set t=%time:~0,2%%time:~3,2%%time:~6,2% @set t=%t: =0%
Rem Generate PGP encrypted file
@echo Starting PGP... >> c:\apps\ftpLogs\test.log
gpg2 --batch --yes -r testkey --output c:\test\foo\test_20150505.pgp --encrypt c:\test\foo\test_20150505.txt >> c:\apps\ftpLogs\test.log
私のPowerShellで実行したスクリプトは正常に動作しますが、次の行です。
gpg2 --batch --yes -r testkey --output c:\test\foo\test_20150505.pgp --encrypt c:\test\foo\test_20150505.txt >> c:\apps\ftpLogs\test.log
ようやく問題を解決することができました。問題はユーザー権限にありました。バッチスクリプトは、ファイルを暗号化してから、暗号化されたファイルをベンダーのFTPサーバーにFTP転送することを想定しています。
どうやらWindows Server 2012では、管理者はファイル(ここでは暗号化されたファイル)を作成する権限を持っていますが、このユーザーにはファイルを送信する権限がありません。 SYSTEMユーザーには、送信する権限がありますが、作成する権限はありません。 (どちらも、Win Server 2008ではこの権限を持っていました)。
したがって、私が最後に行ったのは、2つの異なるバッチスクリプトタスクを作成し、それらを10分の時間間隔でスケジュールすることでした。最初のコードは上記のコードをADMINISTRATOR特権で実行しており、2番目のコードはSYSTEMSを使用してコードを送信していました。