2017-04-04 56 views
0

我在這裏有一個令人困惑的問題。我已經創建了一個腳本來檢查一堆機器是否正在運行一個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次。

所以輸出如下所示:

電腦1 1612 javaw進程
電腦2 1964年javaw進程
COMPUTER3 8448 javaw進程
電腦1 1612 javaw進程
電腦2 1964年javaw進程
COMPUTER3 8448 javaw進程
電腦1 1612 javaw進程
computer2 1964 javaw
computer3 8448 javaw
etc
任何幫助將不勝感激。

回答

3

您正在掃描每臺計算機X次,其中X是您在computers.txt中的計算機數量。

  • Get-Process-Computername參數接受計算機名稱收集當你傳遞一個集合,它拉的每臺計算機的進程列表。您正在通過$computers,但您的意圖是通過$computer--每次循環中的「迭代器」。
  • 您在每臺計算機上循環訪問computers.txt中的計算機列表。

選擇一個或其他 - 的foreach循環,或通過$computersget-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}; 
+0

嗨,非常感謝,我選擇了你的選擇2完美的作品。我現在明白我做錯了什麼,謝謝你的解釋! – IanB

+1

@lanB:接受答案是可觀的 –

相關問題