PsExec 在特定服务器上运行时行为非常奇怪
在大多数情况下,当我使用 PsExec 在多台远程计算机上运行程序时,它工作得很好。当我在一台特定计算机上运行相同的命令时,它会将逗号分隔列表中提供的第二台服务器视为程序名称。
这是我对远程服务器的调用:
psexec \\server11111,server11112 /accepteula -u "Domain\User" -p "password" -i 2 -d cmd.exe /c "wmic bios getsmbiosbiosversion"
输出如下:
PsExec v2.11 - Execute processes remotely
Copyright (C) 2001-2014 Mark Russinovich
Sysinternals - www.sysinternals.com
PsExec could not start server11112 on server11111:
The system cannot find the file specified
当我在开发机器上运行此命令时,它运行正常。但是,当我从运行 Windows 2012 的服务器运行同一命令时,它失败了,我得到了上面的输出。
答案1
扩展帕特里克的回答\\computer[,computer2[,...]
,您可以使用文本文件中的计算机列表,而不是使用该格式列出服务器。
来自psexec
文档(通过psexec /?
):
Usage: psexec [\\computer[,computer2[,...] | @file]][-u user [-p psswd][-n s][-r servicename][-h][-l][-s|-e][-x][-i [session]][-c [-f|-v]][-w directory][-d][-<priority>][-a n,n,...] cmd [arguments]
@file PsExec will execute the command on each of the computers listed
in the file.
也就是说,您可以computers.txt
在工作的目录中创建一个填充有计算机名称的文本文件(例如):
computer
computer2
computer3
然后你可以使用以下命令:
psexec @computers.txt /accepteula -u "Domain\User" -p "password" -i 2 -d cmd.exe /c "wmic bios getsmbiosbiosversion"
psexec
然后将在每台计算机上按照中指定的顺序运行该命令computers.txt
。
答案2
非从命令行调用列表:
psexec @ListOfServers /accepteula -u "Domain\User" -p "password" -i 2 -d cmd.exe /c "wmic bios getsmbiosbiosversion"
答案3
也许逗号后面有一个不显示的字符。我得到了完全相同的结果
PsExec 无法在 <server1> 上启动 <server2>:
如果逗号后有空格,则会出现错误。