批处理脚本运行正常,但通过PowerShell Remoting执行时失败

时间:2012-03-29 12:54:22

标签: powershell powershell-remoting

我在Windows 2008 R2服务器上有以下批处理脚本:

@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 remoting之间交互中的一些模糊问题。

我设法直接在客户端上运行djoin,使用'runas / netonly ...'来提供域凭据。这是一个非常混乱的解决方案(我还没有弄清楚如何通过runas启动进程的退出状态),但是完成了工作。

1 个答案:

答案 0 :(得分:1)

这几乎可以肯定是经典的"双跳"验证问题。请记住,当您使用PowerShell远程处理时,您将使用其中一个跃点。如果需要身份验证,在远程计算机上执行的访问第三台远程计算机的任何内容都不太可能正常工作。

要解决此问题,您可以使用身份验证方法,该方法允许您委派凭据,例如CredSSP。它比简单地更改您的身份验证类型更复杂,因为您必须在客户端的事务服务器端进行更改。请参阅MSDN上的这篇博文,PowerShell Remoting and the “Double-Hop” Problem以及这个"嘿,脚本专家!"发帖,Enable PowerShell "Second-Hop" Functionality with CredSSP