[英]Using PowerShell to grant access to a folder for an “IIS AppPool”
我编写了一个脚本来自动部署我的平台,但我不知道如何设置应用程序池以使用我在它下面的代码获得权限,只需在下面插入带有应用程序池名称的文本。 我认为这是因为这是一个友好的名称,当您通常单击检查名称时,它会获取正确的用户,但我不知道在 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
}
即使有人能指出我正确的方向,我也会非常感激。
亲切的问候多姆
通过 Get/Set-ACL 和 icacls 设置 ACL 是一件非常常见的事情,并且在许多资源中都有介绍。 例子):
此脚本将设置文件夹(c:\1 和 C:2)及其子文件夹的文件夹权限。 如果文件夹不存在,它将创建文件夹,设置为共享并将组添加到文件夹中。 Group_Name 必须替换为实际组。
根据这个 StackOverflow Q&A
Set-Acl $directory $acl $user = New-Object
System.Security.Principal.NTAccount("$domain\\$username")
更新:似乎它不会接受“IIS APPPOOL\AppPoolName”作为 NTAccount 标识符。 现在,有两种方法可以完成您正在尝试做的事情:
Create a new SID object with the AppPoolIdentities SID and translate it into an NTAccount, like this: http://iformattable.blogspot.com/2007/12/convert-sid-to-ntaccount-with.html , and you should be able像对待任何其他 NTAccount object 一样对待它。 如果您仍然希望能够为真实帐户传递域/用户名,则内置一些简单的逻辑,如果用户名是“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"
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.