Set-Acl с дополнением - PullRequest
       59

Set-Acl с дополнением

0 голосов
/ 24 сентября 2019

Как я могу добавить ACL одной папки в другую с помощью PowerShell?

Я пытался использовать Get-Acl и Set-Acl, но "когда команды завершены, дескрипторы безопасности ... идентичны".

Это приводит к тому, что мои \\dest\share ниже теряют dest\Administrators: Full Control и другие разрешения по умолчанию для общего ресурса.

Get-Acl '\\source\share' | Set-Acl '\\dest\share'

Set-Acl - Примеры|Документы Microsoft

Пример 1. Копирование дескриптора безопасности из одного файла в другой

$DogACL = Get-Acl -Path "C:\Dog.txt"
Set-Acl -Path "C:\Cat.txt" -AclObject  $DogACL

Эти команды копируют значения из дескриптора безопасности DogTXT-файл в дескриптор безопасности файла Cat.txt.Когда команды завершены, дескрипторы безопасности файлов Dog.txt и Cat.txt идентичны.

Как я могу добавить ACL из \\source\share в \\dest\share?

1 Ответ

1 голос
/ 25 сентября 2019

Если вы хотите добавить дополнительные списки ACL вместо их замены, вам придется изменить целевой ACL перед его настройкой.

Вот как я могу настроить его, чтобы протестировать его перед его попыткойживые акции:

# Make folders and shares on the machine you'd like to test on
New-Item -Path C:\Users\TestUser\Documents\Share1 -Type Directory -Force
New-Item -Path C:\Users\TestUser\Documents\Share2 -Type Directory -Force
New-SmbShare -Path "C:\Users\TestUser\Documents\Share1" -Name SourceShare
New-SmbShare -Path "C:\Users\TestUser\Documents\Share2" -Name DestinationShare

Теперь потратьте немного времени, чтобы вручную внести изменения в списки ACL для общих ресурсов, чтобы вы могли определить, работает ли он при копировании из источника в место назначения.Затем продолжите ниже:

# Set network share path variables
$SourceShare = "\\GLaDOS\SourceShare"
$DestinationShare = "\\GLaDOS\DestinationShare"

# Set ACL variables
$SourceAcl = Get-Acl $SourceShare
$DestinationAcl = Get-Acl $DestinationShare

# Add all the source ACL's to the destination ACL
$SourceAcl.Access | foreach {$DestinationAcl.AddAccessRule($_)}

# Invoke the command on the computer using local path since network path does not seem to work    
Invoke-Command -ComputerName GLaDOS -ScriptBlock {$LocalPath = (Get-SmbShare -Name DestinationShare).Path ; Set-Acl $LocalPath $Using:DestinationAcl}

Очевидно, что вы захотите заменить TestUser и GLaDOS на имя пользователя и имя компьютера соответственно.


PS Прежде чем использовать Invoke-Command, я попробовал меньшесложный вариант и получил ошибку аутентификации:

PS C:\> Set-Acl $DestinationShare $DestinationAcl
Set-Acl : Attempted to perform an unauthorized operation.

Все еще не выяснил, что.У меня должны быть все необходимые разрешения.

...