环球微动态丨通过Powershell批量给VMware虚拟机挂载磁盘并初始化

2022-12-08 17:25:15 来源:51CTO博客


(资料图)

需要实现通过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" > $filenameif ( $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为单位。

标签: 输入命令 需要安装 显示效果

上一篇:如何通过C#/VB.NET将PDF转为Word
下一篇:焦点报道:打印一个菱形