CPU&内存使用脚本

时间:2016-08-26 19:20:31

标签: powershell cpu-usage invoke-command

您好我再次运行此脚本多个服务器(initially posted here)&我想让每个特定的服务器名称出现在结果中。但是现在,我能够得到标题CPU & Memory Usage&然后一个接一个地使用每个服务器。请告诉我如何获取每个服务器的名称和结果。

$Output = 'C:\temp\Result.txt'
$ServerList = Get-Content 'C:\temp\ServerNames.txt'

$ScriptBLock = { 
 $CPUPercent = @{



Label = 'CPUUsed'
Expression = {
  $SecsUsed = (New-Timespan -Start $_.StartTime).TotalSeconds
  [Math]::Round($_.CPU * 10 / $SecsUsed)
}
 }


$MemUsage = @{
Label ='RAM(MB)' 
Expression = {
[Math]::Round(($_.WS / 1MB),2)
}
  }
 Get-Process | Select-Object -Property Name, CPU, $CPUPercent, $MemUsage,
 Description |
Sort-Object -Property CPUUsed -Descending | 
Select-Object -First 15  | Format-Table -AutoSize
}
foreach ($ServerNames in $ServerList) {
Invoke-Command -ComputerName $ServerNames {Write-Output "CPU & Memory Usage"} 
| Out-File $Output -Append
Invoke-Command -ScriptBlock $ScriptBLock -ComputerName $ServerNames | 
Out-File $Output -Append

1 个答案:

答案 0 :(得分:1)

我看到你在服务器名称上运行循环($ ServerNames是每次迭代的每个服务器),所以为什么不使用:

"Working on $ServerNames.." | Out-File $Output -Append
在" foreach"之后的第一行

声明?

无论如何,我认为您可以像这样更改脚本: 在脚本块上添加:

Write-Output "CPU & Memory Usage"
hostname | out-file $output -Append # this will throw the server name

在Scriptblock上有了这个,你可以像这样运行它:

Invoke-Command -ScriptBlock $ScriptBLock -ComputerName $ServerList

($ ServerList是原始服务器'数组," Invoke-Command"知道如何处理)。