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其作为参数传递给cmd您从中启动的参数psexec

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

否则,您刚刚执行cmdthen systeminfosysteminfo不会从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 回答