http://qs321.pair.com?node_id=70138

Anonymous Monk has asked for the wisdom of the Perl Monks concerning the following question:

Can I access NetWare volume stats using perl on NT?

Originally posted as a Categorized Question.

  • Comment on Can I access NetWare volume stats using perl on NT?

Replies are listed 'Best First'.
Re: Can I access NetWare volume stats using perl on NT?
by Coyote (Deacon) on Apr 06, 2001 at 01:44 UTC
    There are a couple of options to do this. The simplest way to get volume stats under netware would be to grab the output from NDIR utility (ndir /SPA) and parse it in perl. Another way to do it would be to use the NDSm perl modules, a commercial product that wraps the Netware Client32 libraries. A third way would be to grab the ActiveX controls for Netware from http://developer.novell.com and use Win32::OLE from perl to talk to the ActiveX controls. Here's a link to the documentation for the controls.

    I've used both the the NDSm modules and the ActiveX/COM kludge in Netware related sysadmin scripts over the years, but I find that munging the output from Novell's powerful, but needlessly complex command line utilities usually works best.

Re: Can I access NetWare volume stats using perl on NT?
by saprice (Novice) on Apr 06, 2001 at 13:14 UTC
    Thanks for the links. I have around 100 NW4 servers that I need to monitor volume utilization (free space) on. I've been using an NDIR parsing script until now, but with volumes being added and deleted its making maintaining the script a pain. I'll look at the OLE route and see if I can hack something together with it. Regards sp
Re: Can I access NetWare volume stats using perl on NT?
by jbodoni (Monk) on Sep 03, 2004 at 20:59 UTC
    Use Net::SNMP! If you've got Netware 5.1 or later, SNMP is installed.

    #!c:\perl\bin\perl.exe -w # props to http://myweb.facstaff.wwu.edu/~riedesg/sysadmin1138/ for mo +st of this code! use strict; use warnings; use Net::SNMP; use Time::Seconds; use Time::Piece; # provide your SNMP community string and your list of servers below my $community = 'public'; my @servers = uc ( shift ) || qw/FS1 FS2 FS3/; # lets you specify a s +erver on the command line for quick query # end of user-provided information my $timenow = localtime; # Mon Aug 26 14:30:09 2002 $enddate) = map $_->strftime('%Y-%m-%d'), $timenow, $weeks, $start, $e +nd; my ($timestamp) = map $_->strftime('%Y-%m-%d '), $timenow; my @report; my $NWBaseOID = ".1.3.6.1.4.1.23.2.28.2.14"; # .iso.org.dod.interne +t.private.enterprises.novell.mibDoc.nwServer.nwFileSystem.nwFSVolTabl +e my $NWNameOID = $NWBaseOID . ".1.2."; # .iso.org.dod.internet.p +rivate.enterprises.novell.mibDoc.nwServer.nwFileSystem.nwFSVolTable.n +wFSVolEntry.nwVolPhysicalName my $NWVolSizeOID = $NWBaseOID . ".1.3."; # .iso.org.dod.internet.pr +ivate.enterprises.novell.mibDoc.nwServer.nwFileSystem.nwFSVolTable.nw +FSVolEntry.nwVolSize in KB my $NWVolFreeOID = $NWBaseOID . ".1.4."; # .iso.org.dod.internet.pr +ivate.enterprises.novell.mibDoc.nwServer.nwFileSystem.nwFSVolTable.nw +FSVolEntry.nwVolFree in KB my $NWVolPurgableOID = $NWBaseOID . ".1.5."; # .iso.org.dod.interne +t.private.enterprises.novell.mibDoc.nwServer.nwFileSystem.nwFSVolTabl +e.nwFSVolEntry.nwVolFreeable in KB my $NWVolMountedOID = $NWBaseOID . ".1.8."; # .iso.org.dod.internet +.private.enterprises.novell.mibDoc.nwServer.nwFileSystem.nwFSVolTable +.nwFSVolEntry.nwVolMounted, 1=mounted, 2=unmounted for my $servername (@servers) { my ($Session, $Error) = Net::SNMP->session( -hostname => $serverna +me, -community => $community ); my $Table = $Session->get_table( -baseoid => $NWBaseOID ); print STDERR "No info for $servername!\n" unless defined $Table; push @report, "$timestamp\t$servername / ERR\tERR\n" unless define +d $Table; next unless defined $Table; for (my $drivenumber = 1; $drivenumber < 256 ; $drivenumber++) { + # Cluster drives start at 255 and work DOWN next unless $Table -> { $NWVolMountedOID . $drivenumber }; next if $Table -> { $NWNameOID . $drivenumber } =~ /_ADMIN/; my $diskname = $Table -> { $NWNameOID . $drivenumber}.":"; +# Appends a ":" for backward compatibility my $totalsize = $Table -> { $NWVolSizeOID . $drivenumber}; my $freespace = $Table -> { $NWVolFreeOID . $drivenumber}; my $utilized = 100 - int ( $freespace / $totalsize * 100 ); push @report, "$servername / $diskname\t$utilized\n"; } $Session->close(); } print sort @report;
Re: Can I access NetWare volume stats using perl on NT?
by rchiav (Deacon) on Apr 06, 2001 at 18:35 UTC
    I'd suggest using ADSI. It requires Win32::OLE. If you need to install ADSI, go here. The book "WIN32 PERL SCRIPTING, The Administrators Handbook" covers some of the basics of ADSI with Perl, though it doesn't have any NDS specific examples.

    Unfortunately I've never used Perl to interface with NDS so I can't be much more help than this.

    Good Luck,

    Rich