2016-08-26 7 views
2

Я использую этот скрипт, чтобы получить загрузку процессора с нескольких серверовScript, чтобы получить использование ЦП

$Output = 'C:\temp\Result.txt' 
$ServerList = Get-Content 'C:\temp\Serverlist.txt' 
$CPUPercent = @{ 
    Label = 'CPUUsed' 
    Expression = { 
    $SecsUsed = (New-Timespan -Start $_.StartTime).TotalSeconds 
    [Math]::Round($_.CPU * 10/$SecsUsed) 
    } 
} 
Foreach ($ServerNames in $ServerList) { 
    Invoke-Command -ComputerName $ServerNames -ScriptBlock { 
    Get-Process | Select-Object -Property Name, CPU, $CPUPercent, Description | Sort-Object -Property CPUUsed -Descending | Select-Object -First 15 | Format-Table -AutoSize | Out-File $Output -Append 
    } 
} 

и я получаю ошибку

Невозможно привязать аргумент параметра «FilePath», поскольку он является недействительным , + CategoryInfo: InvalidData: (:) [Out-File], ParameterBindingValidationException + FullyQualifiedErrorId: ParameterArgumentValidationErrorNullNotAllowed, Microsoft.PowerShell.Commands.OutFileCommand + PsComputerName: ServerName

Можете ли вы PLS помочь мне в этом ... ?

ответ

2

Проблема заключается в том, что вы используете $Output в своем блоке сценария, который вы вызываете на удаленном компьютере через Invoke-Command, и поэтому не определяется, когда блок сценария выполняется в удаленном сеансе.
Чтобы исправить это, вы можете передать его как параметр в блок сценария или определить его в блоке сценария, но я думаю, вы скорее захотите записать файл на инициирующий клиент, а не на удаленный компьютер. Таким образом, вместо того, чтобы использовать Out-File в блоке сценария вы можете использовать его вне блока сценария как так

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

$ScriptBlock = { 

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

    Get-Process | 
     Select-Object -Property Name, CPU, $CPUPercent, Description | 
     Sort-Object -Property CPUUsed -Descending | 
     Select-Object -First 15 
} 

foreach ($ServerNames in $ServerList) { 
    Invoke-Command -ComputerName $ServerNames -ScriptBlock $ScriptBlock | 
    Out-File $Output -Append 
} 

Пожалуйста, обратите внимание, что я переместил определение $CPUPercent в блок сценария, как это страдало от тех же проблем.

+0

Спасибо DAXaholic, –

+0

Очень ценный ... –