Dies ist mein erster Beitrag in Stackoverflow, ich habe seit vielen Jahren viele fantastische Fragen, Antworten und andere verschiedene Beiträge gelesen. Ich habe viel von dieser fantastischen Community gelernt. Ich hoffe jetzt, dass ich den mutigen Schritt getan habe, um wirklich meine Zähne in Powershell zu versenken und mich dieser Gemeinschaft anzuschließen, die ich irgendwie beitragen kann!Powershell: Advanced File Age Suche
Also habe ich begonnen, an einem Projekt zu arbeiten, das auf seiner grundlegenden Kernebene - Liste alle Dateien, die älter als 7 Jahre sind, so dass sie dann überprüfen und löschen können, wo möglich.
Ich habe jedoch das gesamte Skript in mehrere Etappen aufgeteilt. Ich bin derzeit bei einer Stufe in der Stufe 2 stecken.
Ich habe seit etwa 2 Tagen auf was zu viele von Ihnen Powershell-Genie ist da draußen kann nur 10 Minuten, um herauszufinden, stecken!
Ich muss mich entschuldigen für meine Dummheit und Mangel an Wissen, meine Erfahrung mit Powershell-Skripting ist auf buchstäblich 5 Arbeitstage begrenzt, ich bin derzeit tauchen und lernen mit Büchern, aber ich habe auch einen Job, dies zu tun lernen Sie den einfachen Weg!
Mein Skript hat im Wesentlichen 3 Schritte;
Führt eine Get-ACL von obersten DATA-Ordnern aus, um eine Liste aller Gruppen zu erstellen, die über Berechtigungen für einen bestimmten Ordner verfügen. Ich möchte dann entweder diese Daten exportieren oder einfach für den nächsten Schritt halten.
Filtern Sie diese gesammelten Informationen basierend auf einer CSV, die eine Spalte mit der Bezeichnung Rolle enthält (Rolle enthält eine Gruppe, in der der Ordner-Manager exklusiv ist), und prüfen Sie das inhärente Mitglied dieser exklusiven Gruppe (vielleicht muss dieses letzte Bit ein weiterer Schritt auch?)
Speichert oder exportiert diese Liste von exklusiven Mitgliedern mit ihren relevanten Ordner, um später als Variable zu verwenden, um eine E-Mail mit einer Liste von Dateien zu senden, die gelöscht werden müssen.
Mit dem Skript unten ich im Wesentlichen auf Schritt steckte 2 und wie einen Filter aus der CSV (oder gespeicherten Variablen?) Erstellen und es auf die GET-ACL foreach-Schleife. Ich gehe vielleicht den ganzen falschen Weg mit Regex, und um ehrlich zu sein, das meiste davon ist Kopieren und Einfügen und Lesen im Internet, wo Menschen ähnliche Aufgaben erledigt haben. SO entschuldige ich mich nochmal, wenn das von Anfang an nur eine dumme Art ist.
Ich möchte allen im Voraus für alle Hilfe, Meinungen und Ratschläge danken, ich werde alles hören und ich werde versuchen und nehmen an Bord so viel wie mein Gehirn verarbeiten kann - ich verspreche!
#$RoleList = import-csv "C:\DATA\scripts\GB_CMS\CSV\datafolders_rolelist.csv"
#foreach ($Manager in $RoleList) {
#$FolderManager = $RoleList.Role
$FolderManagers = Import-Csv C:\DATA\scripts\GB_CMS\CSV\datafolders_rolelist.csv | foreach {
New-Object PSObject -prop @{
Folder = $_.Folder;
Manager = $_.'Folder Manager';
Role = $_.Role
}
}
$Role = $FolderManagers.Role
$Role
gci "c:\DATA" | Where {$_.PSIsContainer} | get-acl |
ForEach $_.Name {
[regex]$regex="\w:\\\S+"
$path=$regex.match($_.Path).Value
$_ | select -expand access |
$
where {$_.identityreference -like "$Role"} |
Select @{Name="Path";Expression={$Path}},IdentityReference
}
Danke, Daniel.
Hallo, Vielen Dank für die Antwort und vergib mir für die Verzögerung bei der Reaktion. Ich habe das getestet und wie Sie gesagt haben, hatte ich Probleme, es zu starten. Ich bekomme das Problem mit dieser Linie; # Run durch die Gruppe/Benutzer ACL-Einträge auf den Ordner foreach ($ Gruppe in (Get-Acl $ _) Access.IdentityReference.) Es erzeugt diesen Fehler: Get-Acl: Can not Weg finden ' Folder1 ', weil es nicht existiert. In Zeile: 13 Zeichen: 25 + foreach ($ Gruppe in (Get-Acl $ _). Access.IdentityReference) – danielbostock
Ich werde weiterhin an dem Skript arbeiten heute in dem Versuch herauszufinden, warum Get-ACL ist Der vollständige Pfad der Ordner kann nicht vom vorherigen GCI-Befehl abgerufen werden. Aufgrund meines begrenzten PS-Wissens kann ich es anfangs nicht sehen, werde es aber versuchen und herausfinden, und ich werde meine Antwort aktualisieren, wenn ich es getan habe. – danielbostock
Übrigens ist Ihre Antwort in der Regel recht und hat interpretiert, was ich erreichen möchte, es war sehr hilfreich, besonders bei der Verwendung des foreach-object Befehls, was ich denke, dass das, was Sie zur Verfügung gestellt haben, was ich sein könnte fehlte. – danielbostock