WMIC:远程运行批处理脚本

3

我一直试图通过运行批处理脚本来安装msi文件并实现Jenkins部署作业。我已经赋予了适当的访问权限,但仍然无法远程运行以下命令,使用WMIC

wmic /node:myServerIp /user:"clientpc\my-user" /password:"my-password" process call create "D:\someDir\someOtherDir\test.bat"

上述命令的响应如下:
Executing (Win32_Process)->Create()
Method execution successful.
Out Parameters:
instance of __PARAMETERS
{
        ReturnValue = 9;
};

经过一些调查,根据https://msdn.microsoft.com/en-us/library/aa389388(v=vs.85).aspx,返回值“9”表示“路径未找到”,但我已经验证该路径在远程服务器上存在。
我要运行的test.bat文件非常简单,只需写入一个文本文件。
@echo This is a test.> test.txt

我已经确认服务器上存在这两个文件,并已将“EVERYONE”授权给共享文件夹“someDir”。

我尝试在所调用的路径前加上“cmd.exe /c”:

wmic /node:myServerIp /user:"clientpc\my-user" /password:"my-password" process call create "cmd.exe /c D:\someDir\someOtherDir\test.bat"

我收到的内容如下:

Invalid Verb Switch.

我已经验证了用户权限是正确的,通过提供错误密码时权限被拒绝。

编辑: 将路径从D:\someDir\someOtherDir\test.bat更改为D:\\someDir\\someOtherDir\\test.bat,但现在收到以下错误:

ERROR:
Description = The RPC server is unavailable.

编辑 2: 看起来我使用的 RPC 用户是导致错误的原因。仍在进行故障排除,但当我使用我的 AD 用户时,而不是我创建的管理员用户运行此命令时,我会再次出现以下错误...

Executing (Win32_Process)->Create()
Method execution successful.
Out Parameters:
instance of __PARAMETERS
{
        ReturnValue = 9;
};

命令中的反斜杠需要加倍。 "D:\\someDir\\someOtherDir\\test.bat". 这是 C 语言的一件事情。 - user6017774
@Noodles 谢谢你的回复。更新之后,我现在遇到了一个错误:描述 = RPC 服务器不可用。这很奇怪,因为明显之前它是可以连接的... - Matt
双反斜杠是不正确的。我正在处理这个问题。作为一个测试,我做了以下操作:使用非常简单的脚本,将'echo'到文件中以证明它运行,Wmic /node:“MachineName”进程调用创建“cmd.exe /c c:\users\MyUser\test.cmd”。单反斜杠是适当的。 - trindflo
1个回答

1

我能够在Active Directory域上使以下内容工作。

Wmic /node:"ComputerName" process call create "cmd.exe /c (net use o: /delete /y & net use o: \\Server\share /user:Domain\Administrator Password & o:\Dir\Subdir\test.cmd) >> c:\users\MyUser\testout2.txt"

test.cmd的内容非常简单:

echo Just a test >> c:\users\MyUser\testout.txt
date /t >> c:\users\MyUser\testout.txt
time /t >> c:\users\MyUser\testout.txt

"job"将被发送到域上的“ComputerName”。批处理/脚本文件在网络共享中运行。在“ComputerName”上运行的作业将看不到任何映射的驱动器,因此我会删除并映射一个驱动器。我不认为有必要删除驱动器,但出于完整性考虑,我添加了它。
执行后,testout2.txt显示批处理文件执行命令,而testout.txt包含批处理文件命令的预期结果。
需要注意的事项:
如上所述,映射的驱动器在远程作业中不可见。 您正在目标计算机的环境中执行 - 驱动器号需要对该计算机有意义。 内部命令(如'echo')需要使用'CMD.EXE /c'启动作业。 将多个命令组合在括号中,并用'&'分隔。 不要冲突文件访问。我使用testout.txt和testout2.txt文件。如果它们具有相同的名称,则输出的一组将丢失。 以这种方式执行的任何操作都不会对用户可见;该作业以无法在用户屏幕上显示的方式运行。 像我在示例中展示的那样以明文形式发送密码是一种安全风险,应该避免。但是,在此情况下,我不确定是否有更好的方法来映射驱动器。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接