Archiv

Archiv für die Kategorie ‘Scripts & Co’

PsShutdown – Remote reboot und Shutdown von Windows Systemen

PsShutdown von Sysinternals  – Remote reboot und Shutdown von Windows Systemen
PsShutdown ist mit das einfachste Tools aus der PsTools Box, dabei kann es im Vergleich zu den Windows Bordmitteln schon viel. Mittels PsShutdown kann man Windows basierte remote Systeme leicht herunterfahren, oder rebooten. Hierbei kann man dem Tool auch Authentifizierungsinformationen wie den Benutzernamen, Kennwort und Domäne mitgeben, so das durch PsShutdown es ermöglicht wird, von Domänenfremden Systemen aus einen Reboot oder Shutdown eines Windows Systems einer anderen Domäne zu befehlen, ohne sich auf das System direkt zu verbinden. Dies macht PsShutdown sehr gut für Einsätze im Scripting geeignet!

Auch kann mittels PsShutdown nicht nur ein Rechner “ferngesteuert” werden, hier können beliebig viele Rechner zeitgleich gesteuert werden, sofern die Credentials, also die Logininformationen wie Benutzername, Domäne und Kennwort bei diesen Systemen übereinstimmen.

Kurzfassung der offiziellen Manpage:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
Usage: psshutdown [[\\computer[,computer[,..] | @file [-u user [-p psswd]]] -s|-r|-h|-d|-k|-a|-l|-o [-f] [-c] [-t nn|h:m] [-n s] [-v nn] [-e [u|p]:xx:yy] [-m "message"]
-	Displays the supported options.
computer	Perform the command on the remote computer or computers specified. If you omit the computer name the command runs on the local system, and if you specify a wildcard (\\*), the command runs on all computers in the current domain.
@file	Run the command on each computer listed in the text file specified.
-u	Specifies optional user name for login to remote computer.
-p	Specifies optional password for user name. If you omit this you will be prompted to enter a hidden password.
-a	Aborts a shutdown (only possible while a countdown is in progress).
-c	Allows the shutdown to be aborted by the interactive user.
-d	Suspend the computer.
-e	Shutdown reason code.
Specify 'u' for user reason codes and 'p' for planned shutdown reason codes.
xx is the major reason code (must be less than 256).
yy is the minor reason code (must be less than 65536).
-f	Forces all running applications to exit during the shutdown instead of giving them a chance to gracefully save their data.
-h	Hibernate the computer.
-k	Poweroff the computer (reboot if poweroff is not supported).
-l	Lock the computer.
-m	This option lets you specify a message to display to logged-on users when a shutdown countdown commences.
-n	Specifies timeout in seconds connecting to remote computers.
-o	Logoff the console user.
-r	Reboot after shutdown.
-s	Shutdown without power off.
-t	Specifies the countdown in seconds until the shutdown (default: 20 seconds) or the time of shutdown (in 24 hour notation).
-v	Display message for the specified number of seconds before the shutdown. If you omit this parameter the shutdown notification dialog displays and specifying a value of 0 results in no dialog.

Häufige Kommandozeilen, welche ich selbst im Einsatz habe:
(Falls jemand Fehler in den Kommandos findet – Info an mich bitte)

Reboot eines einzelnen Systems innerhalb meiner Domäne

1
psshutdown \\servername -r -t 1

Reboot eines domänenfremden Systems

1
psshutdown \\servername -u domain\username -p password -r -t 1

Reboot eines Terminalservers um 12 Uhr mit Vorwarnung & Vorwarnzeit an die Benutzer (erzwungen)

1
psshutdown \\servername -f -t 12:00 -r -v 900 -m "Reboot um 12:00 Uhr!"

Shutdown einer ganzen Reihe von Systemen (Liste per Textfile)

1
psshutdown @serverliste -r -t 1

Shutdown eines Systems mit Angabe des Grundes für das Eventlog

1
psshutdown \\servername -e p:04:06 -r -t 30

Shutdown aller Rechner in einer Domäne

1
psshutdown \\* -k -f -t 1

Reboot eines Systems mit Abbruchmöglichkeit durch den Benutzer

1
psshutdown \\servername -c -r -t 90

Abbruch des Shutdown eines Systems

1
psshutdown \\servername -a

Weblinks:

Silent Installation von IrfanView

28. Oktober 2009 1 Kommentar

Um eine silent (unattended) Installation von IrfanView auszuführen, ist die serienmässige self-extracting EXE Installationsroutine ist der einfachste Weg . Über entsprechende Schalter und Optionen im Aufruf der Installationsroutinevon IrfanView können meist alle gewünschten Optionen eingestellt werden und die ganze Arbeit wird von der Installationsroutine selbst erledigt. Mehr…

Debian: Was tun wenn der erste Netzwerkadapter nicht eth0 ist?

Netzwerkkarte mit zwei PortsFolgende Situation tritt ab und zu auf und wirft bei den Administratoren der Server Fragen über Fragen und vor allem Probleme auf:
Die Netzwerkkarte musste ausgetauscht werden und nun ist die neue Netzwerkkarte, oder Ethernetadapter, nicht mehr eth0 wie zuvor sondern statt dessen eth1. Seit der Einführung von udev ist das Problem da und eigentlich auch sehr leicht zu lösen, wenn man weiß wie! Hier die Lösung:

In der Datei /etc/udev/rules.d/70-persistent-net.rules steht folgendes über die im System vorhandenen (oder ehemals vorhandenen Netzwerkadapter drin:

# This file maintains persistent names for network interfaces.
# See udev(7) for syntax.
#
# Entries are automatically added by the 75-persistent-net-generator.rules
# file; however you are also free to add your own entries.

# PCI device 0x15ad:0x0720 (vmxnet)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:50:56:aa:65:82", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0"

# PCI device 0x1022:0x2000 (pcnet32)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:50:56:aa:4d:27", ATTR{type}=="1", KERNEL=="eth*", NAME="eth1"

Wie man hier relativ leicht sehen kann, ist der Name des Netzwerkadapters direkt an diese Einträge gekoppelt. Aus der ID auf dem PCI Bus und der Mac-Adresse ergibt sich auch ein eideutiges Merkmal für jeden Adapter.

Probleme in diesem Bereich hatte ich schon bei den Szenarien das die als etho erkannte karte eigentlich eth1 sein sollte, oder als Szenario 2 wie Eingangs beschrieben das die Karte eth1 eigentlich die Austauschkarte für eth0 ist.

Lösung Szenario 1: Die Namen sind vertauscht / nicht richtig sortiert
Hier sollte man sich die Datei /etc/udev/rules.d/70-persistent-net.rules in einem Editor seiner Wahl öffnen und den String NAME=”eth0″  etc. einfach umschreiben. Nicht vergessen die Datei zu speichern und vor dem editieren eine Sicherungskopie anzufertigen! Nach einem Reboot sind die Karten in der gewünschten Reihenfolge.

Lösung Szenario 2: Die nun eth1 genannte Karte hat die ehemalige eth0 ersetzt
Noch einfacher geht es quasi kaum… Zuerst eine Sicherungskopie der /etc/udev/rules.d/70-persistent-net.rules anfertigen, anschließend muss man nur /etc/udev/rules.d/70-persistent-net.rules noch löschen (ja, wirklich löschen) und dann rebooten – Schon ist eth1 wieder eth0, da die Datei bei jedem Bootvorgang angelegt wird, sollte sie nicht existieren und die Netzwerkkarten in der Reihenfolge eingetragen werden, in welcher sie vom System gefunden werden.

/etc/udev/rules.d/70-persistent-net.rules

Logon Script: PopUp Fenster bei Fehlern mit KixTart

Nichts ist schlimmer als wenn ein Logonscript Fehler ausgibt, die benutzer diese allerdings nicht an den Administrator weitergeben, weil sie sich die meldung nicht gemerkt haben, oder garnicht wussten das beim Login ein Fehler aufgetreten ist.

KixTart kann im Rahmen eines Logonscripts jedoch PopUp Fenster generieren, in denen dann die Fehlerbeschreibung steht und der User natürlich aufgefordert wird sofort den zuständigen Administrator zu verständigen. Im Rahmen eines Druckermappings könnte das so aussehen:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
$PRINTSERVER = "192.168.100.10"
$PRINTERNAME = "Farbdrucker_Raum_12"
If ADDPRINTERCONNECTION ("\\"+$PRINTSERVER+"\"+$PRINTERNAME) = 0
    ? "Drucker Druckername wurde verbunden"
ELSE
    ? "FEHLER beim verbinden vom Druckername"
	$MsgStr = "Bitte den Administrator verständigen!@CRLF"
	+ "Die Fehlermeldung lautet:@CRLF"
	+ "@CRLF"
	+ "Drucker: "+$PRINTERNAME + "@CRLF"
	+ "Server:  "+$PRINTSERVER + "@CRLF"
	+ "Fehlermeldung: "+ @SERROR + "@CRLF"
	+ "Fehlercode:    "+ @ERROR
	$Title = "FEHLER: Druckername nicht verbunden"
	$X MessageBox( $MsgStr, $Title, 4096 )
ENDIF

Ein paar Anpassungen muss man immer je nach Umgebung vornehmen, aber es soll in diesem Beispiel ja nur die generelle Funktion erklärt werden.
Über Kommentare freue ich mich natürlich immer sehr, speziell wenn meine Scripte irgendwo zum Einsatz kommen – die Firma muss natürlich nicht genannt werden!

Logon Script: Drucker verbinden mit KixTart

Einen Netzwerkdrucker zu verbinden, gehört zu den normalen Aufgaben eines Logonscripts. Via Kixtart geht das auch ganz einfach, wenn nicht noch einfacher als mit den guten alten “net use” Kommandos:

1
ADDPRINTERCONNECTION ("\\"+$PrintServer+"\Druckername")

Mit etwas mehr Code kann man gleich ein Errorhandling einbauen, welches dann auch ausgibt ob alles geklappt hat. Wahlweise entweder direkt im Scriptfenster, oder in ein Logfile, je nachdem wie man sein Loggig geregelt hat.

1
2
3
4
5
If ADDPRINTERCONNECTION ("\\"+$PrintServer+"\Druckerfreigabename") = 0
     ? "Drucker Druckername wurde verbunden"
ELSE
     ? "FEHLER beim verbinden vom Druckername"
ENDIF

Die Variable “+$PrintServer+” sollte hierbei automatisch gesetzt werden, alternativ kann man, um auf Nr. Sicher zu gehen, den Printserver entweder direkt angeben, oder selbst mit einer eigenen Variablen arbeiten.