我有批处理脚本文件,它应该使用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
答案 0 :(得分:0)
如果批处理文件不起作用,但PowerShell脚本不起作用,只需从计划任务中运行PowerShell脚本。
从“计划任务”中,不是输入批处理文件的路径,而是指定PowerShell.exe(或更可能是C:\ Windows \ System32 \ WindowsPowerShell \ v1.0 \ Powershell.exe)。然后在Arguments框中指定您的参数。您可能希望隐藏窗口,因此我们将其包含在参数中,为此您可以跳过加载配置文件,因此我们也会添加它。然后,只需使用-Command
参数指定您在问题中的代码。
因此,您的运行程序框应显示:
C:\Windows\System32\WindowsPowerShell\v1.0\Powershell.exe
然后在框中显示"添加参数(可选)"应该:
-NoProfile -WindowStyle Hidden -command "gpg2 --batch --yes -r testkey --output c:\test\foo\test_$((get-date).ToString(yyyyMMdd)).pgp --encrypt c:\test\foo\test_$((get-date).ToString(yyyyMMdd)).txt >> c:\apps\ftpLogs\test.log"
另一方面,应该是gpg2还是pgp2?我刚刚复制了你的命令,但我觉得他们会这样命名。
答案 1 :(得分:0)
最后我能够解决这个问题。问题在于用户权限。批处理脚本假设加密文件然后将加密文件ftp到供应商的ftp服务器。
显然在Windows Server 2012中,ADMINISTRATORS有权创建文件(此处为加密文件),而此用户无权发送该文件。和SYSTEM用户有权发送但不能创建。 (他们都在Win Server 2012中拥有此权限)。
所以我最后做了什么,是做两个不同的批处理脚本任务,并安排他们10分钟的时间距离。第一个是使用ADMINISTRATOR权限运行上面的代码,第二个是使用SYSTEMS发送它。