我有一个批处理脚本文件,它应该使用 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
答案1
最后我终于解决了这个问题。问题出在用户权限上。批处理脚本应该加密一个文件,然后将加密的文件通过 ftp 传输到供应商的 ftp 服务器。
显然,在 Windows Server 2012 中,管理员有权创建文件(此处为加密文件),而该用户无权发送该文件。而系统用户有权发送但无权创建。(在 Win Server 2008 中,他们都拥有此权限)。
因此,我最后要做的是制作两个不同的批处理脚本任务,并将它们安排在 10 分钟的时间间隔内。第一个任务以管理员权限运行上述代码,第二个任务以系统权限发送。
答案2
我遇到了同样的错误,但就我而言,它仅在以服务帐户运行任务时发生;以我的域用户身份运行时任务运行正常。该错误基本上是一个转移注意力的借口,最终是由于使用 GUI 选择可能不受支持的选项。基本上,不要将“如果任务已在运行...”设置为“停止现有实例”。使用其他 3 个选项中的任何一个。
更多详细信息这里。