我们正在尝试为Windows server 2008计算机编写一个函数,该函数需要从共享权限的ACL中删除所有当前受信任者并添加组
Everyone
具有
FullControl
进入。如果我们可以使用更快的CIM cmdlet而不是WMI,那就太好了。
代码:
$ShareName = 'Folder'
$trustee = New-CimInstance (Get-CimClass Win32_Trustee) -ClientOnly
$trustee.Domain = $null
$trustee.Name = 'EVERYONE'
$ace = New-CimInstance (Get-CimClass Win32_ACE) -ClientOnly
$ace.AccessMask = [Uint32][System.Security.AccessControl.FileSystemRights]::FullControl
$ace.AceFlags = [Uint32][System.Security.AccessControl.AceFlags]::None
$ace.AceType = [Uint32][System.Security.AccessControl.AceType]::AccessAllowed
$ace.Trustee = $trustee
$sd = New-CimInstance (Get-CimClass Win32_SecurityDescriptor) -ClientOnly
$sd.DACL = $ace
$sd.group = $trustee
$sd.owner = $trustee
$lss = Get-CimInstance -ClassName Win32_LogicalShareSecuritySetting -filter "Name='$ShareName'"
Invoke-CimMethod -InputObject $lss -MethodName SetSecurityDescriptor -Arguments @{Descriptor = $sd}
一部分
code
是在这里发现的。
执行最后一行时:
Invoke-CimMethod -InputObject $lss -MethodName SetSecurityDescriptor -Arguments @{Descriptor = $sd}
输出
ReturnValue 21
已生成。经过一番谷歌搜索,它似乎是关于
Invalid parameter
. 但我们看不到我们在这里缺少什么。。。