PsExec和远程环境variables,日志logging等

当我在远程计算机上运行PsExec时,我总是缺less我想要的东西。 在大多数情况下,理想的情况是a)在pipe理服务器上login一个日志,每个日志都有它生成的每个远程计算机的名称(如COMPNAME1.log,COMPNAME2.log等)或者b)一个在每个远程计算机上使用我指定的名称logging文件。

当我尝试场景(a)时,我使用以下命令。

%SystemDrive%\path\to\psexec.exe @listofcomputers.txt -u DOMAIN\username cmd /c echo TEST >> \\server.company.tld\share\%computername%.log 

问题是它从来没有工作。 所有的计算机只写入日志, %computername%就是我在办公室执行PsExec的计算机。 我想要的是listofcomputers.txt中特定的每台计算机的唯一日志,它将正确使用来自远程环境variables的主机名而不会出现问题。 这甚至可能吗? 这似乎并不适用于我。 我试过了,语法显然是错误的。

 %SystemDrive%\path\to\psexec.exe @listofcomputers.txt -u DOMAIN\username "cmd /c echo TEST >> \\server.company.tld\share\%computername%.log" 

PsExec只是失败,说系统文件无法find(阅读:语法失败)。

至于情况(b),它似乎是一个类似问题的变化。 当我像这样运行一个命令,它不起作用。

 %SystemDrive%\path\to\psexec.exe @listofcomputers.txt -u DOMAIN\username "cmd /c echo %computername% >> \\server.company.tld\share\aggregated.log" 

有没有我不明白的有关cmd.exe控制台上的PsExec远程path和环境variables(我甚至还没有尝试过可怕的PowerShell)。 我知道这样的事情在一个batch file( cmd /c \\server.company.tld\share\runthis.bat )中工作,但是有一个原因,当执行命令作为参数不会工作? 我总是需要这个,永远不能得到它!

你需要用脱字号^来逃跑,否则cmd试图解决这个variables。 例如,获取远程计算机名称

 psexec \\pc cmd.exe /c echo ^%computername^% 

绅士们,我终于做到了:

psexec \\服务器cmd.exe / c回声%% computername %%

(注意双重百分号)

电源pipe理的PAExec (PsExecreplace)有可选的命令选项来logging它正在做什么。 也许这就是你以后的事情?

创build一个.cmd(或其他)来执行你所需要的操作,然后使用psexec来执行。

我意识到它已经有一段时间了,但似乎没有人有正确的答案:使用延迟variables扩展。

 psexec @listofcomputers.txt -u DOMAIN\username cmd /v /c "echo TEST >> \\server.company.tld\share\!computername!.log" 

我知道它更长。 我使用下面的变体作为名为id.bat的batch file

 @psexec \\%1 cmd.exe /c echo %%computername%% 2>nul 

用法

 C:\utils>id 192.168.10.23 TEXT_LAPTOP7 C:\utils>_ 

psexec \ computer cmd.exe / c Echo%computername%

会做你想要的

PS PSEXEC岩石! 认为批处理脚本死了的人不知道如何使用它