当前位置 : 主页 > 操作系统 > centos >

通过Powershell批量给VMware虚拟机挂载磁盘并初始化

来源:互联网 收集:自由互联 发布时间:2023-09-06
需要实现通过Powershell脚本给VMware虚拟机批量挂载磁盘并且初始化需要满足如下要求。 1 Windows系统上需要导入VMware Powershell模块。建议导入用户个人Powershell模块目录下。 #Powershell模块版

需要实现通过Powershell脚本给VMware虚拟机批量挂载磁盘并且初始化需要满足如下要求。

1 Windows系统上需要导入VMware Powershell模块。建议导入用户个人Powershell模块目录下。

#Powershell模块版本名称为:VMware-PowerCLI-13.0.0-20829139.zip 需要解压后把解压内容放置到如下创建Modules目录下。
PS C:\Users\dengpeng> $env:PSModulePath #查看路径
C:\Users\dengpeng\Documents\WindowsPowerShell\Modules;C:\Program Files\WindowsPowerShell\Modules;C:\Windows\system32\WindowsPowerShell\v1.0\Modules
#根据如上输出结果,\WindowsPowerShell\Modules需要在Documents目录下创建。
#输入命令 Set-PowerCLIConfiguration -Scope User -ParticipateInCEIP $True
#输入命令导入模块 Import-Module VMware.PowerCLI 即可导入成功

​2 虚拟机都需要安装VMTloos工具才行。

具体Powershell脚本内容如下。

param(
[Parameter(Mandatory=$true, HelpMessage="The Name prefix of Citrix virtual machine", Position=0)]
[string]
$vmprefix,
[Parameter(Mandatory=$true, HelpMessage="The number of the fisrt virtual machine", Position=1)]
[int]
$startnum,
[Parameter(Mandatory=$true, HelpMessage="The number of the last virtual machine", Position=2)]
[int]
$endnum,
[Parameter(Mandatory=$true, HelpMessage="The number of the last virtual machine", Position=2)]
[int]
$diskszie
)
#the script to initilize D drive in virtual machine
#Get-Partition -DriveLetter 'E' | Set-Partition -NewDriveLetter 'P' |Out-Null
$script = @"
Get-Disk | Where PartitionStyle -eq "raw" | Initialize-Disk -PartitionStyle GPT -PassThru | New-Partition -UseMaximumSize -AssignDriveLetter | Format-Volume -FileSystem NTFS -NewFileSystemLabel "个人数据盘"
"@
######################################################################################
#VC
$VC_IP="176.10.10.10" #vCenter登录IP
$VC_USER="administrator@vsphere.local" #vCenter登录用户名
$VC_PWD="password" #vCenter登录密码
#$DataStore="Local-01" #指定存储添加磁盘,若跟虚拟机存储位置保值一致,注释掉即可。
#window
$GuestUser="administrator" #添加磁盘虚拟机本地管理员账号
$GuestPassword="password" #密码
#$diskszie=""
#disk
$diskcounts="2" #1代表未添加磁盘前,系统磁盘数量。MCS批量发布后,默认两块

######################################################################################
#the file to save virtual machine uuid to activate Chrome
$datevalue = get-date -Format "yyyyMMddHHmm"
#$filename = "C:\Users\citrixadmin\Desktop\VM-disk\" + $datevalue + "chrome.csv"
echo "Serial Number (mandatory),Asset Tag" > $filename
if ( $startnum -le $endnum ) {
#Connect-VIServer hk-hco-vcsa-01
$VC = connect-viserver -server $VC_IP -user $VC_USER -password $VC_PWD
for($i = $startnum; $i -le $endnum; $i++) {
$vmname = $vmprefix + '{0:d3}' -f $i #表示虚拟机名称最后几位数例如CVAD-VDI-### 代表3
$nu = '{0:d3}' -f $i #表示虚拟机名称最后几位数例如CVAD-VDI-### 代表3
$Exists = get-vm -name $vmname -ErrorAction SilentlyContinue
If ($Exists) {
$vmuuid = (get-vm -Name $vmname | Get-VIew).config.uuid
$vmuuid = $vmuuid.replace('-', '')
$uuidlen = ${vmuuid}.length
$result = "VMware-"
for ($a = 0; $a -le $uuidlen; $a = $a + 2) {
if ($a -eq 14) {
$middle = '-'
}
elseif ($a -eq 30) {
$middle = ',' + $vmname
}
else {
$middle = ' '
}
$result = $result + $vmuuid[$a] + $vmuuid[$a + 1] + $middle
}
echo ${result} >> $filename

$diskcount = (Get-HardDisk -vm $vmname).count
if ($diskcount -eq $diskcounts) {
#$dsname = (Get-HardDisk -vm $vmname | Get-Datastore).Name
#New-HardDisk -VM $vmname -CapacityGB $diskszie -StorageFormat Thin -DataStore $DataStore |Out-Null #数据盘和系统不同存储
New-HardDisk -VM $vmname -CapacityGB 20 -StorageFormat Thin | Out-Null #数据盘和系统同一存储
$OSversion = (get-vm -Name $vmname | Get-view).config.GuestFullName
if ( $OSversion -like "*Windows*") {
$vm = Get-VM -Name $vmname
if ($vm.PowerState -eq "PoweredOff") {
Start-VM -VM $vm -Confirm:$false
Start-Sleep -s 60
}
#Invoke-VMScript -ScriptText $script -VM $vmname -GuestUser $GuestUser -GuestPassword $GuestPassword -ScriptType PowerShell |Out-Null
Invoke-VMScript -ScriptText $script -VM $vmname -Server $VC_IP -ScriptType PowerShell
Start-Sleep -s 2
Write-Host [1] VM: -ForegroundColor Green
Write-Host ${vmname} -ForegroundColor Green
}
}
else {
Write-Host [2] VM: -ForegroundColor Green
#echo "Please check if the virtual machine ${vmname} is with 200 GB drive, or you can add the disk manually."
Write-Host ${vmname}
}
}
else {

#echo "${vmname} does not exist"
#Write-Host [3] VM 列表: -ForegroundColor Green
Write-Host $nu ${vmname} -ForegroundColor Red
}

}

}
else {
echo "The start number should be less than end number!"
}

运行显示效果如下,表示虚拟机前缀为CVAD-VDI-  最后表示三位### 在脚本里面已经设置。设置开始位数和结束位数即可执行。重复添加也无影响,脚本已经做了相应判断,已添加磁盘会自动略过。200为磁盘容量,默认GB为单位。

通过Powershell批量给VMware虚拟机挂载磁盘并初始化_VMware

上一篇:由浅入深,详解 LiveData 的那些事
下一篇:没有了
网友评论