【问题标题】:Beginner issues with PowerCLI, Multiple arrays, for loopsPowerCLI、多个数组、for 循环的初学者问题
【发布时间】:2020-02-24 20:42:27
【问题描述】:

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

我首先在我们的测试环境中采用了艰难的方法,将两列放入各自的单独数组中

$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 个虚拟机。但是当我们在生产中进行这种更改时,我想要更简洁的东西。搜了一圈,发现有人在做for循环,会返回数据,所以我尝试用它来更改网络适配器,但它出错了:

$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 找不到 ID 为“HostSystem-host-14”的 VMHost 的环境浏览器。
在行:2 字符: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

有什么东西可以让这样的事情发挥作用吗?我整天都在为此苦苦挣扎,我什至想不出办法来表达它以获得更好的搜索结果。

【问题讨论】:

  • communities.vmware.com/thread/419666 根据这个帖子,错误...Cannot find the environment browser for VMHost with Id: 'HostSystem-host-14'... 是一个已知的错误,没有解决方案。

标签: arrays powershell for-loop powercli import-csv


【解决方案1】:

我认为您可以将其合并为循环导入 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
}

【讨论】:

  • 这是一个质量整合!但是,我在原始帖子...Cannot find the environment browser for VMHost with Id: 'HostSystem-host-14'... 中仍然收到错误消息,当我删除 Set-NetworkAdapter 部分时,它会按应有的方式拉取 VM 的网络。这一定与 .csv 导入有关,因为我无法想象 get-vm $result[23] | Get-NetworkAdapter | Set-NetworkAdapter -NetworkName $result2[23] -Confirm:$falseGet-VM $line.VM | Get-NetworkAdapter | Set-NetworkAdapter -NetworkName $line.Network -Confirm:$false 之间应该有任何区别
【解决方案2】:

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

错误输出:

  • PowerCLI C:> 获取 PowerCLIVersion
  • PowerCLI 版本
  • VMware PowerCLI 6.5 第 1 版内部版本 4624819
  • 组件版本
  • VMware Cis Core PowerCLI 组件 6.5 build 4624453
  • VMware VimAutomation Core PowerCLI 组件 6.5 build 4624450
  • VMWare ImageBuilder PowerCLI 组件 6.5 build 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 Update Manager PowerCLI 6.5 内部版本 4540462

完美运行:

  • PowerCLI 版本
  • VMware PowerCLI 6.5 第 1 版内部版本 4624819
  • 组件版本
  • VMware Cis Core PowerCLI 组件 6.5 内部版本 4624453
  • VMware VimAutomation Core PowerCLI 组件 6.5 内部版本 4624450
  • VMWare ImageBuilder PowerCLI 组件 6.5 build 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 Update Manager PowerCLI 6.5 内部版本 4540462

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-26
    • 2016-01-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多