You can call Vim::find_entity_view() or Vim::find_entity_views() to retrieve objects from the ESX/ESXi host. Vim::find_entity_view() returns the first object it finds that matches the search criteria. Vim::find_entity_views() returns all objects.

When you call Vim::find_entity_view() the first object found might not be the one you are looking for. For example, you might want to retrieve only those virtual machine objects whose names begin with a certain prefix. When you call Vim::find_entity_views(), the command might return more objects than you want to work with, for example all virtual machines in a datacenter. You can apply one or more filters to Vim::find_entity_view() and Vim::find_entity_views() to select a subset of objects based on property values.

To apply a filter to the results of Vim::find_entity_view() or Vim::find_entity_views(), you supply an optional filter parameter. The value of the parameter is an anonymous hash reference containing one or more pairs of filter criteria. Each of the criteria is a property path and a match value. The match value can be either a string or a regular expression object. If the match value is a string, the value of the property must match the string exactly (including case). To match Boolean values, use the strings true and false.

The following filter parameter matches a virtual machine power state of poweredOff.

filter => { 'runtime.powerState' => 'poweredOff' }

You can also match using a regular expression object, generally known as a qr// (quoted regular expression) object. In this case, the value of the property must match the regular expression.

The following filter matches objects whose names begin with Test.

filter => { 'name' => qr/^Test/ }
filter => { 'name' => qr/^test/i } # make the match case-insensitive with the i option

For more information about the qr// operator, see the perlre (perl regular expressions) and perlop man pages in the standard Perl documentation.

The following example illustrates how you might use Vim::find_entity_views() in combination with a filter. It prints a list of virtual machine objects whose guest operating system names contain the string Windows.

. . .
my $vm_views = Vim::find_entity_views(
     view_type => 'VirtualMachine',
     filter => {
          # True if string 'Windows' appears anywhere in guestFullName
          'config.guestFullName' => qr/Windows/
     }
);
# Print VM names
foreach my $vm (@$vm_views) {
  print "Name: " . $vm->name . "\n";
}
. . .

If you pass multiple filter criteria to Vim::find_entity_view() or Vim::find_entity_views(), the method returns only the managed objects for which all criteria match. The filter parameter specified in Example: Example of Multiple Filter Specification includes two criteria. The example returns only virtual machines that fulfill both requirements.

Guest operating system is Windows — the config property's guestFullName property includes the string Windows.

Virtual machine is running. The power state is poweredOn.

. . .
my $vm_views = Vim::find_entity_views(
     view_type => 'VirtualMachine',
     filter => {
          'config.guestFullName' => qr/Windows/,
          'runtime.powerState' => 'poweredOn'
     }
);
# Print VM names
foreach my $vm (@$vm_views) {
     print "Name: " . $vm->name . "\n";
}
. . .
Important

You can match only properties that have simple types like strings and numbers. Specifying a property with a complex type as an argument to a filter results in a fatal runtime error. For example, you cannot specify the runtime property of a VirtualMachine object, which is a complex object, not a string.