Friday, June 17, 2011

Optimize your vmware powershell: part 1 - Get-Datacenter

Remember Get-Datacenter | Get-View = Get-View -ViewType Datacenter
For better performance, use
Get-View -ViewType
Use "-Property property1,property2,property3" switch if you don't need all properties. Less data to take = better performance too.

Execution time results after the execution of some commands:

Command

seconds

Get-View -ViewType Datacenter -Property Name

0,093652985

Get-View -ViewType Datacenter

0,128286732

Get-Datacenter

0,190378198

Get-Datacenter | Get-View

0,241663792

Get-View -ViewType Datacenter -Property Name | Foreach-Object { Get-VIObjectByVIView $_.MoRef }

0,296987547

Get-View -ViewType Datacenter | Foreach-Object { Get-VIObjectByVIView $_.MoRef

0,342440257



Get-Datastore fields and its equivalent fields with Get-View

Command

Equivalent Fields

$dc0 = Get-Datacenter | Where-Object { $_.Name -eq "Datacenter_1" }

$dc1 = Get-View -ViewType Datacenter | Where-Object { $_.Name -eq "Datacenter_1" }

$dc0.ExtensionData

$dc1

$dc0.Name

$dc1.Name

$dc0.Id

$dc1.MoRef

$dc0.ParentFolderId

$dc1.Parent

$dc0.CustomFields

[Array] $arrFields = @()
$dc1 | Foreach-Object {
$datacenter = $_
$datacenter.AvailableField | Foreach-Object {
$availablefield = $_
$Key = $availablefield.Name
$Value = ($datacenter.CustomValue | Where-Object { $_.Key -eq $availablefield.Key}).Value

$objParent = New-Object PSObject
$objParent | Add-Member -MemberType noteproperty -Name "Key" -Value $key
$objParent | Add-Member -MemberType noteproperty -Name "Value" -Value $value
$arrFields += $objParent
}
}

$arrFields

Another way to improve your scripts: use -Filter switch when you want specific data. Some lines can also be better than 1 cmdlets , but it's not always the case (see below)

Command

seconds

#Equivalent

#Get-Datacenter -Name Datacenter_2

Get-View -ViewType Datacenter -Filter @{"Name"="Datacenter_2"}

0,11421332

#Equivalent

#Get-Datacenter -Name Datacenter_2

Get-View -ViewType Datacenter | Where-Object { $_.Name -eq "Datacenter_2" }

0,13915101

Get-Datacenter -Name Datacenter_2

0,18590567

Get-Datacenter -Id Datacenter-datacenter-3472

0,18141816

Get-Datacenter -Cluster Cluster_2

0,37470311

#Equivalent

# Get-Datacenter -Cluster Cluster_2

$cluster=" Cluster_2"

$parent = (Get-View -ViewType ComputeResource -Filter @{"Name"=$cluster} -Property Parent).Parent.ToString()

While ($parent.ToString().Substring(0,5).ToUpper() -ne "DATAC") {

$parent = (Get-View -ViewType Folder -Property Parent | Where-Object { $_.MoRef.ToString() -eq $parent}).Parent.ToString()

}

Get-Datacenter -Id $parent

0,4999502

Get-Datacenter -VMHost ESX01

0,8159789

#Equivalent

# Get-Datacenter -VMHost ESX01

$parent = (Get-View -ViewType HostSystem -Filter @{"Name"=" ESX01"} -Property Parent).Parent.ToString()

If ($parent.ToString().Substring(0,5).ToUpper() -eq "CLUST") {

$parent = (Get-View -ViewType ComputeResource -Property Parent | Where-Object { $_.MoRef.ToString() -eq $parent}).Parent.ToString()

}

While ($parent.ToString().Substring(0,5).ToUpper() -ne "DATAC") {

$parent = (Get-View -ViewType Folder -Property Parent | Where-Object { $_.MoRef.ToString() -eq $parent}).Parent.ToString()

}

Get-Datacenter -Id $parent

0,7234534

#Equivalent

# Get-Datacenter -VM VM01

$vm=" VM01"

$parent = (Get-View -ViewType VirtualMachine -Filter @{"Name"=$vm} -Property Parent).Parent.ToString()

While ($parent.ToString().Substring(0,5).ToUpper() -ne "DATAC") {

$parent = (Get-View -ViewType Folder -Property Parent | Where-Object { $_.MoRef.ToString() -eq $parent}).Parent.ToString()

}

Get-Datacenter -Id $parent

0,6182902

Get-Datacenter -VM VM01

5,26492918



Some cmdlets result properties

[vSphere PowerCLI]> Get-Datacenter | select *

ParentFolderId : Folder-group-d1
ParentFolder : Datacenters
CustomFields : {}
ExtensionData : VMware.Vim.Datacenter
Id : Datacenter-datacenter-3472
Name : Datacenter_2
Uid : /VIServer=@localhost:443/Datacenter=Datacenter-datacenter-3472/

ParentFolderId : Folder-group-d1
ParentFolder : Datacenters
CustomFields : {}
ExtensionData : VMware.Vim.Datacenter
Id : Datacenter-datacenter-10
Name : Datacenter_1
Uid : /VIServer=@localhost:443/Datacenter=Datacenter-datacenter-10/


[vSphere PowerCLI]> Get-View -ViewType Datacenter


VmFolder : Folder-group-v11
HostFolder : Folder-group-h12
DatastoreFolder :
NetworkFolder :
Datastore : {Datastore-datastore-123, Datastore-datastore-233, Datastore-datastore-235, Datastore-datastore-237...}
Network : {Network-network-1634, Network-network-1636, Network-network-6006, Network-network-3456...}
Parent : Folder-group-d1
CustomValue : {}
OverallStatus : gray
ConfigStatus : gray
ConfigIssue : {}
EffectiveRole : {-1}
Permission : {113, 113, -5, -2...}
Name : Datacenter_1
DisabledMethod : {}
RecentTask : {}
DeclaredAlarmState : {alarm-1.datacenter-10, alarm-2.datacenter-10, alarm-3.datacenter-10, alarm-4.datacenter-10...}
TriggeredAlarmState : {alarm-3.host-184, alarm-3.host-3310, alarm-3.host-3834, alarm-3.host-5972...}
AlarmActionsEnabled : False
Tag :
Value : {}
AvailableField : {}
MoRef : Datacenter-datacenter-10
Client : VMware.Vim.VimClient

VmFolder : Folder-group-v3473
HostFolder : Folder-group-h3474
DatastoreFolder :
NetworkFolder :
Datastore : {Datastore-datastore-3554, Datastore-datastore-3556, Datastore-datastore-3558, Datastore-datastore-3560...}
Network : {Network-network-9660, Network-network-6759, Network-network-6761, Network-network-6760...}
Parent : Folder-group-d1
CustomValue : {}
OverallStatus : gray
ConfigStatus : gray
ConfigIssue : {}
EffectiveRole : {-1}
Permission : {107, 107, 107, 107...}
Name : Datacenter_2
DisabledMethod : {}
RecentTask : {}
DeclaredAlarmState : {alarm-1.datacenter-3472, alarm-2.datacenter-3472, alarm-3.datacenter-3472, alarm-4.datacenter-3472...}
TriggeredAlarmState : {alarm-3.host-11857, alarm-3.host-11873, alarm-3.host-6439, alarm-4.vm-9648}
AlarmActionsEnabled : False
Tag :
Value : {}
AvailableField : {}
MoRef : Datacenter-datacenter-3472
Client : VMware.Vim.VimClient

[vSphere PowerCLI]> Get-Datacenter | Where-Object { $_.Name -eq "Datacenter_1" } | Get-Member

TypeName: VMware.VimAutomation.ViCore.Impl.V1.Inventory.DatacenterImpl

Name MemberType Definition
---- ---------- ----------
ConvertToVersion Method ConvertToVersion()
Equals Method System.Boolean Equals(Object obj)
GetHashCode Method System.Int32 GetHashCode()
GetHostFolder Method VMware.VimAutomation.ViCore.Interop.V1.Inventory.FolderInterop GetHostFolder()
GetType Method System.Type GetType()
GetVmFolder Method VMware.VimAutomation.ViCore.Interop.V1.Inventory.FolderInterop GetVmFolder()
get_CustomFields Method System.Collections.Generic.IDictionary`2[[System.String, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089],[System.String, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]] get_CustomFields()
get_ExtensionData Method System.Object get_ExtensionData()
get_Id Method System.String get_Id()
get_Name Method System.String get_Name()
get_ParentFolder Method VMware.VimAutomation.ViCore.Types.V1.Inventory.Folder get_ParentFolder()
get_ParentFolderId Method System.String get_ParentFolderId()
get_Uid Method System.String get_Uid()
IsConvertableTo Method System.Boolean IsConvertableTo(Type toType)
ToString Method System.String ToString()
CustomFields Property System.Collections.Generic.IDictionary`2[[System.String, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089],[System.String, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]] CustomFields {get;}
ExtensionData Property System.Object ExtensionData {get;}
Id Property System.String Id {get;}
Name Property System.String Name {get;}
ParentFolder Property VMware.VimAutomation.ViCore.Types.V1.Inventory.Folder ParentFolder {get;}
ParentFolderId Property System.String ParentFolderId {get;}
Uid Property System.String Uid {get;}

[vSphere PowerCLI]>Get-View -ViewType Datacenter | Where-Object { $_.Name -eq "Datacenter_1"   } | Get-Member

TypeName: VMware.Vim.Datacenter

Name MemberType Definition
---- ---------- ----------
Destroy Method System.Void Destroy()
Destroy_Task Method VMware.Vim.ManagedObjectReference Destroy_Task()
Equals Method System.Boolean Equals(Object obj)
GetAllEventsView Method VMware.Vim.EventHistoryCollector GetAllEventsView(EventFilterSpec eventFilterSpec)
GetAllTasksView Method VMware.Vim.TaskHistoryCollector GetAllTasksView(TaskFilterSpec taskFilterSpec)
GetEntityOnlyEventsCollectorView Method VMware.Vim.EventHistoryCollector GetEntityOnlyEventsCollectorView(EventFilterSpec eventFilterSpec)
GetEntityOnlyTasksCollectorView Method VMware.Vim.TaskHistoryCollector GetEntityOnlyTasksCollectorView(TaskFilterSpec taskFilterSpec)
GetEventCollectorView Method VMware.Vim.EventHistoryCollector GetEventCollectorView(EventFilterSpecRecursionOption recursionOption, EventFilterSpec eventFilterSpec)
GetHashCode Method System.Int32 GetHashCode()
GetTaskCollectorView Method VMware.Vim.TaskHistoryCollector GetTaskCollectorView(TaskFilterSpecRecursionOption recursionOption, TaskFilterSpec taskFilterSpec)
GetType Method System.Type GetType()
get_AlarmActionsEnabled Method System.Boolean get_AlarmActionsEnabled()
get_AvailableField Method VMware.Vim.CustomFieldDef[] get_AvailableField()
get_Client Method VMware.Vim.VimClient get_Client()
get_ConfigIssue Method VMware.Vim.Event[] get_ConfigIssue()
get_ConfigStatus Method VMware.Vim.ManagedEntityStatus get_ConfigStatus()
get_CustomValue Method VMware.Vim.CustomFieldValue[] get_CustomValue()
get_Datastore Method VMware.Vim.ManagedObjectReference[] get_Datastore()
get_DatastoreFolder Method VMware.Vim.ManagedObjectReference get_DatastoreFolder()
get_DeclaredAlarmState Method VMware.Vim.AlarmState[] get_DeclaredAlarmState()
get_DisabledMethod Method System.String[] get_DisabledMethod()
get_EffectiveRole Method System.Int32[] get_EffectiveRole()
get_HostFolder Method VMware.Vim.ManagedObjectReference get_HostFolder()
get_MoRef Method VMware.Vim.ManagedObjectReference get_MoRef()
get_Name Method System.String get_Name()
get_Network Method VMware.Vim.ManagedObjectReference[] get_Network()
get_NetworkFolder Method VMware.Vim.ManagedObjectReference get_NetworkFolder()
get_OverallStatus Method VMware.Vim.ManagedEntityStatus get_OverallStatus()
get_Parent Method VMware.Vim.ManagedObjectReference get_Parent()
get_Permission Method VMware.Vim.Permission[] get_Permission()
get_RecentTask Method VMware.Vim.ManagedObjectReference[] get_RecentTask()
get_Tag Method VMware.Vim.Tag[] get_Tag()
get_TriggeredAlarmState Method VMware.Vim.AlarmState[] get_TriggeredAlarmState()
get_Value Method VMware.Vim.CustomFieldValue[] get_Value()
get_VmFolder Method VMware.Vim.ManagedObjectReference get_VmFolder()
PowerOnMultiVM Method VMware.Vim.ClusterPowerOnVmResult PowerOnMultiVM(ManagedObjectReference[] vm, OptionValue[] option)
PowerOnMultiVM_Task Method VMware.Vim.ManagedObjectReference PowerOnMultiVM_Task(ManagedObjectReference[] vm, OptionValue[] option)
QueryConnectionInfo Method VMware.Vim.HostConnectInfo QueryConnectionInfo(String hostname, Int32 port, String username, String password, String sslThumbprint)
Reload Method System.Void Reload()
Rename Method System.Void Rename(String newName)
Rename_Task Method VMware.Vim.ManagedObjectReference Rename_Task(String newName)
setCustomValue Method System.Void setCustomValue(String key, String value)
SetViewData Method System.Void SetViewData(ObjectContent objectContent, String[] properties)
ToString Method System.String ToString()
UpdateViewData Method System.Void UpdateViewData(Params String[] properties), System.Void UpdateViewData()
WaitForTask Method System.Object WaitForTask(ManagedObjectReference taskReference)
AlarmActionsEnabled Property System.Boolean AlarmActionsEnabled {get;}
AvailableField Property VMware.Vim.CustomFieldDef[] AvailableField {get;}
Client Property VMware.Vim.VimClient Client {get;}
ConfigIssue Property VMware.Vim.Event[] ConfigIssue {get;}
ConfigStatus Property VMware.Vim.ManagedEntityStatus ConfigStatus {get;}
CustomValue Property VMware.Vim.CustomFieldValue[] CustomValue {get;}
Datastore Property VMware.Vim.ManagedObjectReference[] Datastore {get;}
DatastoreFolder Property VMware.Vim.ManagedObjectReference DatastoreFolder {get;}
DeclaredAlarmState Property VMware.Vim.AlarmState[] DeclaredAlarmState {get;}
DisabledMethod Property System.String[] DisabledMethod {get;}
EffectiveRole Property System.Int32[] EffectiveRole {get;}
HostFolder Property VMware.Vim.ManagedObjectReference HostFolder {get;}
MoRef Property VMware.Vim.ManagedObjectReference MoRef {get;}
Name Property System.String Name {get;}
Network Property VMware.Vim.ManagedObjectReference[] Network {get;}
NetworkFolder Property VMware.Vim.ManagedObjectReference NetworkFolder {get;}
OverallStatus Property VMware.Vim.ManagedEntityStatus OverallStatus {get;}
Parent Property VMware.Vim.ManagedObjectReference Parent {get;}
Permission Property VMware.Vim.Permission[] Permission {get;}
RecentTask Property VMware.Vim.ManagedObjectReference[] RecentTask {get;}
Tag Property VMware.Vim.Tag[] Tag {get;}
TriggeredAlarmState Property VMware.Vim.AlarmState[] TriggeredAlarmState {get;}
Value Property VMware.Vim.CustomFieldValue[] Value {get;}
VmFolder Property VMware.Vim.ManagedObjectReference VmFolder {get;}

No comments: