Loops 从机器列表中获取特定进程的进程会反复返回相同的结果

Loops 从机器列表中获取特定进程的进程会反复返回相同的结果,loops,powershell,foreach,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实例

$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次

因此,输出如下所示:

计算机1612 javaw
计算机2 1964 javaw
计算机3 8448 javaw
计算机1612 javaw
计算机2 1964 javaw
计算机3 8448 javaw
计算机1612 javaw
计算机2 1964 javaw
计算机3 8448 javaw
etc

非常感谢您的帮助。

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

  • Get Process
    -Computername
    参数接受计算机名称的集合,当您向其传递集合时,它会提取这些计算机的进程列表。您正在传递
    $computers
    ,但您想传递
    $computer
    ——每次通过循环的“迭代器”
  • 您在
    computers.txt中循环浏览计算机列表,每台计算机一次
选择一个或另一个-foreach循环,或将
$computers
传递到
获取过程

备选方案1(我的偏好):

备选案文1a:

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

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

Get-Content C:\computers.txt | foreach-object {Get-Process -ComputerName $_ -Name Javaw | select machinename, id, ProcessName};

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

  • Get Process
    -Computername
    参数接受计算机名称的集合,当您向其传递集合时,它会提取这些计算机的进程列表。您正在传递
    $computers
    ,但您想传递
    $computer
    ——每次通过循环的“迭代器”
  • 您在
    computers.txt中循环浏览计算机列表,每台计算机一次
选择一个或另一个-foreach循环,或将
$computers
传递到
获取过程

备选方案1(我的偏好):

备选案文1a:

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

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

Get-Content C:\computers.txt | foreach-object {Get-Process -ComputerName $_ -Name Javaw | select machinename, id, ProcessName};

你好,阿尔罗克,非常感谢我选择了你的选项2,它非常好用。我现在明白我做错了什么,也谢谢你的解释@兰布:接受这个答案将是相当可观的。嗨,阿尔罗克,非常感谢。我选择了你的选项2,它非常有效。我现在明白我做错了什么,也谢谢你的解释@兰布:接受这个答案是可以接受的