我正在尝试更新文件夹的文件夹权限,直到它到达特定文件夹
一旦找到这些文件夹,它将需要停止并转到子文件夹内的下一个文件夹。例如,c: est\ 将有 20 个子文件夹,这些文件夹内可能还有 20 个子文件夹,其中一个文件夹称为 admin,并且具有里面的子文件夹。
我希望它更改所有文件夹的权限,直到到达 c: est ..... dmin 然后转到 c: est \ 而不更改 admin 文件夹内的文件夹的权限。
这是我目前的代码
$Folders = Get-ChildItem -Path "P:\100-LAN LLP" -Recurse -Directory
$Folders2 = Get-ChildItem -Path "P:\300-EE" -Recurse -Directory
$Folders3 = Get-ChildItem -Path "P:\400-House_Insp" -Recurse -Directory
$Folders4 = Get-ChildItem -Path "P:\500-AR" -Recurse -Directory
$Folders5 = Get-ChildItem -Path "P:\600-SP" -Recurse -Directory
$Folders6 = Get-ChildItem -Path "P:\800-Survey" -Recurse -Directory
$Folders7 = Get-ChildItem -Path "P:\900-VR" -Recurse -Directory
$Folders8 = Get-ChildItem -Path "P:\200-AE" -Recurse -Directory
$AccessRule = New-Object System.Security.AccessControl.FileSystemAccessRule("LANNJ\Domain Users","Modify","deny")
$AccessRule2 = New-Object System.Security.AccessControl.FileSystemAccessRule("LANNJ\Domain Users","Read","Allow")
$AccessRule3 = New-Object System.Security.AccessControl.FileSystemAccessRule("LANNJ\Domain Users","write","deny")
foreach($folder8 in $Folders8)
{
$folder8.FullName
if($folder8.name -eq "Admin" -or $folder.Name -eq "Cad" -or $folder.name -eq "20000-AE" -or $folder.name -like "proposals")
{
write-host $folder.name " was found"
break
}
$acl = get-acl $folder.FullName
$acl.RemoveAccessRule($AccessRule)
$acl.SetAccessRule($AccessRule2)
$acl.SetAccessRule($AccessRule3)
$acl | Set-Acl $folder8.FullName
get-acl $folder8.FullName | fl
}
我尝试使用嵌套循环,但它继续进入管理等文件夹内的文件夹。 我尝试获取搜索文件夹的深度编号并将文件夹位置更改为负数,但它不起作用。
您将递归地获取所有文件夹,然后仅在名称等于这些术语中的任何一个时才忽略。在这些省略的文件夹下找到的任何子文件夹仍将被使用,因为您没有明确省略它们,例如“Admin”、“Cad”等。
这是一种递归获取文件夹的方法,同时忽略具有特定名称的文件夹及其子文件夹
function Get-FolderWithExclusions {
param(
[Parameter()]
$Path,
[Parameter()]
[string[]]
$FoldersToExclude
)
$folders = Get-ChildItem -Path $Path -Directory | Where-Object BaseName -NotIn $FoldersToExclude
$folders
$folders | ForEach-Object {
Get-FolderWithExclusions -Path $_ -FoldersToExclude $FoldersToExclude
}
}
$folder8 = 'C:\temp\200-AE'
$omit = 'Admin', 'Cad'
Get-FolderWithExclusions -Path $folder8 -FoldersToExclude $omit