在特定伺服器上執行時 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>:
如果逗號後面有空格,則會出錯。