Iis
如何通過 Powershell 為 IIS APPPOOL* 帳戶添加 ACL 權限?
我希望能夠為新網站設置 IIS 帳戶以具有修改權限。我有以下腳本:
function Set-ModifyPermission ($directory, $username, $domain = 'IIS APPPOOL') { $inherit = [system.security.accesscontrol.InheritanceFlags]"ContainerInherit, ObjectInherit" $propagation = [system.security.accesscontrol.PropagationFlags]"None" $acl = Get-Acl $directory $user = New-Object System.Security.Principal.NTAccount($domain, $username ) $accessrule = New-Object system.security.AccessControl.FileSystemAccessRule($user, "Modify", $inherit, $propagation, "Allow") $acl.AddAccessRule($accessrule) set-acl -aclobject $acl $directory }
但是,當我執行它時,我會收到如下錯誤:
Set-Acl : 此工作站與主域之間的信任關係失敗。
我認為這是因為
IIS APPPOOL
它不是一個真正的域,而是一個假帳戶上的一個奇怪的前綴。是否有正確的方法來引用該帳戶以便我可以完成這項工作?
首先,像這樣使用 Set-Acl,因為目錄路徑是第一個位置參數:
Set-Acl $directory $acl
其次,您應該只使用一個參數創建使用者對象:
$user = New-Object System.Security.Principal.NTAccount("$domain\\$username")
**更新:**似乎它不會接受“IIS APPPOOL\AppPoolName”作為 NTAccount 標識符。現在,有兩種方法可以完成您正在嘗試做的事情:
- 使用 AppPoolIdentities SID 創建一個新的 SID 對象並將其轉換為 NTAccount,如下所示:http: //iformattable.blogspot.com/2007/12/convert-sid-to-ntaccount-with.html,您應該能夠像對待任何其他 NTAccount 對像一樣對待它。如果您仍然希望能夠為真實帳戶傳遞域/使用者名,則內置一些簡單的邏輯,如果使用者名是“AweSomeAppPool”並且域為空,則預設為 AppPool SID,僅作為範例。
- 使用 PowerShell 呼叫 icacls.exe,並使用它來授予/撤銷您想要的任何權限,如下所示(首先是正常的 icacls 表單命令提示符,然後是 powershell,注意區別):
icacls.exe test.txt /grant "IIS AppPool\DefaultAppPool":(OI)(CI)M
cmd /c icacls test.txt /grant "IIS AppPool\DefaultAppPool:(OI)(CI)M"
如果您選擇第二個選項,請務必先手動測試它們,我自己沒有機會測試這些特定範例,但它應該可以