这是一个脚本,它将扫描数据存储中的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.core
connect-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
1
foreach
(
$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.core
connect-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
1
foreach
(
$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模板添加到清单的情况,这将有助于加快该过程!