我有以下批处理脚本在Windows 2008 R2服务器上:批处理脚本运行正常;但如果通过PowerShell远程执行失败
@echo off
djoin.exe /provision /domain my.domain.com /machine test /savefile savefile.txt
echo %ERRORLEVEL%
如果我运行在服务器上的脚本,无论是通过命令提示符或PowerShell,它工作得很好,并返回“0”。
的问题是,我需要从远程计算机上执行,所以我做了以下(一个例子只是用于测试):
Invoke-Command -ComputerName remotehost -ScriptBlock {.\script.cmd}
输出为“-1073740940”,这可能是错误代码C0000374,这可能与堆损坏有关。
这似乎是djoin命令本身的问题。我可以注释掉djoin并运行其他二进制文件,比如ping,没有使用相同Invoke-Command的问题。
请记住,脚本在目标计算机上从PowerShell执行时工作得很好,那么远程处理的行为会引入什么问题?
在这两种情况下,脚本都使用我的帐户(它是Domain Admins的成员)具有相同的权限执行。我怀疑这是一个权限问题,不知道还有其他地方需要注意。
放弃了整件事情。这可能是djoin中的错误,也可能是djoin和PS远程处理之间的交互中的一些模糊问题。
我设法直接在客户端上运行djoin,使用'runas/netonly ...'来提供域凭据。这是一个非常混乱的解决方案(我还没有弄清楚如何获得由runas启动的进程的退出状态),但是完成了工作。
执行命令 - 计算机远程主机-ScriptBlock {djoin.exe/provision/domain my.domain.com/machine test/savefile savefile.txt; $ LASTEXITCODE}'做什么不同?换句话说:为什么你需要批处理文件? – Joey 2012-03-29 13:28:02
以完全相同的方式失败。批处理文件出现在我没有了解如何运行djoin.exe的所有其他想法时。例如,运行“djoin.exe /?”,例如,工作得很好,我得到的使用情况输出。但是这个命令用于在活动目录中预置计算机帐户,这是失败的主要操作。 – VokinLoksar 2012-03-29 14:28:49
好吧,但这不是批处理文件,而是PowerShell远程处理环境,它以某种方式阻止'djoin'做它应该做的事情。 – Joey 2012-03-29 14:45:06