2016-08-26 12 views
0

Привет, я снова запускаю этот скрипт на нескольких серверах. (initially posted here) & Я хотел бы получить имена каждого конкретного сервера, которые будут отображаться в результате. Но прямо сейчас, я могу получить с заголовком CPU & Memory Usage &, а затем использовать для каждого сервера один за другим. Pls дайте мне знать, как получить имя каждого сервера &.Сценарий использования процессора и памяти

$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

Я вижу, что вы работаете с петлей на имена серверов ($ 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» знает, как обращаться).

+0

Спасибо Amir ... этот работал «Работа над $ ServerNames ..» | Out-File $ Output -Append –

Смежные вопросы