Назад | Перейти на главную страницу

PsExec и переменные удаленной среды, ведение журнала и т. Д.

Когда я запускаю PsExec на удаленном компьютере, мне всегда не хватает того, что я хочу. В большинстве случаев я бы хотел, чтобы в идеале а) журнал на сервере администратора, где каждый отдельный журнал имел имя каждого удаленного компьютера, с которого он был создан (например, COMPNAME1.log, COMPNAME2.log и т. Д.), Или б) а) log на каждом удаленном компьютере с любым указанным мной именем.

Когда я пробую сценарий (а), я использую следующую команду.

%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 просто не может сказать, что системный файл не может быть найден (читай: сбой синтаксиса).

Что касается сценария (б), то он представляет собой разновидность аналогичной задачи. Когда я запускаю такую ​​команду, она не работает.

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

Есть ли что-то, чего я не понимаю об удаленном пути и переменных среды с помощью PsExec на консоли cmd.exe (я еще даже не пробовал ужасную PowerShell). Я знаю, что такие вещи работают в пакетном файле (cmd /c \\server.company.tld\share\runthis.bat), но есть ли причина, по которой он не будет работать при выполнении команд в качестве аргументов? Мне это всегда нужно, и никогда не получу!

Джентльмены, наконец-то я заработал:

psexec \\ сервер cmd.exe / c echo %% computername %%

(обратите внимание на двойные знаки процента)

Вам нужно выйти с помощью знака вставки ^, иначе cmd попытается решить переменную. например, чтобы получить имя удаленного компьютера

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

Power Admin's PAExec (Замена PsExec) имеет дополнительные параметры команды для регистрации того, что он делает. Может это то, что тебе нужно?

Я понимаю, что это было давно, но похоже, что ни у кого не было правильного ответа: используйте отложенное расширение переменной.

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

Создайте .cmd (или что-то еще), которое делает то, что вам нужно, а затем -cперейдите к списку машин, использующих psexec для выполнения.

Я знаю, что это было еще дольше. Я использую вариант ниже как командный файл с именем id.bat

@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 молодцы! Люди, которые думают, что пакетный скрипт мертв, не знают, как его использовать