Назад | Перейти на главную страницу

Скрипт для хранения vmotion из одного хранилища данных в другое

Я немного поискал и не смог найти то, что ищу, поэтому делаю сообщение: я хотел бы сохранить vMotion из одного хранилища данных в другой, по 10 за раз, и вывести виртуальные машины, перенесенные в файл журнала. У меня есть этот сценарий, который я редактировал. Пожалуйста, дайте мне знать, как добавить инструкции по добавлению в файл журнала, а также 10 за раз. -RunAsync также не позволит мне мигрировать по одному, поэтому мне, возможно, придется удалить и это. Любая помощь?


# My Login Credentials

$vi_server = "X.X.X.X" # Set to your vCenter hostname|IP

$vcuser = "MyLogin@vsphere.local" # 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

    }

Чтобы получить партии по 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 является контрпродуктивным, поскольку заставляет командлет работать в фоновом режиме. Таким образом, он просто запускал одну партию за другой, и все выполнялись одновременно.