设计自己的shell,使其可以远程管理vsphere上的客户虚拟机

听到云服务可能大家都不陌生,在我们的课时里也有VTZ,课程通过借助vsphere和vsphere client完成对应操作。再完成pool、cluster、network、iscsi等一系列基础操作后,我们的vCenter就可以作为主机为客户提供虚拟机了,但是这时客户没有任何方法可以接触vCenter创建自己的虚拟机,那么这时候我们借助ps1+powerCLI实现这一功能。

1.界面

我们需要做一个简洁明了的powershell页面,通过输入对应的数字完成对应操作:

1——查看虚拟机->通过输入虚拟机名字查看你要查询的虚拟机

2——删除虚拟机->通过输入虚拟机名字删除你要删除的名字

3——重启虚拟机->通过输入虚拟机的名字重启你想重启的虚拟机

4——创建虚拟机->经过一系列寻问  如内存大小、磁盘大小、处理器核数等来完成整个创建过程

5——退出脚本

2.实现

本次脚本设计使用Windows系统,因为服务器使用的是windows server ,使用Linux 编写的脚本可能会不兼容。

(1)基础

PowerCLI   这里不使用powershell是因为没有虚拟机相关的命令行,我们写好的脚本将在这里运行

.ps1文件  这是我们编写代码的地方

(2)代码编写

#!/bin/sh
$check
$firstVM=0
$UserName
do{
$workornot=1
@’
————————————————————————————————–
Welcome
————————————————————————————————–
1> See VM status

2> Delete VM

3>Restart VM

4>Add a new VM

5>Exit

‘@

$chose

do{write-host “Please enter your selection(1-5):”;$chose=Read-Host}
while( $chose -lt 1 -or $chose -gt 5);

if($chose -eq 1)
{

echo “Enter the name of the VM you want to check”

$VMName=Read-Host
try
{

#Get-VM $VMName
Get-VM | Select Name, @{N=”IP Address”; E={@($_.guest.IPAddress[0])}}, PowerState | Where-Object {$_.Name -eq $VMName}
$workornot=0
}
catch
{
echo “No such a VM ”
$workornot=1
Write-Warning “Error: $_”

}

}
elseif($chose -eq 2)
{
echo “Enter the name of the VM you want to delete”

$VMDName=Read-Host
echo “Are you sure to delete?[y]Yes [n]No”
$delete
do
{
$delete=Read-Host
}while($delete -ne ‘y’ -and $delete -ne ‘n’)
if( $delete -eq ‘y’)
{
try
{
stop-vm $VMDName
Remove-VM $VMDName -DeletePermanently
$workornot=0
}
catch
{
echo “No such a VM ”
Write-Warning “Error: $_”
$workornot=0
}
}
}
elseif($chose -eq 3)
{
echo “Enter the name of the VM you want to restart”

$VMRName=Read-Host
echo “Are you sure to restart?[y]Yes [n]No”
$restart
do
{
$restart=Read-Host
}while($restart -ne ‘y’ -and $delete -ne ‘n’)
if( $restart -eq ‘y’)
{
try
{

Restart-VM $VMRName
#start-vm $VMRName

$workornot=0
}
catch
{
echo “No such a VM ”
Write-Warning “Error: $_”
$workornot=0
}
}
}
elseif($chose -eq 4)
{
if(!(Test-Path Discovered_virtual_machine\username))
{
New-Folder -Name $UserName -Location (Get-Folder Discovered_virtual_machine)

}
write-host “Set by Template:[y]Yes [No]No”
$t=Read-Host

write-host “The name of your new VM:”
$NewVMName=Read-Host;

if($t -eq ‘y’)
{
New-VM -Name $NewVMName -Location $UserName -VMHost esxi-1.cloudis0134.lan -Datastore iscsi-Datastore -Template windows_template;
}

else
{
write-host “How many GB of memory do you want:”
$memory=Read-Host;
write-host “How many cpu do you want:”
$cpu=Read-Host;
write-host “How many GB of disk do you want:”
$disk=Read-Host;
if((Get-Inventory -Location(Get-Folder $UserName)).count -eq 0)
{
New-VM -Name $NewVMName -Location $UserName -VMHost esxi-1.cloudis0134.lan -Datastore iscsi-Datastore -NumCPU $cpu -MemoryGB $memory -DiskGB $disk -Floppy -CD -DiskStorageFormat Thin -GuestID winNetDatacenterGuest;

$firstVM+=1
}
else
{
write-host “Enter your IP:”
$IP=Read-Host
New-VM -Name $NewVMName -Location $UserName -VMHost esxi-1.cloudis0134.lan -Datastore iscsi-Datastore -NumCPU $cpu -MemoryGB $memory -DiskGB $disk -Floppy -CD -DiskStorageFormat Thin -GuestID winNetDatacenterGuest

}
}
start-vm $NewVMName
$workornot=0
}
elseif($chose -eq 5)
{
Disconnect-VIServer -server 10.8.41.225
exit
}
}while($workornot -eq 0)

(3)测试

在PowerCLI中路径转换到你的.ps1文件所在地,输入.\XXX.ps1    就可以进行代码运行并测试

感谢本次收看,对于自己脚本设计和服务器的搭建还有不懂的,可以联系我。