0

我在 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 远程处理之间的交互中的一些模糊问题。

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

4

1 回答 1

1

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

为了解决这个问题,您可以使用一种身份验证方法,该方法允许您委托CredSSP 等凭证。它比简单地更改身份验证类型要复杂一些,因为您必须在事务的客户端和服务器端进行更改。请参阅 MSDN 上的这篇博文、PowerShell Remoting 和“双跳”问题以及这篇“嘿,脚本专家!” 发布,使用 CredSSP 启用 PowerShell“第二跳”功能

于 2014-08-04T03:40:24.757 回答