2016-05-17 10 views
0

私はx86またはx64ビットマシンかどうかによって正しいEXEを実行するためにいくつかのロジックを追加する必要がある非常に大きな既存のバッチファイルがあります。 PowerShellを使用することはできません。なぜなら、何らかの理由でこれらのマシンのほとんどが擬似的に無効になっているからです。バッチファイル - リモートコンピュータ変数を取得

PSEXECを使用して、リモートからシステム変数PROCESSOR_ARCHITECTUREをフェッチし、出力からローカルシステム変数を作成します。

私はWin10x64 CMDプロンプトから次のコマンドを実行した場合:

C:\PsTools>c:\pstools\PSEXEC.exe \\TEST-Win7x86 cmd /c echo ^%PROCESSOR_ARCHITECTURE^% 

私が正しいリモートのx86値を得るが、それを何もしないことができます。

x86 
cmd exited on TEST-Win7x86 with error code 0 

FOR /F "delims=" %i IN ('c:\pstools\PSEXEC.exe \\TEST-Win7x86 cmd /c echo ^%PROCESSOR_ARCHITECTURE^%') DO set proc=%i 

私は地元のAMD64値を取り戻すよ::

cmd exited on TEST-Win7x86 with error code 0. 
C:\PsTools>set proc=AMD64 

は、私は変数に出力を得るために、テスト this methodを試してみました。

誰かが私が間違っていることを察知していますか?

ありがとうございます!

-Matt

+1

バッチファイル内で使用されているときに 'for'変数の'% '記号を二重にする必要があることをご存知ですか?また、 '^%%PROCESSOR_ARCHITECTURE ^^ %%'を文字列の上に '^%PROCESSOR_ARCHITECTURE ^% 'という文字列を渡すために' for/F'ループに書く必要があると思います。 – aschipfl

+0

また、 '' psexec \\ remotepc powershell "$ env:processor_architecture" 'を実行することで、あいまいさを示します。あるいは、 'psexec'をスキップしてリモートのWMIクエリを使うこともできます。 '%I"を設定します ' – rojo

+0

私はPowerShellメソッドをほとんど使用しますが、この場合はこれらのコンピュータにはPowerShellの動作を妨げるものがあります。私はWMICを使ってそれを取り出すことを考えなかった。私は次回は感謝します! – EvilBetty

答えて

0

日のこの最もいじった後、私はそれがすぐにこの質問を提出した後に考え出したと思います。何らかの理由でニンジンを二倍にしなければならなかった。私はそれを試してみたいと思った理由、またはそれがなぜ機能するのか正確にはわかりませんが、今は正しい出力を得ています。

C:\PsTools>FOR /F %i IN ('c:\pstools\PSEXEC.exe \\TEST-Win7x86 cmd /c echo ^^%PROCESSOR_ARCHITECTURE^^%') DO set proc=%i 

出力:

cmd exited on TEST-KW-O3040MD with error code 0. 

C:\PsTools>set proc=x86 

以下で修正されたaschipflは、バッチスクリプトの正しいコンテキストです。ありがとうaschipfl!

+0

これは、コマンドプロンプト( 'cmd')で直接実行する場合にのみ機能します。バッチファイルでは、私が既に提案した 'for'変数'%i'の '%'記号と 'IN(...)'部分の記号を二倍にする必要があります... – aschipfl

+0

コマンドラインでうまくいきましたが、今はスクリプトで壊れています。 このコマンドを実行: 。 。 'FOR/F %% i IN( '\\サーバ\共有フォルダ\ PSEXEC.exe' \\%CNAME%cmd/c echo ^%PROCESSOR_ARCHITECTURE ^% ')設定されたPROC = %% i' 結果ローカルのAMD64で再び。ニンジンを倍増させて殺すと思われる。 私は二重ニンジンが最初に適切にそれをエスケープする方法を知っていたなら:( – EvilBetty

+0

'FOR/F %% i IN( '" \\ Server \ Shared Folder \ PSEXEC.exe "\\ TEST-Win7x86 cmd/c echo ^^ %% PROCESSOR_ARCHITECTURE ^^ %% ')DO set PROC = %% i'は動作するはずです... – aschipfl

関連する問題