我这里有一个令人困惑的问题。我创建了一个脚本,可以检查一堆机器上运行的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
等
任何帮助将不胜感激。
答案 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;
}