当我在远程计算机上运行 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
问题是它永远不会起作用。所有的计算机都只是写入日志,其中%computername%
只有我在办公室执行 PsExec 的计算机。我想要的是 listofcomputers.txt 中特定的每台计算机的唯一日志,它将正确使用远程环境变量中的主机名而不会出现问题。这甚至可能吗?它似乎对我不起作用。我试过了,语法显然是错误的。
%SystemDrive%\path\to\psexec.exe @listofcomputers.txt -u DOMAIN\username "cmd /c echo TEST >> \\server.company.tld\share\%computername%.log"
PsExec 只是失败,说找不到系统文件(阅读:语法失败)。
至于场景(b),它似乎是类似问题的变体。当我运行这样的命令时,它不起作用。
%SystemDrive%\path\to\psexec.exe @listofcomputers.txt -u DOMAIN\username "cmd /c echo %computername% >> \\server.company.tld\share\aggregated.log"
在 cmd.exe 控制台上使用 PsExec 的远程路径和环境变量有什么我不明白的地方吗(我什至还没有尝试过可怕的 PowerShell)。我知道这样的事情在批处理文件(cmd /c \\server.company.tld\share\runthis.bat
)中工作,但是当执行命令作为参数时它是否有原因不起作用?我一直需要这个,而且永远得不到!
您需要使用插入符号 ^ 转义,否则 cmd 会尝试解决该变量。例如,获取远程计算机名称
先生们,我终于让它工作了:
psexec \\server cmd.exe /c echo %%计算机名%%
(注意双百分号)
Power Admin 的PAExec(PsExec 替代)具有可选的命令选项来记录它正在执行的操作。也许这就是你所追求的?
创建一个 .cmd (或其他)来满足您的需求,然后-c复制到使用 psexec 执行的机器列表。
我意识到已经有一段时间了,但似乎没有人有正确的答案:使用延迟变量扩展。
我知道它的时间更长。我使用下面的变体作为名为 id.bat 的批处理文件
用法
如果您只是输入 Psexec.exe \computername cmd.exe 并且您有访问权限,则只需输入命令即可查看计算机设置。Set 将显示该系统的计算机名变量。CD\users 将显示所有用户配置文件。尝试其他 DOS 命令。
psexec \computer cmd.exe /c Echo %computername%
会做你想做的
PS PSEXEC 摇滚!认为批处理脚本死了的人不知道怎么用