带有名称的 Powershell 输出

带有名称的 Powershell 输出

我使用下面的 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-WMIObjectcmdlet 来收集信息

然后创建一个 PowerShell 对象来按我们想要的方式格式化数据

将其添加到数组(比附加到文件更快)

然后将数组推送到日志文件。

相关内容