2012-03-29 69 views
0

我有以下批处理脚本在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启动的进程的退出状态),但是完成了工作。

+0

执行命令 - 计算机远程主机-ScriptBlock {djoin.exe/provision/domain my.domain.com/machine test/savefile savefile.txt; $ LASTEXITCODE}'做什么不同?换句话说:为什么你需要批处理文件? – Joey 2012-03-29 13:28:02

+0

以完全相同的方式失败。批处理文件出现在我没有了解如何运行djoin.exe的所有其他想法时。例如,运行“djoin.exe /?”,例如,工作得很好,我得到的使用情况输出。但是这个命令用于在活动目录中预置计算机帐户,这是失败的主要操作。 – VokinLoksar 2012-03-29 14:28:49

+0

好吧,但这不是批处理文件,而是PowerShell远程处理环境,它以某种方式阻止'djoin'做它应该做的事情。 – Joey 2012-03-29 14:45:06

回答

0

这几乎肯定是一个经典的“双跳”身份验证问题。请记住,当您使用PowerShell远程时,您正在使用其中一个跃点。在远程机器上执行的任何访问第三台远程机器的任何操作都不可能在需要验证的情况下起作用。

为了解决这个问题,您可以使用一种身份验证方法,该方法允许您使用CredSSP等代理凭证代替。这比简单地更改身份验证类型涉及更多,因为您必须在事务的服务器端对客户端进行更改。请参阅MSDN上的这篇博客帖子,PowerShell Remoting and the “Double-Hop” Problem和这个“嗨,脚本专家!”后,Enable PowerShell "Second-Hop" Functionality with CredSSP

相关问题