Установите общие права доступа для всех FullControl с CIM CmdLets - PullRequest
0 голосов
/ 03 июля 2018

Мы пытаемся написать функцию для машины под управлением Windows Server 2008, которая должна удалить всех текущих опекунов из ACL разрешений общего ресурса и добавить группу Everyone с доступом FullControl. Было бы здорово, если бы мы могли использовать более быстрые CIM CmdLets вместо 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}

Часть кода была найдена здесь.

При выполнении последней строки:

Invoke-CimMethod -InputObject $lss -MethodName SetSecurityDescriptor -Arguments @{Descriptor = $sd}

Выход ReturnValue 21 генерируется. После некоторого поиска в Google это выглядит как Неверный параметр . Но мы не видим, чего нам здесь не хватает ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...