Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Server abschalten, wenn alle Clients offline sind?

Frage Microsoft Windows Server

Mitglied: Kamper

Kamper (Level 1) - Jetzt verbinden

04.01.2012 um 18:44 Uhr, 4892 Aufrufe, 8 Kommentare

Hilfe bei der Erstellung eines shutdown Skriptes unter Windows Server 2008 R2

Hallo zusammen,

ich habe bei mir Zuhause einen kleinen Server eingerichtet, welchen ich als File-, Print-, Backupserver nutze. Da ich Student bin, habe ich die Möglichkeit genutzt über das Hochschulprogramm mir Windows Server 2008 r2 zu beschaffen. Ich betreibe den Server also zum Testen, Lernen und verzweifeln ;)
In Zukunft wird unser Hausnetzwerk weiter ausgebaut. Derzeit versorgt der Server etwa 10 Geräte mit Daten.

Da ich aber den Server nicht den ganzen Tag laufen lassen möchte, habe ich mich an die Programmierung eines kleines Batchskripts gemacht.

Ich habe mir als erstes überlegt, wie ich überprüfen kann, ob alle Clients offline sind. Hier zu nutze ich erst mal einen simplen Pingtest:

01.
ping 192.168.2.10 || ping 192.168.2.20 [...] || ping 192.168.2.90 || shutdown -s -f -t 00
Dieser klappt an sich auch. Jedoch gibt es 2 Laptops, welchen ich keine feste IP vergeben kann.

Hier zu meinem Problem:
Danach dachte ich, net view gibt eine Liste aller im Netzwerk verfügbaren Computer aus. Wie kann ich diese ausgegebenen Infos in einem Skript verwenden UND eine Ping-Anfrage an eine feste IP Adresse schicken.


Also nochmal in Kurzform:

Server soll Netzwerk nach PCs und Netzwerkgeräten scannen. Falls keines erreichbar ist, soll der Server nach der Zeit X abschalten. Das Skript soll alle Y Minuten durchlaufen (Dieses könnte man ja einfach über die Taskaufgaben regeln).

Gestartet wir dieser wieder normal über WOL.


Ich würde mich über Hilfe sehr freuen. Google und die Forensuche habe ich bereits gequält, jedoch komme ich nicht hinter die Abfrage des net view Ergebnisses.
Bitte Steinigt mich nicht, wenn ich die Frage im falschen Unterforum gestellt habe. Dies ist mein erster Post. Ich nutze diese Site aber immer wieder gerne um Probleme zu lösen.

Vielen Dank im Voraus.
Mitglied: LordXearo
04.01.2012 um 19:36 Uhr
Hallo,

und was ist mit dem Vorschlag einen DNS Server einzurichten und den Computernamen anzupingen?

Gruß

Xearo
Bitte warten ..
Mitglied: 39916
04.01.2012 um 22:36 Uhr
Hallo Kamper,

nmap für Windows ist hier das richtige für Dich.

Viele Grüße,
Martin
Bitte warten ..
Mitglied: bastla
05.01.2012 um 14:32 Uhr
Hallo Kamper und willkommen im Forum!

Um aus einer "net view"-Ausgabe alle gefundenen Geräte(namen) zu erhalten, könnntest Du eine Schleife der Art
for /f "delims=\" %%i in ('net view^|findstr "\\"') do
verwenden.

Um eine beliebige Anzahl von Namen bzw Adresssen per "ping" zu überprüfen, würde ich einen Schalter und je eine Schleife etwa so verwenden:
01.
@echo off & setlocal 
02.
set "Server=Servername" 
03.
set "AlleAus=true" 
04.
for %%i in (192.168.2.10 192.168.2.20 192.168.2.90) do ping -n 1 %%i>nul && set "AlleAus=" 
05.
for /f "delims=\" %%i in ('net view^|findstr "\\"^|findstr /i /v "%Server%"') do ping -n 1 %%i>nul && set "AlleAus=" 
06.
if defined AlleAus shutdown -s -f -t 00
In Zeile 2 ist "Servername" durch den Namen Deines Servers zu ersetzen - benötigt wird der Name, da der Server im "net view"-Ergebnis aufscheint.

Es schadet übrigens nicht, wenn ein Rechner mit statischer Adresse auch "namentlich" noch mal geprüft wird - mit "ping -n 1" wird nur 1 Datenpaket anstatt der defaultmäßigen 4 verschickt, wodurch die oben skizzierte (ungetestete) Variante noch immer schnneller sein sollte, als Deine ursprüngliche Version ...

Grüße
bastla
Bitte warten ..
Mitglied: Kamper
05.01.2012 um 15:36 Uhr
Vielen Danke für die schnellen Antworten. Ich werde die Lösungsvorschläge am Wochenende ausprobieren.
Bitte warten ..
Mitglied: Kamper
08.01.2012 um 15:11 Uhr
Hallo bastla,

ich habe soeben dein Skript unter unterschiedlichen Bedingungen ausprobiert.


Senario 1: min 1 Client verfügbar:

01.
C:\Users\Administrator\Desktop>set "Server=server" 
02.
C:\Users\Administrator\Desktop>set "AlleAus=true" 
03.
C:\Users\Administrator\Desktop>for %i in (192.168.2.10 192.168.2.20 192.168.2.80) do ping -n 1 %i  1>nul  && set "AlleAus=" 
04.
C:\Users\Administrator\Desktop>ping -n 1 192.168.2.10  1>nul  && set "AlleAus=" 
05.
C:\Users\Administrator\Desktop>ping -n 1 192.168.2.20  1>nul  && set "AlleAus=" 
06.
C:\Users\Administrator\Desktop>ping -n 1 192.168.2.80  1>nul  && set "AlleAus=" 
07.
C:\Users\Administrator\Desktop>for /F "delims=\" %i in ('net view|findstr "\\"|findstr /i /v "server"') do ping -n 1 %i  1>nul  && set "AlleAus=" 
08.
Systemfehler 6118 aufgetreten. 
09.
Die Liste der Server in dieser Arbeitsgruppe ist zurzeit nicht verfügbar. 
10.
C:\Users\Administrator\Desktop>if defined AlleAus shutdown -s -f -t 00 
11.
C:\Users\Administrator\Desktop>pause 
12.
Drücken Sie eine beliebige Taste . . .
Er setzt trotz erfolgreichem anpingen der ersten ip auf "AllesAus"
Und hat bei netview möglicherweise ein Firewallproblem. In die Richtung muss ich noch suchen.


Senario 2: Server ist komplett vom Netzwerk getrennt:

01.
C:\Users\Administrator\Desktop>set "Server=server" 
02.
C:\Users\Administrator\Desktop>set "AlleAus=true" 
03.
C:\Users\Administrator\Desktop>for %i in (192.168.2.10 192.168.2.20 192.168.2.80) do ping -n 1 %i  1>nul  && set "AlleAus=" 
04.
C:\Users\Administrator\Desktop>ping -n 1 192.168.2.10  1>nul  && set "AlleAus=" 
05.
C:\Users\Administrator\Desktop>ping -n 1 192.168.2.20  1>nul  && set "AlleAus=" 
06.
C:\Users\Administrator\Desktop>ping -n 1 192.168.2.80  1>nul  && set "AlleAus=" 
07.
C:\Users\Administrator\Desktop>for /F "delims=\" %i in ('net view|findstr "\\"|findstr /i /v "server"') do ping -n 1 %i  1>nul  && set "AlleAus=" 
08.
C:\Users\Administrator\Desktop>if defined AlleAus shutdown -s -f -t 00 
09.
C:\Users\Administrator\Desktop>pause 
10.
Drücken Sie eine beliebige Taste . . .
Hier tritt kein Fehler auf. Herunterfahren tut er aber trotzdem nicht :S
Irgendwo muss noch ein Fehler sein.

Das was ich an dem Skript geändert habe:
"@echo off" auf "on"
"Servername" ersetzt
und zum Schluss noch ein Pause eingefügt, als ich merkte das es nicht funktioniert um den Log zu erstellen.

Da ich mich leider mit netview gar nicht und mit batch skripts nur einwenig auskenne wäre ich um weitere Hilfe sehr dankbar.

Gruß
Kamper
Bitte warten ..
Mitglied: Kamper
08.01.2012 um 15:18 Uhr
Hallo Xearo,

der DNS leuft über einen normalen Router. Das würde ich auch gerne so lassen, da eben der Server nicht immer verfügbar sein muss/ist.
Das mit den PC Namen werde ich noch ausprobieren.

Vielen Dank für die Antwort.

Gruß,
Kamper
Bitte warten ..
Mitglied: bastla
08.01.2012 um 15:35 Uhr
Hallo Kamper!
Er setzt trotz erfolgreichem anpingen der ersten ip auf "AllesAus"
Eigentlich wird nicht auf "AllesAus" gesetzt, sondern die Variable %AlleAus% gelöscht (da eben der erfolgreiche "ping" beweist, dass nicht "alle aus" sind ...

Zur Kontrolle kannst Du vor und nach der Zeile 5 jeweils eine Zeile
set AlleAus
einfügen, um den Status der Variablen anzuzeigen.
Herunterfahren tut er aber trotzdem nicht :S
Wenn der "shutdown"-Befehl in der vorherigen Variante funktioniert hat, sollte er es auch jetzt tun (dass der Batch mit Admin-Rechten ausgeführt wird, setze ich mal voraus) - der Grund für das "Nicht-Herunterfahren" kann also eigentlich nur der Inhalt der Variablen %AlleAus% sein - kontrolliere den bitte anhand der oben gezeigten zusätzlichen Zeilen!

Eine andere Schreibweise für
ping -n 1 %%i>nul && set "AlleAus="
wäre noch
ping -n 1 %%i|findstr "TTL">nul && set "AlleAus="
- damit wird nicht anhand des Errorlevels (der allerdings ab XP funktionieren sollte) geprüft, sondern die Ausgabe auf den Textteil "TTL" (den es nur bei einem erfolgreichen "ping" gibt) hin untersucht ...

Grüße
bastla
Bitte warten ..
Mitglied: Kamper
10.01.2012 um 18:30 Uhr
Hallo, wollte mich nochmal zurückmelden und ein großes Dankeschön los werden.

Im besonderen Maße gilt der Dank bastla. Ohne Ihn würde ich wahrscheinlich immer noch rumdoktern.

Habe am Sonntagabend das Skript lauffähig bekommen.
Hier die bei mir funktionierende Version:

01.
@echo on & setlocal 
02.
set "Server=server" 
03.
set "AlleAus=true" 
04.
for %%i in (192.168.2.10 192.168.2.20 192.168.2.80) do ping -n 1 %%i|findstr "TTL">nul && set "AlleAus=" 
05.
for /f "delims=\" %%i in ('net view^|findstr "\\"^|findstr /i /v "%Server%"') do ping -n 1 %%i|findstr "TTL">nul && set "AlleAus=" 
06.
if defined AlleAus shutdown -s -f -t 00
Warum die Prüfung nicht über das Errorlevel geht, weiß ich nicht. Es ist ja auch jetzt nicht mehr wichtig. Führen ja mehrere Wege nach Rom

Grüße Kamper
Bitte warten ..
Neuester Wissensbeitrag
Humor (lol)

Linkliste für Adventskalender

(3)

Information von nikoatit zum Thema Humor (lol) ...

Ähnliche Inhalte
Exchange Server
gelöst Exchange 2010 PublicFolder Replication auf zweiten Exchange Server abschalten (2)

Frage von fragenumfragen zum Thema Exchange Server ...

Backup
Clients als Server missbrauchen? (8)

Frage von 1410640014 zum Thema Backup ...

Verschlüsselung & Zertifikate
gelöst Revocation Server innerhalb der PKI wird als offline angezeigt (1)

Frage von Snipes zum Thema Verschlüsselung & Zertifikate ...

Heiß diskutierte Inhalte
Windows Server
DHCP Server switchen (25)

Frage von M.Marz zum Thema Windows Server ...

SAN, NAS, DAS
gelöst HP-Proliant Microserver Betriebssystem (14)

Frage von Yannosch zum Thema SAN, NAS, DAS ...

Grafikkarten & Monitore
Win 10 Grafikkarte Crash von Software? (13)

Frage von Marabunta zum Thema Grafikkarten & Monitore ...

Windows 7
Verteillösung für IT-Raum benötigt (12)

Frage von TheM-Man zum Thema Windows 7 ...