我有一个batch file设置为通过Windows Server 2008 R2中的任务计划程序运行。 该batch file正在用于旋转和压缩MySQL日志,并且使用内置EFSencryption的Windows对包含这些日志的文件夹进行encryption。 我发现一个压缩(压缩)文件夹的VBS脚本,我用它来压缩旋转后的旧日志文件。 batch file运行良好,如果我在命令行运行它。
问题是当我试图让任务调度程序运行它。 我已经设置为每天运行一次,并以自己的身份运行(我有权访问并可以查看encryption的日志文件等)。 但是,当任务运行时(无论是在预定时间还是手动运行任务),在运行VBS脚本时都会产生窒息,说它是未经授权的。 当batch file调用CScript来运行VBS脚本时,CScript是否以相同的用户(我)运行? 我只是从batch file中调用它,如下所示:
CScript zipIt.vbs %TEMPDIR% %ARCHIVEDIR%\%TARGETZIP%
这里是VBS脚本的内容:
Set objArgs = WScript.Arguments InputFolder = objArgs(0) ZipFile = objArgs(1) CreateObject("Scripting.FileSystemObject").CreateTextFile(ZipFile, True).Write "PK" ^& Chr(5) ^& Chr(6) ^& String(18, vbNullChar) Set objShell = CreateObject("Shell.Application") Set source = objShell.NameSpace(InputFolder).Items objShell.NameSpace(ZipFile).CopyHere(source) wScript.Sleep 2000
我一般对VBS或Windowspipe理不是很了解,但我猜测这个脚本在encryption文件夹中创build一个新文件时遇到了麻烦。 因为当我closures文件夹encryption它从任务计划程序正常工作。 我想用我自己的凭据使用“Runas”调用CScript,但我不想让我的密码保存在batch file中,因为其他用户可以访问这些文件(DatabaseAdmin等)。 在任务计划程序中,可以select“以最高权限运行”。 这会解决这个问题吗? 我正在避免这一点,因为我想我应该试图找出如何使它尽可能less的特权工作。
更新:虽然我发现,实际上我没有能力解密MySQL日志文件,即使我对包含文件夹(通过cipher.exe / cvalidation)具有这种能力。 具有未encryption权限的唯一帐户是SYSTEM。 这可能是因为MySQL日志是由“MySQLAdmin flush-logs”工具创build的。 据我了解,由应用程序创build的文件由SYSTEM拥有(不是100%肯定)。 也许我必须使用“runas”在脚本中调用MySQLAdmin的flush-logs。 但是,然后我有同样的问题,不希望将我的凭据以明文forms存储在batch file中。 将尽我所能testing。
任何帮助表示赞赏。
如果此日志文件永远不会被删除或重命名,则可以使用运行密码的SysInternals的PsExec工具作为系统帐户,尝试为您的帐户添加EFS访问权限。 就像是:
psexec -s cipher /adduser ...
但是,如果这是一个被replace的旋转文件,那么您将在MySQL创build的每个文件中遇到这个问题,因为它是在系统帐户下运行的。 如果是这样,那么你应该考虑运行MySQL服务器作为一个具有已知密码和EFS证书的特定用户帐户,无论是自己的帐户还是专用的帐户。 这是您需要用来运行预定脚本的相同帐户。