2017-02-14 99 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

相關問題