我正在编写脚本来自动化平台的部署,但是我不知道如何设置应用程序池以使其具有我下面具有的代码的权限,只是在下面插入带有应用程序池名称的文本。我认为这是因为这是一个惯用的名称,当您正常单击检查名称时,它将获取正确的用户,但我无法在Powershell中搞清楚此操作。
function Set_iis_perms {
param (
[parameter(position=0)]
$AppPoolName,
[parameter(position=1)]
$FileName
)
$acl = Get-Acl $FileName
$acl.AddAccessRule((New-Object System.Security.AccessControl.FileSystemAccessRule(("iis apppool\$Apppool_Name"),"Modify","Allow")))
$acl | Set-Acl $FileName
}
即使有人可以指出正确的方向,我也将非常感谢。
亲切的问候Dom
通过Get / Set-ACL和icacls设置ACL是非常常见的事情,可能会在资源中有所介绍。示例:
Setting ACL on folder or file using PowerShell
此脚本将在文件夹(c:\ 1和C:2)上设置文件夹权限,然后它的子文件夹。如果该文件夹不存在,它将创建文件夹,设置为共享并将组添加到该文件夹。组名必须用实际组代替。
Setting permissions for ASP.NET application on IIS with PowerShell
根据此StackOverflow问答
How can I add ACL permissions for IIS APPPOOL* accounts via Powershell?
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对象一样对待它。如果您仍然希望能够为真实帐户传递域/用户名,内置一些简单的逻辑,默认情况下默认为AppPool SID用户名是“ AweSomeAppPool”,域为空,例如。
使用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"