3

我有一个新的启动脚本,它在 Powershell 2.0 中运行良好,但我必须升级到 Powershell 3.0 才能让一些 SQL 工作正常。然而,这破坏了我的脚本中使用 Set-Acl 的所有部分。使用 powershell 2.0 不是一个选项。有没有人找到解决这个问题的方法:我的代码:

#Set home directory permissions
$inherit = [system.security.accesscontrol.InheritanceFlags]"ContainerInherit, ObjectInherit
$propagation = [system.security.accesscontrol.PropagationFlags]"None"
$acl = Get-Acl $newfolder
$accessrule = New-Object system.security.AccessControl.FileSystemAccessRule("$username", "FullControl", $inherit, $propagation, "Allow")
$acl.AddAccessRule($accessrule)
set-acl -aclobject $acl $newfolder
write-host permissions set

#Set home folder owner
$acl = Get-Acl $newfolder;
$domain = "mydomain" 
$sid = New-Object System.Security.Principal.NTAccount("$domain\$username");
$acl.SetOwner($sid);
Set-Acl $newfolder $acl; 
write-host owner set 
4

2 回答 2

1

尝试用冒号绑定参数。

例子:

前:set-acl -aclobject $acl $newfolder

后:set-acl -aclobject:$acl -Path:$newfolder

注意: 使用 $newfolder 的完整路径。

set-acl -aclobject:$acl -path:$newfolder.FullName

说明:Powershell cmdlet 具有有序的绑定和定位,使用冒号可确保将您的值分配给正确的参数,无论对象的顺序或类型如何。该.FullName属性将防止SetSecurityDescriptor错误。

于 2013-11-06T19:17:59.813 回答
1

以防其他人像我一样偶然发现这个......

我收到以下错误:

Set-Acl:找不到路径“C:\WINDOWS\system32\System.Security.AccessControl.DirectorySecurity”,因为它不存在。

我必须实际指定 Path 和 AclObject 参数:

Set-Acl -Path C:\mydir -AclObject $acl
于 2019-06-23T16:19:06.657 回答