PowerCLI、多个数组、for 循环的初学者问题

Beginner issues with PowerCLI, Multiple arrays, for loops

我整天都在谷歌上搜索,但似乎无法破解这个难题。我从 RVTools 获得了一个 csv,其中列出了 VM 名称和 VLAN (Column names VM & Network),我的目标是让 PowerCLI 更改 vCenter 中的 VLAN 以匹配中的 VLAN CSV 文件。

我首先为我们的测试环境采用了困难的方式,将两列放入它们自己的单独数组中

$HadesList = "C:\Users\-user-\Desktop\test.csv"
$TestList = Import-CSV $HadesList
$result = ForEach($Line in $TestList) { $Line.VM }
$result2 = ForEach($Line2 in $TestList) {  $Line2.Network  }

    get-vm $result[0] | Get-NetworkAdapter | Set-NetworkAdapter -NetworkName $result2[0] -Confirm:$false
...manually changing the numbers...
    get-vm $result[24] | Get-NetworkAdapter | Set-NetworkAdapter -NetworkName $result2[24] -Confirm:$false

在测试实验室中运行良好,因为它只有 25 个虚拟机。但是当我们在生产中进行这种改变时,我想要更简洁的东西。我四处搜索,发现有人在做循环 return 数据,所以我试图用它来改变网络适配器,但它出错了:

$VMData = Import-CSV C:\Users\-user-\Desktop\test.csv
  for ($i=0; $i -lt $VMData.count; $i++){    
Get-VM $VMData.VM[$i] | Get-NetworkAdapter | Set-NetworkAdapter -NetworkName $VMData.Network[$i] -Confirm:$false
}

Set-NetworkAdapter : 2/24/2020 2:15:41 PM Set-NetworkAdapter Cannot find the environment browser for VMHost with Id: 'HostSystem-host-14'.
At line:2 char:46 + ... rkAdapter | Set-NetworkAdapter -NetworkName $VMData.Network[$i] -Conf ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : ResourceUnavailable: (HostSystem-host-14:String) [Set-NetworkAdapter], ViError + FullyQualifiedErrorId : Client20_VmHostServiceImpl_TryGetHostEnvironmentBrowser_EnvironmentBrowserNotFound,VMware.VimAutomation.ViCore.Cmdlets.Commands.VirtualDevice.SetNetworkAdapter

有没有什么东西可以让这样的东西发挥作用?我一整天都在为此苦苦思索,我什至想不出一种方法来表达它以获得更好的搜索结果。

我认为您可以将其合并为循环遍历导入的 CSV 变量,每行都有一个命名变量。

示例:

$VMData = Import-CSV C:\Users\-user-\Desktop\test.csv
foreach ($line in $VMData){
   Get-VM $line.VM | Get-NetworkAdapter | Set-NetworkAdapter -NetworkName $line.Network -Confirm:$false
}

我在另一个 vCenter 上尝试了 Kyle 的脚本,它运行良好。奇怪的是我找不到两者之间 PowerCLI 的区别

错误输出:

  • PowerCLI C:> 获取 PowerCLIVersion
  • PowerCLI 版本
  • VMware PowerCLI 6.5 版本 1 内部版本 4624819
  • 组件版本
  • VMware Cis 核心 PowerCLI 组件 6.5 内部版本 4624453
  • VMware VimAutomation 核心 PowerCLI 组件 6.5 内部版本 4624450
  • VMWare ImageBuilder PowerCLI 组件 6.5 内部版本 4561891
  • VMWare AutoDeploy PowerCLI 组件 6.5 内部版本 4561891
  • VMware Vds PowerCLI 组件 6.5 内部版本 4624695
  • VMware Cloud PowerCLI 组件 6.5 内部版本 4624821
  • VMware HA PowerCLI 组件 6.0 内部版本 4525225
  • VMware Horizo​​nView PowerCLI 组件 7.0.2 内部版本 4596620
  • VMware 许可 PowerCLI 组件 6.5 内部版本 4624822
  • VMware PCloud PowerCLI 组件 6.5 内部版本 4624825
  • VMware Storage PowerCLI 组件 6.5 内部版本 4624820
  • VMware vROps PowerCLI 组件 6.5 内部版本 4624824
  • VMware vSphere 更新管理器 PowerCLI 6.5 内部版本 4540462

完美运行:

  • PowerCLI 版本
  • VMware PowerCLI 6.5 版本 1 内部版本 4624819
  • 组件版本
  • VMware Cis 核心 PowerCLI 组件 6.5 内部版本 4624453
  • VMware VimAutomation 核心 PowerCLI 组件 6.5 内部版本 4624450
  • VMWare ImageBuilder PowerCLI 组件 6.5 内部版本 4561891
  • VMWare AutoDeploy PowerCLI 组件 6.5 内部版本 4561891
  • VMware Vds PowerCLI 组件 6.5 内部版本 4624695
  • VMware Cloud PowerCLI 组件 6.5 内部版本 4624821
  • VMware HA PowerCLI 组件 6.0 内部版本 4525225
  • VMware Horizo​​nView PowerCLI 组件 7.0.2 内部版本 4596620
  • VMware 许可 PowerCLI 组件 6.5 内部版本 4624822
  • VMware PCloud PowerCLI 组件 6.5 内部版本 4624825
  • VMware Storage PowerCLI 组件 6.5 内部版本 4624820
  • VMware vROps PowerCLI 组件 6.5 内部版本 4624824
  • VMware vSphere 更新管理器 PowerCLI 6.5 内部版本 4540462

它们都在 vSphere Client 版本 6.7.0.20000 上,所以我真的无法指出它在一个而不是另一个上失败的任何原因