【发布时间】:2014-09-24 21:47:56
【问题描述】:
我有两个数组。
包含名为$vms 的虚拟机信息的对象数组,其中一个属性名为Name。这是类型:
PowerCLI > $vms.GetType()
IsPublic IsSerial Name BaseType
-------- -------- ---- --------
True True Object[] System.Array
我从名为 $importVMs 的 CSV 文件导入了另一个数组,其中一个字段也称为 Name。
如果$importVMs.Name 在$vms 中不存在(即它不匹配任何$vms.Name),我想做一些工作。我想知道我是否可以通过流水线来做到这一点,还是必须遍历两个数组?
我可以做类似if (! $vms | ? {$_.Name -neq $importVms.Name) { # work }的事情
似乎无法让它工作。我需要foreach $importVms 在那个if 条件下吗?
编辑
到目前为止我的完整脚本:
Connect-VIServer -Server vCenter -Protocol https -Force | out-null
$importVms = Import-Csv vCenterVMs.csv
$VMHost = "esxi"
$currentVms = Get-VM
Write-Host "Current registered VMs" -ForeGroundColor Cyan
$currentVMs
Write-Host "Saved VMs to import" -ForeGroundColor Yellow
$importVms
$registered = @()
Write-Host "Importing VMs..." -ForeGroundColor White
#$importVms | ?{$_.Name -notcontains $currentVms}
foreach ($vm in $importVms) {
if (! $currentVms.Name -contains $vm) {
Write-Host "Importing $($vm.Name)"
# put in a try block here
$registeredVM = New-VM -VMFilePath $vm.VmPathName -VMHost $VMHost -Location $vm.Location
$registeredList += $registeredVM.Name
}
}
$registeredList
Disconnect-VIServer -Server * -Confirm:$false
vCenterVMs.csv 看起来像
"Name","VmPathName","Location"
"test","[RAID5] test/test.vmx","testfolder"
【问题讨论】:
标签: powershell powershell-2.0 vmware powercli