2008 R2主目录上的权限

我有一个Windows 2008 R2文件服务器。 这是设置,使用户到那里家驱动器映射到它H :. 它位于以下位置\\servername\home\%username%

我已经有问题与Mac用户能够看到其他用户家庭驱动器(即使枚举启用)。

我需要更改目录和所有用户子目录的权限。 有一个简单的方法来做到这一点散装有一千多。

我已经看了Set-Acl http://helgeklein.com/setacl/examples/managing-file-system-permissions-with-setacl-exe/但是我没有看到它将如何做所有用户家庭驱动器已经存在。 如果有人知道一个很好的工具。

我想将以下权限应用于%username%文件夹

 SYSTEM - Full control local\Users special list and read attributes local\administrators - Full control %username% = modify 

谢谢

或者,如果你更喜欢PowerShell,我的一个技术人员写了这个对我们很好的工作。 我确定它可以清理一些,但是我留在了一些testing线上,使它更容易玩和定制。 这使用您不再需要的Quest工具 ,特别是在PowerShell v2和SubInACL上时 :

 cls #Add-PSSnapin quest* #$dirlist = gci -name c:\test -Exclude *.* | sort #my original $dirlist = gci \\servername\sharename -Exclude *.* | ? { $_.PSIsContainer } $subinacl = "C:\utils\subinacl.exe" foreach ($userdir in $dirlist) { $username = $userdir.name $adaccount = Get-QADUser $username #Verifies user is an active employee, renamed folder to be deleted if not If (($adaccount.AccountIsDisabled -eq $TRUE) -or (!$adaccount)) { write-host "$username is not a current employee" #takeownership #takeown /f $userdir /R /DY /A #rename folder to _DEL_originalname $newname = "_DEL_$username" rename-item -path $userdir -newname $newname } Else { #get full path Write-Host $userdir.name #$currentDir = "c:\test\$userdir" #my original $currentDir = $userdir.FullName # this way you don't dupe the start folder #takeown /f $userdir /R /DY /A #get ACL of folder $acl = Get-Acl $currentDir #variable to set new permissions for username of folder #$permission = "domainname\$userdir",”FullControl”,”ContainerInherit,ObjectInherit”,”None”,”Allow” #original $permission = "[email protected]",”FullControl”,”ContainerInherit,ObjectInherit”,”None”,”Allow” $accessRule = new-object System.Security.AccessControl.FileSystemAccessRule $permission #actually set the permissions $acl.SetAccessRule($accessRule) #$acl | Set-Acl $currentDir #my original Set-Acl $currentDir $acl #use subinacl to set owner at parent level and below $params1 = "/file $currentDir /setowner=domainname\$username" $params2 = "/subdirectories $currentDir\*.* /setowner=domainname\$username" $params3 = "/subdirectories $currentDir\* /grant=domainname\$username" $params4 = "/subdirectories $currentDir\* /grant=domainname\administrators=F" Invoke-Expression "$subinacl $params1" | out-null Invoke-Expression "$subinacl $params2" | out-null Invoke-Expression "$subinacl $params3" | out-null # Invoke-Expression "$subinacl $params4" | out-null } } 

这个脚本是我在win 2008上用来重置名为e:\ users的目录上的用户安全性的一个脚本。 它将所有权重置为正确的所有者并设置标准的安全configuration文件。 它使用了内置的2008年的接口和icacls,所以不需要外部工具。

它假设用户名和目录名是相同的。 即e:\ users \ j.doe由mydomain \ j.doe所有

如果你传递一个像j.doe这样的参数,它只能“纠正”那个目录,所以你可以在一个目录下进行testing。 在使用之前检查安全权限是你想要的。 我用这个来改正一些在脚本中复制文件的迁移。

 @echo off setlocal enabledelayedexpansion set mydom=mydomainname set domadmins=%mydom%\Domain Admins set domadmin=%mydom%\administrator for /d %%A in (e:\users\%1*) do ( echo %%~nA%%~xA %%A echo. echo takeown takeown /f %%A /r /dy echo. echo reset security icacls %%A\*.* /reset /t echo. echo reset user access icacls %%A\*.* /grant:r "%mydom%\%%~nA%%~xA:(oi)(ci)F" echo. echo Add domainadmins icacls %%A\*.* /grant:r "%domadmins%:(oi)(ci)f" /grant:r "%mydom%\%%~nA%%~xA:(oi)(ci)F" /grant:r "%domadmin%:(oi)(ci)f" /grant:r "SYSTEM:(OI)(CI)F" /t /c rem echo. rem echo add user full access rem icacls %%A /grant:r "%mydom%\%%~nA%%~xA:(oi)(ci)F" /t /c icacls %%A\*.* /inheiritance:r echo. echo reset user ownership @echo on icacls %%A\*.* /setowner %mydom%\%%~nA%%~xA /t /c @echo off) echo finished 

我发布了一些小的更改,所以可能会有语法错误。