Powershell script to clone a virtual machine
Hello
I would like to make a clone of a virtual machine with a powershell script. I can't find a way to do that easily. I wrote a script that clon a model VM1 then model VM2. Is there another method?
Thank you
NB: Tomorrow, I'll post my script (poor script :/)
There is no direct command in the current construction of PowerCLI to clone from a virtual machine.
To do this, you need to use the SDK CloneVM_Taskmethod.
There are a number of samples available in this community.
Tags: VMware
Similar Questions
-
Clone a virtual machine directly from single ESXi host
Hi, I want to clone a virtual machine with all the related feathers which the Associate ID (CPU ID, UUID, BIOS ID, etc.) and redeployed on another single ESXi host. It could help me how can I do?
Hello
without vCenter server you can accomplish this by check script PowerCLI this useful post below:
Tools of HL - part 1 - clone a virtual machine without vCenter - notes LucD
If you want to clone individual disks check this KB:
VMware KB: Cloning of disks to the individual virtual machine through the ESX/ESXi terminal host
_________________________________________________________________________________________
If you have found this device or any other answer useful, please consider to award points. (use the useful or correct)
Kind regards
P.
-
Clone the virtual machine to the local data store
Hi all
I'm looking to automate a task daily (or almost) of my friends with a small script with powercli.
I'm trying to "backup" or to clone a virtual machine, I work in a storage of one of our servers.
The servers are managed by a 5.1 vCenter and the machine is on a shared storage.
From time to time, I clean, stop the machine, remove all snapshots and clone the virtual machine to one of the local server as a backup storage. So I put together a small script which almost works. It works as long as the target data store is a shared storage, but not with a local storage.
I get always an error that claims it can not access the local data store and is not a permissions problem...
Given that I can accomplish this via the customer without problem I thought it is possible via powercli too, or I'm wrong?
My Script up to now:
# Variables$VC = "vc.domain.com" #vCenter Server$User = "domain\user" #User$Pass = 'test123' #User PW$VMName = 'scripttest' #VM$BackupSuffix = "backup" #Suffix to add the name of VM to mark this as a backup$VmHost = "esx2.domain.com".$Datastore = 'ESX2-LocalData' #Datastore$BackupFolder = 'Backup' #Folder the VM gets classified# Register cmdlets to VMware
If (-not (Get-PSSnapin VMware.VimAutomation.Core - ErrorAction SilentlyContinue)) {}
Add-PSSnapin VMware.VimAutomation.Core
}
# Connect to the server
SE connect-ViServer $VC - user $User-password $Pass
# Remove the old clone
$OldBackups = get - VM | WHERE {$_.} {Name: corresponds to '$VMName - $BackupSuffix'}
If ($OldBackups - don't "")
{
If ($OldBackups.Count - gt 1)
{
Write-Host "better check! "Found several results:
Foreach ($VM to $OldBackups)
{
Write-Host $VM. Name
}
}
on the other
{
Remove-VM - VM $OldBackups - DeleteFromDisk-confirm: $false
}
}
# Clone VM
$VMInfo = get - VM $VMName | Get-View
$CloneSpec = new-Object Vmware.Vim.VirtualMachineCloneSpec
$CloneSpec.Snapshot = $VMInfo.Snapshot.CurrentSnaphshot
$CloneSpec.Location = new-Object Vmware.Vim.VirtualMachineRelocateSpec
$CloneSpec.Location.Datastore = (get-Datastore-name $Datastore |) Get - View). MoRef
$CloneSpec.Location.Transform = [Vmware.Vim.VirtualMachineRelocateTransformation]: sparse
$CloneFolder = $VMInfo.Parent
$CloneName = "$VMName - $BackupSuffix".
$TaskCloneID = $VMInfo.CloneVM_Task ($CloneFolder, $CloneName, $CloneSpec)
# Check if the task is completed
$Check = $false
While ($Check - eq $false)
{
$Tasks = get-job | Select State, id | Where {$_.} State - eq "Running" - and $_. State - eq "pending"}
ForEach ($Task in $Tasks)
{
If ($Task.id - eq $TaskCloneID)
{$Check = $false}
on the other
{$Check = $true}
}
Start-Sleep 10
}
# Move clone to the backup folder
Move-VM - VM '$VMName - $BackupSuffix' - Destination $BackupFolder
# Disconnect
Disconnect-VIServer-confirm: $false
Can you show us the complete error message you get?
BTW, the clone step can be replaced by the New-VM cmdlet with the setting of the virtual machine.
-
Clone a virtual machine and change is the network settings?
I'm looking to clone a virtual machine several times change the network connection and the IP he uses, any help appreciated.
NP, alternative, will host this script:
$vmlist
=
Import-CSV
C:vms.csv
foreach
(
$item
in
$vmlist
) {
# I like to map out my variables
$vmname
=
$item
.vmname
$ipaddr
=
$item
.ipaddress
$subnet
=
$item
.subnet
$gateway
=
$item
.gateway
$pdnswins
=
$item
.pdnswins
$sdnswins
=
$item
.sdnswins
#Get the current interface info
$GuestInterface
= Get
-VMGuestNetworkInterface
-VM
$vmname
-HostCredential
$HostCred
-GuestCredential
$GuestCred
#If the IP in the VM matches, then I don't need to update
If (
$ipaddr
-ne
$(
$GuestInterface
.ip)) {
Set
-VMGuestNetworkInterface
-VMGuestNetworkInterface
$GuestInterface
-HostCredential
$HostCred
-GuestCredential
$GuestCred
-IP
$ipaddr
-Netmask
$subnet
-Gateway
$gateway
-DNS
$pdnswins
,
$sdnswins
-WINS
$pdnswins
,
$sdnswins
}
}
-
Clone a virtual machine to a Cluster data store
Hello
Really simple (hopefully), but I'm trying to write a workflow that includes the provision of a virtual computer to a cluster of data store. I'm a link to the workflow 'Clone the virtual machine, no customizations' that only accepts a store of input data.
I hope that I am a bit stupid here and there is a simple answer?
Thank you.
There is no simple answer. DRS clusters are actually a set of rules and not a real thing, you can deploy a VMDK. I suggest to use Onyx to deploy a virtual computer to a DRS cluster and see what it generates. If I remember correctly, it executes DRS rules to get a recommendation for where to put a VMDK fundamentally and then uses the exit in order to actually deploy the model.
I opted to write just a simple workflow that finds the data store with the most of freespace that corresponds to a string - for example, if I have a DRS cluster named DSCluster_ugabuga, I have a lot of data stores named something like "ugabuga... ». So you ask these storages of data and find the one which most freespace.
-
VCo workflow to clone a virtual machine of centos. Network interface problem
Hello
I use vco workflows to clone a virtual machine of vcenter. The virtual machine is running centos 6.0. When cloning is complete. I see the network eth0 and eth1 interfaces set correctly the static gateway ip and address information I provided. I deleted the 70 - persistent - net .rules on the basic vm form which I clone. So, I get the correct interface names. But when vm powers on and I run "ifconfig eth0" I don't see the IP address of this interface has all the details. same for the other interface also.
But if I do a system restart network without changes to networking and then do an ifconfig I see the IP with the previous information. I don't know why the service network restart is necessary so that he can recognize the ip address.
Any ideas what I could do wrong. or to avoid this manual step of the execution of the service network restart command on the creation of the vm.
Thank you
Kiran
Yes I'm restarting after after the application of customization.
Has been able to solve the problem... In CentOS, the network service does not work by default. This is why it does not have network interfaces at startup. So now the machine instant, I started the network services and stop the Network Manager service
using chkconfig network on
chkconfig NetworkManager off
and then cloned from this virtual machine... and apply the customization settings. during the start now it shows the interfaces properly without needing a service restart
-
Error trying to clone a virtual machine
Hello
I'm trying to use the vsphere api 5.0 to clone a virtual machine that was created in the web client.
Here is my XML SOAP message:
<? XML version = "1.0" encoding = "UTF-8"? >
" < SOAP-SOAP ENV:Envelope - ENV:encodingStyle = ' http://schemas.xmlsoap.org/SOAP/encoding/ "xmlns:SOAP - ENV =" " http://schemas.xmlsoap.org/SOAP/envelope/ "container =" " http://www.w3.org/2001/XMLSchema "" xmlns: xsi = " " http://www.w3.org/2001/XMLSchema-instance "xmlns:SOAP - ENC =" " http://schemas.xmlsoap.org/SOAP/encoding/ ">
< SOAP - ENV:Body >
< CloneVM_Task xmlns = "urn: vim25" >
< _this type = 'VirtualMachine' > vm-xxxxx < / _this >
< folder > datacenter-xxxxx < / case >
< name > clone-test-1 < / name >
< spec >
< location >
store of data <>data store - xxxxx < / datastore >
resgroup-xxxxx < pool > < / pool >
< / location >
false < template > < / template >
false < powerOn > < / powerOn >
< / spec >
< / CloneVM_Task >
< / SOAP - ENV:Body >
< / SOAP - ENV:Envelope >
but I get the error "the application refers to an unexpected or unknown type".
Here is the entire response in a table:
{Array (15)}
'key' = >
String(11) "task-xxxxxxx".
"task" = >
String(11) "task-xxxxxxx".
'name' = >
(12) a string "CloneVM_Task".
'descriptionId' = >
(20) a string "VirtualMachine.clone".
'entity' = >
String (8) "vm-xxxxx".
"entityName" = >
(8) a string 'xxxxxx '.
'State' = >
String(5) "error".
'cancelled' = >
String(5) "false."
'Cancel' = >
(4) a string 'true '.
'error' = >
{Array (2)}
'fault' = >
{Array (1)}
"argument" = >
(22) a string "ManagedObjectReference".
}
'localizedMessage' = >
String (52) "request refers to an unexpected or unknown type."
}
'reason' = >
{Array (1)}
'userName' = >
String (10) "myusername".
}
'queueTime' = >
(26) string "xxxx".
"startTime" = >
(27) string "xxxx".
'completeTime' = >
(26) string "xxxx".
'eventChainId' = >
String (7) 'xxxxxxx '.
}
Thanks in advance for any help, it will be greatly appreciated!
Yes, login and vcenter.
Thanks for trying to help, but I managed to solve it. It turns out that it was
1. I was providing the setting wrong folder (should have been the result of FindByInventoryPath('your_data_center_name/vm') instead of FindByInventoryPath ('your_data_center_name')
2. I didn't need to provide anything inside the 'location' parameter, it comes to be present
Thank you again and hope that the above comments help someone else trying to do the same thing
-
Script to create multiple virtual machines model works is not for the network adapter variable
We are working on a script to create multiple virtual machines from a template. The script works fine, but when we try to include commands to set the NIC to a group of specific ports on a dvswitch script errors on. Here's what we have so far. This script (less network variables) works, but we would like to include the network configs in the script as well.
-------------------
This is the part of the script that configures the network/dvswitch adapter... but does not work properly.
$myResourcePool = get-ResourcePool-name DQOL
$dsName = get-Datastore-name "DQOL-DS01.
$myTemplate = get-Template-name "DQVTemplate".
$distributedSwitchPortGroup = get-VirtualSwitch-distributed - name "CVE-dvS04-Nexus - k 5 | Get-VirtualPortGroup-name '979-DQ-SHARED '.
New-VM-name MyVM1-model $myTemplate - Networkname ResourcePool - $myResourcePool - OSCustomizationSpec $mySpecification $distributedSwitchPortGroup - Datastore
(Get-$dsName data store)
New-VM-name MyVM2-model $myTemplate - ResourcePool $myResourcePool - OSCustomizationSpec $mySpecification - Datastore (Get-$dsName data store)
_____________________
!!!!!!! This part works, but without specifying a network/dvswitch... card!
$myResourcePool = get-ResourcePool-name DQOL
$dsName = get-Datastore-name "CVE-SAN-ISG-DS02-02ef.
$myTemplate = get-Template-name "DQVTemplate".
New-VM-name MyVM3-model $myTemplate - ResourcePool $myResourcePool - OSCustomizationSpec $mySpecification - Datastore (Get-$dsName data store)
New-VM-name MyVM4-model $myTemplate - ResourcePool $myResourcePool - OSCustomizationSpec $mySpecification - Datastore (Get-$dsName data store)
Here is the error we get:
New-VM: all parameters can be resolved by using the specified named parameters.
C:\Users\capuanoj\Desktop\Create-multiplevms-fromtemplate.ps1:6 char: 7
+ New-VM < < < <-name MyVM1-model $myTemplate - Networkname $distributedSwitchPortGroup - ResourcePool
ePool - OSCustomizationSpec $mySpecification - Datastore (Get-$dsName data store)
+ CategoryInfo: InvalidArgument: (:)) [new-VM], ParameterBindingException)
+ FullyQualifiedErrorId: AmbiguousParameterSet, VMware.VimAutomation.ViCore.Cmdlets.Commands.NewVM
You cannot use the - model and Networkname - parameters of the cmdlet New - VM in a single order, because both are in different parameter sets. You must first create the virtual machine and then use the cmdlet Set-NetworkAdapter to change the portgroup of the virtual machine. As in example 4, assistance from cmdlet Set-NIC:
-------------- Example 4 --------------
C:\PS>$myNetworkAdapters = Get - VM | Get-NetworkAdapter-name "NIC 1.
$myVDPortGroup = get-VDPortgroup-name MyVDPortGroup
Together-NetworkAdapter NetworkAdapter - $myNetworkAdapters - $myVDPortGroup PortgroupRetrieves all network named "NIC 1" cards of all virtual machines and connects to the specified distributed port group.
-
How to clone a virtual machine using ESXi 4.1 and vSphere?
Instructions for I have seen that you can click with the right button on a virtual machine and choose "Clone", but I think it's only for vCenter
Is there a way to clone a virtual machine in vSphere?
Thank you
If you have a licensed copy of ESXi (not vSphere Hypervisor, the free version), you can try the document below. However, if you do not have a licensed copy you vCenter for cloning function
-
How to clone a virtual machine with the drive?
Hello
Previously, I used VMware Workstation and has a mastery of "clone". Now I use the reader and I would like to clone my current VM and there is no special orders. Simply copy the directory would probably not there a lot of information such as DNS name, etc. that are likely to be changed. Is it possible to clone a virtual machine with player or do I Workstation?
Many thanks in advance,
Nicolas
In my computer a full clone is nothing more then is not a copy that was made unique in the process and the players of VMware capacity but there is nothing stopping you from manually making a copy and then manually by making the changes to make it unique.
-
I did not know that on ESX 3.5, in order to afin de vivre live clone a virtual machine from one ESX host to another, source and destination stores had to be available. However, I'm currently cloning a virtual machine to a host in a datacenter and cluster to one host in a different data center, but the destination store is not available at the source host and visa versa.
How is that possible? This is a new feature of vSphere?
That seems to work on the console port. See this thread: http://communities.vmware.com/message/1475721#1475721
AWo
VCP 3 & 4
Author @ vmwire.net
\[:o]===\[o:]
= You want to have this ad as a ringtone on your mobile phone? =
= Send 'Assignment' to 911 for only $999999,99! =
-
Hi all,.
I would kindly ask your help with a script that needs to run as a scheduled task. It is functional, but does not correct and little need for love at the end...
I want to create a script that
- find a virtual machine with a pattern on its behalf (realized and works)
- delete a virtual machine with a reason given in his name (completed works)
- create a clone of a virtual machine (completed works)
- move that created clone (upstairs) and move it to a folder named (open)
or the fact in the clone process
I realized thus far:
Add-pssnapin VMware.VimAutomation.Core
# Import CSV backup
$backupinfo = import-Csv C:\scripts\vm_backup\test.csv
VCenter servername #Set
$vcenter_server = "name servers".
#Connect to vCenter
SE connect-VIServer $vcenter_Server# BEGIN OLD BACKUP CLEANUP
#Select all old backups
$old_backups = get - VM *-backups
{if ($old_backups)}
{foreach ($backup_vm to $old_backups)
Get - VM $backup_vm | Remove-VM - DeleteFromDisk-confirm: $false
}
}# START QUEUING NEW CLONES
#Increment through CSV
{foreach ($customer to $backupinfo)
$target_host is get-VMHost-name $customer. TargetHost
If {($target_host)
Date format #Set for clone names
$date = get-Date-Format 'YYYY-MM-dd ".
Date format #Set for emails
$time = (get-Date - f "Hh: mm")
#Get SourceVM
$vm is get - VM $customer. SourceVM
# Create new snapshot clone
$cloneSnap = $vm | New-Snapshot - name "instant Clone.
# Get the managed object display
$vmView = $vm | Get-View
# Get the managed folder object reference
$cloneFolder = $vmView.parent
# Construction specification clone
$cloneSpec = new-object Vmware.Vim.VirtualMachineCloneSpec
# Make linked disc specification?
$cloneSpec.Snapshot = $vmView.Snapshot.CurrentSnapshot
#Set VirtualMachineRelocateSpec
$cloneSpec.Location = new-object Vmware.Vim.VirtualMachineRelocateSpec
#Thin commissioning
$cloneSpec.Location.Transform = [Vmware.Vim.VirtualMachineRelocateTransformation]: sparse
#Target data store
$cloneSpec.Location.Datastore = (get-Datastore-name $customer. TargetDS | Get - View). MoRef
#Target host
$cloneSpec.Location.Host = (get-VMHost-name $customer. TargetHost | Get - View). MoRef
#Target list of resources, from the first VM in the TargetHost
$cloneSpec.Location.Pool = (get-VMHost-name $customer. TargetHost | Get - VM | Select-Object - 1 first | Get - View). ResourcePool
Name of clone #Set
$cloneName = ' date of $vm-$- $temps - backup ".
# Create clone
$clone_task = $vmView.CloneVM_Task ($cloneFolder, $cloneName, $cloneSpec)
# Remove snapshot created for clone, will automatically queues
Get-Snapshot - VM (VM-Get-name $customer. SourceVM) - name $cloneSnap | Remove-Snapshot - confirm: $False
}
}# Move folder in VM Clone
Move-VM - VM * - backups - Destination CloneVCentre #Disconnect
Disconnect-VIServer-confirm: $falseThe script itself runs so far and does what it should, but the scheduled task is always "in process of execution". Now, I created a work around in this way, I have finished the task after two hours of running; but there must be a better solution that works properly.
As well as the part with the rise of the virtual machine.Could you maybe help me or have a good idea how to solve this problem?
Thanks in advance
Try again with
PowerShell-no interactive - noprofile - executionpolicy override - file C:\scripts\scriptname.ps1
-
Vcac 6
Hello, I am running a script ExternalWFStubs.MachineProvisioned powercli. I was using Call of Scripts Powershell/PowerCLI since a Workflow vCAC as reference.
The script works well after the virtual machine is configured, and it does what it is supposed to do, but the deployed virtual machine is removed when it is finished and the following error is thrown.
Workflow: WFStubMachineProvisioned
Details of the results: failed with the following exception: cannot call this function because the current host only implements it.
Has anyone another vu cela and know what is happening? I will continue to check and post back with what I find.
Thank you
You are able to share the PowerCLI?
Grant
-
Perl script for deploying a virtual machine template
Am looking for a perl script for the deployment of the existing models on Vsphere virtual computer. So far, I got access to the virtual machine. I saw that there is a utility called new-vm on the powershell. I'm running a linux machine and therefore seeking an alternative to perl. Kindly give me pointers or help me with some documents.
Thank you!
Well, I managed to create a virtual machine from the template using the vmclone.pl script, which is part of the vmware sdk. But post creation that he's not leaving means VM State is off. I'll have to find a way to start the virtual machine as well.
-
Using CLI, I would clone a virtual machine between different data centers
Hello!!
We have two data centers.
We want to clone a virtual of DataCenter1 to DataCenter2 machine.
We cannot with vSphere.
Does anyone know how we can do this? any idea?
Thank you very much
Jose.
Cloning is a feature of vCenter Server, not a host ESX (i). You need to connect to vCenter, that's why you get the error because this operation is not supported in a host ESX (i)
=========================================================================
William Lam
VMware vExpert 2009,2010
VMware VCP3, 4
VMware VCAP4-DCA
VMware scripts and resources at: http://www.virtuallyghetto.com/
Introduction to the vMA (tips/tricks)
Getting started with vSphere SDK for Perl
VMware Code Central - Scripts/code samples for developers and administrators
If you find this information useful, please give points to "correct" or "useful".
Maybe you are looking for
-
How to disassemble the Qosmio E10 to replace the cooling fan - need manual
Does anyone have instructions on how to disassemble the E10 to replace the cooling fan. a G25 irisvista.com all the other models, but the design is not the same. Now stuck at removal of keyboard connector.No idea what fan model numbers so I can order
-
maintenance cleaning clean the disc
HelloBefore yesterday, the system decided I had too many apps and it was slowing down my computer only. It was proposed to me off some. Unfortunately, I have to make a huge mistake car from certain keys on my laptop are out of service. I would like t
-
When I tried to remove this file from my computer, I get an "access denied" message, make sure that the disk is not full or write protected and the file is not currently in use. Also, I tried the shift + del combination and that has not worked as we
-
Another problem of mine. > I use Windows Vista. > I can't uninstall the game in Control Panel. > When I click on uninstall, it says: *****************************************************"An error has occurred trying to uninstall (games).It may have a
-
WRT1900AC - devices shown on the network map is not all visible in Windows 7 Explorer
I just bought the router 1900AC as substitute of plugin for my previous WRT54GL router using DD - WRT. Each of the Linksys routers is configured for an IP 192.168.2.1 and each is configured to assign the device of intellectual property within this su