joml
Goto Top

GPO LoginScript Benutzer

Hallo allerseits,

Folgendes Problem:

Ich muss per GPO ein LoginScript verteilen, dass einen Update auf dem Client durchführt.

Frage:
Ist es möglich, das LoginScript mit Adminrechten laufen zu lassen und es soll NUR einmal ausgeführt werden.
(Sonst würde es ja bei jedem login durchlaufen).

Filecheck wird im Script abgearbeitet, doch wäre es Sinnvoll, wenn diese GPO nur einmal pro Client ausgeführt wird.

Vielen Dank

Gruss
JOML

Content-Key: 73484

Url: https://administrator.de/contentid/73484

Printed on: April 24, 2024 at 18:04 o'clock

Member: TuXHunt3R
TuXHunt3R Nov 13, 2007 at 20:06:10 (UTC)
Goto Top
Falls das Ganze eine einmalige Sache ist (wenn du regelmässig solche Updates verteilen musst, musst du dir was besseres einfallen lassen):

Mit Adminrechten laufen lassen:
Erstell einen temporären Account ohne Passwort (möglichst einen nicht-schlüssigen Benutzernamen), welcher auf den Clients lokale Adminprivilegien hat. Bastel dir nachher eine Batchdatei, welche mit dem Befehl "runas" dein Script aufruft. Diese Batchdatei verteilst du dann per GPO. Sobald das Script auf allen Clients durchgelaufen ist, lösche diesen temporären Benutzer sofort wieder.

Warum einen Account ohne Passwort?
Klar, es ist unsicher, aber der Runas-Befehl erlaubt es nicht, das Passwort des Accounts mit zu geben. Jeder Benutzer müsste also das Passwort eingeben, was nicht gerade eine praktikable Lösung ist. Wenn der Account 2-3 Tage existiert, das Update dann auf allen Kisten drauf ist und du nicht gerade einen offensichtlichen Benutzernamen gewählt hast, sollte das schon gehen.


Update nur einmal ausführen:
Du kannst ein zentrales Logfile anlegen und den oben erwähnten Batch zuerst überprüfen lassen, ob das Update auf diesem PC schon durchgeführt wurde.
Deine Batch könnte dann z.B. so aussehen (nicht getestet):
@ echo off

::Herausfinden, ob der aktuelle Computername schon im Logfile existiert
::Wenn ja, springe ans Ende des Batchs
find /i "%computername%" <Pfad zu deinem zentralen Logfile>  
if errorlevel 0 goto end

::Aufruf des Scripts mit priviligiertem Account
runas ...

::Aktuellen Computernamen ins Logfile schreiben
echo %computername% >><Pfad zu deinem zentralen Logfile>

:end



Dies ist eine Bastellösung, die ich in der Form bisher einmal angewendet habe. Das war aber eine einmalige Sache und ich fand es damals eine schnelle Lösung für ein Netzwerk-weites Problem. Wie gesagt, wenn solche Updates regelmässig vorkommen, solltest du dir was besseres überlegen.

Vergiss vor allem nicht, den priviligierten Account sofort wieder zu löschen, wenn das Update überall drauf ist!!!!!!


Edit:

Eine andere Lösung wäre natürlich, das Update mit deinem Account (der wahrscheinlich dazu priviligiert ist) irgendwann in der Nacht per geplanten Task zu starten. Dann müssten aber sämtliche Clients entweder die ganze Nacht durchlaufen oder du müsstest Wake On Lan in deinem Netzwerk eingerichtet haben (so läufts bei uns im Betrieb)
Member: Dani
Dani Nov 13, 2007 at 20:26:34 (UTC)
Goto Top
Abend JOML,
eine andere Lösung wäre ein Computerloginscript. Sprich es wird beim System hochfahren ausgeführt. Alles was dort drinne steht, wird unter dem Benutzer "System" ausgeführt und somit volle Administratorenrechte.
Somit brauchst du keine Accounts ohne Passwörter und der Aufwand ist gering.

Filecheck wird im Script abgearbeitet, doch wäre es Sinnvoll, wenn diese GPO nur einmal pro
Client ausgeführt wird.
Ich würde innerhalb der Batch nachdem 1. Ausführen einen Checkpoint auf dem Clients hinterlassen. In deinem Fall eine Textdatei mit dem Namen des Updates und darin das Ausführungsdatum. Ein Schritt mehr wäre es, einfach eine Freigabe (am Besten versteckt) einzurichten für alle Logdateien der Clients.

Beispiel:
Freigabe Logfiles
  - Update x.x.x.2x
  - Update 32c.3x3.a3
Somit hättest du alles Griffbereit und sauber protokolliert.

Die Batchdatei dazu, würde so aussehen:
@echo off

set update=update_2xx.3xf34.3


if not exist "\\%server%\logs$\%update%\%computername%.txt" (  

echo Start: %date% - %time% >> "\\%server%\logs$\%update%\%computername%.txt"  
....
UPDATE PROCESS
....
echo Ende: %date% - %time% >> "\\%server%\logs$\%update%\%computername%.txt  
)
Somit hast du die totale Kontrolle darüber und kannst mit dem einfachen Löschen der Textdatei den Updateprozess wieder anstoßen.
Die NTFS-Rechte auf die Freigabe kannst du bis auf alle CLIENT - Computerkonten, System und ADministrator eingrenzen. Diese brauchen aber alle Vollzugriff. Somit kommt ein normaler Benutzer nicht auf die Freigabe.


Grüße
Dani
Member: JOML
JOML Nov 17, 2007 at 01:29:21 (UTC)
Goto Top
Hi Dani,

Das mit dem Logfile auslesen ist eine gute Idee. Vielen Dank face-smile
Hab ein Logfile auf dem Server der alle Compternamen enthält, die geupdated wurden.

Wie kann ich jetzt den inhalt der txt Datei nach diesem Namen abfragen.. so nach dem Prinzip:


If exist "\\%server%\logs$\%update%\Update.txt" (inhalt irgendwo %computernamen%)
goto :END


Gruss
JOML
Member: Dani
Dani Nov 17, 2007 at 10:31:54 (UTC)
Goto Top
Hi JOML,
schau mal mein Beispiel nochmal an und dann Kommentar. Dann wirst du die Lösung sehen. *g*


Grüße
Dani
Member: JOML
JOML Nov 17, 2007 at 10:55:21 (UTC)
Goto Top
Hi Dani,

Nö.. leider nicht.
Du suchst im Ordner %Update% nach einer Datei %Computernamen%.txt... oder?

Ich möchte aber in einer Datei"Update.txt" den Inhalt nach %Computernamen% durchsuchen.

Mein Favorit wäre da der Vorschlag von "TuXHunt3R"....

find /i "%computername%" \\server\Updates$\update.txt
if errorlevel 0 goto end

Oder sehe ich da was falsch... ? face-smile


Nice Weekend
JOML
Member: TuXHunt3R
TuXHunt3R Nov 17, 2007 at 16:47:17 (UTC)
Goto Top
Hallo JOML2005

So wie ich das sehe, erstellt das Script von Dani pro upgedateten Computer ein Logfile. Bei meiner Lösung werden alle Computernamen, die geupdatet wurden, in ein und das selbe Logfile geschrieben. Mit dem Find-Befehl überprüft das Script zuerst, ob der Computername in diesem Logfile bereits existiert. Wenn ja, bricht er das Script ab, d.h. er springt ans Ende des Scripts.

Wenn du alle Computernamen also in ein und das selbe Logfile schreibst, musst du meine Lösung mit dem find-Befehl nehmen.