Service Check unter W2003
Service Check unter W2003
am 09.01.2007 14:40:48 von Ferry Bolhar
Hallo,
aus der UNIX-Welt kommend, muss ich erstmals auch in einer so "feindlichen"
Umgebung wie Windows Server 2003 Perl verwenden.
Konkret geht es darum, festzustellen, ob Windows Services (12 an der Zahl)
gestartet sind und falls dies nicht der Fall ist, sie zu restarten. In
letzterem Fall soll außerdem an einen ausgewählten Benutzerkreis ein Popup
über den Restart-Vorgang verschickt werden.
Auf dem Rechner ist ActiveState Perl 5.8.6 (Build 811) installiert. Ich
denke/hoffe, dass es für beide Fälle (Service prüfen/starten, Popup
verschicken) Module gibt, mit denen das möglichst einfach geht?
Danke für Eure Antworten & LG aus Wien,
Ferry
--
Ing Ferry Bolhar
Magistrat der Stadt Wien - MA 14
A-1010 Wien
E-Mail: bol@adv.magwien.gv.at
Re: Service Check unter W2003
am 09.01.2007 15:24:46 von Wolf Behrenhoff
Ferry Bolhar schrieb:
> Hallo,
>
> aus der UNIX-Welt kommend, muss ich erstmals auch in einer so "feindlichen"
> Umgebung wie Windows Server 2003 Perl verwenden.
>
> Konkret geht es darum, festzustellen, ob Windows Services (12 an der Zahl)
> gestartet sind und falls dies nicht der Fall ist, sie zu restarten. In
> letzterem Fall soll außerdem an einen ausgewählten Benutzerkreis ein Popup
> über den Restart-Vorgang verschickt werden.
Hm... Da würde ich eher shell-Programmierung als Perl verwenden. Ich
kenne spontan kein Perl-Modul (müsstest du mal suchen), aber mit sc.exe
kann man Dienste an- und ausstellen bzw. abfragen.
Popup-Nachrichten könntest du mit net send senden.
Wolf
Re: Service Check unter W2003
am 09.01.2007 17:06:01 von Karlheinz Weindl
Ferry Bolhar schrieb:
> Auf dem Rechner ist ActiveState Perl 5.8.6 (Build 811) installiert. Ich
> denke/hoffe, dass es für beide Fälle (Service prüfen/starten, Popup
> verschicken) Module gibt, mit denen das möglichst einfach geht?
Für die Services könntest du Win32::Service verwenden, und was die
Pop-ups betrifft eventuell ein "NET SEND" absetzen, falls der
"Nachrichtendienst" auf der Kiste läuft.
Gruß
Karlheinz
Prozess Check unter W2003
am 09.01.2007 17:24:48 von Ferry Bolhar
Hallo,
ich schrieb:
> aus der UNIX-Welt kommend, muss ich erstmals auch in einer so
"feindlichen"
> Umgebung wie Windows Server 2003 Perl verwenden.
> Konkret geht es darum, festzustellen, ob Windows Services (12 an der Zahl)
> gestartet sind und falls dies nicht der Fall ist, sie zu restarten.
Gibt es auch eine Möglichkeit, sich von Perl aus ein Listing aller aktiven
Prozesse zu holen - also etwa wie ein
@myproc = qx[ps -ef];
unter UNIX?
Danke für Eure Antworten & LG aus Wien,
Ferry
--
Ing Ferry Bolhar
Magistrat der Stadt Wien - MA 14
A-1010 Wien
E-Mail: bol@adv.magwien.gv.at
Re: Prozess Check unter W2003
am 09.01.2007 17:34:10 von Karlheinz Weindl
Ferry Bolhar schrieb:
> Gibt es auch eine Möglichkeit, sich von Perl aus ein Listing aller aktiven
> Prozesse zu holen - also etwa wie ein
@sl = qx{net start};
Gruß
Karlheinz
Re: Prozess Check unter W2003
am 09.01.2007 18:38:47 von Karlheinz Weindl
Ferry Bolhar schrieb:
> Hallo,
>
> ich schrieb:
>
>
>>aus der UNIX-Welt kommend, muss ich erstmals auch in einer so
>
> "feindlichen"
>
>>Umgebung wie Windows Server 2003 Perl verwenden.
>
>
>>Konkret geht es darum, festzustellen, ob Windows Services (12 an der Zahl)
>>gestartet sind und falls dies nicht der Fall ist, sie zu restarten.
>
>
> Gibt es auch eine Möglichkeit, sich von Perl aus ein Listing aller aktiven
> Prozesse zu holen - also etwa wie ein
>
> @myproc = qx[ps -ef];
>
> unter UNIX?
Ferry,
mir fällt gerade auf, dass du wohl wirklich eine Prozessliste sehen
willst und nicht die erneut zitierte Liste der Services!
Schau dir mal auf der Konsole "tasklist /?" an, ob du mit den möglichen
Optionen zu der Information kommst, die du brauchst.
Gruß
Karlheinz
Re: Prozess Check unter W2003
am 10.01.2007 09:03:24 von Reinhard Pagitsch
Ferry Bolhar wrote:
> Hallo,
>
> ich schrieb:
>
[snip]
> Gibt es auch eine Möglichkeit, sich von Perl aus ein Listing aller aktiven
> Prozesse zu holen - also etwa wie ein
>
> @myproc = qx[ps -ef];
>
> unter UNIX?
>
> Danke für Eure Antworten & LG aus Wien,
>
> Ferry
>
Hallo Ferry,
Hast Du schon mal das Modul Win32::Process::List ausprobiert?
Grüße,
Reinhard
--
PM Mails an rpirpag gmx dot at
Re: Service Check unter W2003
am 10.01.2007 09:24:07 von Peter Arnhold
Ferry Bolhar schrieb:
> Hallo,
>
> aus der UNIX-Welt kommend, muss ich erstmals auch in einer so "feindlichen"
> Umgebung wie Windows Server 2003 Perl verwenden.
>
> Konkret geht es darum, festzustellen, ob Windows Services (12 an der Zahl)
> gestartet sind und falls dies nicht der Fall ist, sie zu restarten. In
> letzterem Fall soll außerdem an einen ausgewählten Benutzerkreis ein Popup
> über den Restart-Vorgang verschickt werden.
>
> Auf dem Rechner ist ActiveState Perl 5.8.6 (Build 811) installiert. Ich
> denke/hoffe, dass es für beide Fälle (Service prüfen/starten, Popup
> verschicken) Module gibt, mit denen das möglichst einfach geht?
>
> Danke für Eure Antworten & LG aus Wien,
>
> Ferry
>
Hallo Ferry,
auch in einer so "feindlichen" Umgebung wie Windows kann man mit Perl eine
Menge anstellen. Vielleicht findest Du hier was nützliches:
http://www.roth.net/ bzw.
http://www.roth.net/perl/scripts/
Gruß,
Peter
Re: Service Check unter W2003
am 10.01.2007 10:29:44 von Ferry Bolhar
Wolf Behrenhoff:
> Hm... Da würde ich eher shell-Programmierung als Perl verwenden.
Shell-Programmierung unter Windows??
> Ich kenne spontan kein Perl-Modul (müsstest du mal suchen), aber mit
sc.exe
> kann man Dienste an- und ausstellen bzw. abfragen.
>
> Popup-Nachrichten könntest du mit net send senden.
Super, vielen Dank! Ist ja schon mal was. Ich dachte eben, dass es schöner
wäre, das mit Modulen zu machen (so wie z.B für FTP Net::FTP zu verwenden,
statt ein system('ftp...'). Aber wenn es nicht anders geht, dann soll es so
sein.
PS: Wenn ich das zu einem anderen Rechner hin mache (sc \\), welches
Services muss dann auf diesem Rechner gestartet sein, damit das sc dort
funktioniert?
Nochmals danke & LG,
Ferry
--
Ing Ferry Bolhar
Magistrat der Stadt Wien - MA 14
A-1010 Wien
E-Mail: bol@adv.magwien.gv.at
Re: Prozess Check unter W2003
am 10.01.2007 10:31:01 von Ferry Bolhar
Karlheinz Weindl:
> Schau dir mal auf der Konsole "tasklist /?" an, ob du mit den möglichen
> Optionen zu der Information kommst, die du brauchst.
Ja, super! Genau das brauche ich. Vielen Dank!
LG, Ferry
--
Ing Ferry Bolhar
Magistrat der Stadt Wien - MA 14
A-1010 Wien
E-Mail: bol@adv.magwien.gv.at
Re: Service Check unter W2003
am 10.01.2007 10:46:44 von Bianka Martinovic
Ferry Bolhar schrieb:
> Konkret geht es darum, festzustellen, ob Windows Services (12 an der Zahl)
> gestartet sind und falls dies nicht der Fall ist, sie zu restarten. In
> letzterem Fall soll außerdem an einen ausgewählten Benutzerkreis ein Popup
> über den Restart-Vorgang verschickt werden.
Da fährst Du eigentlich am besten, wenn Du WMI verwendest. Damit kannst
Du sowohl die Dienste abfragen, als auch Deine Popups verschicken. Der
Clou: Das Script braucht nicht auf dem PC zu laufen, den Du abfragen
willst, sondern kann auf einem beliebigen anderen PC im Netz aufgerufen
werden!
http://msdn.microsoft.com/library/default.asp?url=/library/e n-us/wmisdk/wmi/wmi_start_page.asp
Ich habe mal mit AutoIt3 eine GUI erstellt, mit deren Hilfe man eine
Liste von PCs anpingen, den angemeldeten Benutzer abfragen, den Rechner
rebooten und noch ein paar andere Dinge treiben kann. Dabei habe ich für
alles WMI verwendet. Du wirst staunen, was WMI alles kann!
Mit Perl habe ich das nicht versucht, aber schau Dir mal das Modul
DBD::WMI an:
http://search.cpan.org/~corion/DBD-WMI-0.04/lib/DBD/WMI.pm
WMI funktioniert im Prinzip wie eine Datenbank, die man wie jede andere
DB abfragen kann. Das Vorgehen ist also genauso, als wolltest Du z. B.
eine mySQL-DB abfragen:
* Autorisieren
* Abfragen
* Trennen
Beispiel für das Abfragen des Nachrichtendienstes (Basic-Syntax!):
$objItem = $objWMIService.ExecQuery("Select * From Win32_Service WHERE
Name='Messenger' ")
(Da gehört noch einiges Drumrum, es geht mir hier nur um die
Abfragesyntax! Sprich den Select-Befehl.)
Für Popups brauchst du "net send", welches aber nur funktioniert, wenn
der Nachrichtendienst auf den PCs läuft. Den schaltet man normalerweise
aber aus Sicherheitsgründen ab. Ich weiß ja nicht, wie das dort
gehandhabt wird, wo Du Dein Script brauchst. ;) Ich hatte für mein Tool
damit experimentiert, den Nachrichtendienst per WMI zu starten, die
Mitteilung zu schicken und den Dienst danach per WMI wieder zu stoppen.
Das Dumme daran war aber, dass man je nach PC-Typ (sprich wie schnell
ist die Kiste) unterschiedlich lange warten muß, bis der Dienst
gestartet ist. Wenn man auf diese Weise eine Mitteilung an eine Liste
von PCs schicken will, kann man sich ggfs. auf stundenlange Wartezeit
einrichten. Das war in meinem Fall völlig inakzeptabel, daher ist das
Feature unter den Tisch gefallen.
In Win2003 kann WMI meines Wissens aber auch selbst Nachrichtenfenster
erzeugen. Unter XP ging das noch nicht.
Sofern die Abfrage der Dienste per Benutzerinteraktion laufen kann/soll
- sprich Admin setzt sich hin, ruft Tool auf und tut irgendwas - kannst
Du auch einfach den Windowseigenen Service Controller (sc.exe) oder das
Sysinternals-Tool pslist.exe (steckt in den PSTools, siehe
www.sysinternals.com) verwenden. Beide Tools können sowohl den lokalen
PC, als auch einen anderen im Netz abfragen.
Gruß, Bianka
Re: Prozess Check unter W2003
am 10.01.2007 13:09:12 von Ferry Bolhar
Hallo, Leute!
Ich schrieb:
> aus der UNIX-Welt kommend, muss ich erstmals auch in einer so
> "feindlichen" Umgebung wie Windows Server 2003 Perl verwenden.
und habe von Euch schon viele, hiflreiche Tipps bekommen.
Vielen Dank an alle, die geantwortet haben!
Eine Frage noch: es scheint, als ob der alarm()-Befehl unter
W2003 nicht funktioniert. Ich habe folgendes ausprobiert:
eval {
$SIG{ALRM} = sub {die "Timeout!\n"};
alarm 3;
print 'Eingabe: ';
my $input = ;
alarm 0;
};
die "$@\n" if $@;
Ich hätte erwartet, dass hier "Timeout" ausgegeben wird, wenn
nicht innerhalb von drei Sekunden eine Eingabe erfolgt, und
unter Linux funktioniert das auch. Unter Windows aber wird
"ewig" gewartet, dh. der Signalhandler wird nie aufgerufen.
Wie kann ich das unter W2003 zum Funktionieren bringen?
Nochmals danke & schöne Grüße aus Wien,
Ferry
--
Ing Ferry Bolhar
Magistrat der Stadt Wien - MA 14
A-1010 Wien
E-Mail: bol@adv.magwien.gv.at
Re: Service Check unter W2003
am 10.01.2007 22:08:00 von MH
Ferry Bolhar [bol@adv.magwien.gv.at] schrieb:
>Wolf Behrenhoff:
>> Hm... Da würde ich eher shell-Programmierung als Perl verwenden.
>Shell-Programmierung unter Windows??
Cygwin ist dein Freund.
[...]
>> Popup-Nachrichten könntest du mit net send senden.
>Super, vielen Dank! Ist ja schon mal was. Ich dachte eben, dass es schön=
er
Geht aber oft nicht, weil es deaktiviert wurde.
[...]
>Nochmals danke & LG,
>Ferry
Ciao.
Michael.
--=20
Michael Hirmke | Telefon +49 (911) 557999
Wilhelm-Spaeth-Strasse 52 | FAX +49 (911) 557664
90461 Nuernberg | E-Mail mailto:mh@mike.franken.de
| WWW http://www.hirmke.de/