thl1966
Goto Top

Powershell - UserID-Liste übergeben und Company Objekt aus AD auslesen und Liste dann speichern

Hallo liebe Forenteilnehmer,

stehe vor der Aufgabe ein Laufwer zu konsolidieren.
Im ersten Schritt musste ich die UserID der bestehenden Daten ermitteln.
Diese habe ich jetzt in einer Excel-Liste (Exportiert mit TreeSize Professional V6.01)
Nun gibt es bei vielen UserIDs verschiedene Firmengruppen, die im Company Objekt in der AD gespeichert ist.

Jetzt meine Frage:

Wie kann ich in Powershell die von mir bereits erzeugte Liste mit dem AD abgleichen und dann erneut mit einer zusätzlichen Spalte wieder abspeichern?

Active Directory Modul ist bereits geladen.

Vielen Dank im Voraus.

Thomas

Content-ID: 222479

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

Ausgedruckt am: 20.11.2024 um 13:11 Uhr

Chonta
Chonta 20.11.2013 um 09:20:14 Uhr
Goto Top
Hallo,

was genau ist denn Dein Ziel?
Und was genau ist gegeben?

Gruß

Chonta
thl1966
thl1966 20.11.2013 um 13:15:16 Uhr
Goto Top
Hallo Chonta,

mein Ziel ist es am Ende eine Liste zu haben mit allen Namen (UserID) und Organisationsname für entsprechende Ordner, die ich über TreeSize exportiert hatte.

Beispiel Export:

NamederDatei.Ext, Pfad, Größe, Letzte Änderung, Letzter Zugriff, Dateityp, Besitzer

Dann habe ich erst mal eine Excel-Tabelle mit allen Daten die älter sind als 31.12.2012 und egal wie alt.
In dieser Liste stehen natürlich in der letzten Spalte der Besitzer der Datei.
Dies kann auch öfters vorkommen (evtl. kann man eine Grppierung durchführen)

Jetzt will ich folgendes mit der Powershell realisieren:

Anhand der Besitzer in dieser Excel-Tabelle den Displaynamen, Companyname und Abteilung aus der AD auslesen und in der gleichen oder neuen Excel-Tabelle schreiben lassen.

Nachdem ich so eine Liste habe, kann ich diese per Mail informieren über die bestehende Datenkonsolidierung.

Evtl. kann man das ganze sogar komplett in Powershell realisieren ohne TreeSize zu benutzen.
Hierzu müsste man ein bestimmtes Netzlaufwerk scannen und alle Daten, die älter sind als 31.12.2013 und egal wie alt mit
Dateiname, Pfad etc (wie oben beschrieben) exportieren mit den entsprechenden Infos aus der AD.

Gruß

Thomas
Chonta
Chonta 20.11.2013 um 14:26:24 Uhr
Goto Top
Hallo,

also höhrt sich für mich so an, als würdest Du gerne die NTFS Rechte aller Ordner und Dateien Dokumentieren.

Da bringt es Dich aber nich weiter, die Ersteller/Besitzer zu Dokumentieren und in einer Datei festzuhalten. Der Companyname sollte ja gleich sein oder gibt es Domänen mit Vertrauensstellungen?
Wenn Du den Besitzer namen schon hast, kannst Du auch das AD anhand dieses Namens nach dem Rest fragen.
Mit Scripten kann man auch mit reinen Bordmitteln alle Ordner/Dateien auslesen und die ACL abfragen (bzw evtl brauchst Du Tools aus den Sysinternals).

Die Liste wer ist Besitzer welcher Date sagt Dir über die Zugriffe vom Rest des AD noch nix.
Es gibt auch Kostenpflichtige Tools dafür die einfacher zu handhaben sind.
Die Frage ist nur was ist der Zweck des ganzen. Eine Liste wem welche Datei gehöhrt bringt Dir nicht wirklich was, da andere gf trozdem Zugriff haben oder sogar löschen dürfen.
Wenn die Daten strucktoriert werden sollen.

1: Was sind das für Daten
2: Anforderungen für Zugriffe (dazu gehöhrt auch wer soll welche Daten einsehen können)
3: Strucktur anhand der Anforderungen erstellen
4: Anlegen von Gruppen für die Zugriffe (Nur Gruppen bekommen Zugriffe auf Daten)
5: Kopieren der Daten in die neue Strucktur
6: Setzen der neuen Berächtigungen vererben erzwingen ggf. vorher alles in Adminbesitz und dann Rechtevergabe.

Und dann kannst Du auch die ersten Ebenen die Gruppenmitgleidschaften notieren bis zu den Punkten wo die Vererbung geht bzw. ab wo sie neu beginnt.
Alles andere ist ein Wust den man zwar Dokumentiren kann aber keiner durchblickt.

Gruß

Chonta
thl1966
thl1966 20.11.2013 um 15:20:58 Uhr
Goto Top
Hallo Chonta,

es gibt mehrere Domänen mit Vertrauensstellungen.
Die Liste bekommt am Ende die Anwender zu sehen, um zu wissen, welche Daten sie verschieben bzw. löschen müssen.
Hintergrund ist der, dass dieses Laufwerk im Sommer schon von einer bestimmten Domäne entfernt worden ist.
Die Rechte sind im Moment auf "Everyone" gesetzt. Dies soll geändert werden. Bestimmte Ordner, die mit vielen Anwendern gemeinsam verwendet werden müssen eine Globale Gruppe beantragen und dies wird dann nach dem A-G-DL-P Prinzip auf den jeweiligen Ordner berechtigt. Alle anderen Ordner werden nach ca. vier Wochen gelöscht, wenn die Anwender Ihre Daten nicht sichern-/verschieben oder löschen.

Damit ich und auch der Anwender weiß, welche Daten ihm zugeordnet sind mache ich eine Datenanlayse via TreeSize Professional V6.01. Funktioniert perfekt, bis auf den Punkt, dass ich in der Liste noch einige AD-Merkmale benötige, die ich halt gerne ergänzen möchte. Ob dies mit Powershell oder anderen Programm realisiert wird, ist mir egal. Wichtig ist das Ergebnis.

Perfekt wäre jeden Ordner auszulesen und dann eine Excel-Datei zu erstellen mit den entsprechenden Werten aus der AD und den Pfaden. Da hier nur bestimmte Userkreise aus bestimmten Abteilungen anzusprechen sind, aber nicht alle, ist dies für mich wichtig. So kann ich dann jede Excel.-Datei hernehmen und mir die Anwender raussuchen und diese per Mail informieren, was ich machen muss. Im Moment mache ich das manuell, da dies sehr mühsam ist. Es handelt sich um ca. 9 Mill. Dateien.

Vieleicht gibt es noch den einen oder anderen Tipp, der mir bei meinem Problem weiterhilft, ansonsten muss ich vieles zu "Fuß" erledigen.

Gruß
Thomas
colinardo
colinardo 20.11.2013 aktualisiert um 21:04:31 Uhr
Goto Top
Hallo Thomas,

sollte mal in Powershell skizziert etwa so aussehen (bei einfachen Tests erfolgreich, aber nicht ausführlich getestet. Siehe wichtige Hinweise unter dem Script)
Startordner in Zeile 1 und Pfad zur Ausgabe-CSV-Datei in Zeile 2 angeben.
$startFolder = "\\Server\Freigabe"  
$csvFile = "C:\Users\Administrator\Desktop\exported_data.csv"  

Import-Module ActiveDirectory
$arrTable = @()
$files = Get-ChildItem $startFolder -recurse | ? {$_.PSIsContainer -eq $False}
foreach ($f in $files){
	$owner = $f.GetAccessControl().Owner.toString()
	$userName = $owner.Split("\")[1]  
	Try {
		$adProps = Get-ADUser $username -Properties DisplayName,Company,Department -ErrorAction SilentlyContinue
	} Catch {$adProps = $null}
	if ($adProps){
		$displayname = $adProps.Displayname
		$company = $adProps.Company
		$department = $adProps.Department
	}else{
		$displayname = ""  
		$company = ""  
		$department = ""  
	}
	$arrTable += New-Object PSObject -Property @{"Dateiname"=$f.Name;"Pfad"=$f.DirectoryName;"Größe(MB)"=[Math]::Round  
($f.Length/(1024 * 1024),3);"Letzte Änderung"=$f.LastWriteTime;"Letzter Zugriff"=$f.LastAccessTime;"Besitzer"=  
$owner;"DisplayName"=$displayname;"Firma"=$company;"Abteilung"=$department}         
}

$arrTable | sort -Property Besitzer | select "Dateiname","Pfad","Größe(MB)","Letzte Änderung","Letzter   
ugriff","Besitzer","DisplayName","Firma","Abteilung" | export-csv $csvFile -Delimiter ";" -NoTypeInformation -Encoding UTF8  
Wichtiger Hinweis: Ich muss beim Auslesen der Dateisystem-Struktur darauf hinweisen, dass wenn ein Pfad länger als 248 Zeichen ist, dieser nicht ausgelesen werden kann (Ist leider ein blöder Bug in .NET und der Powershell) und es zu Fehlern kommt. Dies ist Sicherzustellen. Außerdem sollte das Script von einem Admin-Account ausgeführt werden welcher auf alle Dateien der Freigabe Zugriff hat.

Grüße Uwe