PsExec 和远程环境变量、日志记录等

3 windows logging environment-variables pipe pstools

当我在远程计算机上运行 PsExec 时,我总是达不到我想要的效果。在大多数情况下,我想要的理想情况是 a) 管理服务器上的日志,其中每个日志都有生成它的每台远程计算机的名称(例如 COMPNAME1.log、COMPNAME2.log 等)或 b) a使用我指定的任何名称在每台远程计算机上的日志文件。

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

%SystemDrive%\path\to\psexec.exe @listofcomputers.txt -u DOMAIN\username cmd /c echo TEST >> \\server.company.tld\share\%computername%.log
Run Code Online (Sandbox Code Playgroud)

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

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

PsExec 只是失败,说找不到系统文件(阅读:语法失败)。

至于场景 (b),它似乎是类似问题的变体。当我运行这样的命令时,它不起作用。

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

我对 cmd.exe 控制台上的 PsExec 的远程路径和环境变量有什么不了解的地方(我什至还没有尝试过可怕的 PowerShell)。我知道这样的东西在批处理文件 ( cmd /c \\server.company.tld\share\runthis.bat) 中工作,但是在将命令作为参数执行时是否有原因它不起作用?我总是需要这个,但永远无法得到它!

小智 5

您需要使用插入符号 ^ 转义,否则 cmd 会尝试解决该变量。例如,获取远程计算机名称

psexec \\pc cmd.exe /c echo ^%computername^%
Run Code Online (Sandbox Code Playgroud)


小智 5

先生们,我终于让它工作了:

psexec \\server cmd.exe /c echo %%computername%%

(注意双百分号)