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