Hola.
Quiero automatizar la creación de varios monitores de rendimiento en servidores Windows 2003/2008. En sí es fácil, pero una cosa no me sale. Con el comando
logman.exe se pueden crear dichos monitores. Primero quiero ver si existe el monitor; para ello se ejecuta el comando:
Using text Syntax Highlighting
D:\>logman query
Collection Type Status
-------------------------------------------------------------------------------
System Overview Counter Stopped
The command completed successfully.
Coloreado en 0.000 segundos, usando
GeSHi 1.0.8.4
El monitor 'System Overview' siempre está presente, es uno de muestra en Windows.
Using perl Syntax Highlighting
#!perl
use warnings
;
use strict
;
my $perflogsdir = "d:\\perflogs" ;
my $wpkgdir = "\\\\server\\software\$\\wpkg\\perfmon";
# run logman query, parse output
open (LOGMANQUERY
, "logman query |" ) or die "couldn' execute logman.exe: $!\n" ;
while ( my $line = <LOGMANQUERY>) {
# skip blank lines
next if $line =~ /^\s+$/ ;
# skip line with slashes
next if $line =~ /^-*$/;
# skip logman query header
next if $line =~ /^collection.*$/i;
# skip system overview monitor
next if $line =~ /^system overview.*$/i;
# debug info
print "$line\n";
if ( $line =~ /^terminalserver.*Stopped$/ ) {
print "perf monitor installed but not running...\n" ;
print "attempting to start it now\n" ;
`logman start terminalserversessions`;
exit 0;
}
# if logman query returns terminalserversessions counter running exit - success
elsif ( $line =~ /^terminalserversessions\s+counter\s+running$/i ) {
print "perf monitor for terminal server session already installed and configured\n" ;
exit 0;
}
else {
print "perf monitor for term server sessions not configured, proceeding now ...\n" ;
# install the perf monitor
setperms
();
`logman create counter terminalserversessions -cf $wpkgdir\\configperflog.txt -f csv -max 10 -si 15 -v -o "$perflogsdir\\termserv.csv"` ;
}
}
Coloreado en 0.004 segundos, usando
GeSHi 1.0.8.4
La función setperms() crea el directorio $perflogsdir y aplica unos permisos con setacl.exe; esa parte funciona, así que no hace falta ponerla aquí.
Mi problema es que si ejecuto el
script, la primera vez funciona bien, se crea el monitor, se aplican los permisos. Al crearse el monitor si volvemos a ejecutar
logman query vemos esto:
Using text Syntax Highlighting
D:\>logman query
Collection Type Status
-------------------------------------------------------------------------------
terminalserversessions Counter Stopped
System Overview Counter Stopped
Coloreado en 0.000 segundos, usando
GeSHi 1.0.8.4
El monitor recién creado está parado. Aquí es donde tendría que funcionar el primer control del bucle if(), pero no lo caza. Algo no funciona con
Using perl Syntax Highlighting
if ( $line =~ /^terminalserver.*Stopped$/ ) Coloreado en 0.001 segundos, usando
GeSHi 1.0.8.4
Using text Syntax Highlighting
D:\>d:\Perl\bin\perl.exe c:\drv\test.pl
terminalserversessions Counter Stopped
perf monitor for term server sessions not configured, proceeding now ...
The command completed successfully.
perf monitor for term server sessions not configured, proceeding now ...
Coloreado en 0.000 segundos, usando
GeSHi 1.0.8.4
Hay dos problemas aquí:
1. la expresión regular para desechar las líneas en blanco no funciona, por eso se ejecuta 2 veces la creación del monitor
2. la expresión regular que tendría que detectar que el monitor ya está instalado pero está parado tampoco funciona. He probado esta otra pero tampoco:
Using perl Syntax Highlighting
if ( $line =~ /^terminalserversessions\s+Counter\s+Stopped$/ )
Coloreado en 0.001 segundos, usando
GeSHi 1.0.8.4
¿Qué hago mal?