脚本将存储 vmotion 从一个数据存储移动到另一个数据存储

脚本将存储 vmotion 从一个数据存储移动到另一个数据存储

我搜索了一番,但还是没找到我想要的内容,所以我发了一篇帖子:我想将存储 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 在后台运行。因此,它只会启动一个又一个批次,并且所有批次都会同时运行。

相关内容