2

我正在尝试通过在 powershell 2.0 中调用 gpg2.exe 的计划任务来加密文件

当我登录时,脚本/任务运行良好,无论是通过 ISE 还是通过在 Windows 任务调度程序中运行任务。我在 Windows Server 2008 上,使用的服务帐户不是管理员,但可以访问所有源文件夹和目标文件夹。

当任务在无人值守的情况下运行时,gpg 的输出不会显示在目标目录中,也不会返回任何错误。我已将用户添加到安全策略中,以允许其批量登录。它能够将当前存在的文件(源)写入目标文件夹,而不是 GPG 的输出。

奇怪的是行为不一致,如果我以该系统帐户登录和注销,有时作业会在无人看管的情况下成功运行,直到计划到期,然后在下一个计划中开始出错。

我相当肯定它是围绕会话设置的,因为它在我登录时一直有效,并且仅在某些情况下才有效。任何帮助,将不胜感激。

请参阅以下示例,了解我如何在 powershell 中调用 GPG(是的,我是菜鸟 :))

$GPG_Prog='C:\Program Files\GNU\GnuPG\gpg2.exe'

$GPG_Encrypt='-e'

$GPG_Encrypt_to='-r XXXXXXXX'

&"$GPG_Prog" -o C:\location\$File.gpg --batch --quiet --yes "$GPG_Encrypt" "$GPG_Encrypt_to" \source location\$File

移动项目 \$File.gpg \network 输出位置

谢谢

4

2 回答 2

3

我们在解密时遇到了类似的问题,并发现真正的问题是,密钥默认存储在用户的漫游配置文件中。所以在我们的情况下,它与 DEP 无关,也与权限不足无关,因为用户已经拥有“批量执行”权限。

所以我们必须将密钥文件从漫游配置文件移动到本地目录。

基本上这些步骤是必要的: 1)找出你的关键目录实际在哪里(--list 命令) 2)从漫游目录复制/粘贴文件到你的路径(fi c:\winutil\library) 3)删除“旧”密钥 4) 使用 --homeDir 选项创建新密钥

请在 gpg 网站或此处找到说明: http ://www.glump.net/howto/cryptography/practical-introduction-to-gnu-privacy-guard-in-windows#6.1_Preparing_a_Minimal_Copy_of_GPG

在无人值守的情况下启动您的 Powershell 脚本并验证:-)。HTH,罗伯特

于 2014-10-20T14:58:46.183 回答
1

好的,所以当我在等待回复时,我一直在解决这个问题。根据发布的其他问题的一些推论和研究从 GPG 返回的完全无用的错误代码,我认为可能是 Windows 中的 DEP 导致了问题。

为了测试它,我将 gpg 可执行文件添加到 DEP(不是推荐的 MS 解决方案)的例外列表中,然后安排所有加密任务在无人值守的情况下运行。他们开始启动并完美运行了一个多小时的测试期。

根据我所阅读和体验的内容,似乎由于 GPG 以无人值守的方式运行,因此如果它作为登录的实际用户配置文件运行,它不会获得分配的内存。一旦它开始加密任何文件合理的大小并尝试访问超出标记为可由 Windows 执行的设置限制的内存,DEP 立即使 GPG 实例崩溃,导致应用程序日志中的错误消息实际上没有帮助。

无论如何,希望这可以帮助那里的人!

干杯

于 2012-06-22T19:19:13.767 回答