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
Kommentar vom Moderator Biber am 11.03.2011 um 17:30:07 Uhr
Beitrag verschoben von "Unix/Linux Netzwerk" nach "Batch & Skripte".

Clients per Ping runterfahren

Frage Entwicklung Batch & Shell

Mitglied: bodyparts

bodyparts (Level 2) - Jetzt verbinden

11.03.2011, aktualisiert 17:30 Uhr, 5039 Aufrufe, 21 Kommentare

Hallo,

ich möchte den Befehl shutdown nutzen, um Clienst im Netzwerk ab einer Uhrzeit runter zufahren.

Es lassen immer wieder User ihren Rechner an.

Das kostet unnötig Strom.

Meine idee:

shutdown -s -f -t 0 -m \\%computername%

Jetzt soll aber per Ping Befehl geprüft werden, ob der Rechner an ist.

Für den Befehl muss der Name des PCs genommen werden, da es Ausnahmen gibt.

Der Bereich der IP bewegt sich im 192.168.178.2-254 es sind alles XP Pro Maschinen.

Wie kann man jetzt prüfen und dann den Namen nutzen, da sich die PCs im DHCP Netz befinden macht die IP kein Sinn.

Es gibt 3 Ausnahmen diese PC´s dürfen nicht runter gefahren werden.

Gruß
Mitglied: happy-gregor
11.03.2011 um 13:52 Uhr
ich würde die einzelnen ip pingen, oder eine datei auf der $c abfragen. je nach rückmeldung dann den shutdown ausführen oder halt die nächste ip abfragen. ansonsten kannst du den shutdown auf jede maschine loslassen. der shutdown setzt nur das command remote ab und geht dann zu nächsten namen. pro name brauchst du so ca. 3 sekunden. shutdown ist aber nicht das beste prog. das psshutdon von ms macht da schon eine bessere falle
Bitte warten ..
Mitglied: bodyparts
11.03.2011 um 14:09 Uhr
hi...

wenn ich die ip pinge, ist das nicht verlässlich, da der dhcp dort "mitspielt".

Ich muss über den Namen gehen.

Aber wie baue ich das in eine Schleife ein, die dann zb 3 namen über springt.

Es würde auch gehen, wenn ich den namen prüfen, kommt ein ping dann runter, ist es der Name zb alpha123 dann kein Shotdown.

Die PCnamen sind fortlaufend... alpha001 bis alpha 400, alpha230 und alpah233 dürfen nicht rebootet werden.

Gruß
Bitte warten ..
Mitglied: manuel-r
11.03.2011 um 14:33 Uhr
Per VBScript eigentlich nicht so schwer zu lösen:
  • zuerst alle Computernamen im AD aus der OU "Computer" (oder wo sie bei dir stehen) holen
  • für jeden Wert der Ergebnisliste (Array) prüfen ob es der Name eines Rechners ist, der nicht herunter gefahren werden darf. Falls ja - nächster Rechnername
  • den Client mit seinem DNS-Namen anpingen
  • wenn Antwort kommt Shutdown auslösen
  • wenn keine Antwort kommt - nächster Rechner
Damit sind die Rechner binnen Sekunden herunter gefahren

Oder per GPO einen geplanten Task verteilen, der ein Script zum Shutdown auf jedem einzelnen Rechner ausführt. Dann muss du halt innerhalb dieses Scripts prüfen ob der Computername sich auf der Ausschlussliste befindet. Mach ich hier so und funktioniert prächtig.
Bitte warten ..
Mitglied: bodyparts
11.03.2011 um 14:40 Uhr
@manuel-r, dass hört sich gut an, ich weiß nur nicht wie ich das umsetze.

War auch dem Wege eine Batch zu schreiben. Kannst du mir das etwas ausführlich erklären?

Gruß
Bitte warten ..
Mitglied: manuel-r
11.03.2011 um 14:50 Uhr
Ok, weil heute Freitag ist will ich mal nicht so sein

01.
Set WshShell = WScript.CreateObject("WScript.Shell") 
02.
Set WshSysEnv = WshShell.Environment("PROCESS") 
03.
strComputername = lcase(WshSysEnv("COMPUTERNAME")) 
04.
 
05.
'prüfen ob computername ausgeschlossen ist 
06.
if strComputername = "alpha230" then 
07.
  wscript.quit 
08.
end if 
09.
if strComputername = "alpha232" then 
10.
  wscript.quit 
11.
end if 
12.
 
13.
'shutdown auslösen 
14.
strShutdown = "shutdown -s -f -t 10 -c " & chr(34) & "Der Computer wird scriptgesteuert heruntergefahren.." & chr(34) 
15.
WshShell.Run StrShutdown , 1, True  
Ich hab jetzt einige Zeilen herausgenommen, die für deinen Anwendungsfall nicht notwendig sind und ein paar kleine Änderungen eingebaut. In der Form ist es ungetestet.

Manuel
Bitte warten ..
Mitglied: muftypeter
11.03.2011 um 14:51 Uhr
Hallo,
um wieviele Clients geht es denn?
Gibt es ein AD?

Textfile mit Rechnernamen einlesen und ein File auf dem Rechner (boot.ini?) prüfen.
Falls da, Rechner shutdown senden.

Das mit der GPO ist auch eine Möglichkeit. Dann hald zwei OU.

Grüße vom Peter
Bitte warten ..
Mitglied: bodyparts
11.03.2011 um 14:57 Uhr
danke dir "Freitag"... ne manuel,

aber ne AD Abfrage sehe ich nicht, benötige ich die?

Gruß
Bitte warten ..
Mitglied: manuel-r
11.03.2011 um 14:59 Uhr
aber ne AD Abfrage sehe ich nicht, benötige ich die?

Die ist deshalb nicht da, weil das die Variante mit Script und Task per GPO verteilen ist. Das läuft ja dann auf jeden Rechner lokal. Also muss das Script nur prüfen ob der Rechner auf dem es läuft ausgeschlossen ist oder nicht. Die anderen Rechner interessieren nicht.
Bitte warten ..
Mitglied: bodyparts
11.03.2011 um 15:04 Uhr
hallo Peter, ja es gibt eine OU und es sind ca. 400 pc´s, drei muss ich ausschliessen und denn rest halt gucken ob an

Gruß

@Manuel, ahh, werd ich testen...
Bitte warten ..
Mitglied: bodyparts
11.03.2011 um 15:09 Uhr
Zitat von manuel-r:
Ok, weil heute Freitag ist will ich mal nicht so sein

01.
Set WshShell = WScript.CreateObject("WScript.Shell") 
02.
> Set WshSysEnv = WshShell.Environment("PROCESS") 
03.
> strComputername = lcase(WshSysEnv("COMPUTERNAME")) 
04.
>  
05.
> 'prüfen ob computername ausgeschlossen ist 
06.
> if strComputername = "alpha230" then 
07.
>   wscript.quit 
08.
> end if 
09.
> if strComputername = "alpha232" then 
10.
>   wscript.quit 
11.
> end if 
12.
>  
13.
> 'shutdown auslösen 
14.
> strShutdown = "shutdown -s -f -t 10 -c " & chr(34) & "Der Computer wird scriptgesteuert 
15.
> heruntergefahren.." & chr(34) 
16.
> WshShell.Run StrShutdown , 1, True  
Ich hab jetzt einige Zeilen herausgenommen, die für deinen Anwendungsfall nicht notwendig sind und ein paar kleine
Änderungen eingebaut. In der Form ist es ungetestet.

Manuel


wofür steht chr(34) ?

gruß
Bitte warten ..
Mitglied: bastla
11.03.2011 um 16:41 Uhr
Hallo bodyparts!
wofür steht chr(34) ?
Für ein Anführungszeichen - Du kannst die Zeile auch so schreiben:
strShutdown = "shutdown -s -f -t 10 -c ""Der Computer wird scriptgesteuert heruntergefahren.."""
Grüße
bastla
Bitte warten ..
Mitglied: Oli-87
12.03.2011 um 23:28 Uhr
Hi,

warum schreibst du nicht einfach ne ganz einfache batchdatei, die nur den Rechner runterfährt und führst die per GeplanteTasks um eine bestimmte Uhrzeit aus?

Gut ich meine, das einmal einzurichten ist mühseelig, aber dafür brauchste dann nicht mehr dabei zu schauen. Und sobald ein Rechner mal Netzwerkprobleme hat uns sich nicht mehr anpingen lässt, kommst du mit der obengenannten Methode nicht mehr weiter.

Lieben Gruß
Oli
Bitte warten ..
Mitglied: TuXHunt3R
13.03.2011 um 14:01 Uhr
Hätte sicher auch Vorteile, wenn ein paar Ihre Rechner laufen lassen.... So können diese Clients über Nacht bereits mit Updates versorgt werden *grins*
Bitte warten ..
Mitglied: bodyparts
18.03.2011 um 14:31 Uhr
hi...

jetzt komme ich wieder zum "Projekt"...

Ich möchte erstmal prüfen, wieviele Rechner überhaupt an sind.

Diese Prüfung soll auf einem Server ausgeführt werden.

Da die Rechner einen Namen in Form alpha001 bis alpha400 haben, brauche ich eine Schleife die jeden Host auf erreichbarkeit prüft.

Mein Problem ist das hochzählen von 001 plus 1 soll ergeben 002, bin mir nicht sicher wie man mit den zwei 00 davor umgeht.

Das ergebniss würde ich mir per Mail zukommen lasse, muss also in eine Datei geschrieben werden.

Gruß
Bitte warten ..
Mitglied: bastla
18.03.2011 um 14:57 Uhr
Hallo bodyparts!

Die Schleife würde etwa so aussehen:
01.
@echo off & setlocal enabledelayedexpansion 
02.
set "Prefix=alpha" 
03.
 
04.
for /L %%i in (1001,1,1400) do ( 
05.
    set "Nr=%%i" 
06.
    set "Rechnername=%Prefix%!Nr:~-3!" 
07.
    echo Aktion fuer !Rechnername! 
08.
)
[Edit] Bin offensichtlich schon so auf Batch eingestellt ... [/Edit]

Jetzt aber VBS:
01.
Prefix = "alpha" 
02.
For i = 1001 To 1400 
03.
    Rechnername = Prefix & Right(i, 3) 
04.
    'Aktion hier 
05.
Next
Grüße
bastla
Bitte warten ..
Mitglied: bodyparts
18.03.2011 um 15:06 Uhr
danke Bastla,

ich würde jetzt ein:

ping %prefix% -n 1 | findstr "TTL" && echo %prefix% >>d:\\logs\erreichbare_clients.txt

zur Aktion setzten.

Kann man das eleganter machen?
Bitte warten ..
Mitglied: BigWim
18.03.2011 um 15:09 Uhr
Moin bodyparts,

ich habe mich an der Variante "Auslesen der OU" versucht - in Batch.

[Edit]
Jetzt wollte ich wieder schnell sein und hab die Erklärung vergessen.

Definition der Ausnahmeliste durch Leerzeichen getrennt
01.
Set Ausnahmeliste=XXXXwpwdk120302 XXXXwpwdk148210
OU-Pfad der Clients
01.
Set OU="OU=Desktops,OU=Clients,OU=Institut,DC=XXXXdpk1,DC=XXXX,DC=intern"
Auswahleinschränkung. Wenn ich z. B. nur die Rechner haben möchte, die mit X333 anfangen möchte:
01.
Set LDapFilter=(SAMAccountName=X333*)
[/Edit]

01.
@echo off & setlocal 
02.
 
03.
Set Ausnahmeliste=XXXXwpwdk120302 XXXXwpwdk148210 
04.
Set OU="OU=Desktops,OU=Clients,OU=Institut,DC=XXXXdpk1,DC=XXXX,DC=intern" 
05.
Set LDapFilter=(SAMAccountName=XXXX*) 
06.
 
07.
for /f "tokens=2 delims=,=" %%a in ('dsquery * %OU%  -filter "%LDAPFilter%" -limit 0') do call :MachWat %%a 
08.
goto :eof 
09.
 
10.
 
11.
:MachWat 
12.
Set Rechner=%1 
13.
Set IsOnline=Nein 
14.
ping -n 1 %Rechner% | find /i "Antwort von" >NUL: && Set IsOnline=Ja 
15.
 
16.
 
17.
if /i "%IsOnline%"=="nein" goto :eof 
18.
 
19.
Set IsAusnahme=Nein 
20.
echo %Ausnahmeliste% | find /i "%Rechner%" >NUL: && Set IsAusnahme=Ja 
21.
 
22.
if /i "%IsAusnahme%" == "ja" goto :eof 
23.
 
24.
echo %Rechner% ist %IsOnline% und keine Ausnahme 
25.
echo Ausschalten 
26.
 
Schönes Wochenende
Markus

@bastla
Bin gespannt auf die Verbesserungvorschläge
Bitte warten ..
Mitglied: bastla
18.03.2011 um 17:17 Uhr
Hallo bodyparts!
Kann man das eleganter machen?
Kann man/frau vor allem richtig machen :
ping !Rechnername! -n 1 | findstr "TTL">nul && >>d:\\logs\erreichbare_clients.txt echo !Rechnername!
Grüße
bastla
Bitte warten ..
Mitglied: bastla
18.03.2011 um 17:37 Uhr
Hallo BigWim!

Sollte jedenfalls grundsätzlich so klappen ...

Da ich eher zur Vorsicht neige, würde ich etwas mehr Anführungszeichen spendieren und für die Ausnahmen andere Trennzeichen (zB "@" oder ":" verwenden), und zwar auch vor dem ersten und nach dem letzten Namen - Sinn der Aktion: Damit kann ich sicher ausschließen, dass ein Rechner mit kürzerem Namen deshalb als Ausnahme betrachtet wird, weil sein Name in einem längeren Rechnernamen enthalten ist (dürfte hier aber eigentlich kein Problem sein).

Ansonsten vielleicht noch ein alternativer Ansatz (ungetestet):
01.
@echo off & setlocal 
02.
 
03.
Set "Ausnahmeliste=@XXXXwpwdk120302@XXXXwpwdk148210@" 
04.
Set "OU=OU=Desktops,OU=Clients,OU=Institut,DC=XXXXdpk1,DC=XXXX,DC=intern" 
05.
Set "LDapFilter=(SAMAccountName=XXXX*)" 
06.
 
07.
for /f "tokens=2 delims=,=" %%a in ('dsquery * "%OU%" -filter "%LDAPFilter%" -limit 0') do ( 
08.
    echo %Ausnahmeliste%|findstr /i /c:"@%%a@">NUL || ( 
09.
        ping -n 1 %%a | find /i "Antwort von" >NUL && echo %%a ist online und keine Ausnahme --^> ausschalten! 
10.
11.
)
Die Zeilen 7 bis 11 ließen sich natürlich auch kompakter (= in einer Zeile) schreiben, aber die wäre dann doch etwas lang ...

Zuerst nach der Ausnahme zu fragen erspart übrigens einen "ping" (fällt aber bei nur wenigen Ausnahmen auch kaum ins Gewicht).
Ach ja, eine "Anmerkung" noch zu Deinem Code:
Anstelle von
01.
Set IsOnline=Nein 
02.
ping -n 1 %Rechner% | find /i "Antwort von" >NUL: && Set IsOnline=Ja 
03.
if /i "%IsOnline%"=="nein" goto :eof
würde ich eher
01.
Set "IsOnline=" 
02.
ping -n 1 %Rechner% | find /i "Antwort von" >NUL: && Set IsOnline=Ja 
03.
if not defined IsOnline goto :eof
verwenden, da eine "defined"-Abfrage auch innerhalb einer Schleife ohne "delayedExpansion" funktioniert - der zugewiesene Wert ist egal, es soll ja nur der Zustand des "Schalters" ("flags") geprüft werden ....

Grüße
bastla
Bitte warten ..
Mitglied: bodyparts
19.03.2011 um 10:38 Uhr
richtig sehe grade die Rechner vari....
Bitte warten ..
Mitglied: BigWim
21.03.2011 um 08:43 Uhr
Guten Morgen Bastla,

Sollte jedenfalls grundsätzlich so klappen
Da war ich mir (fast) sicher. Habe es ja hier getestet.

Da ich eher zur Vorsicht neige, würde ich etwas mehr Anführungszeichen spendieren
am Wochenende habe ich jetzt endlich auch mal verstanden, für was das gut

und für die Ausnahmen andere Trennzeichen, und zwar auch vor dem ersten und nach dem letzten Namen - Sinn der
Aktion: Damit kann ich sicher ausschließen, dass ein Rechner mit kürzerem Namen deshalb als Ausnahme betrachtet wird,
weil sein Name in einem längeren Rechnernamen enthalten ist (dürfte hier aber eigentlich kein Problem sein).
Mandantenfähig. Soweit muß ich hier zum Glück nicht denken. Da wir ein Namenskonzept haben, sollte das bei uns hier kein Problem sein,
aber Du hast Recht: Bei der Veröffentlichung solcher Scripte sollte zumindest darauf hingewiesen werden.

Zuerst nach der Ausnahme zu fragen erspart übrigens einen "ping" (fällt aber bei nur wenigen Ausnahmen
auch kaum ins Gewicht).
Unschlagbar richtig

verwenden, da eine "defined"-Abfrage auch innerhalb einer Schleife ohne "delayedExpansion" funktioniert -
der zugewiesene Wert ist egal, es soll ja nur der Zustand des "Schalters" ("flags") geprüft werden ....
Und wieder etwas gelernt.

Ich gebe zu, dass ich mir ein zwei kleine Tipps erhofft habe, obwohl es ja nicht meine Anfrage war, aber so eine ausführliche Kommentierung. Mindestens ein ebenso großes Dankeschön für Deine Mühe!

Grüße
Markus
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(2)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
Microsoft
12 Windows Clients zentral administrieren (9)

Frage von kaufmann zum Thema Microsoft ...

Windows Update
WSUS zeigt max. 69 Clients an (2)

Frage von TheGoodOne zum Thema Windows Update ...

Google Android
ANDROID - PING (2)

Frage von MrRobot1997 zum Thema Google Android ...

Heiß diskutierte Inhalte
LAN, WAN, Wireless
gelöst Server erkennt Client nicht wenn er ausserhalb des DHCP Pools liegt (28)

Frage von Mar-west zum Thema LAN, WAN, Wireless ...

Windows Server
Server 2008R2 startet nicht mehr (Bad Patch 0xa) (18)

Frage von Haures zum Thema Windows Server ...

Outlook & Mail
Outlook 2010 findet ost datei nicht (18)

Frage von Floh21 zum Thema Outlook & Mail ...