OVH Cloud OVH Cloud

Reprise d'info à disance

2 réponses
Avatar
news0
Bonjour,

Je désire faire un script en perl centralisé pour rechercher des infos
sur mes serveurs NT.(taille du disque, place disque utilisé, version
OS,...)

Existe-t-il une librairie que permet de faire cela.

En vous remerciant d'avance

Salutations

Cédric

2 réponses

Avatar
Scetbon Cyril
Je te conseille d'utiliser le protocole SNMP pour collecter ces infos.

perldoc Net::SNMP


C?dric Charlet wrote:
Bonjour,

Je désire faire un script en perl centralisé pour rechercher des infos
sur mes serveurs NT.(taille du disque, place disque utilisé, version
OS,...)

Existe-t-il une librairie que permet de faire cela.

En vous remerciant d'avance

Salutations

Cédric


Avatar
jl_morel
Dans l'article , news0
@charlet.ch a dit...


Je désire faire un script en perl centralisé pour rechercher des infos
sur mes serveurs NT.(taille du disque, place disque utilisé, version
OS,...)

Existe-t-il une librairie que permet de faire cela.



Avec Win32::OLE on peut utiliser WMI.
J'ai sur mon disque dur le script suivant (dont je n'arrive pas a
retrouver l'auteur) qui permet d'explorer les possibilités de WMI.
Essayez
perl wmi.pl * Win32_LogicalDisk *
pour voir les tailles des disques de la machine locale.
Vous pouvez examiner une machine distante avec :
perl wmi.pl NomMachine Win32_LogicalDisk *
si vous avez les droits administrateur.

perl wmi.pl
affiche l'aide du programme avec quelques exemples.

La doc WMI chez Microsoft :
http://msdn.microsoft.com/library/en-us/dnanchor/html/anch_wmi.asp

En particulier, les (très nombreuses) 'Win32 class' :
http://msdn.microsoft.com/library/en-us/wmisdk/wmi/win32_classes.asp
(on a accès à tous les paramètres de la machine...en cherchant bien ;-)

Vous devriez pouvoir en tirer un script personnalisé qui examinera
ce que vous voulez.

Bon courage.


#!/usr/bin/perl -w
use strict;
use Win32::OLE;

my $argCount = scalar(@ARGV);

#Display help if
if ( $argCount == 0 || $argCount % 3 != 0 ) {
print <<"END";
Display information on a computer using WMI
(Windows Management Instrumentation).

Usage: perl wmi.pl computer class properties

Parameters:
computer - the name of the computer to lookup info on,
or "*" for the local computer
class - the Win32 class name
properties - a comma-separated list of properties to lookup
in the Win32 class, or "*" for all of them

These parameters may be repeated as many times as you want, like this:
wmi.pl computer1 class1 properties1 computer2 class2 properties2

Examples:
wmi.pl * Win32_Process Caption,ProcessID
wmi.pl www Win32_Process *

Example Win32 classes:
Win32_Process - info on the currently running processes
Win32_Processor - info on the computer's processor(s)
Win32_ComputerSystem - info on the computer system itself
(see WMI documentation for more...)
END
;
exit;
}

#Loop through the command-line arguments and display the WMI information.
my ( $computer, $class, $item, $x );
foreach $item (@ARGV) {
$x++;

#Get the computer name
if ( $x == 1 ) {
if ( $item eq "*" ) {
$computer = Win32::NodeName();
}
else {
$computer = $item;
}
}

#Get the class
elsif ( $x == 2 ) {
$class = $item;
}

#Get the properties and call WMI().
elsif ( $x == 3 ) {
WMI( $computer, $class, $item );
$x = 0;
}
}

#Loop through the given class and display properties.
#Parameters:
# 0 - computer name
# 1 - Win32 class name
# 2 - properties
sub WMI($$$) {
my $computer = $_[0];
my $Win32_Class = $_[1];
my $properties = $_[2];
my $class = "WinMgmts://$computer";
my $wmi = Win32::OLE->GetObject($class);

print "$computer ($Win32_Class)-> ";

if ($wmi) {
my $computers = $wmi->ExecQuery("SELECT * FROM $Win32_Class");
if ( scalar( Win32::OLE::in($computers) ) lt "1" ) {
print "n Check the computer and class name.n";
print " No information was found on the specified class!n";
return;
}

print "$computern";

foreach my $pc ( Win32::OLE::in($computers) ) {
properties( $pc, $properties );
}
}
else {
print "Unable to talk to WMI for $computer.n";
}
}

#Loop through an object's properties.
#Parameters:
# 0 - a reference to the object
# 1 - a single property to lookup
sub properties($$) {
my $node = $_[0];
my $properties = $_[1];

#If we are to display all the properties...
if ( $properties eq '*' ) {
foreach ( Win32::OLE::in( $node->{Properties_} ) ) {
viewProperty($_);
}
}

#Else just display the user's properties...
else {
my @properties = split ( ',', $properties );
foreach (@properties) {

#$node->{Properties_}->{$_}->{Value};
viewProperty( $node->{Properties_}->{$_} );
}
}

print "----------------------------------n";
}

#Display an object's property.
#Parameters:
# 0 - a reference to the property object
sub viewProperty($) {
my $object = $_[0];

if ( ref( $object->{Value} ) eq "ARRAY" ) {
print " $object->{Name} = { ";

foreach my $value ( Win32::OLE::in( $object->{Value} ) ) {
print "$value ";
}

print "}n";
}
else {
print " $object->{Name} = $object->{Value}n";
}
}

__END__


--
J-L.M.