PsExecは、特定のサーバーで実行すると非常に奇妙な動作をします
ほとんどの場合、PsExecを使用して複数のリモートマシンでプログラムを実行すると、完全に正常に機能します。ある特定のマシンで同じコマンドを実行すると、コンマで区切られたリストにある2番目のサーバーがプログラム名のように扱われます。
これがリモートサーバーへの私の呼び出しです:
psexec \\server11111,server11112 /accepteula -u "Domain\User" -p "password" -i 2 -d cmd.exe /c "wmic bios getsmbiosbiosversion"
そして、これが出力です:
PsExec v2.11 - Execute processes remotely
Copyright (C) 2001-2014 Mark Russinovich
Sysinternals - www.sysinternals.com
PsExec could not start server11112 on server11111:
The system cannot find the file specified
このコマンドは、開発マシンで実行すると正常に機能します。ただし、Windows 2012を実行しているサーバーから同じコマンドを実行すると、失敗し、上記の出力が表示されます。
Patrick 's answer を拡張するには、\\computer[,computer2[,...]
形式でサーバーを一覧表示する代わりに、テキストファイルからコンピューターの一覧を使用できます。
psexec
ドキュメントから(psexec /?
を介して):
Usage: psexec [\\computer[,computer2[,...] | @file]][-u user [-p psswd][-n s][-r servicename][-h][-l][-s|-e][-x][-i [session]][-c [-f|-v]][-w directory][-d][-<priority>][-a n,n,...] cmd [arguments]
@file PsExec will execute the command on each of the computers listed
in the file.
つまり、作業中のディレクトリにコンピュータ名を入力したテキストファイル(たとえば、computers.txt
)を作成できます。
computer
computer2
computer3
次に、次のコマンドを使用できます。
psexec @computers.txt /accepteula -u "Domain\User" -p "password" -i 2 -d cmd.exe /c "wmic bios getsmbiosbiosversion"
psexec
は、computers.txt
で指定された順序で各コンピューターでコマンドを実行します。
コマンドラインからではなくリストを呼び出す:
psexec @ListOfServers /accepteula -u "Domain\User" -p "password" -i 2 -d cmd.exe /c "wmic bios getsmbiosbiosversion"