鏈接至vCenter Server或ESXishell
Connect-VIServer -Server serverip -username root -Password password #這個在經過程序菜單啓動PowerCLI的時候就會提示的
----------------------------api
使PowerShell啓動時自動加載PowerCLI插件,將如下代碼保存爲
服務器
%UserProfile%\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1 網絡
if ((Get-PSSnapin -Name VMware.VimAutomation.Core -ErrorAction SilentlyContinue) -eq $null) { try { Write-Host "Loading PowerCLI plugin, this may take a little while" -foregroundcolor "cyan" Add-PSSnapin VMware.VimAutomation.Core $PCLIVer = Get-PowerCLIVersion if ((($PCLIVer.Major * 10 ) + $PCLIVer.Minor) -ge 51) { $null = Set-PowerCLIConfiguration -InvalidCertificateAction Ignore -confirm:$false -Scope "Session" } } catch { Write-Host "Unable to load the PowerCLI plugin. Please verify installation or install VMware PowerCLI and run this script again." Read-Host "Press <Enter> to exit" exit } }
----------------------------ide
查找vSphere環境中存在快照的虛擬機(Get-VM後面加上指定虛機名稱便可查詢指定虛機的快照)性能
Get-VM | Get-Snapshot #顯示快照列表 Get-VM | Get-Snapshot | format-list #詳細顯示快照信息 Get-VM | Get-Snapshot | format-table Created,VM,SizeMB #指定輸出列 Get-VM | Get-Snapshot | format-table Created,VM,@{label="SizeGB";Expression={"{0:N2}" -f ($_.SizeMB/1024)}} #將輸出單位改成GB,並指定小數位數爲2位。5.1版本之後能夠用SizeGB代替SizeMB/1024
----------------------------this
將指定VM的E1000網卡替換爲VMXNET3(KB2059053的臨時方案)插件
Get-VM vmname | Get-NetworkAdapter | Where {$_.Type -eq "E1000"} | Set-NetworkAdapter -Type vmxnet3
--------------------日誌
獲取存儲對象,並排除掉本地存儲(如需篩選輸出列,使用Select-Object)orm
Get-Datastore| Where-Object {$_.Name -notmatch "local|datastore"}
--------------------
PowerCLI 腳本建立10個虛擬機 #************************************ #須要定義esxi主機IP host1 #須要定義esxi主機IP host1 #須要預先配置好模板 名稱 Win2K3 #須要定義存儲 vStorage1 #最後就是自定義規範定義好 $customization #************************************ Connect-VIServer -Server 192.168.1.11 -User testuser -Password pwd Get-VMHost $host1 = "192.168.1.2" $template = "Win2K3" $datastore = "vStorage1" $customization = "Win2K3" for($i = 1; $i -le 10; $i++) { $tempvm = "vServer-"+$i $array += $tempvm } foreach ($vm in $array) { $vm=New-VM -Name $vm -Template $template -Host $host1 -Datastore $datastore -OSCustomizationSpec $customization -Confirm:$false }
--------------------
# 用來獲取vSphere環境中ESXi主機一週內的CPU、內存、磁盤、網絡最大使用狀況 # 保存爲 Weekly_Report.ps1 以 Weekly_Report.ps1 vcenterserver 的格式執行 # 鏈接vCenter方法1,經過參數指定vCenter的方式 param( [string] $VIServer ) Write-Host "Connecting to VI Server" Connect-VIServer $VIServer if ($VIServer -eq ""){ Write-Host Write-Host "Please specify a vCenter Server eg...." Write-Host "powershell.exe Weekly_Report.ps1 10.113.7.211" Write-Host Write-Host exit } # 鏈接vCenter方法2,根據提示輸入vCenter鏈接信息的方式 #$VCServer = Read-Host "Enter the vCenter server name" #$Username = Read-Host "Enter the username" #$Password = Read-Host "Enter password" #Connect-VIServer $VCServer -User $username -Password $password -port 443 #if ($VIServer -eq ""){ # Write-Host # Write-Host "Please input a valid credential" # Write-Host # exit #} #指定以csv格式,以當前日期命名報告文件 $Reportfile = "C:\" + (Get-Date -uformat "%Y-%m-%d") + ".csv" $Report = @() #獲取主機列表 $VMHs = Get-VMHost | Sort-Object Name ForEach ($vmh in $vmhs) { $myObj = "" | Select-Object HostName, CpuMaxUsage, MemMaxUsage, DiskMaxLatency_ms, DiskMaxUsage_KBps, NetMaxUsage_KBps $myObj.HostName = (Get-VMHost -name $vmh).Name $myObj.CpuMaxUsage = "{0:N2}%" -f (Get-VMHost -name $VMH | Get-Stat -Start ((Get-Date).adddays(-7)) -Finish (Get-Date) -Stat Cpu.Usage.Average | Measure-Object -Maximum -Property Value).Maximum $myObj.MemMaxUsage = "{0:N2}%" -f (Get-VMHost -name $VMH | Get-Stat -Start ((Get-Date).adddays(-7)) -Finish (Get-Date) -Stat Mem.Usage.Average | Measure-Object -Maximum -Property Value).Maximum $myObj.DiskMaxLatency_ms = (Get-VMHost -name $VMH | Get-Stat -Start ((Get-Date).adddays(-7)) -Finish (Get-Date) -Stat Disk.maxtotallatency.latest | Measure-Object -Maximum -Property Value).Maximum $myObj.DiskMaxUsage_KBps = (Get-VMHost -name $VMH | Get-Stat -Start ((Get-Date).adddays(-7)) -Finish (Get-Date) -Stat Disk.Usage.Average | Measure-Object -Maximum -Property Value).Maximum $myObj.NetMaxUsage_KBps = (Get-VMHost -name $VMH | Get-Stat -Start ((Get-Date).adddays(-7)) -Finish (Get-Date) -Stat Net.Usage.Average | Measure-Object -Maximum -Property Value).Maximum $Report += $myObj Write-Host "$vmh Done!" } #輸出主機一週性能信息到報告文件 $Report | Export-Csv -NoTypeInformation -UseCulture -path $Reportfile "" >> $Reportfile #獲取羣集的一週性能信息 $Report = @() $myObj = "" | Select-Object HostName, CpuMaxUsage, MemMaxUsage $myObj.HostName = (Get-VM VC01*).Name $myObj.CpuMaxUsage = "{0:N2}%" -f (Get-VM VC01* | Get-Stat -Start ((Get-Date).adddays(-7)) -Finish (Get-Date) -Stat Cpu.Usage.Average | Measure-Object -Maximum -Property Value).Maximum $myObj.MemMaxUsage = "{0:N2}%" -f (Get-VM VC01* | Get-Stat -Start ((Get-Date).adddays(-7)) -Finish (Get-Date) -Stat Mem.Usage.Average | Measure-Object -Maximum -Property Value).Maximum $Report += $myObj Write-Host "VC01 Done!" $myObj = "" | Select-Object HostName, CpuMaxUsage, MemMaxUsage $myObj.HostName = (Get-Cluster OP0*).Name $myObj.CpuMaxUsage = "{0:N2}%" -f (Get-Cluster OP0* | Get-Stat -Start ((Get-Date).adddays(-7)) -Finish (Get-Date) -Stat Cpu.Usage.Average | Measure-Object -Maximum -Property Value).Maximum $myObj.MemMaxUsage = "{0:N2}%" -f (Get-Cluster OP0* | Get-Stat -Start ((Get-Date).adddays(-7)) -Finish (Get-Date) -Stat Mem.Usage.Average | Measure-Object -Maximum -Property Value).Maximum $Report += $myObj Write-Host "OP0 Done!" $myObj = "" | Select-Object HostName, CpuMaxUsage, MemMaxUsage $myObj.HostName = (Get-Cluster OP1*).Name $myObj.CpuMaxUsage = "{0:N2}%" -f (Get-Cluster OP1* | Get-Stat -Start ((Get-Date).adddays(-7)) -Finish (Get-Date) -Stat Cpu.Usage.Average | Measure-Object -Maximum -Property Value).Maximum $myObj.MemMaxUsage = "{0:N2}%" -f (Get-Cluster OP1* | Get-Stat -Start ((Get-Date).adddays(-7)) -Finish (Get-Date) -Stat Mem.Usage.Average | Measure-Object -Maximum -Property Value).Maximum $Report += $myObj Write-Host "OP1 Done!" #輸出到報告文件 $Report | ConvertTo-Csv -NoTypeInformation >> $Reportfile "" >> $Reportfile #獲取存儲的使用狀況,忽略以local和datastore命名的存儲(本地存儲的命名,根據狀況修改) Get-Datastore | Where-Object {$_.Name -notmatch "local|datastore"} | Select Name,@{N="TotalSpace_TB";E={"{0:N2}" -f ($_.ExtensionData.Summary.Capacity/1024/1024/1024/1024)}},@{N="ProvisionedSpace_TB";E={"{0:N2}" -f (($_.ExtensionData.Summary.Capacity - $_.ExtensionData.Summary.FreeSpace + $_.ExtensionData.Summary.Uncommitted)/1024/1024/1024/1024)}},@{N="FreeSpace_TB";E={"{0:N2}" -f ($_.ExtensionData.Summary.FreeSpace/1024/1024/1024/1024)}} | Sort-Object Name | ConvertTo-Csv -NoTypeInformation >> $Reportfile Write-Host "Datastore Done!" # 斷開鏈接 Disconnect-VIServer -Confirm:$False
--------------------
經過smtp服務器發送郵件
#指定報告附件 $Reportfile = C:\report.csv #指定SMTP服務器地址 $smtpServer = "Mail_Server_Address" #建立郵件對象、附件 $msg = new-object Net.Mail.MailMessage $att = new-object Net.Mail.Attachment($Reportfile) $smtp = new-object Net.Mail.SmtpClient($smtpServer) #設置發件人地址、收件人地址 $msg.From = "Sender_Mail_Address" $msg.To.Add("Recipient_Mail_Address") #設置主題、正文,添加附件 $msg.Subject = "VMware Report_" + (Get-Date -uformat "%Y-%m-%d") $msg.Body = "附件爲vSphere性能檢查報告,請查收" $msg.Attachments.Add($att) #發送郵件 $smtp.Send($msg)
----------------
查詢虛擬機建立事件(前提是日誌信息在有效期內未被清理),可獲取虛擬機建立者信息,建立日期
Get-VM $vmname | Get-VIEvent -Types Info | Where { $_.Gettype().Name -eq "VmBeingDeployedEvent" -or $_.Gettype().Name -eq "VmCreatedEvent" -or $_.Gettype().Name -eq "VmRegisteredEvent" -or $_.Gettype().Name -eq "VmClonedEvent"}
---------------
檢查全部虛機的內存和CPU預留狀況
## 給定虛機的內存預留狀況
Get-Cluster 「myCluster」 | Get-VM | Get-VMResourceConfiguration | select VM,MemReservationMB
## 給定虛機的CPU預留狀況
Get-Cluster 「myCluster」 | Get-VM | Get-VMResourceConfiguration | select VM,CPUReservationMhz
設置全部虛機的內存或CPU預留
## 設置給定虛機的內存預留爲0
Get-Cluster 「myCluster」 | Get-VM | Get-VMResourceConfiguration | Set-VMResourceConfiguration -MemReservationMB 0 -Confirm:$false
##設置給定虛機的CPU預留爲0
Get-Cluster 「myCluster」 | Get-VM | Get-VMResourceConfiguration | Set-VMResourceConfiguration -CPUReservationMhz 0 -Confirm:$false
----------------------------
利用PowerCLI修改虛擬機的硬件版本
Set-VM -VM vm01 -version v9 -confirm:$false
----------------------------
利用PowerCLI將文件傳輸到VM裏去
$vm=Get-VM -Name vmname Get-Item "C:\Temp\*.*" | Copy-VMGuestFile -Destination -"C:\Temp\" -VM $vm -LocalToGuest -HostUser root -HostPassword password -GuestUser administrator -GuestPassword guestpassword
----------------------------
利用PowerCLI建立NFS數據存儲
Get-Cluster clustername | Get-VMHost| New-Datastore -Nfs -Name NFS01 -Path "/mnt/NFS01/" -NfsHost 192.168.1.101