Difference between revisions of "Script Extracts and Examples (PowerCLI)"

From vwiki
Jump to navigation Jump to search
m (→‎VM Datastores: Renamed to "Script Extracts" and added "List VM's with Host and Cluster")
m (→‎Script Extracts: Added "VM's Inventory CSV")
Line 131: Line 131:


== Script Extracts ==
== Script Extracts ==
=== List VM's with Datastores ===
=== VM's with Datastores List ===
List of Virtual Machines, and their datastores (with usage)
List of Virtual Machines, and their datastores (with usage)
  $datastoreExp = @{N="Datastore"; E={ ($_ | get-datastore | select-object -first 1).Name }}
  $datastoreExp = @{N="Datastore"; E={ ($_ | get-datastore | select-object -first 1).Name }}
Line 137: Line 137:
  get-vm | select Name, $datastoreExp, $diskSizeExp | sort -property Datastore,"Total Disk"
  get-vm | select Name, $datastoreExp, $diskSizeExp | sort -property Datastore,"Total Disk"


 
=== VM's with Host and Cluster List ===
=== List VM's with Host and Cluster ===
  $vms = Get-VM | sort -property Name
  $vms = Get-VM | sort -property Name
  foreach ($vm in $vms)
  foreach ($vm in $vms)
Line 145: Line 144:
  }
  }


=== 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:VMware]]

Revision as of 11:10, 10 November 2009

Before being able to use any the following script you need to install...

The following website is a good resource for general PowerShell help

Getting Started

On the first run you need to allow the Toolkit to run properly by running...

Set-ExecutionPolicy RemoteSigned

Connect to the Virtual Centre 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 uklonvcp1 -User <user> -Password <pass>

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 Format-List. To complicate matters further, some return objects contain further objects, see examples below

[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

Useful CmdLets etc

Virtual Machine

Command Description
get-vm Get list of VM's
get-vm | sort -property Name Get list of VM's, sorted by name
get-vmguest -VM (get-vm -name "winstg") Get VM guest info (IP address, OS)
Get-VM "winstg" | %{(Get-View $_.Id).config.uuid} Get VM's UUID


ESX Host

Command Description
get-vmhost -name uklonesxt1* | %{(Get-View $_.ID).Config.Product} Get ESX software version (inc build no)
Get-ScsiLun -VMHost uklonesxt1* -LunType disk | Get-ScsiLunPath Get ESX SCSI paths info

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

$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