使用PowerShell将虚拟机模板(.VMTX)添加到清单
这是一个脚本,它将扫描数据存储中的VM模板(.VMTX),并将其添加到清单中。这是“ 将虚拟机(.VMX)添加到清单” 脚本的修改版本。
您必须安装VMware PowerCLI才能拥有PowerShell运行脚本所需的cmdlet。
将VMTX(虚拟机模板)从数据存储添加到清单:
|
1
2
3
4
五
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
三十
31
32
33
34
35
36
37
38
39
40
|
###################################################################### Load VMware Plugins and vCenter Connect ######################################################################Add-PSSnapin vmware.vimautomation.coreconnect-viserver -server ENTER VCENTER FQDN HERE###################################################################### Add .VMTX (VM Templates) to Inventory from Datastore ####################################################################### Variables: Update these to the match the environment$Cluster = "ENTER CLUSTER NAME HERE"$Datastore = "ENTER DATASTORE NAME HERE"$VMFolder = "ENTER FOLDER NAME HERE"$ESXHost = Get-Cluster $Cluster | Get-VMHost | select -First 1foreach($Datastore in get-datastore $Datastore){ # Collect .vmtx paths of registered VMs on the datastore $registered = @{} Get-Template -Datastore $Datastore | ForEach-Object -Process { $registered.Add($_.Name+'.vmtx',$true) } # Set up Search for .VMTX Files in Datastore(s) $null = New-PSDrive -Name TgtDS -Location $Datastore -PSProvider VimDatastore -Root '\' $unregistered = @(Get-ChildItem -Path TgtDS: -Recurse | ` Where-Object -FilterScript { $_.FolderPath -notmatch '.snapshot' -and $_.Name -like '*.vmtx' -and !$registered.ContainsKey($_.Name) } ) Remove-PSDrive -Name TgtDS #Register all .vmtx Files as VMs on the datastore foreach($vmtxFile in $unregistered) { New-Template -Name $vmtxFile.Name -TemplateFilePath $vmtxFile.DatastoreFullPath -VMHost $ESXHost -Location $VMFolder -RunAsync }} |
让我们来看看它的作用!
我想扫描“ Synology LUN”数据存储,并将其找到的任何虚拟机模板添加到名为“ Lab Cluster 01”的集群的“ _Templates” 文件夹中 。

我更喜欢从PowerShell ISE中运行脚本,因为我认为它可以提供更多控制权。我更新了变量 (以黄色突出显示)并运行了它:
在vSphere Client的“任务”窗格中,如果看到失败的任务,则脚本会找到清单中已存在的模板。现在不在我的清单中的模板位于“ _Templates”文件夹中:
从数据存储群集将VMX(虚拟机)添加到清单:
在$数据存储 变量是可以改变的扫描数据存储群集,而不是具体的:
|
1
2
3
4
五
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
三十
31
32
33
34
35
36
37
38
39
40
|
###################################################################### Load VMware Plugins and vCenter Connect ######################################################################Add-PSSnapin vmware.vimautomation.coreconnect-viserver -server ENTER VCENTER FQDN HERE################################################################ Add .VMTX (Templates) to Inventory from Storage Cluster ################################################################# Variables: Update these to the match the environment$Cluster = "ENTER CLUSTER NAME HERE"$Datastore = get-datastorecluster "ENTER DATASTORE CLUSTER NAME HERE" | get-datastore$VMFolder = "ENTER FOLDER NAME HERE"$ESXHost = Get-Cluster $Cluster | Get-VMHost | select -First 1foreach($Datastore in get-datastore $Datastore){ # Collect .vmtx paths of registered VMs on the datastore $registered = @{} Get-Template -Datastore $Datastore | ForEach-Object -Process { $registered.Add($_.Name+'.vmtx',$true) } # Set up Search for .VMTX Files in Datastore(s) $null = New-PSDrive -Name TgtDS -Location $Datastore -PSProvider VimDatastore -Root '\' $unregistered = @(Get-ChildItem -Path TgtDS: -Recurse | ` Where-Object -FilterScript { $_.FolderPath -notmatch '.snapshot' -and $_.Name -like '*.vmtx' -and !$registered.ContainsKey($_.Name) } ) Remove-PSDrive -Name TgtDS #Register all .vmtx Files as VMs on the datastore foreach($vmtxFile in $unregistered) { New-Template -Name $vmtxFile.Name -TemplateFilePath $vmtxFile.DatastoreFullPath -VMHost $ESXHost -Location $VMFolder -RunAsync }} |
我更新了突出显示的变量:
我希望如果您遇到需要扫描并将多个VM模板添加到清单的情况,这将有助于加快该过程!




浙公网安备 33010602011771号