use strict;
use warnings;
use Win32::OLE qw(in with valof) ;
use constant RUNNING=>5;
my @VMList;
#Connect to Virtual Server
my $VirtualServer = Win32::OLE->new('VirtualServer.Application' )
or die "Oops, cannot Connect to Host Virtual server\n" & Win32::OLE->LastError();
print "Name: " . valof $VirtualServer->Name() . "\n";
foreach my $vm (in $VirtualServer->VirtualMachines) {
print " Name: " . valof $vm->Name . " State: " . valof $vm->State . "\n";
}
####
Win32::OLE(0.1403) error 0x80070542: "Either a required impersonation level
was not provided, or the provided impersonation level is invalid"
in METHOD/PROPERTYGET "Name" at d:\Scripts\BackupVM.pl line 14
Use of uninitialized value in concatenation (.) or string at d:\Scripts\BackupVM
.pl line 14.
Name:
Win32::OLE(0.1403) error 0x80070542: "Either a required impersonation level
was not provided, or the provided impersonation level is invalid"
in METHOD/PROPERTYGET "VirtualMachines" at d:\Scripts\BackupVM.pl line 16
Can't call method "Name" on an undefined value at d:\Scripts\BackupVM.pl line 18
.
####
Option Explicit
On Error Resume Next
Dim op,who,I,virtualServer
Dim vmachine(50)
Dim objvmColl,objVM
Const RUNNING=5
Const ForReading=1,ForWriting=2
'Connect to Virtual Server
Set virtualServer = CreateObject("VirtualServer.Application")
op=WScript.Arguments(0)
Who=WScript.Arguments(1)
I=0
if op = "list" then
Wscript.Echo "Name: " & virtualServer.Name
Set objVMColl = virtualServer.VirtualMachines
If objVMColl.Count = 0 Then
Wscript.Echo " Virtual machines: [none]"
Else
Wscript.Echo "Virtual machines: " & objVMColl.Count
For Each objVM in objVMColl
VirtualMachineInfo(objVM)
Wscript.Echo " Name: " & objVM.Name & " State: " & objVM.State
Next
End If
end if
wscript.echo I & " machines are RUNNING: "
Redim preserve vmachine(I)
Dim vm, fso, MyFile