无人值守运行时GPG输出丢失

时间:2012-06-14 15:10:02

标签: powershell gnupg

我正在尝试通过在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

Move-Item \ $ File.gpg \ network output location

感谢

2 个答案:

答案 0 :(得分:3)

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

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

基本上这些步骤是必要的: 1)找出密钥目录的实际位置(--list命令) 2)将文件从漫游目录复制/粘贴到您的路径(f.i. 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, 罗伯特

答案 1 :(得分:1)

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

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

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

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

欢呼声