2017-02-14 104 views
1

我已经开始强制自己为GPO使用PowerShell脚本。我已更新GPO以允许此操作,但我正在寻求允许域管理员访问现有漫游用户配置文件的用户配置文件。允许域管理员访问漫游用户配置文件和重定向文件夹

icacls.exe \\sharedpath\user` profiles$\%username%.v2 /grant “domain\Domain Admins”:F /T /Q 

这一个是用于用户配置文件。花了点谷歌找出`交易空间的路径。不过,我真的坚持:

icacls.exe:无效的参数“域\域管理员”

我似乎无法找到参数与空间任何东西。我尝试了明显的'字符,但这没有什么区别。

+3

当[组策略](https://support.microsoft.com/en-us/kb/222043)执行相同操作时,请勿使用脚本。不要使用印刷报价。将空格放在引号中,而不是用反引号转义空格。另外,PowerShell不会识别环境变量的'%'表示法,而CMD不会将反引号识别为转义字符。如果由于某种原因,您需要从PowerShell运行'icacls'命令行,无论如何都要这样做:'icacls.exe'\\ sharedpath \ user profiles $ \ $ env:USERNAME.v2“/ grant”domain \ Domain Admins:F “/ T/Q' –

回答

0

PowerShell的方式:

$profile = "\\sharedpath\user profiles`$\$($env:username).v2" 

$currentAcl = (Get-Item $profile).GetAccessControl('Access') 
$rule = New-Object System.Security.AccessControl.FileSystemAccessRule -ArgumentList "Domain\Domain Admins",'Full','ContainerInherit,ObjectInherit','None','Allow' 
$currentAcl.SetAccessRule($rule) 
$currentAcl | Set-Acl -path $profile 

不用说,你应该在登录脚本使用它之前对其进行全面测试。

+0

不需要在共享名中转义结尾的$''。 '$ env:username'附近的子表达式也不是(如果你想安全地使用'$ {env:username}'')。另外,'Set-Acl'在设置ACL时有时会遇到问题,例如如果对象的所有者不是运行该cmdlet或其任何组的用户。直到微软修复“icacls”是更可靠的方法。 –

+0

你对所有权问题是正确的。我用更合适的方法取代了'Get-Acl'。转义'$'和子表达式是文体选择,比什么都重要。但注意到未来:-) – Nasir

相关问题