【发布时间】:2012-03-29 12:54:21
【问题描述】:
我在 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 启动的进程的退出状态),但可以完成工作。
【问题讨论】:
-
Invoke-Command -Computer remotehost -ScriptBlock { djoin.exe /provision /domain my.domain.com /machine test /savefile savefile.txt; $LASTEXITCODE }有什么不同吗?换句话说:为什么需要批处理文件? -
以完全相同的方式失败。批处理文件是在我用尽所有其他关于如何运行 djoin.exe 的想法时出现的。问题是运行“djoin.exe /?”,例如,工作得很好,我确实得到了使用输出。但是这个命令是用来在活动目录中预置计算机帐户的,这是失败的主要操作。
-
好的,但是问题不是批处理文件,而是围绕 PowerShell 远程处理的环境以某种方式阻止了
djoin做它应该做的事情。 -
@VokinLoksar,你找出问题所在了吗?我遇到了同样的问题,似乎无法找出问题所在..
-
不。仍在使用 'runas /netonly "/user:$user" $cmd' 其中 $cmd 是 djoin 命令字符串。
标签: powershell powershell-remoting