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