În cazul în care doriți să transferați o mașină virtuală de pe un server Hyper-V 2008 R2 pe un server Hyper-V 2012 R2, veți întâmpina probleme: după exportarea mașinii virtuale de pe Hyper-V 2008 R2 și copierea fișierelor pe noul server , când încercați să importați în Hyper-V 2012 R2 Veți primi un mesaj ca:
Hyper-V nu a găsit mașini virtuale de importat din locația d:\..
sau
Hyper-V nu a putut găsi mașini virtuale de importat din locația d:\..
Hyper-V în 2012 R2 utilizează o nouă versiune a WMI 2.0, care nu acceptă fișiere .EXP rezultate din export Mașini Hyper-V 2008 R2, care utilizează WMI 1.0. Prin urmare, soluția în în acest caz,: copiere+import, deoarece importul fără export al unei mașini virtuale este acceptat la nivelul Server 2012 R2 și aceste .exp pur și simplu nu sunt prezente în timpul importului, așa că totul merge bine).
@Spațiul de nume pentru versiunea 1.0 a WMI este depreciat. Pregătiți-vă să adaptați scripturile pentru un spațiu de nume revizuit.@
@Rădăcina WMI\spațiul de nume de virtualizare este depreciat. Noul spațiul de nume este root\virtualization\v2.@
http://technet.microsoft.com/en-us/library/hh831568.aspx
Este necesar să folosiți nu export+import, ci copiere+import. Faceți următoarele:
Materialele au fost folosite la pregătirea articolului.
Hyper-V - configurarea rețelei, crearea puncte de control, import și export de mașini virtuale.
În mod implicit, toate mașinile virtuale Hyper-V sunt în esență sandbox și complet izolate de alte computere și rețele. Și dacă doriți ca mașina dvs. virtuală să comunice cu alte VM, computere fizice, rețea și Internet, trebuie să creați un comutator virtual. Puteți face acest lucru în managerul Hyper-V făcând clic pe Virtual Switch Manager în panoul său din dreapta.
Dar mai întâi trebuie să decideți ce fel de comutator virtual creați. Și Virtual Switch Manager oferă o descriere text a fiecărui tip de comutator.
Dacă doriți ca dvs. să vadă și să acceseze fișierele de pe computerul gazdă și din rețeaua dvs., trebuie să selectați un comutator extern. Aceeași opțiune oferă acces VM la Internet. Opțiunile de comutare interne și private permit virtual Mașini Hyper-V comunica doar între ele. Odată ce v-ați decis asupra acestei opțiuni, faceți clic pe butonul de creare a comutatorului virtual.
În continuare, trebuie să configurați opțiunile pentru comutatorul dvs. virtual. Lucrul important aici este să determinați la ce adaptor de rețea de pe computerul dvs. îl conectați. Computerul dvs. poate fi cu fir sau conexiune fără fir. Alege-l pe cel potrivit.
Cheie. Să presupunem că doriți ca mașina dvs. virtuală să acceseze fișierele de pe computerul gazdă, dar să nu aibă acces la rețea sau la Internet. Dacă computerul are o conexiune prin cablu și fără fir, conectați comutatorul la ceva pe care nu îl utilizați pentru a accesa Internetul. Daca nu ai fizic cablu de rețea, selectați nu Conexiune WiFi. În acest fel, VM-ul va avea acces doar la PC-ul principal și va fi izolat de malware și atacuri externe.
După ce ați creat un comutator virtual, trebuie să îl conectați la mașina virtuală. În zona centrală a Hyper-V Manager, faceți clic pe VM-ul corespunzător. Apoi, în zona din dreapta jos, faceți clic pe setări. Care va deschide setările mașinii virtuale.
În panoul din stânga, faceți clic pe opțiunea adaptor de conectare. Dacă nu vedeți această opțiune, faceți clic pe Adăugare hardware și adăugați adaptor de rețea. Caracteristica utilă- gestionarea lățimii de bandă, care poate controla utilizarea VM lățime de bandă rețeaua dvs. Această ajustare asigură că mașina virtuală are necesarul conexiune la rețea, dar nu consumă resurse suplimentare.
În partea de sus a setărilor adaptorului de rețea, selectați comutatorul virtual pe care l-ați creat și faceți clic pe OK. Nu este nevoie să configurați nimic altceva. Mașina ta virtuală are acum acces la rețea.
Atenţie. Deși multe opțiuni pot fi modificate în setările mașinii virtuale în sine, unele dintre ele care au fost setate la crearea mașinii virtuale pot fi modificate doar prin oprirea acesteia.
Dacă faceți modificări semnificative Windows 8.1, de exemplu, instalarea program desktop sau Actualizări Windows, este creat un punct de restaurare a sistemului. Adică, o copie a fișierelor critice ale sistemului de operare este salvată, cum ar fi Registrul Windows, înainte de a se schimba. Și dacă ceva nu merge bine, modificarea poate fi anulată și revenită la o stare anterioară a Windows.
Hyper-V are și propria funcție de punct de control - . Acesta este un instantaneu pe care îl puteți face oricând. Pentru a face acest lucru, în panoul central al managerului Hyper-V, selectați VM pentru care doriți să creați un instantaneu și în colțul din dreapta jos al ferestrei de control, faceți clic pe linkul punctului de control.
Punctele de control pe care le creați apar în Hyper-V Manager Center. Puteți să faceți clic pe oricare dintre ele și să rulați înapoi mașina virtuală la acel punct, să exportați instantaneul sau să îl ștergeți.
Uneori poate fi necesar să creați o mașină virtuală și să o utilizați pe alt computer sau să salvați o copie a mașinii virtuale. Pur și simplu creați un VM, copiați acest fișier pe alt computer și deschideți-l acolo nu va funcționa. Pentru a importa o mașină virtuală în Hyper-V, există o opțiune specială de import și export. Pentru a exporta VM, în Hyper-V Manager, selectați această opțiune. În colțul din dreapta jos al ferestrei Hyper-V Manager, vor apărea opțiunile de export. Faceți clic pe el și veți fi întrebat în ce folder doriți să salvați copia VM-ului. Procesul de export este invizibil și destul de rapid.
Atenţie. Dacă importați un VM fără să faceți o copie a acestuia, orice modificări pe care le faceți și orice problemă vor rămâne în el și vă pierdeți efectiv copia principală curată.
Unele sisteme de operare, mai ales mai multe versiuni timpurii Windows nu oferă acces la rețea sau altele funcțiile necesare. Și va trebui să activați funcții suplimentare VM. Acest lucru trebuie făcut într-o mașină virtuală care rulează.
Aceste caracteristici suplimentare care sunt cerute de unii sisteme de operare, includ capacitatea de a muta cursorul mouse-ului între desktopul principal și mașina virtuală deschisă. Acestea includ, de asemenea, suport pentru rețea și USB.
În meniul Acțiuni, faceți clic pe Instalare servicii de integrare. Și se va încărca pentru tine Fișier ISO conţinând softwareîmbunătățirea funcționalității mașinii virtuale.
3 iunie 2011 la 20:40Conectarea la o mașină virtuală
New-VMConnectSession
Manipularea stării mașinilor virtuale
Obține-VMState, Set-VMState, Convert-VmState,
Ping-VM, Test-VMHeartBeat, Shutdown-VM, Start-VM, Stop-VM, Suspend-VM
Obțineți-VMKVP, Adăugați-KVP, Eliminați-KVP, Obțineți-VMJPEG
Abilitatea de a face copii de rezervă, de a exporta mașini virtuale și de a face instantanee
Export-VM, Import-VM, Obține-VMSnapshot, Alege-VMSnapshot, Aplică-VMSnapshot, Nou-VMSnapshot ,Elimină-VMSnapshot, Redenumire-VMSnapShot, Actualizare-VMSnapshot, Get-VMSnapshotTree, Get-VmBackupScript
Adăugarea și eliminarea virtualului. mașini, stabilindu-le proprietățile
New-VM, Remove-VM, Set-VM, Get-VMCPUCount, Set-VMCPUCount, Get-VMMemory, Set-VMMemory, Set-VMSerialPort
Gestionarea controlerelor de disc
Get-VMDiskController
Adăugați-VMSCSIcontroller, Eliminați-VMSCSIcontroller
Get-VMDriveByController, Add-VMDRIVE, Remove-VMdrive
Get-VMDiskByDrive, Add-VMDISK, Set-VMDisk, Get-VMDisk
Obțineți-VMFloppyDisk, Adăugați-VMFloppyDisk
Adăugați-VMNewHardDisk
Managementul interfeței de rețea
Get-VMNIC, List-VMNic, Choose-VMNIC, Add-VMNIC, Remove-VMNIC, Set-VMNICAddress, Set-VMNICConnection, Get-VMNICport,
Get-VMnicSwitch, Alege-VMSwitch, New-VMSwitchPort, Get-VMByMACaddress, Alege-VMExternalEthernet,
New-VMExternalSwitch, New-VMInternalSwitch, New-VmPrivateSwitch
Lucrul cu fișiere VHD
Get-VHDDefaultPath, Get-VHDInfo, New-VHD, Compact-VHD, Test-VHD, Convert-VHD, Merge-VHD, Mount-VHD, Unmount-VHD
Toate comenzile date vorbesc de la sine.
De exemplu, pentru a obține starea unei mașini virtuale, trebuie doar să introduceți:
Listă-VMState nume virt. mașini
si ca urmare:
În exemplul meu, există o singură mașină virtuală => nu am specificat niciun parametru, dar dacă aveți mulți dintre ei, atunci probabil că ar trebui să specificați în mod explicit numele acesteia dacă nu doriți să treceți prin ieșirea consolei mai târziu.
De asemenea, este ușor, de exemplu, să aflați despre cel folosit interfețe de rețea pentru mașinile virtuale, trebuie doar să introduceți:
Ia-VMNic
și obținem:
Ei bine, cel mai bun lucru este ceea ce aveam nevoie prieten - oportunitate exportați în fundal, într-un program. Pentru a face acest lucru, puteți scrie un cmdlet pe care apoi îl puteți introduce în Scheduler. De exemplu, pentru mine acest cmdlet oprește mașina virtuală, o exportă, o pornește din nou și îmi trimite o scrisoare despre eroarea sau succesul cmdlet-ului. După aceasta, controlul este transferat către un alt script care arhivează și trimite o copie de rezervă la un ftp la distanță.
Export: export-vm -vm MyVM1 -path D:\backups\VM -copystate -wait -force
Parametrul -copystate spune că totul trebuie copiat (inclusiv discul virtual => dimensiunea exportului de ieșire poate fi foarte mare)
P.S. Nu pretind deloc că „descoperă America” doar am decis că cineva va găsi utile informațiile despre acest modul util. Am descris doar cele mai multe opțiuni simple pentru care puteți utiliza biblioteca de gestionare PowerShell pentru Hyper-V. Dacă cineva știe sau și-a scris mai multe instrumente convenabile pentru a optimiza lucrul cu Hyper-V, voi fi bucuros să aflu despre ele.
Mecanismul de export-import din hypervisorul Hyper-V este conceput pentru a muta mașinile virtuale de la un computer sau server la altul. Exportul înseamnă, în esență, copierea unei mașini virtuale, păstrând complet configurația acesteia. La export, virtualul hard disk, setări hardware, momente salvate ale sistemului de operare invitat, create (instantanee).
Mecanismul de export-import Hyper-V poate fi folosit și pentru a crea o mașină virtuală clonă pe același server sau computer pentru testare și interacțiune cu mașina virtuală originală. O mașină de clonare poate primi un alt ID (identificator), o adresă IP internă diferită în rețeaua Hyper-V, drept urmare, de fapt, nu va fi diferită de mașinile virtuale create de la zero.
Mai jos vom analiza mai detaliat procesul de export și import a unei mașini virtuale folosind exemplul inclus în Windows 10.
Unul dintre avantaje noua versiune Hyper-V, inclus în Windows Server 2012 R2, client sisteme Windows 8.1 și 10, este capacitatea de a efectua unele sarcini care necesită mult resurse, în special, exportul din mers, în timp ce mașina virtuală rulează, fără a o opri, chiar și fără a o întrerupe. Exportul se efectuează către fundal, nu trece repede pentru ca implica o cantitate mica resursele sistemului, lăsând utilizatorului posibilitatea de a continua lucrul cu mașina virtuală.
Cum se exportă o mașină virtuală? Selectați mașina virtuală dorită în managerul Hyper-V și apelați meniul contextual. Avem nevoie de o comandă „Export”.
Altul referitor la caracteristică nouă Hyper-V, care nu era prezent în vechile camere de server versiuni Windows– capacitatea de a exporta un punct de control separat, adică starea mașinii virtuale la momentul creării acestui punct de control. Anterior, hypervisorul Microsoft asigura doar export-import al întregii mașini virtuale. Și dacă era nevoie de starea unui anumit punct de control, era necesar să exportați mașina virtuală cu toate punctele sale de control și, după importare, să reveniți la cel dorit. Hyper-V vă permite acum să exportați fiecare punct de control individual. După ce a exportat un singur instantaneu, acesta poate fi apoi importat ca o nouă mașină virtuală, în special cu propriul său ID unic, pe același server sau computer.
Pentru a exporta o mașină virtuală dintr-un punct de control, selectați atât mașina, cât și punctul de control în managerul Hyper-V. În ultimul, apelați meniul contextual și selectați „Export”.
Exportarea unei mașini virtuale Hyper-V nu se face într-un format de fișier comprimat separat, unde și virtual hard disc și fișierele de configurare și starea salvată a sistemului de operare invitat, așa cum, de exemplu, aceasta este oferită de mecanismul de export-import în Programul VirtualBox. În cazul virtualului Aparatele VirtualBox Export-import este posibil cu participarea unui intermediar - un fișier OVA. Dacă acest fișier este deteriorat, importați fișierul virtual Aparatele VirtualBox s-ar putea să nu se întâmple. Dar în cazul Hyper-V, exportul unei mașini virtuale înseamnă copierea completă a virtualului hard diskîn formatul său original – VHDX (sau VHD).
În acest fel, dacă alte date de export sunt corupte, mașina virtuală poate fi încă recreată. Va trebui să creați o nouă mașină virtuală folosind Hyper-V folosind fișier existent VHDX (VHD).
Mașina virtuală exportată poate fi importată ulterior în versiune compatibilă Hyper-V ca parte a edițiilor de server ale Windows și Client Windows 8.1 și 10.
Pentru a importa o mașină virtuală, selectați funcția corespunzătoare în Hyper-V Manager.
În fereastra următoare, utilizați butonul de răsfoire și specificați calea către folderul cu mașina virtuală exportată. Faceți clic pe „Următorul”.
Selectați mașina virtuală dorită dacă există mai multe dintre ele în folderul specificat. Faceți clic pe „Următorul”.
Apoi trebuie să alegeți cum va fi importată mașina virtuală. Dacă a fost transferat de pe un alt server sau computer, puteți utiliza primul tip de import, care presupune înregistrarea lui folosind identificatorul original. Această opțiune înregistrează mașina virtuală în același dosar în care sunt stocate fișierele sale de export, astfel încât să nu fie nevoie de timp pentru copierea fișierelor.
Cel de-al doilea tip de import este potrivit și pentru cazurile de transfer a unei mașini virtuale de pe un alt server sau computer, dar atunci când o utilizați, fișierele exportate vor fi transferate în folderul specificat. ID-ul mașinii virtuale va rămâne același.
Dacă mașina virtuală este mutată pe același server sau computer, ar trebui să utilizați al treilea tip de import, care implică generarea unui nou identificator. La urma urmei, pe una calculator fizic nu pot exista mașini virtuale Hyper-V cu același ID.
În cazul nostru, copiem o mașină virtuală, acesta este al treilea tip de import. Faceți clic pe „Următorul”.
Calea implicită pentru stocarea fișierelor de configurare, puncte de control și alte date ale mașinii virtuale importate, specificate de Hyper-V, poate fi modificată. Trebuie să bifați caseta pentru schimbarea locației de stocare și să specificați manual căile necesare.
În cazul nostru, vom adăuga pur și simplu creație în cale (prin o bară oblică) folder separat"Copie". Faceți clic pe „Următorul”.
Vom indica aceeași cale pentru fișierul VHDX, astfel încât totul să fie într-un singur loc. Faceți clic pe „Următorul”.
Pasul final al expertului este un rezumat al datelor de import. Faceți clic pe „Terminare”.
Acum, în cazul nostru, există două mașini virtuale identice în Hyper-V Manager. Au ID-uri diferite, dar au același nume. Să schimbăm numele mașinii virtuale nou importate.
Asta este - procesul de import a fost finalizat. Mașina virtuală importată poate fi lansată și testată.
O zi bună!
11.02.2012 - 18:26
Să ne uităm la un script pentru exportul de VM pe un server Hyper-V.
Scopul este de a automatiza procesul cu o logică maximă fără a compromite productivitatea. Drept urmare, am scris un scenariu pe care l-am trimis mai devreme. Situația se schimba în fiecare zi, sistemul funcționa deja în producție, așa că era necesar să se reducă la minimum riscul de a sparge ceva. Ca urmare, am modificat scriptul, al cărui concept nu s-a schimbat:
Au fost adăugate doar „volante” și „monograme”.
Cerința principală este să salvați 2 copii ale VM, cea actuală și cea anterioară. Când se formează o nouă copie, cea anterioară este ștearsă, iar cea actuală este redenumită cu cea anterioară. Totul este implementat folosind exemplul cataloagelor Today și Yesterday.
Principalele caracteristici ale scenariului:
Există câteva caracteristici:
Pentru munca de succes script, trebuie să instalați acest modul. Cred că nu vor fi dificultăți.
Scenariul:
param ($VM) # Parametrul de intrare al mașinii virtuale (VM)
dacă (! (Get-Module -Name hyperv) )
{
# Activați modulul
import-modul hiperv
}
dacă ($VM -eq $null )
{
Scrie-gazdă „Introduceți numele mașinii virtuale”.
}
# ==== Parametri inițiali
$ComputerName = Get-Content env:COMPUTERNAME
# Conectați unitatea R: pentru a obține informații despre VHD
Invoke-Expression -Comandă „net use R: \\Server /y”
# Resetați contoarele
$număr = $fals # Declanșarea VM găsită
$export_count = $false # Contor de export de succes VM
# Definiți numele/adresa fișierului jurnal
$log = "\\Server\backup\Jurnale \$VM\" + (Get-Date -Format " aaa-LL") +" .log "
# Determinați calea către folder cu RK
$BackupDir = "\\Server\backup\" +$VM
# Calea către folderul cu RK pentru a elimina informațiile din VHD
$InfoDir = "R:\backup \" +$VM
# Date pentru e-mail
$Sender = " [email protected]"
$SMTP = " smtp.contoso.com"
$Destinatari = @(" [email protected] ") # grup de distribuție cu destinatarii care monitorizează backup-ul
$AttachePath = " R:\backup\Logs\$VM \" + (Get-Date -Format "aaa-LL" ) +".log"
# Funcție pentru trimiterea unui mesaj, la momentul scrierii nu știam despre funcția Send-MailMessage și am scris propria mea funcție. Nu vreau să o refac, „Funcționează - nu-l atingeți!”
funcția Trimite e-mail($Subiect ,$Body ,$Prioritate )
{
$Message = New-Object System.Net.Mail.MailMessage
$Server = New-Object System.Net.Mail.SMTPClient
$Attache = New-Object System.Net.Mail.Attachment($AttachePath )
# ==== Mesaj
$Destinatari |
Pentru fiecare obiect ($Message .To.Add($_ ) )
$Message .From = $Sender
$Message .Subject = $Subject
$Message .Body = $Body
$Message .Atașamente.Adăugați($Atașare )
$Message .Priority = [ System.Net.Mail.MailPriority] ::$Priority
# ==== Se trimite
$Server.Host = $SMTP
}
# =========================================
$Server.Send($Message)
# Începeți înregistrarea (Get-Date) + "`r` n Pornirea scriptului de export VM " +$VM + " server: " + $ComputerName + "
`r` n Obținerea unei liste de mașini virtuale... `r` n"
# Obțineți o listă de VM
$VMArray = Get-VM |
{
Select-Object -Property VMElementName
foreach($element în $VMArray )
{
# Căutați o anumită VM dacă ($VM -eq $element .VMElementName)
$log_string = $log_string +
"Mașina virtuală a fost găsită. Efectuez acțiunile specificate... `r` n"
$număr = $adevărat
# ========== Operații cu foldere ===============
# Ștergeți folderul Ieri
{
Remove-Item -Path ($BackupDir + "\Yesterday" ) -Recurse -ErrorVariable err
dacă ($err)
# Dacă există o eroare de ștergere, opriți execuția.`r`n"
}
" Eliminarea directorului Ieri a eșuat, exportul $VM a fost anulat. Eroare: "
{
# Căutați o anumită VM + $err
altfel
„Ștergerea directorului de ieri a avut succes. `r` n” # Redenumiți folderul Azi Redenumiți-Item -Cale ($BackupDir + "
# Ștergeți folderul Ieri
{
\Azi"
) -NewName ($BackupDir + "\Yesterday" ) -Force -ErrorVariable err dacă ($err)
# Dacă există o eroare de redenumire, opriți execuția.`r`n"
}
" Eliminarea directorului Ieri a eșuat, exportul $VM a fost anulat. Eroare: "
{
# Căutați o anumită VM $log_string = $log_string + $err + "
" Redenumirea directorului Ieri a eșuat, exportul $VM a fost anulat. Eroare: "
„Redenumirea dosarului a fost finalizată cu succes. `r` n” # Redenumiți folderul Azi# Creați un folder Today
# Ștergeți folderul Ieri
{
Calea articolului nou ($BackupDir + "
) -NewName ($BackupDir + "\Yesterday" ) -Force -ErrorVariable err dacă ($err)
) -ItemType Directory -Force -ErrorVariable err # Dacă există o eroare de creare, opriți execuția.`r`n"
}
" Eliminarea directorului Ieri a eșuat, exportul $VM a fost anulat. Eroare: "
{
# Căutați o anumită VM $MailBody = $Mailbody + (Get-Date -Format „(aaaa-LL-zz) hh:mm:ss” ) +
„Crearea directorului Ieri a eșuat, exportul $VM a fost anulat. Eroare: „
„Crearea folderului Today a avut succes. `r` n”
#========== Sfârșitul lucrului cu folderele
if ((Get-VMSummary $VM ) .enabledstate -eq „În rulare” )
{
# Începeți oprirea
$log_string = $log_string + ((Get-Date -Format "(aaaa-LL-zz) hh:mm:ss" ) + „Mașina virtuală rulează. O opresc. `r` n”)
invoke-vmshutdown -VM $VM -Motiv „Export VM”.
# Ștergeți folderul Ieri
{
) -NewName ($BackupDir + "\Yesterday" ) -Force -ErrorVariable err dacă ($err)
) -ItemType Directory -Force -ErrorVariable err -Force -ErrorVariable err`r`n"
}
" Eliminarea directorului Ieri a eșuat, exportul $VM a fost anulat. Eroare: "
{
„Maiul virtual nu a fost oprit, exportul $VM a fost întrerupt. Eroare: „
„Mașina virtuală s-a oprit. Se exportă.`r`n” $MailBody = $MailBody + (Get-Date -Format „(aaaa-LL-zz) hh:mm:ss” ) +
„Mașina virtuală s-a oprit. Se exportă.`r`n” „Mașina virtuală s-a oprit.`r`n”
# Redenumiți folderul Azi
# Ștergeți folderul Ieri
{
) -NewName ($BackupDir + "\Yesterday" ) -Force -ErrorVariable err dacă ($err)
) -ItemType Directory -Force -ErrorVariable err „Se exportă o mașină virtuală.`r`n”`r`n"
}
" Eliminarea directorului Ieri a eșuat, exportul $VM a fost anulat. Eroare: "
{
„Exportul VM a fost finalizat cu eroare, exportul $VM a fost întrerupt. Eroare: „ $log_string = $log_string + (Get-Date -Format "(aaaa-LL-zz) hh:mm:ss" ) +
„Mașina virtuală s-a oprit. Se exportă.`r`n”
"Mașina virtuală a fost exportată cu succes. O pornesc.`r`n"
}
$export_count = $true
# Porniți VM-ul confirmând pornirea timp de 300 de secunde înainte de a executa următoarea comandă
# Ștergeți folderul Ieri
{
) -NewName ($BackupDir + "\Yesterday" ) -Force -ErrorVariable err dacă ($err)
) -ItemType Directory -Force -ErrorVariable err Start-VM -vm $VM -HeartBeatTimeOut 300 -ErrorVariable err`r`n"
}
" Eliminarea directorului Ieri a eșuat, exportul $VM a fost anulat. Eroare: "
{
„Exportul VM a fost finalizat cu eroare, exportul $VM a fost întrerupt. Eroare: „
„Mașina virtuală s-a oprit. Se exportă.`r`n” „VM nu a pornit. Eroare: „
}
}
}
„Mașina virtuală rulează.`r`n”
{
elseif((Get-VMSummary $VM ) .enabledstate -eq „Oprit” )
„Exportul VM a fost finalizat cu eroare, exportul $VM a fost întrerupt. Eroare: „ # Exportați VM fără confirmare cu toate fișierele (xml, vhd, etc.) și așteptați până când este gata
„Mașina virtuală s-a oprit. Se exportă.`r`n” „Mașina virtuală este în modul oprit. Se exportă.`r`n”
„Mașina virtuală este în modul oprit.`r`n” # Redenumiți folderul Azi export-VM -VM $VM -cale ($backupDir + "
# Ștergeți folderul Ieri
{
) -NewName ($BackupDir + "\Yesterday" ) -Force -ErrorVariable err dacă ($err)
) -ItemType Directory -Force -ErrorVariable err ) -force -copystate -wait -ErrorVariable err`r`n"
}
" Eliminarea directorului Ieri a eșuat, exportul $VM a fost anulat. Eroare: "
{
„Exportul VM a fost finalizat cu eroare, exportul $VM a fost întrerupt. Eroare: „ „Exportul VM a eșuat, exportul $VM a fost întrerupt. Eroare: „
„Mașina virtuală s-a oprit. Se exportă.`r`n” „Exportul VM a eșuat, exportul $VM a fost întrerupt. Eroare: „
"Mașina virtuală a fost exportată cu succes. O pornesc.`r`n"
}
}
" Eliminarea directorului Ieri a eșuat, exportul $VM a fost anulat. Eroare: "
{
„Mașina virtuală a fost exportată cu succes.`r`n”
„Exportul VM a fost finalizat cu eroare, exportul $VM a fost întrerupt. Eroare: „
„Mașina virtuală s-a oprit. Se exportă.`r`n” $vm_state = (Get-VMSummary -VM $VM ) .EnabledState
}
}
}
}
}
}
„Mașina virtuală nu a fost exportată, starea $VM = $vm_state .`r` n” dacă ($ număr)
{
# Dacă VM-ul este găsit dacă (! ($export_count) )
{
# Căutați o anumită VM # Dacă VM-ul nu este exportat
„Exportul mașinii virtuale $VM a fost finalizat cu erori. Procesul a fost întrerupt. `r` n” $MailBody = $MailBody +
}
„Exportul mașinii virtuale $VM a fost finalizat cu erori. Procesul a fost întrerupt.`r` n” altfel
{
# Căutați o anumită VM # Dacă VM-ul este exportat
"Caut *.VHD pentru $VM ... `r` n"
# Căutați *.vhd în directorul specificat if (Get-Item -Path ($InfoDir + "\Azi\" + $VM + " \Discuri virtuale\*
{
") -Include *.*vhd | Select-Object -Property Name)#$VHDInfo = "
Informații VHD:`r`n" foreach($element în (Get-Item -Path ($InfoDir + " \Azi\" + $VM + "\Harddiskuri virtuale\*"
{
) -Include * .* vhd |
# Căutați o anumită VM Select-Object-Property Name) )# Pentru fiecare element găsit, obținem informații și le scriem în jurnal și o linie pentru scriere dacă ($err)
$SomeVHDInfo = Get-VHDInfo -VHDPaths ($InfoDir + " if (Get-Item -Path ($InfoDir + "\Virtual Hard Disks\" + $element .Nume)
$log_string = $log_string + "Cale: " + $SomeVHDInfo .Path + " dacă ($err)
$log_string = $log_string + "Dimensiunea fișierului: " + ([ System.Math] ::Round(($SomeVHDInfo .FileSize/ 1Gb) ,2 ) ) + "Gb dacă ($err)
$log_string = $log_string + "Legarea VM: " + $SomeVHDInfo .InSavedState + " dacă ($err)
$log_string = $log_string + "Montat: " + $SomeVHDInfo .InUse + " dacă ($err)
# Căutați o anumită VM "Volumul maxim fisier: "+ ([ System.Math] ::Round(($SomeVHDInfo .MaxInternalSize/ 1Gb) ,2 ) ) + "Gb dacă ($err)
$log_string = $log_string + "Tipul de imagine: " + $SomeVHDInfo .TypeName + " dacă ($err)
# Validăm VM-ul VHD
$TestVHD = "VHD: " + $element .Name + ": " + (Test-VHD -VHDPaths ($InfoDir + " if (Get-Item -Path ($InfoDir + "\Virtual Hard Disks\" + $element .Nume) )
$log_string = $log_string + $TestVHD + " dacă ($err)
$MailBody = $Mailbody + $TestVHD + " dacă ($err)
}
}
„Exportul mașinii virtuale $VM a fost finalizat cu erori. Procesul a fost întrerupt.`r` n” # Brusc, VHD-ul nu se află în acest director O_O
{
$log_string = $log_string + "*.VHD pentru $VM nu a fost găsit.`r`n"
$MailBody = $MailBody + "*.VHD pentru $VM nu a fost găsit.`r`n"
}
}
}
„Exportul mașinii virtuale $VM a fost finalizat cu erori. Procesul a fost întrerupt.`r` n” # VM nu a fost găsit pe server
{
$log_string = $log_string +
„Exportul mașinii virtuale $VM a fost finalizat cu erori. Procesul a fost întrerupt. `r` n” "Mașina virtuală $VM nu a fost găsită. Procesul s-a încheiat.`r` n"
}
„Exportul VM a fost finalizat cu eroare, exportul $VM a fost întrerupt. Eroare: „ „Lucrul la $VM s-a terminat.`r`n”
# Căutați o anumită VM „======================== `r` n”
$MailSubject = " Raport de export $VM."
# Trimite o scrisoare:
Trimite e-mail -Subject $MailSubject -Body $MailBody -Priority $MailPriority
#net use R: /delete /y Această funcție nu este necesar să alergi.
Iată, de fapt, întregul scenariu. Pentru a lucra cu un cluster, creăm o sarcină pentru fiecare VM pe fiecare nod al cluster-ului cu o diferență de minut la pornire, deoarece scriptul de la orice nod accesează același fișier jurnal și, în același timp, poate exista o coliziune de acces. Dacă nu există nicio VM pe unul dintre nodurile clusterului, scriptul va afișa un mesaj că VM-ul nu a fost găsit și se va ieși.
Scriptul a fost deja implementat la mai multe întreprinderi cu modificări minore pentru un anumit client. Toată lumea este fericită și îți doresc același lucru.