我正在使用 TFS 启动 PSExec 以运行创建安装程序的 InstallShield 进程。我们的 TFS 构建代理在 NETWORK SERVICE 帐户下运行。
我使用 -u -p 选项运行 PSExec,并且能够运行该命令并成功地从命令提示符针对远程计算机构建安装程序。
但是在 TFS 中,我总是收到 2250 错误代码并且安装程序无法构建。
为了隔离问题,我将 psexec 命令更改为以下...
PsExec.exe -accepteula \\<machine> -u <username> -p <password> xcopy /y c:\temp\testing.bat c:\temp\1.bat
如果我从命令行运行上述内容,它会复制文件。如果我从 TFS 运行上述内容(在批处理文件中调用上述内容),则会失败并显示 2250。
因此,为了模拟 TFS 正在做什么,我...
- 使用提升的管理员权限启动命令提示符
- 发布
psexec -i -u "nt authority\network service" cmd.exe
- 运行包含上述 xcopy 命令的批处理文件
因此,第 2 步使用 NETWORK SERVICE 帐户启动命令提示符。当我从此命令提示符运行步骤 3 时,我收到了相同的 2250 错误。所以这是很好的 b/c 现在 TFS 已经不在了,我更接近真正的问题。
只是为了笑,我将 NETWORK SERVICE 添加到远程框的管理员组。那并没有解决问题。
所以这就是我所在的地方......
- 如果我使用管理员组中的登录名登录到 TFS 框,打开命令提示符,并使用 -u -p 参数运行 xcopy 命令批处理文件,一切正常。
- 如果我使用 NETWORK SERVICE 帐户启动 cmd 提示符并运行与步骤 1 中相同的批处理文件,我会收到 2250 拒绝访问。
所以在我看来,这个问题显然与 NETWORK SERVICE 帐户有关。问题是如何让 psexec 使用此帐户运行?
更新
以下对话框显示了管理员组中的 NETWORK_SERVICE 帐户,并且它具有对路径 (c:\temp) 的完全访问权限。