I've been trying to write a Perl script that uses the WMI OLE object "WbemScripting.SWbemRefresher" to access TCP statistics -- using the WMI performance counter class "Win32_PerfFormattedData_Tcpip_NetworkInterface".
I've got it working in _vbscript_ "no issues". But my Perl Win32::OLE translation bombs out with an "Access Denied" OLE exception from "SWBemRefresher" raised by the "AddEnum" call. I use the same setup code in other WMI perl scripts that perform ExeQuery's -- that work.
_vbscript_ and perl translation follow.
Anyone have any ideas?
Regards,
... Dewey
============= netmon.vbs ================
==command line: "cscript netmon.vbs"=========
strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
set objRefresher = CreateObject("WbemScripting.SWbemRefresher")
Set colItems = objRefresher.AddEnum _
(objWMIService, "Win32_PerfFormattedData_Tcpip_NetworkInterface").objectSet
objRefresher.Refresh
For i = 1 to 50
For Each objItem in colItems
If objItem.BytesTotalPersec > 0 Then
Wscript.Echo "*********"
Wscript.Echo "(" & i & ") Name: " & objItem.Name
Wscript.Echo "Total Bytes Per Second: " & _
objItem.BytesTotalPersec
Wscript.Echo "Bytes Sent Per Second: " & _
objItem.BytesSentPersec
Wscript.Echo "Bytes Received Per Second: " & _
objItem.BytesReceivedPersec
Wscript.Echo "Packets Per Second: " & _
objItem.PacketsPersec
Wscript.Echo "Packets Sent Per Second: " & _
objItem.PacketsSentPersec
Wscript.Echo "Packets Received Per Second: " & _
objItem.PacketsReceivedPersec
End If
objRefresher.Refresh
Next
Wscript.Sleep 2000
Next
============= netmon.pl ================
==command line: "perl netmon.pl"=========
use strict;
use warnings;
use Win32::OLE qw(in);
$Win32::OLE::Warn = 3;
my $strComputer = '.';
my $objWMIService = Win32::OLE->GetObject('winmgmts:{impersonationLevel=impersonate}!//' . $strComputer . '/root/cimv2');
my $objRefresher = Win32::OLE->new('WbemScripting.SWbemRefresher');
my $colItems = $objRefresher->AddEnum ($objWMIService, 'Win32_PerfFormattedData_Tcpip_NetworkInterface')->objectSet;
$objRefresher->Refresh;
foreach my $i (1 .. 50) {
foreach my $objItem (in $colItems) {
if ($objItem->{BytesTotalPersec} > 0) {
print "*********\n";
print "($i) Name: ", $objItem->{Name}, "\n";
print "Total Bytes Per Second: ", $objItem->{BytesTotalPersec}, "\n";
print "Bytes Sent Per Second: ", $objItem->{BytesSentPersec}, "\n";
print "Bytes Received Per Second: ", $objItem->{BytesReceivedPersec}, "\n";
print "Packets Per Second: ", $objItem->{PacketsPersec}, "\n";
print "Packets Sent Per Second: ", $objItem->{PacketsSentPersec},"\n";
print "Packets Received Per Second: ", $objItem->{PacketsReceivedPersec}, "\n";
}
$objRefresher->Refresh;
}
sleep(2);
}
_______________________________________________ Perl-Win32-Users mailing list [email protected] To unsubscribe: http://listserv.ActiveState.com/mailman/mysubs
