VMWare 提供了一套以VCenter为核心的虚拟化解决方案.操作VCenter的方式有很多,最常见的就是使用vSphere直接手动操作VCenter,实现创建DataCenter,Datastore,Cluster及Host/VM 等,这些操作其实都提供了相应的API供应用程序调用。API主要分为三类:检索,创建和删除,监测。
上图就是vSphere的客户端,这里我们看到的是主机和群集的模式,其实还有其他模式,如:网络模式,模版模式等等。
使用PowerShell可以很方便地管理这些对象(DataCenter,Cluster,Datastore等等),如果对PowerShell不了解,请参考
http://www.pstips.net/powershell-online-tutorials ,这里有非常详细的powershell教程
或者参照我之前的CSDN博客,里面也讲了很多关于powershell的东西。
使用PowerShell管理VMWare有两个前提条件:
1.安装VMware-PowerCLI组件,最新版本6.0,官方下载地址:https://my.vmware.com/cn/web/vmware/details/sdkwin41/ZHcqYmRwJXdidyVk
当然,您可能需要相关文档,官方下载:https://www.vmware.com/support/developer/PowerCLI/
2.安装PowerShell(一般操作系统WIN7,WIN8都自带了)
PS:建议安装一个PowerGUI,方便开发!
下面就是我整理的关于Powershell管理VMWare的一些函数
#Connect to VCenter [string]$vSphere = "C:\Program Files (x86)\VMware\Infrastructure\vSphere PowerCLI\Scripts" [string]$IP = "xxx.xxx.xx.xx" [string]$User = "administrator" [string]$Password = "xxxxxx" $Global:DefaultVCenter = $null cd $vSphere ./Initialize-PowerCLIEnvironment.ps1 function Init { $DefaultVCenter = Connect-VCenter $IP $User $Password } function Connect-VCenter { param ($IP, $User,$Password) return Connect-VIServer -Server $IP -Protocol https -User $User -Password $Password } function Set-DefaultVCenter($VCenter) { $Global:DefaultVIServer = $VCenter } function Get-VirtualResource { param($VMName) if($VMName -eq $null) { $VMs = Get-VM } else { $VMs = Get-VM -Name $VMName } foreach($item in $VMs) { Write-Host "current vm is "$item.Name } return $VMs } function Get-Datacenters { param($DatacenterName) if($DatacenterName -eq $null) { $Datacenters = Get-Datacenter } else { $Datacenters = Get-Datacenter -Name $DatacenterName } foreach($item in $Datacenters) { Write-Host "Current Datacenter is "$item.Name } return $Datacenters } function Get-Datastores { param($DatastoreName) if($DatastoreName -eq $null) { $Datastores = Get-Datastore } else { $Datastores = Get-Datastore -Name $DatastoreName } foreach($item in $Datastores) { Write-Host "current datastore is "$item.Name } return $Datastores } function Get-Clusters { param($ClusterName) if($ClusterName -eq $null) { $Clusters = Get-Cluster } else { $Clusters = Get-Cluster -Name $ClusterName } foreach($item in $Clusters) { Write-Host "current cluster is "$item.Name } return $Clusters } function Get-VMHosts { param($VMHostName) if($VMHostName -eq $null) { $Hosts = Get-VMHost } else { $Hosts = Get-VMHost -Name $VMHostName } foreach($item in $Hosts) { Write-Host "current host is "$item.Name } return $Hosts } function Get-VMGuests { param($VMGuestName) $vm = Get-VirtualResource $VMGuestName $Guest = Get-VMGuest -VM $vm Write-Host $Guest.OSFullName #Write-Host $Guest.IPAddress return $Guest } function Get-ResourcePools { param($PoolName) if($PoolName -eq $null) { $Pools = Get-ResourcePool } else { $Pools = Get-ResourcePool -Name $PoolName } foreach($item in $Pools) { Write-Host "current pool is "$item.Name } return $Pools } function Stop-VirtualMachine($vName) { $vm = Get-VirtualResource $vName #WARNING:This way need to confirm before shutdown #Stop-VM -VM -Confirm #This way will shutdown with no confirm Stop-VM -VM $vm -Kill -Confirm:$false } function Start-VirtualMachine($vName) { $vm = Get-VirtualResource $vName Start-VM -VM $vm } function Stop-VirtualMachineGuest($vName) { $vm = Get-VirtualResource $vName #WARNING:This way need to confirm before shutdown #Stop-VM -VM -Confirm #This way will shutdown with no confirm Stop-VMGuest -VM $vm -Kill -Confirm:$false } function Create-VM($target,$vName) { $myCluster = Get-Clusters $target New-VM -Name $vName -ResourcePool $myCluster } function Delete-VM($vName) { $vm = Get-VirtualResource $vName Remove-VM -VM $vm -DeletePermanently -Confirm:$false -Server $DefaultVCenter } function Reboot-VM($vName) { try{ $vm = Get-VirtualResource $vName Restart-VM -VM $vm -Confirm:$false -Server $DefaultVCenter return $true } catch{ return $false } } CLEAR Init #Get-VirtualResource #Get-Datacenters #Get-Datastores #Get-Clusters #Get-VMHosts #Start-VirtualMachine "MyVM5" #Stop-VirtualMachine "CNSHJSV777702" #Get-ResourcePools #Get-VMGuests "CNSHJSV777702" #Create-VM "PRD-380G8-N01" "MyVM5" #Delete-VM "MyVM2" #Reboot-VM "CNSHJSV777702" #Write-Host $DefaultVCenter.Name说明:$vSphere是PowerCLI的安装目录,Initialize-PowerCLIEnvironment.ps1文件是初始化加载类库的文件.
关于Datastore的测试结果如下:
current datastore is datastore2 current datastore is nfs1 current datastore is nfs2 current datastore is nfs1 current datastore is datastore1 current datastore is nfs2注意:连接VCenter使用的是ssl连接,最好安装下证书