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连接,最好安装下证书