gpt4 book ai didi

powershell - 获取CPU使用率的脚本

转载 作者:行者123 更新时间:2023-12-02 23:42:00 25 4
gpt4 key购买 nike

我正在使用此脚本从多个服务器获取CPU使用率

$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
}
}

而且我得到了错误

Cannot bind argument to parameter 'FilePath' because it is null. + CategoryInfo : InvalidData: (:) [Out-File], ParameterBindingValidationException + FullyQualifiedErrorId : ParameterArgumentValidationErrorNullNotAllowed,Microsoft.PowerShell.Commands.OutFileCommand + PSComputerName : ServerName



您能在这方面帮助我吗?

最佳答案

问题是您在脚本块中使用了$Output,该脚本块是通过Invoke-Command在远程计算机上调用的,因此在远程 session 中执行脚本块时未定义。
要解决此问题,您可以将其作为参数传递给脚本块,或者在脚本块内定义它,但是我想您宁愿将文件写在启动客户端上,而不是在远程计算机上。因此,可能不想在脚本块中使用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的定义移到了脚本块中,因为它遇到了同样的问题。

关于powershell - 获取CPU使用率的脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39157249/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com