I don’t think this issue is related to the PDK, so please return further discussion to Perl-Win32-Users only.

 

I have no idea what is going on, but I can reproduce the problem.  If I rename netmon.pls to netmon.pls and execute it via `cscript netmon.pls` then it works fine also. If anyone has an idea why it makes a difference to run the script inside Windows Scripting Host, please let me know.

 

Cheers,

-Jan

 

PS:  Please use plain text for mailing list messages.

 


From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] On Behalf Of D D Allen
Sent: May 11, 2006 2:37 PM
To: Timothy Johnson
Cc: [EMAIL PROTECTED]; [email protected]
Subject: RE: "WbemScripting.SWbemRefresher" _vbscript_ -> Perl

 


I subscribed to the PDK list... and am copying it on this note.

I'm now suspicious that there's a "type" (object class) mismatch problem.  [Ok, I'm stretching for an explanation...]

When I look at the "SwbemRefresher" class in Jan Dubois' Win32::OLE Type Library Browser, the AddEnum definition is as follows.

Function AddEnum(objWbemServices As ISWbemServicesEx, bsClassName As String, [iFlags As Long], [objWbemNamedValueSet As Object]) As ISWbemRefreshableItem

On MSDN, the SWbemRefresher AddEnum definition is as follows.

objRefreshEnum = AddEnum(
  objWbemService,
  strClass,
  [ iFlags = 0 ],
  [ objWbemNamedvalueSet = null ]
)

http://msdn.microsoft.com/library/default.asp?url="">


The subtle difference is that the Type Library Browser identifies the first parameter as a SWbemServicesEx object -- while MSDN identifies it as a SWbemService object.  And on MSDN, SWbemServices and SWbemServicesEx are different -- with SWbemServicesEx being derived from the SWbemServices class.  Maybe this makes a difference in Perl but not in _vbscript_...


Regards,

... Dewey




"Timothy Johnson" <[EMAIL PROTECTED]>

05/11/2006 03:26 PM

To

D D Allen/Fairfax/IBM@IBMUS, <[email protected]>

cc

 

Subject

RE: "WbemScripting.SWbemRefresher" _vbscript_ -> Perl

 

 

 




You should submit this to the PDK list.  I’ve tried changing the authentication level, etc. but as far as I can tell your code is correct.
 
 
 

 



From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] On Behalf Of D D Allen
Sent:
Thursday, May 11, 2006 5:24 AM
To:
[email protected]
Subject:
"WbemScripting.SWbemRefresher" _vbscript_ -> Perl

 

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