|
|
(77 intermediate revisions by the same user not shown) |
Line 1: |
Line 1: |
| == Getting Started ==
| | #REDIRECT [[:Category:PowerCLI]] |
| Before being able to use any the following script you need to install...
| |
| * [http://www.microsoft.com/windowsserver2003/technologies/management/powershell/download.mspx Windows PowerShell V1]
| |
| * [http://support.microsoft.com/kb/968929 Windows Powershell V2]
| |
| * [http://www.vmware.com/go/powershell VI Toolkit]
| |
| | |
| On the first run you need to allow the Toolkit to run properly by running (you need to run this command as an administrator, so if you're using Windows 7, for example, you'll need to start the Powershell console as an administrator, regardless of whether you're currently logged in as an admin)...
| |
| Set-ExecutionPolicy RemoteSigned
| |
| | |
| Connect to the Virtual Centre (or ESX) server using the following command using your normal username and password (same as you'd use to log into the VI Client). You will need access to the servers on TCP 443.
| |
| Connect-VIServer -Server <server> -User <user> -Password <pass>
| |
| | |
| Once connected you can do real work with the PowerCLI, to see what's available, login to https://server/mob. This is effectively where you end up once you've completed the <code> Connect-VIServer </code> command.
| |
| | |
| Be aware that PowerShell commands generally return objects, rather than text, and that the textual representation of the return object is often abbreviated for simplicity. To see the entire return for a command, pipe the result into <code>Format-List</code>. To complicate matters further, some return objects contain further objects, see examples below
| |
| | |
| <pre>
| |
| [vSphere PowerCLI] E:\> get-vm -name "winstg"
| |
| | |
| Name PowerState Num CPUs Memory (MB)
| |
| ---- ---------- -------- -----------
| |
| winstg PoweredOn 1 756
| |
| | |
| | |
| [vSphere PowerCLI] E:\> get-vm -name "winstg" | Format-List *
| |
| | |
| PowerState : PoweredOn
| |
| Description :
| |
| Guest : VMware.VimAutomation.Client20.VMGuestImpl
| |
| NumCpu : 1
| |
| MemoryMB : 756
| |
| CDDrives : {CD/DVD Drive 1}
| |
| FloppyDrives : {Floppy Drive 1}
| |
| HardDisks : {Hard Disk 1}
| |
| NetworkAdapters : {Network Adapter 1}
| |
| Host : uklonesxt1.datastream.com
| |
| HostId : HostSystem-host-301
| |
| HARestartPriority : ClusterRestartPriority
| |
| HAIsolationResponse : AsSpecifiedByCluster
| |
| DrsAutomationLevel : AsSpecifiedByCluster
| |
| CustomFields : {}
| |
| Id : VirtualMachine-vm-25136
| |
| Name : winstg
| |
| | |
| | |
| [vSphere PowerCLI] E:\> get-vm -name "ukt1ewapilp1" | Format-List *
| |
| | |
| PowerState : PoweredOff
| |
| Description :
| |
| Guest : VMware.VimAutomation.Client20.VMGuestImpl
| |
| NumCpu : 2
| |
| MemoryMB : 2048
| |
| CDDrives : {CD/DVD Drive 1}
| |
| FloppyDrives : {Floppy Drive 1}
| |
| HardDisks : {Hard Disk 1}
| |
| NetworkAdapters : {Network Adapter 1, Network Adapter 2, Network Adapter 3}
| |
| Host : uklonesxtml1.datastream.com
| |
| HostId : HostSystem-host-662
| |
| HARestartPriority : ClusterRestartPriority
| |
| HAIsolationResponse : AsSpecifiedByCluster
| |
| DrsAutomationLevel : AsSpecifiedByCluster
| |
| CustomFields : {}
| |
| Id : VirtualMachine-vm-697
| |
| Name : ukt1ewapilp1
| |
| | |
| | |
| [vSphere PowerCLI] E:\> get-vm -name "ukt1ewapilp1" | ForEach-Object {$_.NetworkAdapters}
| |
| | |
| MacAddress : 00:50:56:89:40:59
| |
| WakeOnLanEnabled : True
| |
| NetworkName : PubLBFE2_52.128
| |
| Type : Flexible
| |
| ConnectionState : VMware.VimAutomation.Client20.ConnectInfoImpl
| |
| Id : VirtualMachine-vm-697/4000
| |
| Name : Network Adapter 1
| |
| | |
| MacAddress : 00:50:56:89:55:40
| |
| WakeOnLanEnabled : True
| |
| NetworkName : PubLBBE1_52.192
| |
| Type : Flexible
| |
| ConnectionState : VMware.VimAutomation.Client20.ConnectInfoImpl
| |
| Id : VirtualMachine-vm-697/4001
| |
| Name : Network Adapter 2
| |
| | |
| MacAddress : 00:50:56:89:56:da
| |
| WakeOnLanEnabled : True
| |
| NetworkName : PubHostBE2_49.192
| |
| Type : Flexible
| |
| ConnectionState : VMware.VimAutomation.Client20.ConnectInfoImpl
| |
| Id : VirtualMachine-vm-697/4002
| |
| Name : Network Adapter 3
| |
| </pre>
| |
| | |
| == Useful CmdLets etc ==
| |
| === Virtual Machine ===
| |
| | |
| {|cellpadding="2" cellspacing="0" border="1"
| |
| ! Command !! Description
| |
| |-
| |
| | <code> get-vm </code>
| |
| | Get list of VM's
| |
| |-
| |
| | <code> get-vm <nowiki>|</nowiki> sort -property Name </code>
| |
| | Get list of VM's, sorted by name
| |
| |-
| |
| | <code> get-vmguest -VM (get-vm -name "winstg") </code>
| |
| | Get VM guest info (IP address, OS)
| |
| |-
| |
| | <code> Get-VM "winstg" <nowiki>|</nowiki> %{(Get-View $_.Id).config.uuid} </code>
| |
| | Get VM's UUID
| |
| |-
| |
| | <code> Shutdown-VMGuest -VM (get-vm -name "winstg") </code>
| |
| | Sends OS shutdown command via VM Tools
| |
| |}
| |
| | |
| === ESX Host ===
| |
| | |
| {|cellpadding="2" cellspacing="0" border="1"
| |
| ! Command !! Description
| |
| |-
| |
| | <code> get-vmhost -name uklonesxt1* <nowiki>|</nowiki> %{(Get-View $_.ID).Config.Product} </code>
| |
| | Get ESX software version (inc build no)
| |
| |-
| |
| | <code> Get-ScsiLun -VMHost uklonesxt1* -LunType disk <nowiki>|</nowiki> Get-ScsiLunPath </code>
| |
| | Get ESX SCSI paths info
| |
| |}
| |
| | |
| == Performance Stats ==
| |
| The full wealth of performance metrics that are collated by virtual centre are available via the PowerCLI. This can be very useful for creating custom reports, feeding data into other tools etc.
| |
| | |
| == Script Extracts ==
| |
| === VM's with Datastores List ===
| |
| List of Virtual Machines, and their datastores (with usage)
| |
| $datastoreExp = @{N="Datastore"; E={ ($_ | get-datastore | select-object -first 1).Name }}
| |
| $diskSizeExp = @{N="Total Disk"; E={ ($_ | get-harddisk | measure-object -property CapacityKB -sum).Sum }}
| |
| get-vm | select Name, $datastoreExp, $diskSizeExp | sort -property Datastore,"Total Disk"
| |
| | |
| === VM's with Host and Cluster List ===
| |
| $vms = Get-VM | sort -property Name
| |
| foreach ($vm in $vms)
| |
| {
| |
| $vm | Get-Cluster | Select-Object @{Name="VM"; Expression={$vm.name}},@{Name="Current Host"; Expression={$vm.host}},Name
| |
| }
| |
| | |
| === VM's Inventory CSV ===
| |
| | |
| <pre>
| |
| $start = Get-Date
| |
| | |
| # Create table for output
| |
| # Name DC OS UUID IP Cluster ESX's | |
| | |
| $table = New-Object system.Data.DataTable "Results"
| |
| | |
| $col1 = New-Object system.Data.DataColumn Name,([string])
| |
| $col2 = New-Object system.Data.DataColumn DC,([string])
| |
| $col3 = New-Object system.Data.DataColumn OS,([string])
| |
| $col4 = New-Object system.Data.DataColumn UUID,([string])
| |
| $col5 = New-Object system.Data.DataColumn MgmtIP,([string])
| |
| $col6 = New-Object system.Data.DataColumn Cluster,([string])
| |
| #$col7 = New-Object system.Data.DataColumn ESXs,([string])
| |
| | |
| $table.columns.add($col1)
| |
| $table.columns.add($col2)
| |
| $table.columns.add($col3)
| |
| $table.columns.add($col4)
| |
| $table.columns.add($col5)
| |
| $table.columns.add($col6)
| |
| #$table.columns.add($col7)
| |
| | |
| $duration = (New-TimeSpan $start (Get-Date)).TotalSeconds
| |
| "Created table after $duration secs"
| |
| | |
| # Get VMs object
| |
| $vms = Get-VM | Sort -property Name
| |
| | |
| $duration = (New-TimeSpan $start (Get-Date)).TotalSeconds
| |
| "Got object list of VM's after $duration secs"
| |
| | |
| foreach ($vm in $vms)
| |
| {
| |
| $row = $table.NewRow()
| |
|
| |
| $row.Name = (Get-VM -Name $vm).Name
| |
| $row.DC = (Get-Datacenter -VM $vm).Name
| |
| $row.OS = (Get-VMGuest -VM $vm).OSFullName
| |
| $row.UUID = %{(Get-View $vm.Id).config.uuid}
| |
| $row.MgmtIP = [string]::join(" ", ((Get-VMGuest -VM $vm).IPAddress)) # Need to join potential list of IP's
| |
| $row.Cluster = (Get-Cluster -VM $vm).Name
| |
|
| |
| $table.Rows.Add($row)
| |
| "Added row for $vm"
| |
| }
| |
| | |
| $duration = (New-TimeSpan $start (Get-Date)).TotalSeconds
| |
| "Populated table after $duration secs"
| |
| | |
| $table | Format-Table
| |
| $table | Export-Csv -path result.csv
| |
| </pre>
| |
| | |
| | |
| [[Category:VMware]]
| |
| [[Category:PowerShell]]
| |