Benutzer powershell, um eine Liste aller Ordner /downloads/pivots
Also ich habe eine Boot Belastung von pivot-Tabellen, die ich hochladen Alltag zu Ordnern wie:
Pivot0001
Pivot0002
Pivot0003
und so weiter.
Ich habe auch user-Gruppen genannt Pivot0001 und so mit Benutzer müssen für den Zugriff auf diese Ordner. Was ich jetzt tun müssen, ist, legen Sie die Berechtigungen für die einzelnen Ordner (ich habe 400 oder so von Ihnen). Ich weiß, ich brauche eine Schleife und legen Sie die Berechtigungen. Was ich nicht weiß, wie zu tun ist, erhalten eine Liste aller Ordner und legen Sie dann die Berechtigungen für diesen Ordner zu.
BEARBEITEN
Ich habe vergessen zu sagen, das ist für SharePoint...tut mir Leid, dass
Hier ist der Letzte code, der funktioniert (nicht wirklich sauber, aber es funktioniert)
[Void][System.Diagnostics.Stopwatch] $sw;
$sw = New-Object System.Diagnostics.StopWatch;
$sw.Stop();
$sw.Start();
clear
$path = "\\path\to\webdav\"
$dirs = Get-ChildItem $path -Recurse | Where-Object { $_.Attributes -band [System.IO.FileAttributes]::Directory }
[Void][System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint");
$SPSite = New-Object Microsoft.SharePoint.SPSite("http://sharepoint");
$OpenWeb = $SpSite.OpenWeb("/Downloads");
[int]$i = 0;
foreach ($dir in $dirs) {
$i++
Write-Host "Setting $dir to $dir" -F Green;
$path = "http://sharepoint/Downloads/" + $dir;
$TheNewGroup = $OpenWeb.GetFolder($path);
[Microsoft.SharePoint.SPFolder]$folder = $OpenWeb.GetFolder($path);
[Microsoft.SharePoint.SPGroupCollection]$spc = $OpenWeb.SiteGroups;
[Microsoft.SharePoint.SPGroup]$group = $spc[$dir];
[Microsoft.SharePoint.SProleAssignment]`
$roleAssignment = New-Object Microsoft.SharePoint.SPRoleAssignment([Microsoft.SharePoint.SPPrincipal]$group);
$OpenWeb.GetFolder($path).Item.BreakRoleInheritance("true");
$roleAssignment.RoleDefinitionBindings.Add($OpenWeb.RoleDefinitions["Read"]);
$OpenWeb.GetFolder($path).Item.RoleAssignments.Add($roleAssignment);
}
Write-Host "found $i Folders" -F Green
$SPSite.Dispose();
$sw.Stop();
$howlong = $sw.Elapsed.ToString();
write-host "Took: " $howlong -f Green;
Du musst angemeldet sein, um einen Kommentar abzugeben.
Etwas wie dies funktionieren sollte:
Den oben genannten Werken für eine normale lokale Datei-system-Pfad, aber SharePoint hat eine andere Ordner-security-Modell. Ich fand eine blog-Beitrag von Robert Gruen, der erklärt, wie Sie programmgesteuert Berechtigungen festlegen. Er gibt diese C# - code-Beispiel:
Ich bin mir sicher, mit ein wenig übersetzung, diese könnten angepasst werden, um PowerShell.
Immer eine Liste von Ordnern ist nicht gerade einfach, aber leicht verständlich:
Dann können Sie Rohr, das weiter in die
ForEach-Object
cmdlet wo kann man die Berechtigungen setzen:OK, herausgefunden, was mir fehlte, hier ist mein code:
Der Schlüssel ist, geben Sie die vollständige URL-Pfad für den Ordner zu überprüfen.