0

これはPowershellで実行できることはわかっていますが、コマンドプロンプトスクリプトのスキルを練習するプロジェクトとして、バッチファイルで実行したいと思います。ComputerNamesを含むtxtファイルがあります。ループに名前をエコーさせてから、SystemInfoを実行し、結果から特定の行を取得します。

Computers.txtは次のようになります。

 XPCOMPUTER1
 XPCOMPUTER2
 W7COMPUTER1
 W7COMPUTER2

私のバッチファイルは次のようになります。

For /F %%w IN (computer.txt) Do (echo %%w & psexec \\%%w cmd.exe & 
systeminfo | Find "Total Physical Memory:")

ホスト名をリストし、次にPSexecをリストして、SystemInfoを実行し、合計物理メモリを取得する必要がありますか?私はそうだと思いました!しかし、私は得る

%%W was unexpected at this time. 

何かご意見は?

4

2 に答える 2

2

次のように起動systeminfoするパラメータとして渡す必要があると思います。cmdpsexec

For /F %%w IN (computer.txt) Do (echo %%w & psexec \\%%w cmd.exe /c systeminfo | Find "Total Physical Memory:")

cmdそれ以外の場合は、実行するだけsysteminfoで、systeminfoはから実行されませんcmd

また、タイプミスでない限りcomputer.txt、スクリプトに書き込んで、それがと呼ばれていると言いましたcomputers.txt

それで問題が解決するかどうかはわかりませんが、一見の価値があります。

于 2012-04-27T14:21:49.707 に答える
0

したがって、これを解決するための最善のアプローチは、psexecを使用してsysteminfoを直接呼び出すことでした。

For /F %%w IN (computer.txt) Do (echo %%w & psexec \\%%w systeminfo | Find "Total Physical Memory:")

それは私に戻ってきます:

Total Physical Memory:     8,126 MB

PowerShellを学習したので、この問題の攻撃方法はまったく異なります。

ForEach ($computer in (Get-Content Computer.txt) { 
  Get-CIMInstance -ComputerName $Computer -Class Win32_ComputerSystem | `    
Select Name,@{N='RAM(MB)';E={[int]($_.TotalPhysicalMemory /1mb)}}

その結果:

Name       RAM(MB)
----       -------
AL-1NG43Q1    8126
LOCALHOST     8126
127.0.0.1     8126
于 2015-02-04T19:17:50.757 に答える