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);
}