Thread Win32::Service::GetStatus - (37 answers)
Opened by jan99 at 2015-03-06 10:41

jan99
 2015-03-06 10:41
#180019 #180019
User since
2008-09-18
439 articles
BenutzerIn
[default_avatar]
Moin !

ich habe mir ein Script auf Basis von http://www.perlmonks.org/?node_id=522586 erstellt um den Status von Diensten ermitteln zu können.

Das Programm habe ich ausgiebig mit meinem Konto getestet. Nun habe ich das als Aufgabe in Windows eingebaut mit Rechten des Admin. Wenn das Programm dann gestartet wird anscheinend nichts zurückgeliefert sodass mir keine Statusmeldung rückgemeldet werden kann.

Hat einer von Euch eine Idee unter welchen Voraussetzungen dieses der Fall sein könnte bzw. vielleicht fällt etwas im nachfolgenden Code auf wo mir ein Fehler unterlaufen sein könnte?

Gruß Jan

hier der Code:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
#!/usr/bin/perl
use strict;
use warnings;

use Getopt::Long;
use Win32::Service;
use Mail::Sendmail;

# main-parameeters
my %config=(
"logmail"=>0, # 1... immer eine LogMail verschicken
"service"=>'', # Name des Service; wird keiner angegeben, dann Fehlermail
"title_err"=>'name of service', # Betrefftext für die FehlerMail
"title_log"=>'name of service', # Betrefftext für die LogMail
"message"=>'message in error-mail', # Text für die Fehlerinfo-Email
"email_to"=>'', # es kann auch eine Liste von Empfängern angegeben werden, Trennzeichen ";"
"email_from"=>'XXXXX@xxxxxxxxxx.de', # von wem wird die eMail versandt
"email_pwd"=>'**********', # Anmeldepasswort am Exchange
"email_required"=>1, # eine Authorisierung erforderliche?
"email_smtp"=>'xxxxx.local.xxxx.de', # Exchange-Server

);

GetOptions
(
"help|h" => sub{ Usage(); },
"logmail" => sub{ $config{logmail}=1; },
"service=s" => \$config{service},
"terr=s" => \$config{title_err},
"tlog=s" => \$config{title_log},
"message=s" => \$config{message},
"to=s" => \$config{email_to},
) or Usage();

my $hostname = ''; # this means local host.
my $name_of_this_machine = (gethostbyname ("localhost"))[0];
my $report_text = '';
my $report_subject = $name_of_this_machine." - Service: ".$config{service}." - Statusreport";
my $report_subject_error = "FEHLER - ".$name_of_this_machine." - Service: ".$config{service};

print "Rechnername: ".$name_of_this_machine."\n";

if ($config{email_to} !~ /^([a-zA-Z0-9][a-zA-Z_0-9-\.]*)(\@)([a-zA-Z0-9][a-zA-Z_0-9-\.]*[a-zA-Z0-9])(\.)([a-zA-Z0-9]*)$/) {
print "** Es wurde keine gueltige Empfaenger-eMail-Adresse angegeben!!**\n\n";
$report_subject = "** ".$report_subject;
$report_text .= "\n\nEs wurde keine gueltige Zieladresse fuer die eMail angegeben!!\n\n";
# bevor es keine Adresse gibt, dann an mich selber schicken - die groesste Chance jemanden zu erreichen
$config{email_to} = $config{email_from};
# auf jeden Fall eine eMail verschicken.
$config{logmail} = 1;
}

my %info;

# wenn kein Service-Name angegeben, dann wir automatisch eine Mail an den Admin versandt!!
if ($config{service} eq "")
{
print "** Es wurde kein Service angegeben!!**\n\n";
$report_text .= "\n\n\nFataler Fehler in Prueffunktion - es wurde kein Service-Name angegeben !!\n\n";
# Hervorheben der Überschrift
$report_subject = "** ".$report_subject;
# Zwangsemail wird verschickt
$config{logmail} = 1;
} else {

print "Service zu pruefen: ".$config{service}."\n";

my %state_code =
(
1 => 'not running',
2 => 'start pending',
# ...
);

Win32::Service::GetStatus($hostname,$config{service},\%info);

#....

#print "\tState: ", $state_code{$info{'CurrentState'}} || $info{'CurrentState'} , "\n";
# nachfolgende Daten werden in die eMail mit aufgenommen !
print "\tStateNo: ".$info{'CurrentState'}."\n";
# ....
} # endif-wurde ein Service-Name übergeben?


# wenn immer eine eMail an den Admin verschickt werden soll
SendReportMail(\%config, $report_text, $report_subject_error) if ($info{'CurrentState'} != 4);

# wenn immer eine eMail an den Admin verschickt werden soll
SendReportMail(\%config, $report_text, $report_subject) if ($config{logmail} ==1);

Last edited: 2023-12-07 16:18:11 +0100 (CET)
perl-Greenhorn - Win7 64bit / strawberry (ehem. activeperl) - www.OpenStreetMap.de

View full thread Win32::Service::GetStatus -