VMware PowerCLi 使用示例
这几天研究PowerCLI,积累了几个例子,记下来,以便以后或者大家使用。部分例子来着网络,具体出处参考附录
1 获取vm 磁盘 和磁盘对应的datastore的信息
这个例子可以针对一台虚机有多个磁盘,但每个磁盘可能所属datastore不同,所以需要列出来查看
Get-VM | %{
$_.HardDisks | Select @{N="VM";E={$_.Parent.Name}},
Name,
@{N="DS";E={$_.Filename.Split(']')[0].TrimStart('[')}}
}
如果分着取的话也可以直接转换为
$targetVM = Get-VM -Name "vmname"
$disks = Get-HardDisk $targetVM
$diskDatastore = $disks.Filename.Split(']')[0].TrimStart('[')
2 获取vm,cpu,memory,guest,vmdk,datastore信息,并保存为HTML文档,这里主要是HTML文档生成的语法
$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"
}
}
样例如下:
| Cluster | ResourcePool | VM | HD | Datastore | Filename | VMDK Path | Format | Type | CapacityGB |
|---|---|---|---|---|---|---|---|---|---|
| Cluster2 | Resources | BPPM_Oracle | 硬盘 1 | NFS_Storage_OS_VOL3 | BPPM_Oracle | [NFS_Storage_OS_VOL3] BPPM_Oracle/BPPM_Oracle-000001.vmdk | Thin | Flat | 100 |
| Cluster2 | Resources | rcwin01 | 硬盘 1 | VMRestoreVol | rcwin01 | [VMRestoreVol] rcwin01/rcwin01.vmdk | Thin | Flat | 100 |
| Cluster2 | Resources | install-test | 硬盘 1 | NFS_Storage_OS_VOL3 | install-test | [NFS_Storage_OS_VOL3] install-test/install-test.vmdk | Thin | Flat | 50 |
| Cluster2 | Resources | 10.200.200.188 | 硬盘 1 | NFS_Storage_OS_VOL3 | 10.200.200.188 | [NFS_Storage_OS_VOL3] 10.200.200.188/10.200.200.188.vmdk | Thin | Flat | 100 |
| Cluster2 | Resources | portal-db-test | 硬盘 1 | NFS_Storage_OS_VOL3 | portal-db-test | [NFS_Storage_OS_VOL3] portal-db-test/portal-db-test.vmdk | Thin | Flat | 100 |
3 根据datastoreid 来获取datastore的名字
这个例子后面get-view -property name 用法比较重要,power-cli有很多根据id来获取name的情况,基本都可以用这个例子来解决,避免直接获取name带来的性能问题
Get-VM -Location "可选-指定datacenter" -Name "可选-指定vm" | % { @{$_.Name=$_.DatastoreIDList | %{(Get-View -Property Name -Id $_).Name}} }
可以举一反三一下,比如根据aa,获取bb的信息
4 这个例子比较有趣,可以设置输出的的格式
下面的例子是通过一条命令,获取Host, Cluster and Datastore Details
具体大家可以看这位的参考Host, Cluster and Datastore Details
Is there any way to use autosize, as the long datastore names trunctes.
Try Autosize
Get-VM (Get-content c:\temp\vms.txt) | Select-Object -Property @{Name='VMName';Expression={$_.Name}},VMHost,@{Name='ClusterName';Expression={$_.VMHost.Parent}}, @{"Name"="Datastore"; expression={($_.DatastoreIDList | %{(Get-View -Property Name -Id $_).Name}) -join ", "}} | FT -AutoSize
Try wrapping?
Get-VM (Get-content c:\temp\vms.txt) | Select-Object -Property @{Name='VMName';Expression={$_.Name}},VMHost,@{Name='ClusterName';Expression={$_.VMHost.Parent}}, @{"Name"="Datastore"; expression={($_.DatastoreIDList | %{(Get-View -Property Name -Id $_).Name}) -join ", "}} | FT -Wrap
If possible, can we use sort-object with VM Names ?
Yep, just pipe to Sort-Object
Get-VM (Get-content c:\temp\vms.txt) | Select-Object -Property @{Name='VMName';Expression={$_.Name}},VMHost,@{Name='ClusterName';Expression={$_.VMHost.Parent}}, @{"Name"="Datastore"; expression={($_.DatastoreIDList | %{(Get-View -Property Name -Id $_).Name}) -join ", "}} | Sort VMName
Also, can we use export-csv to export the out put to excel ?
Yep, Just pipe to Export-CSV
Get-VM (Get-content c:\temp\vms.txt) | Select-Object -Property @{Name='VMName';Expression={$_.Name}},VMHost,@{Name='ClusterName';Expression={$_.VMHost.Parent}}, @{"Name"="Datastore"; expression={($_.DatastoreIDList | %{(Get-View -Property Name -Id $_).Name}) -join ", "}} | Export-CSV -NoTypeInformation C:\temp\VMExport.csv
5 一条命令获取Vmhost及其网络信息
To list all ESX Hosts and their Service console information
Get-VMHost | Get-VMHostNetwork | Select Hostname, ConsoleGateway, DNSAddress -ExpandProperty ConsoleNic | Select Hostname, PortGroupName, IP, SubnetMask, ConsoleGateway, DNSAddress, Devicename
获取的样例如下
| HostName | PortGroupName | IP | SubnetMask | ConsoleGateway | DNS Address | DeviceName |
| esx01 | SC | 192.168.2.33 | 255.255.255.0 | 192.168.2.1 | 192.168.2.20 192.168.1.20 | vswif0 |
| esx01 | SC 2 | 192.168.3.43 | 255.255.255.0 | 192.168.2.1 | 192.168.2.20 192.168.1.20 | vswif1 |
| esx02 | SC | 192.168.1.12 | 255.255.255.0 | 192.168.1.254 | 192.168.1.20 | vswif0 |
| esx03 | SC | 192.168.2.34 | 255.255.255.0 | 192.168.2.1 | 192.168.2.20 192.168.1.20 | vswif0 |
| esx03 | SC 2 | 192.168.3.44 | 255.255.255.0 | 192.168.2.1 | 192.168.2.20 192.168.1.20 | vswif1 |
To list all ESX Hosts and their VMotion Enabled Networks :
Get-VMHost | Get-VMHostNetwork | Select Hostname, VMkernelGateway -ExpandProperty VirtualNic | Where {$_.VMotionEnabled} | Select Hostname, PortGroupName, IP, SubnetMask, VMkernelGateway, Devicename
样例如下
| HostName | PortGroupName | IP | SubnetMask | VMKernelGateway | DeviceName |
| esx01 | VMkernel | 192.168.3.33 | 255.255.255.0 | vmk0 | |
| esx02 | VMkernel | 192.168.3.34 | 255.255.255.0 | 192.168.3.1 | vmk0 |
当然标准的获取方式如下,获取了ESX的ip,和vmotionip
Get-VMHost * | Sort Name | Get-View | Select Name,@{N="Address";E={($_.Config.Network.Vnic | ? {$_.Device -eq "vmk0"}).Spec.Ip.IpAddress,($_.Config.Network.Vnic | ? {$_.Device -eq "vmk1"}).Spec.Ip.IpAddress}} )
" " | Out-file C:\SMinfo\"HostIPandvMotionIP$(Get-Date -Format 'yyyyMMdd').txt" -append
6 如何提高查询的速度
有时候,我们可以按照规定,获取这些信息,但如果数据量特别大,脚本运行时间会很长,那如何更快速的减少联表查询,加快速度呢,下面是个好例子,这个涉及到哈希索引,哥就不懂了
Receving cluster name for vms fast.
7 获取vm name 和ip地址
Get-VM | Select Name, @{N="IP Address";E={@($_.guest.IPAddress[0])}}
以上是几个分着的例子,主要都侧重某个方面,实际要做到时候,还要再组合和调试,尤其对于初次接触powershell的人比较麻烦了,下面这个例子是我实际工作中结合别人例子改造的,供参考
8 获取vmname,vmid,ESXHOST,ESXIP,cluster,datastore,下面三个脚本功能差不多,只是速度不同,供参考
################如果不考虑性能的话,下面这个脚本比较简单易懂,但速度慢####################
Connect-VIServer -server 10.200.108.66 -user administrator@vsphere.local -password 密码
Get-VM | Select Name,id, `
@{N="ESXIP";E={Get-VMHost -VM $_| Select ($_.ExtensionData.Config.Network.Vnic | ? {$_.Device -eq "vmk0"}).Spec.Ip.IpAddress}},`
@{N="ESXHOST";E={(Get-VMHost -VM $_).name}}, `
@{N="Cluster";E={Get-Cluster -VM $_}}, `
@{N="Datastore";E={Get-Datastore -VM $_}},`
Time | Export-Csv -NoTypeInformation c:\VMInfo\"33Export67VMinfo$(Get-Date -Format 'yyyyMMdd').csv"
Disconnect-VIServer -server * -force -Confirm:$false
################考虑性能,尽量使用属性的方式获取,大概比上面节省五分之二的时间############
Connect-VIServer -server 10.200.108.67 -user administrator@vsphere.local -password 密码
Get-VM | Select Name,id, `
@{Name=’ESXIP’;Expression={ &{$script:esx=get-view -Id $_.vmhostid -property name,config};($script:esx.Config.Network.Vnic | where{$_.Device -eq 'vmk0'}).Spec.Ip.IpAddress }},`
vmhost, `
@{Name=’Cluster’;Expression={$_.VMHost.Parent}}, `
@{"Name"="Datastore"; expression={($_.DatastoreIDList | %{(Get-View -Property Name -Id $_).Name}) -join ", "}},`
Time | Export-Csv -NoTypeInformation c:\VMInfo\"44Export67VMinfo$(Get-Date -Format 'yyyyMMdd').csv"
Disconnect-VIServer -server * -force -Confirm:$false
#############添加了硬盘对应的datastore的信息,因为有些机器不同硬盘所属datastore不同##########
Connect-VIServer -server 10.200.108.67 -user administrator@vsphere.local -password P@ssw0rd
Get-VM | Select Name,id, `
@{Name=’ESXIP’;Expression={ &{$script:esx=get-view -Id $_.vmhostid -property name,config};($script:esx.Config.Network.Vnic | where{$_.Device -eq 'vmk0'}).Spec.Ip.IpAddress }},`
vmhost, `
@{Name=’Cluster’;Expression={$_.VMHost.Parent}}, `
@{N="Storage";E={(Get-HardDisk -VM $_ |Select @{N='HD';E={$_.Name}},@{N='Datastore';E={`
($_.Filename.Split(']')[0]).TrimStart('[')}}) -replace "@{HD=","" -replace "; Datastore","" -replace "}","" -replace "{","" `
}},`
Time | Export-Csv -NoTypeInformation -encoding utf8 c:\VMInfo\"Export67VMinfo$(Get-Date -Format 'yyyyMMdd').csv"
Disconnect-VIServer -server * -force -Confirm:$false
##################如果想限定vm的范围,可以使用csv文件限定,减少查询#################
Connect-VIServer -server 10.200.108.67 -user administrator@vsphere.local -password 密码
$vmname = Import-csv "C:\VMInfo\vmhosts.csv"
$vmname | %{Get-VM $_.name| Select Name,id, `
@{Name=’ESXIP’;Expression={ &{$script:esx=get-view -Id $_.vmhostid -property name,config};($script:esx.Config.Network.Vnic | where{$_.Device -eq 'vmk0'}).Spec.Ip.IpAddress }},`
vmhost, `
@{Name=’Cluster’;Expression={$_.VMHost.Parent}}, `
<#@{N="Storage";E={(Get-HardDisk -VM $_ |Select @{N='HD';E={$_.Name}},@{N='Datastore';E={($_.Filename.Split(']')[0]).TrimStart('[')}}) -replace "@{HD=","" `
-replace "; Datastore","" -replace "}","" -replace "{","" `
}},`#>
@{"Name"="Datastore"; expression={($_.DatastoreIDList |
%{(Get-View -Property Name -Id $_).Name}) -join ", "}},`
Time }| Export-Csv -NoTypeInformation -encoding utf8 c:\VMInfo\"Export67VMinfo$(Get-Date -Format 'yyyyMMdd').csv"
Disconnect-VIServer -server * -force -Confirm:$false
###########升级版,添加了过滤条件和ip的分隔符#########
Connect-VIServer -server 10.200.108.67 -user administrator@vsphere.local -password P@ssw0rd
Get-VM |where{$_.PowerState -eq “PoweredOn”}| Select NAME, @{Name=’VMIP’;Expression={($_.Guest.IPAddress) -join ";"}},ID,`
@{Name=’VMUUID’;Expression={$_.ExtensionData.config.uuid}}, `
@{Name=’ESXIP’;Expression={ &{$script:esx=get-view -Id $_.vmhostid -property name,config};($script:esx.Config.Network.Vnic | where{$_.Device -eq 'vmk0'}).Spec.Ip.IpAddress }},`
vmhost, `
@{Name=’Cluster’;Expression={$_.VMHost.Parent}}, `
@{"Name"="Datastore"; expression={($_.DatastoreIDList | %{(Get-View -Property Name -Id $_).Name}) -join ";"}}
| Export-Csv -NoTypeInformation -encoding utf8 c:\VMInfo\"Export67VMinfo$(Get-Date -Format 'yyyyMMdd').csv"
Disconnect-VIServer -server * -force -Confirm:$false
csv文件样例如下:
| Name | Id | ESXIP | VMHost | Cluster | Storage | Time |
| install-test | VirtualMachine-vm-868 | esx.vsphere.com.1 | 10.200.236.15 | Cluster2 | 硬盘 1=NFS_Storage_OS_VOL3 | |
| clm-db-3 | VirtualMachine-vm-735 | esx.vsphere.com.2 | 10.200.236.16 | Cluster2 | 硬盘 1=NFS_Storage_OS_VOL3 硬盘 2=NFS_Storage_OS_VOL3 | |
| test-225.4 | VirtualMachine-vm-720 | esx.vsphere.com.3 | 10.200.236.17 | Cluster2 | 硬盘 1=NFS_Storage_OS_VOL3 | |
| cloudexpress | VirtualMachine-vm-1887 | esx.vsphere.com.4 | 10.200.236.18 | Cluster2 | 硬盘 1=NFS_Storage_OS_VOL3 硬盘 2=NFS_Storage_OS_VOL3 |
9 获取ESX IP 的两种方法,一定要注意以下格式,当你通过get-vm获取其他属性信息时,下面的格式可供参考
#方法一比较慢
Get-VM | Select @{N="ESXip慢";E={((Get-VMHost -VM $_).ExtensionData.Config.Network.Vnic | ? {$_.Device -eq "vmk0"}).Spec.Ip.IpAddress}}
#方法二比较快
Get-VM | Select @{Name=’ESXIP’;Expression={ &{$script:esx=get-view -Id $_.vmhostid -property name,config};($script:esx.Config.Network.Vnic | where{$_.Device -eq 'vmk0'}).Spec.Ip.IpAddress }}
10 如果想看语句执行到底耗时多久,进行统计等,可以使用如下命令
#统计耗时示例
vSphere PowerCLI> Measure-Command {get-vm}
Days : 0
Hours : 0
Minutes : 0
Seconds : 1
Milliseconds : 14
Ticks : 10142444
TotalDays : 1.17389398148148E-05
TotalHours : 0.000281734555555556
TotalMinutes : 0.0169040733333333
TotalSeconds : 1.0142444
TotalMilliseconds : 1014.2444
#统计耗时示例一
vSphere PowerCLI> (Measure-Command {get-vm}).totalseconds
0.6503594
#统计执行耗时示例二
measure-command {foreach ($vm in $vms){ $vm | select name, @{n=’CLname’;e={$HostToClusterHash[$vmsToHostHash[$($vm.name)]]}} } }
#统计vm总数量
vSphere PowerCLI> (get-vm).count
78
11 使用数学计算
下面是四舍五入的 round函数使用
get-vm | Select-Object Name, MemoryGB, NumCpu, @{ n="DiskUsedGB"; e={[math]::round( $_.UsedSpaceGB )}}
参考:
Power-Cli shows resource pools including VM,s CPU, Memory, Guest, DS, VMDK files in one HTML report
Powershell Get VM Datastore Location PowerCLI
Host, Cluster and Datastore Details
Receving cluster name for vms fast
powercli one liner to get vms clusters esx hosts and datastores这个我参考最多了
VMware PowerCLi 使用示例的更多相关文章
- Vmware的虚拟机示例进入BIOS方法
虚拟机(Vmware)怎么进入BIOS_百度经验 https://jingyan.baidu.com/article/7e440953e566472fc0e2eff7.html Vmware虚拟机进入 ...
- Ansible VMware模块使用示例
vmware_vm_facts模块使用示例 执行条件: 安装Pyvmimo: pip install pyvmomi 方法一,直接编写单个yaml文件: - hosts: localhost # 注 ...
- 在win7/WINDOWS SERVER 2008 R2上安装 vmware POWERcli 6.5
安装.NET Framework 4.6.2下载NDP462-KB3151800-x86-x64-AllOS-ENU.exe,安装安装PowerShell 4.0(5.0依赖4.0)下载Windows ...
- 基于PowerCli自动部署和配置vmvare虚拟机
1 文档说明 2 Vsphere PowerCli安装和配置 3 PowerCli常用命令 4 创建自定义规范 5 虚拟机克隆与配置脚本 6 技术资料 1 文档说明 使用Vsphere管理虚拟机,在进 ...
- 【VMware虚拟化解决方案】设计和配置VMware vCenter 5.5
在这之前,我们已经对VMware ESXi 5.5进行了整个环境的设计和规划,虽然安装VMware ESXi 5.5在CPU的选型.网络的设计.共享存储的方式.虚拟化资源的需求和安装ESXI的模式等一 ...
- powercli 学习随笔
powercli就不多介绍了,基于powershell的好东西,可以百度 #PowerShell基本语法 # 注释 <# .... #> 多行注释 $VAR 所有变量的声明或者使用都需要加 ...
- VMware ESXI添加第三方网卡驱动
VMware ESXI有两种方法添加第三方网卡驱动: 1.使用第三方工具 ESXI-Customizer.cmd工具可以将已经下载好的VMware ESXI.ISO镜像文件把下载好的驱动添加到里面,缺 ...
- VMware实用技巧
1.VM快照管理 这个功能实在太常用,不用我多废话.这里只是提醒一下还没有用过快照的同学,赶紧的给自己的VM保存点快照吧,这样VM里的系统出了问题或是有其它需要很容易让你还原到原来的某个点,这功能可比 ...
- 使用PowerCLI给ESXi批量设置时间和配置NTP
在现代的各种业务系统中,时间同步很重要.现在VMware的虚拟化解决方案应用非常广泛,给ESXi宿主机一个统一准确的时间,也给客户机系统一个准确的时间. 生产环境中主机数量少的话倒是可以手动设置,但是 ...
随机推荐
- 简单认识python cmd模块
0X00 前言 在早前用别人的工具时,发现有些大佬会用到交互式shell,那时候就挺好奇的,但是一直都没有看一下怎么做到的. 今天在翻p牛的博客的时候,看到他早之前写的一个工具就有用到交互式shell ...
- 扩充表字段长度,引发的意外KILLED/ROLLBACK
这一段时间,因为系统升级,新系统产生的数据长度,比原来的数据长度要长,所以说要扩充一下字段长度. ) --修改字段长度sql 在执行的时候,有这样一个情况. 例如Student表的Name字段长度是n ...
- 日志采集框架Flume以及Flume的安装部署(一个分布式、可靠、和高可用的海量日志采集、聚合和传输的系统)
Flume支持众多的source和sink类型,详细手册可参考官方文档,更多source和sink组件 http://flume.apache.org/FlumeUserGuide.html Flum ...
- HTML知识点总结之<a>标签
HTML是什么? HTML(Hyper Text Markup Language)超文本标记语言,用来描述网页的一种语言.超文本是指网页不止有文本,还可以有图片,链接,视频,音频等非文本元素.标记语言 ...
- LevelDB的源码阅读(四) Compaction操作
leveldb的数据存储采用LSM的思想,将随机写入变为顺序写入,记录写入操作日志,一旦日志被以追加写的形式写入硬盘,就返回写入成功,由后台线程将写入日志作用于原有的磁盘文件生成新的磁盘数据.Leve ...
- SSM框架开发web项目系列(七) SpringMVC请求接收
前言 在上篇Spring MVC入门篇中,我们初步了解了Spring MVC开发的基本搭建过程,本文将针对实际开发过程的着重点Controller部分,将常用的知识点罗列出来,并配以示例.在这之前,我 ...
- BZOJ:4820: [Sdoi2017]硬币游戏&&BZOJ:1444: [Jsoi2009]有趣的游戏(高斯消元求概率)
1444: [Jsoi2009]有趣的游戏 4820: [Sdoi2017]硬币游戏 这两道题都是关于不断随机生成字符后求出现给定字符串的概率的问题. 第一题数据范围较小,将串建成AC自动机以后,以A ...
- [51nod1443]路径和树
给定一幅无向带权连通图G = (V, E) (这里V是点集,E是边集).从点u开始的最短路径树是这样一幅图G1 = (V, E1),其中E1是E的子集,并且在G1中,u到所有其它点的最短路径与他在G中 ...
- HDU2988-Dark roads,HDU1233-还是畅通工程-最小生成树
最小生成树: 中文名 最小生成树 外文名 Minimum Spanning Tree,MST 一个有 n 个结点的连通图的生成树是原图的极小连通子图,且包含原图中的所有 n 个结点,并且有保持图连通的 ...
- Asp.Net Core Use MongoDB
前几天在网上想找一下Asp.Net Core使用MongoDB相关的文章,也看了几篇,发现都是在写简单的例子,这样的例子是不能用在生产环境的,不能用的生产环境的.封装一个东西一定是建立在你对这个东西足 ...