リモートコンピューターで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は、システムファイルが見つからないと言って失敗します(read:syntax fail)。
シナリオ(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
)で機能することは知っていますが、コマンドを引数として実行するときに機能しない理由はありますか?私はいつもこれを必要としています、そしてそれを決して得ることができません!
紳士、私はついにそれを働かせました:
psexec \\ server cmd.exe/c echo %% computername %%
(二重パーセント記号に注意してください)
脱字記号^でエスケープする必要があります。そうでない場合、cmdは変数を解決しようとします。たとえば、リモートコンピュータ名を取得するには
psexec \\pc cmd.exe /c echo ^%computername^%
Power Adminの PAExec (PsExecの代替)には、それが何をしているかを記録するオプションのコマンドオプションがあります。多分それはあなたが求めているものですか?
必要なことを実行する.cmd(またはその他)を作成し、psexecを使用してマシンのリストに-c opyを実行します。
私はそれがさらに長いことを知っています。以下のバリエーションをid.batという名前のバッチファイルとして使用します
@psexec \\%1 cmd.exe /c echo %%computername%% 2>nul
使用法
C:\utils>id 192.168.10.23
TEXT_LAPTOP7
C:\utils>_
しばらく前に気づきましたが、だれも正しい答えを持っていなかったようです。遅延変数展開を使用してください。
psexec @listofcomputers.txt -u DOMAIN\username cmd /v /c "echo TEST >> \\server.company.tld\share\!computername!.log"