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 HorizonView 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 HorizonView 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 上,所以我真的无法指出它在一个而不是另一个上失败的任何原因
我整天都在谷歌上搜索,但似乎无法破解这个难题。我从 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 HorizonView 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 HorizonView 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 上,所以我真的无法指出它在一个而不是另一个上失败的任何原因