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

Reply via email to