我使用下面的 PowerShell 命令来获取我指定的计算机名称上的以太网适配器速度的输出:
Get-WmiObject -class Win32_PerfRawData_Tcpip_NetworkInterface -ComputerName Computernamehere | Format-Table Name,@{label="LinkSpeed(MB)";Expression={$_.CurrentBandwidth/1000000 -as [int]}}
现在我有 60 多台计算机,我已将针对不同 60 个计算机名称的命令粘贴到同一个 PowerShell 脚本文件中,每行粘贴一次,然后通过从命令提示符运行输出文本文件
powershell "\LinkSpeed.ps1" > 测试.log
有人可以指导我调整代码以便从文本文件导入计算机名称,当我得到输出时,它会根据其速度显示每个计算机名称,因为我必须计算错误的速度在哪一行并返回到 PowerShell 脚本并查找该行以确定计算机的名称,下面是输出的示例。
名称 LinkSpeed(MB) ---- -------------
Intel[R] 82567LM-3 千兆网络连接 1000
isatap.domain.com 0
isatap.{9B9559F2-1490-4661-81A2-6AA1DC382AF8} 0
谢谢。
答案1
最好的选择是这样的:
$output = $null
foreach($computer in (get-content c:\temp\60computers.txt)){
$LinkSpeed = Get-WmiObject -class Win32_PerfRawData_Tcpip_NetworkInterface -ComputerName $computer
foreach($link in $LinkSpeed){
$object = New-Object psobject | Select ComputerName, LinkName, LinkSpeedMB
$object.ComputerName = $computer
$object.LinkName = $link.Name
$object.LinkSpeedMB = [int]$Link.CurrentBandwidth/1000000
[array]$output += $object
}
}
$output | Out-File test.log
分解上述内容,我们将逐步进行:
循环遍历 txt 文档中的所有 ComputerNames60computers.txt
然后foreach
计算机运行Get-WMIObject
cmdlet 来收集信息
然后创建一个 PowerShell 对象来按我们想要的方式格式化数据
将其添加到数组(比附加到文件更快)
然后将数组推送到日志文件。