-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathlinked-clones.ps1
More file actions
68 lines (46 loc) · 2.16 KB
/
linked-clones.ps1
File metadata and controls
68 lines (46 loc) · 2.16 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
Connect-VIServer -Server CHANGEME -user CHANGEME
$folderToRecreate= Get-Folder -Name Master
$Anchor = Get-Folder -Name Clones
$destDataStore = "10k SAS drives"
$refSnap = "Clone Snapshot"
# Name of VM to clone (will be base/parent of linked clone
$SrcVmName = get-vm -Location Master
#create snapshots for master vms
foreach($name in $SrcVmName){
# Create snapshot to create linked clones from
$SrcVmSnap = New-Snapshot -VM $name -Name $refSnap -Quiesce:$true -Confirm:$false -RunAsync
}
#create linked clones from newly created snapshot on Master vms
foreach($name in $SrcVmName){
$NewVmName = "clone_$name"
$CloneVM = New-VM -Name $NewVmName -VM $name -Location $Anchor -Datastore $destDataStore -ResourcePool Resources -LinkedClone -ReferenceSnapshot $refSnap -RunAsync
}
#copy folder structure from Master to Clones
#modified from here: https://psvmware.wordpress.com/tag/powercli-copy-folder-structure-between-virtual-center-servers/
function Copy-VCFolderStructure {
param(
[parameter(Mandatory = $true)]
[ValidateNotNullOrEmpty()]
[VMware.Vim.Folder]$OldFolder,
[parameter(Mandatory = $true)]
[ValidateNotNullOrEmpty()]
[VMware.VimAutomation.ViCore.Impl.V1.Inventory.FolderImpl]$ParentOfNewFolder
)
$NewFolder = New-Folder -Location $ParentOfNewFolder -Name $OldFolder.Name
Get-VM -NoRecursion -Location ($OldFolder|Get-VIObjectByVIView)|Select-Object Name, @{N='Folder';E={$NewFolder.id}}
foreach ($childfolder in $OldFolder.ChildEntity|Where-Object {$_.type -eq 'Folder'})
{
Copy-VCFolderStructure -OldFolder (Get-View -Id $ChildFolder) -ParentOfNewFolder $NewFolder
}
}
$vmlist = Copy-VCFolderStructure -OldFolder $folderToRecreate.extensiondata -ParentOfNewFolder $Anchor
foreach($vm in $vmlist) {
move-vm -vm ("clone_"+$vm.Name) -destination (get-view -id $vm.folder|get-viobjectbyviview)
}
<#
#remove clones and new folders
$ClonedVmName = get-vm -Location Clones
Remove-VM -DeletePermanently $ClonedVmName -Confirm:$false
Get-Snapshot $SrcVmName | Remove-Snapshot -Confirm:$false -RunAsync
Get-Folder -Location Clones -Name Master | Remove-Folder -Confirm:$false
#>