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
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
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; }
#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) {
Dans l'article <8acaf051.0401200402.62b18c0e@posting.google.com>, 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
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;
}
#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) {
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
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; }
#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) {