J'ai une charge de bateau de tableaux croisés dynamiques que je télécharge tous les jours dans des dossiers tels que: Pivot0001 Pivot0002 Pivot0003powershell utilisateur pour obtenir une liste de tous les dossiers/téléchargements/pivots
et ainsi de suite.
J'ai également des groupes d'utilisateurs appelés Pivot0001 et ainsi de suite avec les utilisateurs qui ont besoin d'accéder à ce dossier. Ce que je dois maintenant faire est de définir les autorisations sur chaque dossier (j'en ai environ 400). Je sais que je dois faire une boucle et définir des permissions. Ce que je ne sais pas comment faire est d'obtenir une liste de tous les dossiers, puis définir les autorisations pour ce dossier.
EDIT J'ai oublié de dire que c'est pour SharePoint ... désolé
Voici le code final qui a fonctionné (pas vraiment propre, mais ça marche)
[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;
+1. Mais j'aime mieux la propriété PSIsContainer :-) – Joey
J'ai oublié de dire que c'est pour SharePoint ... désolé à ce sujet .. je vais essayer avec UNC pour voir si cela fonctionne –
Cela devrait fonctionner tant que l'utilisateur que vous utilisez le script a la permission du chemin distant. – bobbymcr