30190
Goto Top

Home-Shares aufräumen

User Home-Shares anhand existierender Domain-User aufräumen (löschen).

Hallo an alle,

seit einiger Zeit habe ich die Vermutung dass einige Verzeichnisse auf unserem Home-Share Server (Win2003) nicht mehr aktuell sind.
Damit meine ich dass die User in der Domäne überhaupt nicht mehr existieren.

Gibt es eine einfache Möglichkeit die existierenden User zu ermitteln - die Homeshares auslesen (sind im Profil angegeben, nicht per *.bat oder *.kix) - die "benötigten" Home-Shares gegen eine Liste der vorhandenen laufen zu lassen und alle Home-shares zu nicht existenten Usern anzuzeigen?

Klingt doch eingentlich sehr einfach - ich hab nur keine Startvorstellung. Leider kann ich selber kein VBS und möchte damit meine vielbeschäftigten Kollegen nicht nerven. Ich würde einen Versuch per PHP starten da ich dies kann face-wink ist aber nicht wirklich sinnvoll in dieser angelegenheit wie ich finde.

FYI:

ca. 3500 User
Windows 2003 Domain


PS: Ich kann mir nicht vorstellen dass dieses Problem noch kein Anderer hatte. Vielen lieben Dank für jede Hilfe und / oder Info!!


Cheers

Nils

Content-Key: 32992

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

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

Member: superboh
superboh May 22, 2006 at 19:03:28 (UTC)
Goto Top
Hm,

mit VBS kenne ich mich auch nicht so aus, aber mit einer Liste der User und einer Schleife kannst Du die Basisverzeichnisse mit der Zeile

net user HansDampf /Domain | find "Basisverzeichnis"

auslesen. Jetzt noch gegenprüfen und das wars face-smile
Sorry, mehr bekomme ich auf die Schnelle nicht zusammen.

Gruß,
Thomas
Mitglied: 30190
30190 May 24, 2006 at 11:00:52 (UTC)
Goto Top
Hi superboh,

lieben Dank für die Antwort, leider hilft mir das nicht wirklich weiter bei der Anzahl von Usern.
Das sollte schon ein etwas automatierterer Prozess sein.

Also eine Liste der existierenden User könnte ich hinbekomen.

Ich denke ich werde es dann doch mit PHP machen obwohl dies ja nun als Adminscript nicht wirklich schön unetr Windows ist da es hier keine CLI für PHP gibt - oder kenne ich die nur nicht?

Vielleicht hat jemand hier noch n Hint für mich ...


Ich kann mir wirklich nicht vorstellen dass ich der einzige bin der dieses Problem auf seinen Windows Servern hat ...

hmm...


Lieben Gruß

Nils
Member: superboh
superboh May 24, 2006 at 13:20:04 (UTC)
Goto Top
Hi,

also ich meinte schon automatisiert ...
- eine Lister der User erstellen
- eine Liste aller Homeverzeichnisse erstellen
- dann pro User aus der Userliste das Homeverzeichnis mit der Befehlszeile die ich Dir geschrieben habe auslesen und vergleichen ob dieser Pfad in der Liste der Homeverzeichnisse steht. Wenn ja, diese Zeile aus der Liste löschen. Somit wird die Liste immer kürzer und Du hast zum Schluss die Verzeichnisse, welche keinem User zugeordnet sind.

Per Batch bin ich leider nicht so fit dass ich das mit der Schleife grad so aus dem Ärmel schütteln könnte. Persönlich würde ich so was in KIX schreiben.

Der einzige bist Du sicher nicht der das Problem hat, aber gerade bei der Anzahl der User müsste es halt irgendwie geregelt sein, dass wenn ein User gelöscht wird, auch das Homeverzeichnis, das Profil, das Postfach, ... mit gelöscht wird.
Und wenn man Altlasten beseitigen muss, ist das halt 1x Fleissarbeit, entweder ein Script zu schreiben oder es von Hand zu machen.

Versuch mal ob Du weiterkommst, wenn nicht melde Dich nochmal.

Gruß,
Thomas
Member: superboh
superboh May 29, 2006 at 22:18:47 (UTC)
Goto Top
Hi Nils,

falls Du es noch nicht selbst gelöst hast ... ich hatte Langeweile face-big-smile ... hier eine Lösung als KIX-Script:

Break on

$Homepfad="\\Server1\Home\"  

; Homeverzeichnisse aus ADS auslesen
$rc=GetUserHome(@DOMAIN)

; Liste der vorhandenen Home-Verzeichnisse erstellen
$l3=FreeFileHandle()
$rc=Open($l3,"%TEMP%\Vorhandene_Verzeichnisse.txt",5)  
$FileName = Dir($Homepfad)
While $FileName <> "" AND @ERROR = 0  
  If $Filename <> "." AND $FileName <> ".."  
    $rc=WriteLine($l3,$Homepfad+$FileName+@CRLF)
  EndIf
  $FileName = Dir()
Loop
$rc=Close($l3)

; Einträge vergleichen
Del "C:\nicht_eingetragene_Verzeichnisse.txt"  
$l4=FreeFileHandle()
$rc=Open($l4,"%TEMP%\Vorhandene_Verzeichnisse.txt",2)  
$l5=FreeFileHandle()
$rc=Open($l5,"C:\nicht_eingetragene_Verzeichnisse.txt",5)  
$line=ReadLine($l4)
While @ERROR=0
  $merker=0
  For $i = 0 to Ubound($Home)
    If $Home[$i]=$line
      $merker=1
    EndIf
  Next
  If $merker=0 ; keine Übereinstimmung gefunden
    $rc=WriteLine($l5,$line+@CRLF) ; in Liste schreiben
  EndIf
  $line=ReadLine($l4)
Loop
$rc=Close($l4)
$rc=Close($l5)

Del "%TEMP%\Vorhandene_Verzeichnisse.txt"  
Exit

Function GetUserHome ($DomainName)
	Dim $UHome[10000]	
	$Domain = GetObject("WinNT://" + $DomainName + ",domain")  
	$Container = $Domain
		For Each $User In $Container
	  	  If $User.Class = "User"  
	      	$UHome[$x] = $User.HomeDirectory
	      	$x = $x + 1
	  	EndIf
	Next
	ReDim Preserve $UHome[$x - 1]
	$Home = $UHome
	$Domain = 0
	$Container = 0
EndFunction

Du musst nur ganz oben den Pfad eintragen, in dem die Homeverzeichnisse liegen.
Das Script liest aus der Benutzerverwaltung von allen Usern den Pfad des Basisverzeichnisses aus. Dann erstellt es eine Liste aller auf dem Server vorhandenen Homeverzeichnisse in %Temp%. Alternativ kannst Du diese Datei auch selbst anlegen und den Teil des Scripts auskommentieren, wenn Du mehr als ein Pfad hast an dem die Homeverzeichnisse liegen.
Als nächstes vergleicht das Script diese vorhandenen Verzeichnisse mit allen Pfaden die es aus der Benutzerveraltung ausgelesen hat. Wenn es einen Pfad nicht findet (sprich kein User hat in eingetragen) landet der Pfadname in einer Text-Datei direkt auf Laufwerk C: .
Diese kannst Du Dir dann mal vornehmen und schauen ob sie wirklich weg können.

Gruß,
Thomas
Mitglied: 30190
30190 May 30, 2006 at 07:12:14 (UTC)
Goto Top
Hi Thomas,

WOW !!! face-wink

Vielen lieben Dank für die Mühe !! Großer Respekt für die ordentliche nachhaltige Pflege !

Ich habe das script kopiert und werde mir das nachher mal anschauen und evtl. ein bissl anpassen. Hier gibt es ja ein recht gutes Tutorial für *.kix Geschichten.

Leider gibt es hier noch ein paar Stolpersteine die durch eine unsaubere Pflege der server shares enstanden sind ... leider, leider. Doch dafür ham die ja jetzt Dich und mich face-wink

Ich werde Dich auf dem Laufenden halten und die Änderunugen posten.


btw. ich bin in den letzten Tagen generell sehr begeistert von administrator.de. Nette, kompetente, ordentliche und tolerante Comunity !


Bis dahin...

Cheers

Nils
Member: gogoflash
gogoflash May 30, 2006 at 10:44:29 (UTC)
Goto Top
Hi,


eine Variante per Batch. Die folgendermassen funktioniert.

Aus einer OU im AD werden die Usernamen exportiert. (Userlist.txt)
Es wird geprüft, ob der jeweilige Nutzer ein Homeverzeichnis hat.
Die Verzeichnise die keinen Besitzer haben werden gemeldet. Ein del muss dann um es scharf zu machen eingebaut werden.

Diese Lösung geht davon aus das die Userverzeichnisse
- in einem Ordner liegen.
- und mit dem Sam Accountnamen übereinstimmen.

Läuft nur auf einem Windows Server ab 2000.

set hpfad=d:\users
set logpfad=d:\log

REM Variablen setzen fuer AD
REM DC Namen
	set domainc=serverA
REm Domänenname 
	set dc1=wurst
	set dc2=de
REM OU Informationen
	set ou1=Oben
	set ou2=Users


ldifde -f %logpfad%\ExportUsers.ldf -s "%domainc%" -d "ou=%ou2%,ou=%ou1%,dc=%dc1%,dc=%dc2%" -p subtree -r "(objectClass=person)" -l "SamAccountName" >> %logpfad%\log.txt  
for /f "tokens=2 delims= " %%a in ('find "sAMAccountName:" %logpfad%\ExportUsers.ldf ') do (echo %%a >> %logpfad%\userlist.txt)  

REM Verzeichnisse ohne Besitzer finden
for /f %%b in ('dir /b %hpfad%\*.* /a:D') DO findstr %%b %logpfad%\userlist.txt || echo %%b hat keinen Besitzer >> %logpfad%\loeschen.txt  


REM User ohne HOmeverzeichnis finden
for /f %%b in (%logpfad%\userlist.txt) do (IF exist %hpfad%\%%b (echo User %%b hat Userverzeichnis unter %hpfad% >> %logpfad%\verzeichnis.txt) else echo User %%b hat kein Userverzeichnis unter %hpfad% >> %logpfad%\verzeichnis.txt)


Gruß Miguel