我搜索了一番,但还是没找到我想要的内容,所以我发了一篇帖子:我想将存储 vMotion 从一个数据存储迁移到另一个数据存储,每次 10 个,并将迁移的虚拟机输出到日志文件。到目前为止,我已经编辑了这个脚本。请告诉我如何添加有关如何附加到日志文件的说明,以及每次 10 个。-RunAsync 也不允许我一次迁移一个,所以我可能还必须将其删除。有什么帮助吗?
# My Login Credentials
$vi_server = "X.X.X.X" # Set to your vCenter hostname|IP
$vcuser = "[email protected]" # Set to your vCenter username to connect
$vcpass = "VerySecurePassword123" # Set to your vCenter username password to connect
# Connect to vCenter
Connect-VIServer -Server $vi_server -User $vcuser -Password $vcpass
# I want all old and new datastores as objects in arrays
$OldDatastores = Get-Datastore TEST-01
$NewDatastores = Get-Datastore TEST-02
$i = 0
# Get all VMs in each old datastore and move them
Foreach ($OldDatastore in $OldDatastores){
$VMs = Get-VM -Datastore $OldDatastore
Foreach ($VM in $VMs)
{
# Move the VM to a new datastore
$VM | Move-VM -Datastore $NewDatastores[$i] -RunAsync
}
$i++
# Wait timer for next migrations
Start-Sleep 5
}
答案1
要获得 10 个批次,您可以使用Select-Object
参数为-First
和-Skip
:
$start = 0
do {
$VMs |Select -First 10 -Skip $start |
Move-VM -Datastore $NewDatastore |
Select Name |Out-File -FilePath "c:\logfile" -Append
$start += 10
}
until ($start -gt $VMs.Length)
附加到文件只是Out-File
。
使用-RunAsync
会适得其反,因为它会导致 cmdlet 在后台运行。因此,它只会启动一个又一个批次,并且所有批次都会同时运行。