2016-08-26 4 views
0

Hallo, ich bin dieses Skript wieder mehrere Server ausgeführt (initially posted here) & Ich möchte, dass jeder bestimmte Servernamen im Ergebnis angezeigt werden soll. Aber gerade jetzt kann ich mit der Überschrift CPU & Memory Usage & dann die Nutzung für jeden Server nacheinander bekommen. Bitte lassen Sie mich wissen, wie man jeden Servernamen & das Ergebnis erhält.CPU & Speichernutzung Skript

$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 

Antwort

1

Ich sehe, Sie sind mit einer Schleife auf den Servern Namen laufen ($ Servernamen ist jeder Server für jede Iteration), also warum Sie nicht verwenden:

"Working on $ServerNames.." | Out-File $Output -Append 

in der ersten Zeile nach der "foreach" Aussage?

Wie auch immer, ich glaube, Sie Ihr Skript wie folgt ändern: Auf dem Skriptblock hinzu:

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

Sobald Sie diese haben auf der Script, können Sie es wie folgt ausführen können:

Invoke-Command -ScriptBlock $ScriptBLock -ComputerName $ServerList 

($ ServerList ist das Array des ursprünglichen Servers, das "Invoke-Command" zu handhaben weiß).

+0

Danke Amir ... dieser arbeitete "Arbeiten an $ ServerNames .." | Ausgabedatei $ Ausgabe -Append –