从机器列表中获取特定进程的get-process会一遍又一遍地返回相同的结果

时间:2017-04-04 00:52:23

标签: loops powershell foreach

我这里有一个令人困惑的问题。我创建了一个脚本,可以检查一堆机器上运行的JAVAW实例。

$computers = Get-Content C:\computers.txt  
foreach ($computer in $computers){  
    Get-Process -ComputerName $computers -Name Javaw | select machinename, id, ProcessName  
}

它确实发现在TXT文件中的某些机器上运行的JAVAW进程(如预期的那样),但在某种循环中重复结果。我本以为它只会报告每次运行JAVAW的机器。它没有在同一台机器上报告JAVAW的不同实例,PID是相同的。因此,例如在一台机器上,它报告JAVAW PID 1612 5次。

所以输出如下:

computer1 1612 javaw
computer2 1964 javaw
computer3 8448 javaw
computer1 1612 javaw
computer2 1964 javaw
computer3 8448 javaw
computer1 1612 javaw
computer2 1964 javaw
computer3 8448 javaw

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:3)

您正在扫描每台计算机X次,其中X是您computers.txt中的计算机数量。

  • Get-Process的{​​{1}}参数接受计算机名称的集合,当您向其传递集合时,它会为每台计算机提取进程列表。你正在传递-Computername,但你想通过循环传递$computers - “迭代器”。
  • 您在每台计算机上遍历$computer计算机列表。

选择一个或另一个 - computers.txt循环,或将foreach传递给$computers

选项1(我的偏好):

get-process

选项1a:

$computers = Get-Content C:\computers.txt;
Get-Process -ComputerName $computers -Name Javaw | select machinename, id, ProcessName;

选项2:

Get-Process -ComputerName $(get-content c:\computers.txt) -Name Javaw | select machinename, id, ProcessName;

选项3:

$computers = Get-Content C:\computers.txt; 
foreach ($computer in $computers){  
    Get-Process -ComputerName $computer -Name Javaw | select machinename, id, ProcessName;
}