【问题标题】:get-process for a specific process off a list of machines returns the same result over and over从机器列表中获取特定进程的 get-process 一遍又一遍地返回相同的结果
【发布时间】:2017-04-04 00:52:23
【问题描述】:

我有一个令人困惑的问题。我创建了一个脚本来检查一堆机器是否有一个正在运行的 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
计算机2 1964 javaw
计算机3 8448 javaw
计算机1 1612 javaw
计算机2 1964 javaw
计算机3 8448 javaw
计算机1 1612 javaw
计算机2 1964 javaw
计算机3 8448 javaw

任何帮助将不胜感激。

【问题讨论】:

    标签: loops powershell foreach


    【解决方案1】:

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

    • Get-Process-Computername 参数接受计算机名称的集合,当您向其传递集合时,它会提取每台计算机的进程列表。您正在传递 $computers,但您的意思是传递 $computer - 每次循环的“迭代器”。
    • 您正在循环浏览computers.txt 中的计算机列表,每台计算机一次。

    选择其中一个 - foreach 循环,或将 $computers 传递给 get-process

    选项 1(我的偏好):

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

    选项 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};
    

    【讨论】:

    • 嗨,alroc,非常感谢,我选择了您的选项 2,效果很好。我现在明白我做错了什么,也谢谢你的解释!
    • @lanB: 接受答案将是可观的
    猜你喜欢
    • 1970-01-01
    • 2018-01-16
    • 1970-01-01
    • 2020-09-03
    • 1970-01-01
    • 2017-02-15
    • 1970-01-01
    • 1970-01-01
    • 2021-01-15
    相关资源
    最近更新 更多