PowerCLi命令实例总结(来源网络)
1、查找vSphere环境中存在快照的虚拟机:
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
get-vm | Get-Snapshot | Select vm,name | Format-Table -Autosize //查看所有虚拟机快照,Select vm,name:输出内容列名,Format-Table -Autosize:格式化输出,如果不用格式化输出,虚拟机名称过长会显示不全
2、更改虚拟机网卡类型:
Get-VM vmname | Get-NetworkAdapter | Where {$_.Type -eq “E1000”} | Set-NetworkAdapter -Type vmxnet3
#单独修改虚拟机test1的网卡1类型,从E1000更改为 vmxnet3;
get-vm -Name test1 | Get-NetworkAdapter -Name “Network adapter 1” | Set-NetworkAdapter -Type Vmxnet3
#批量修改虚拟机所以得网卡类型,开机的vm需要安装vmtools才可,否则需要关机执行
Get-VM test1 | Get-NetworkAdapter | Where {$_.Type -eq “E1000”} | Set-NetworkAdapter -Type Vmxnet3
3、获取存储对象,并排除掉本地存储(如需筛选输出列,使用Select-Object)
Get-Datastore| Where-Object {$_.Name -notmatch “local|datastore”}
4、PowerCLI 脚本创建10个虚拟机
#************************************
#需要定义esxi主机IP host1
#需要定义esxi主机IP host1
#需要预先配置好模板 名称 Win2K3
#需要定义存储 vStorage1
#最后就是自定义规范定义好 $customization
#************************************
Connect-VIServer -Server 192.168.10.250 -User testuser -Password pwd //连接vc
Get-VMHost //获取主机列表
$host1 = “192.168.1.2” //指定vm所在主机
$template = “Win2K3” //z指定vm克隆所需模板
$datastore = “vStorage1” //vm所使用存储对象
c u s t o m i z a t i o n = " W i n 2 K 3 " / / v m 创 建 所 要 应 用 的 自 定 义 规 范 f o r ( customization = "Win2K3" //vm创建所要应用的自定义规范 for( customization="Win2K3"//vm创建所要应用的自定义规范for(i = 1; $i -le 10; $i++) //for循环,轮训10次,即执行10次,创建10个vm的名称,组成数组
{
t e m p v m = " v S e r v e r − " + tempvm = "vServer-"+ tempvm="vServer−"+i
$array += KaTeX parse error: Expected 'EOF', got '}' at position 8: tempvm }̲ foreach (vm in $array)
{
$vm=New-VM -Name $vm -Template $template -Host $host1 -Datastore $datastore //创建vm
-OSCustomizationSpec c u s t o m i z a t i o n − C o n f i r m : customization -Confirm: customization−Confirm:false
}
5、获取vSphere环境中ESXi主机一周内的CPU、内存、磁盘、网络最大使用情况
方法1:
$Reportfile = “C:” + (Get-Date -uformat “%Y-%m-%d”) + “.csv”
$Report = @() //指定以csv格式,以当前日期命名报告文件
param( [string] $VIServer )
Write-Host “Connecting to VI Server”
Connect-VIServer V I S e r v e r i f ( VIServer if ( VIServerif(VIServer -eq “”){
Write-Host
Write-Host “Please specify a vCenter Server eg…”
Write-Host “powershell.exe Weekly_Report.ps1 10.113.7.211” //写入vc地址
Write-Host
Write-Host
exit
}
方法2:$VCServer = Read-Host “Enter the vCenter server name” //交换式连接vc
$Username = Read-Host “Enter the username”
$Password = Read-Host “Enter password”
Connect-VIServer $VCServer -User $username -Password p a s s w o r d − p o r t 443 i f ( password -port 443 if ( password−port443if(VIServer -eq “”){
Write-Host
Write-Host “Please input a valid credential”
Write-Host
exit
}
#获取主机列表
V M H s = G e t − V M H o s t ∣ S o r t − O b j e c t N a m e F o r E a c h ( VMHs = Get-VMHost | Sort-Object Name ForEach ( VMHs=Get−VMHost∣Sort−ObjectNameForEach(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 += m y O b j W r i t e − H o s t " myObj Write-Host " myObjWrite−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 {
KaTeX parse error: Expected 'EOF', got '}' at position 35: …ocal|datastore"}̲ | Select Name,….ExtensionData.Summary.Capacity/1024/1024/1024/1024)}},@{N=“ProvisionedSpace_TB”;E={"{0:N2}" -f (($.ExtensionData.Summary.Capacity - $.ExtensionData.Summary.FreeSpace + KaTeX parse error: Expected 'EOF', got '}' at position 58: …1024/1024/1024)}̲},@{N="FreeSpac….ExtensionData.Summary.FreeSpace/1024/1024/1024/1024)}} | Sort-Object Name | ConvertTo-Csv -NoTypeInformation >> $Reportfile
Write-Host “Datastore Done!”
#断开连接
Disconnect-VIServer -Confirm:$False
6、获取虚拟机创建者信息,创建日期,查询虚拟机创建事件(前提是日志信息在有效期内未被清理)
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”}
7、检查所有虚机的内存和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
8、修改虚拟机的硬件版本
Set-VM -VM vm01 -version v9 -confirm:$false
9、将文件传输到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
10、创建NFS数据存储:
Get-Cluster clustername | Get-VMHost| New-Datastore -Nfs -Name NFS01 -Path “/mnt/NFS01/” -NfsHost 192.168.10.250
11、使用指定模板批量创建虚拟机
#定义参数,对参数声明时,参数顺序可随意变动
param(
[string]$VMname,[string]$vmhostname,[string]$datastore,
[string]$template
)
#在命令窗口中添加powercli模块
try{
add-pssnapin vmware.vimautomation.core -ErrorAction SilentlyContinue
}
catch{
}
#连接Vsphere
Connect-VIServer -server Vsphere -Protocol https -User user -Password password
foreach ($i in 1..5)
{
$fullname = $VMname +"-"+ $i
new-vm -name $fullname -template $template -host $vmhostname -datastore $datastore
}
disconnect-viserver -confirm:$false
执行文件时
.\scriptfile.ps1 VMname vmhost datastore template
#不声明参数时,必须按照param指定的顺序输入参数
or
.\screptfile.ps1 -VMname vmname -template template -vmhostname vmhost -datastore datastore
12、批量修改虚拟机网卡端口组
Get-VM vmsver03 | Get-NetworkAdapter | Where-Object NetworkName -eq vcenterHA | Set-NetworkAdapter -confirm:$false -Portgroup (Get-VirtualPortGroup -Name vlan201 -Standard -VMHost 172.16.35.12)
说明:vmsver03是虚拟机的名称,可以用*号匹配所有vm;-VMHost 172.16.35.12是vmsver03所在的esxi主机地址;vcenterHA是原端口组名称,vlan201是要修改成的端口组名称。该命令只能对指定的esxi下的VM进行修改,如果要对当前环境所有vm进行修改,可以多写几条脚本,把所有的esxi主机都指定进去,执行脚本时会有一些报错,说当前虚拟机没有在指定的主机上,可以 不用理会。
13、批量配置vsphere网络
#批量添加交换机
foreach ($vmhost in $(get-vmhost)) {
New-VirtualSwitch -VMHost KaTeX parse error: Expected 'EOF', got '}' at position 41: … nic1,nic2 }̲ #给交换机批量添加端口组 f…vmhost in $(get-vmhost)) {
$vswitch = Get-VirtualSwitch -VMHost $vmhost -Name vSwitch0
$vportgroup = New-VirtualPortGroup -VirtualSwitch $vswitch -Name Default0
}
#端口组批量添加虚拟机
foreach ($vm in $(get-vm )){
Get-NetworkAdapter -vm $vm | Set-NetworkAdapter -NetworkName Default0 -Confirm:$false -RunAsync
}
14、统计vm信息
$a = "<title>$name</title>"
$a = $a +"<style>"
$a = $a + "BODY{background-color:blue;}"
$a = $a + "TABLE{border-width: 1px;border-style: solid;border-color: black;border-collapse: collapse;}"
$a = $a + "TH{border-width: 1px;padding: 1px;border-style: solid;border-color: black;background-color:thistle}"
$a = $a + "TD{border-width: 1px;padding: 1px;border-style: solid;border-color: black;background-color:PaleGoldenrod}"
$a = $a + "</style>"
foreach($cluster in Get-Cluster){
foreach($rp in Get-ResourcePool -Location $cluster){
$report = foreach($vm in (Get-VM -Location $rp)){
Get-HardDisk -VM $vm |
Select @{
N='Cluster';E={
$cluster.Name}},
@{
N='ResourcePool';E={
$rp.Name}},
@{
N='VM';E={
$vm.Name}},
@{
N='HD';E={
$_.Name}},
@{
N='Datastore';E={
($_.Filename.Split(']')[0]).TrimStart('[')}},
@{
N='Filename';E={
($_.Filename.Split(' ')[1]).Split('/')[0]}},
@{
N='VMDK Path';E={
$_.Filename}},
@{
N='Format';E={
$_.StorageFormat}},
@{
N='Type';E={
$_.DiskType}},
@{
N='CapacityGB';E={
$_.CapacityGB}}
}
$report | ConvertTo-Html -Head $a | Out-File -FilePath "C:\temp\$($cluster.Name)-$($rp.Name)-report.html" //temp文件夹需提前创建,脚本不会自动创建该文件夹
}
}
15、查看主机NTP服务状态
Get-VMHost|sort name|Get-VMHostService | Where {
KaTeX parse error: Expected 'EOF', got '}' at position 25: …eq "NTP Daemon"}̲ //_.Label:列名,sort从小到大排列
16、查看所有主机名
Get-VMHost|sort name|select name
17、批量操作虚拟机
1)连接vcenter
Connect-VIServer -Server 123.123.245.210(vcenter的ip) -Username “[email protected]” -Password “abcd”
2)批量创建
foreach (KaTeX parse error: Expected group after '_' at position 57: …机的ip) -Name tai_̲i -Template aaaa(模板名称) -Datastore p6300(存储阵列名称)}
3) 批量启动
foreach (KaTeX parse error: Expected group after '_' at position 29: …art-vm -vm tai5_̲i }
4)批量关闭–confirm是为了避免每次都被提示"是否同意删除"
foreach (KaTeX parse error: Expected group after '_' at position 27: …){Stop-vm -vm a_̲i -confirm:$false}
5) 批量删除–confirm是为了避免每次都被提示"是否同意删除"–deletepermanently永久删除
foreach (KaTeX parse error: Expected group after '_' at position 31: …move-vm -vm tai_̲i -confirm:$false -deletepermanently}
6) 批量迁移–confirm是为了避免每次都被提示"是否同意删除"-
foreach (KaTeX parse error: Expected group after '_' at position 29: …move-vm -vm tai_̲i -confirm:$false -datastore p6000(存储名称)}
二、PowerCLI常用命令
1、Connect-VIServer – 连接虚拟化平台
命令语法:
Connect-VIServer -Server esx3.example.com -Protocol http -User ‘MyAdministratorUser’ -Password ‘MyPassword’
示例:
PowerCLI C:> connect-viserver 192.168.232.204 –user ‘administrator’ –password ‘VM******’
2、get-vmhost – 显示ESXi主机列表
3、get-cluster – 显示群集列表
4、get-datastore – 显示存储列表
5、get-resourcepool – 显示资源池
6、get-vm – 显示虚拟机列表
7、get-virtualswitch – 显示虚拟交换机列表
8、start-vm\stop-vm – 启动或关闭虚拟机
9、new-vm – 创建虚拟机
eg1:PowerCLI C:> New-VM -Name test03 -ResourcePool Resources -VMHost 192.168.232.101 -Datastore datastore2 -NumCPU 2 -MemoryGB 4 -DiskGB 20 -NetworkName “VM Network” -Floppy -CD -DiskStorageFormat Thin -GuestID
winNetDatacenterGuest
10、get-template – 显示模板列表
11、get-oscustomizationspec – 显示自定义规范列表
12、get-vapp – 显示vapp应用列表
13、get-folder – 显示文件夹列表
14、get-vicommand – 显示所有命令列表