我通过服务帐户下的 Windows Scheduler 每天运行 Powershell 脚本,该脚本更新本地 svn 工作副本并提交更改。svn 客户端是 sliksvn,仅通过命令行运行。手动运行时,Powershell 脚本按预期工作,并且 svn 身份验证使用缓存的凭据工作。
当我授予服务帐户必要的权限并以服务帐户身份创建计划任务时,一切都正常。但是,当我使用管理员帐户创建计划任务并设置为以服务帐户身份运行时,svn 身份验证失败。我使用 Sysinternals procmon 监视身份验证过程,发现在这种情况下,该过程会尝试在
C:\Users\Default\AppData\Roaming\Subversion\auth\svn.simple\
(不存在)而不是
C:\Users\ServiceAccount\AppData\Roaming\Subversion\auth\svn.simple\
缓存凭证的实际存储位置以及在成功案例中查找的位置。
为什么 svn 尝试查找默认用户的缓存凭据而不是运行任务的用户的凭据?
编辑:我找到了解决方案。这是 Windows 任务计划程序中的错误:https://support.microsoft.com/en-us/kb/2968540
编辑:...现在可以通过此修补程序修复(在 Server 2012 R2 中):https://support.microsoft.com/en-us/kb/3133689