PowerCLi命令总结

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"//vmfor(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: customizationConfirm: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 ( passwordport443if(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=GetVMHostSortObjectNameForEach(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 " myObjWriteHost"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 – 显示所有命令列表
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/ximenjianxue/article/details/114291242