web-dev-qa-db-ja.com

PsExecは、リスト内の2番目のリモートコンピューターをプログラム名として扱います

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を実行しているサーバーから同じコマンドを実行すると、失敗し、上記の出力が表示されます。

1
Jason Fox

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で指定された順序で各コンピューターでコマンドを実行します。

2
Worthwelle

コマンドラインからではなくリストを呼び出す:

psexec @ListOfServers /accepteula -u "Domain\User" -p "password" -i 2 -d cmd.exe /c "wmic bios getsmbiosbiosversion"
1
Patrick