Поиск по сайту:

Set-Acl (Microsoft.PowerShell.Security)


Set-Acl

Модуль:
Microsoft.PowerShell.Security

Изменяет дескриптор безопасности указанного элемента, например файла или раздела реестра.

Синтаксис

Set-Acl
   [-Path] <String[]>
   [-AclObject] <Object>
   [-ClearCentralAccessPolicy]
   [-Passthru]
   [-Filter <String>]
   [-Include <String[]>]
   [-Exclude <String[]>]
   [-WhatIf]
   [-Confirm]
   [<CommonParameters>]
Set-Acl
   [-InputObject] <PSObject>
   [-AclObject] <Object>
   [-Passthru]
   [-Filter <String>]
   [-Include <String[]>]
   [-Exclude <String[]>]
   [-WhatIf]
   [-Confirm]
   [<CommonParameters>]
Set-Acl
   -LiteralPath <String[]>
   [-AclObject] <Object>
   [-ClearCentralAccessPolicy]
   [-Passthru]
   [-Filter <String>]
   [-Include <String[]>]
   [-Exclude <String[]>]
   [-WhatIf]
   [-Confirm]
   [<CommonParameters>]

Описание

Этот командлет доступен только на платформе Windows.

Командлет Set-Acl изменяет дескриптор безопасности указанного элемента, например файла или раздела реестра, чтобы он соответствовал значениям в предоставленном вами дескрипторе безопасности.

Чтобы использовать Set-Acl, используйте параметр Path или InputObject, чтобы определить элемент, дескриптор безопасности которого вы хотите изменить. Затем используйте параметры AclObject или SecurityDescriptor, чтобы указать дескриптор безопасности, имеющий значения, которые вы хотите применить. Set-Acl применяет предоставленный дескриптор безопасности. Он использует значение параметра AclObject в качестве модели и изменяет значения в дескрипторе безопасности элемента, чтобы они соответствовали значениям параметра AclObject.

Примеры

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

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

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

Первая команда использует командлет Get-Acl для получения дескриптора безопасности файла Dog.txt. Оператор присваивания (=) сохраняет дескриптор безопасности в значении переменной $DogACL.

Вторая команда использует Set-Acl для изменения значений в ACL файла Cat.txt на значения в $DogACL.

Значение параметра Path — это путь к файлу Cat.txt. Значением параметра AclObject является ACL модели, в данном случае ACL Dog.txt, сохраненный в переменной $DogACL.

Пример 2. Использование оператора конвейера для передачи дескриптора

Get-Acl -Path "C:\Dog.txt" | Set-Acl -Path "C:\Cat.txt"

Эта команда почти такая же, как команда в предыдущем примере, за исключением того, что она использует оператор конвейера (|) для отправки дескриптора безопасности из команды Get-Acl в команда Set-Acl.

Первая команда использует командлет Get-Acl для получения дескриптора безопасности файла Dog.txt. Оператор конвейера (|) передает объект, представляющий дескриптор безопасности Dog.txt, командлету Set-Acl.

Вторая команда использует Set-Acl для применения дескриптора безопасности Dog.txt к Cat.txt. По завершении команды списки ACL файлов Dog.txt и Cat.txt будут идентичными.

Пример 3. Применение дескриптора безопасности к нескольким файлам

$NewAcl = Get-Acl File0.txt
Get-ChildItem -Path "C:\temp" -Recurse -Include "*.txt" -Force | Set-Acl -AclObject $NewAcl

Эти команды применяют дескрипторы безопасности из файла File0.txt ко всем текстовым файлам в каталоге C:\Temp и всех его подкаталогах.

Первая команда получает дескриптор безопасности файла File0.txt в текущем каталоге и использует оператор присваивания (=) для сохранения его в переменной $NewACL.

Первая команда в конвейере использует командлет Get-ChildItem для получения всех текстовых файлов в каталоге C:\Temp. Параметр Recurse распространяет команду на все подкаталоги C:\temp. Параметр Include ограничивает число извлекаемых файлов только файлами с расширением имени файла .txt. Параметр Force позволяет получить скрытые файлы, которые в противном случае были бы исключены. (Вы не можете использовать c:\temp\*.txt, поскольку параметр Recurse работает с каталогами, а не с файлами.)

Оператор конвейера (|) отправляет объекты, представляющие полученные файлы, в командлет Set-Acl, который применяет дескриптор безопасности в параметре AclObject. ко всем файлам в конвейере.

На практике лучше всего использовать параметр WhatIf со всеми командами Set-Acl, которые могут влиять на более чем один элемент. В этом случае второй командой в конвейере будет Set-Acl -AclObject $NewAcl -WhatIf. Эта команда перечисляет файлы, на которые будет влиять эта команда. Просмотрев результат, вы можете снова запустить команду без параметра WhatIf.

Пример 4. Отключить наследование и сохранить унаследованные правила доступа

$NewAcl = Get-Acl -Path "C:\Pets\Dog.txt"
$isProtected = $true
$preserveInheritance = $true
$NewAcl.SetAccessRuleProtection($isProtected, $preserveInheritance)
Set-Acl -Path "C:\Pets\Dog.txt" -AclObject $NewAcl

Эти команды отключают наследование доступа от родительских папок, сохраняя при этом существующие унаследованные правила доступа.

Первая команда использует командлет Get-Acl для получения дескриптора безопасности файла Dog.txt.

Далее создаются переменные для преобразования унаследованных правил доступа в явные правила доступа. Чтобы защитить связанные с этим правила доступа от наследования, установите для переменной $isProtected значение $true. Чтобы разрешить наследование, установите для $isProtected значение $false. Дополнительные сведения см. в разделе Установка защиты правил доступа.

Установите для переменной $preserveInheritance значение $true, чтобы сохранить унаследованные правила доступа, или $false, чтобы удалить унаследованные правила доступа. Затем защита правила доступа обновляется с помощью метода SetAccessRuleProtection().

Последняя команда использует Set-Acl для применения дескриптора безопасности к Dog.txt. По завершении команды списки ACL файла Dog.txt, унаследованные из папки Pets, будут применены непосредственно к Dog.txt, а новые политики доступа, добавленные в Pets, не изменят доступ к Dog.txt.

Пример 5. Предоставьте администраторам полный доступ к файлу.

$NewAcl = Get-Acl -Path "C:\Pets\Dog.txt"
# Set properties
$identity = "BUILTIN\Administrators"
$fileSystemRights = "FullControl"
$type = "Allow"
# Create new rule
$fileSystemAccessRuleArgumentList = $identity, $fileSystemRights, $type
$fileSystemAccessRule = New-Object -TypeName System.Security.AccessControl.FileSystemAccessRule -ArgumentList $fileSystemAccessRuleArgumentList
# Apply new rule
$NewAcl.SetAccessRule($fileSystemAccessRule)
Set-Acl -Path "C:\Pets\Dog.txt" -AclObject $NewAcl

Эта команда предоставит группе BUILTIN\Администраторы полный доступ к файлу Dog.txt.

Первая команда использует командлет Get-Acl для получения дескриптора безопасности файла Dog.txt.

Следующие переменные создаются для предоставления группе BUILTIN\Администраторы полного контроля над файлом Dog.txt. Переменная $identity содержит имя учетной записи пользователя. Переменная $fileSystemRights имеет значение FullControl и может быть любым из значений FileSystemRights, определяющих тип операции, связанной с правилом доступа. Переменная $type, для которой установлено значение «Разрешить», указывает, разрешить или запретить операцию. Переменная $fileSystemAccessRuleArgumentList представляет собой список аргументов, который должен быть передан при создании нового объекта FileSystemAccessRule. Затем создается новый объект FileSystemAccessRule, и объект FileSystemAccessRule передается методу SetAccessRule(), который добавляет новое правило доступа.

Последняя команда использует Set-Acl для применения дескриптора безопасности к Dog.txt. По завершении команды группа BUILTIN\Администраторы получит полный контроль над Dog.txt.

Параметры

-AclObject

Указывает ACL с нужными значениями свойств. Set-Acl изменяет список ACL элемента, указанного параметром Path или InputObject, чтобы он соответствовал значениям в указанном объекте безопасности.

Вы можете сохранить выходные данные команды Get-Acl в переменной, а затем использовать параметр AclObject для передачи переменной или ввести Get-Acl команда.

Тип :

Объект

Позиция:

1

Значение по умолчанию:

None

Необходимый:

True

Примите ввод конвейера:

True

Принимайте подстановочные знаки:

False

-ClearCentralAccessPolicy

Удаляет центральную политику доступа из указанного элемента.

Начиная с Windows Server 2012, администраторы могут использовать Active Directory и групповую политику для установки централизованной политики доступа для пользователей и групп. Дополнительные сведения см. в разделе Динамический контроль доступа: обзор сценария.

Этот параметр был введен в Windows PowerShell 3.0.

Тип :

SwitchParameter

Позиция:

Именованный

Значение по умолчанию:

False

Необходимый:

False

Примите ввод конвейера:

False

Принимайте подстановочные знаки:

False

-Confirm

Запрашивает подтверждение перед запуском командлета.

Тип :

SwitchParameter

Псевдонимы:

cf

Позиция:

Именованный

Значение по умолчанию:

False

Необходимый:

False

Примите ввод конвейера:

False

Принимайте подстановочные знаки:

False

-Exclude

Пропускает указанные элементы. Значение этого параметра определяет параметр Path. Введите элемент пути или шаблон, например *.txt. Подстановочные знаки разрешены.

Тип :

String[]

Позиция:

Именованный

Значение по умолчанию:

None

Необходимый:

False

Примите ввод конвейера:

False

Принимайте подстановочные знаки:

True

-Filter

Указывает фильтр в формате или языке поставщика. Значение этого параметра определяет параметр Path. Синтаксис фильтра, включая использование подстановочных знаков, зависит от поставщика. Фильтры более эффективны, чем другие параметры, поскольку поставщик применяет их при получении объектов, а не заставляет PowerShell фильтровать объекты после их получения.

Тип :

String

Позиция:

Именованный

Значение по умолчанию:

None

Необходимый:

False

Примите ввод конвейера:

False

Принимайте подстановочные знаки:

True

-Include

Изменяет только указанные элементы. Значение этого параметра определяет параметр Path. Введите элемент пути или шаблон, например *.txt. Подстановочные знаки разрешены.

Тип :

String[]

Позиция:

Именованный

Значение по умолчанию:

None

Необходимый:

False

Примите ввод конвейера:

False

Принимайте подстановочные знаки:

True

-InputObject

Изменяет дескриптор безопасности указанного объекта. Введите переменную, содержащую объект, или команду, получающую объект.

Вы не можете передать объект, который нужно изменить, в Set-Acl. Вместо этого используйте параметр InputObject явно в команде.

Этот параметр был введен в Windows PowerShell 3.0.

Тип :

PSОбъект

Позиция:

0

Значение по умолчанию:

None

Необходимый:

True

Примите ввод конвейера:

True

Принимайте подстановочные знаки:

False

-LiteralPath

Изменяет дескриптор безопасности указанного элемента. В отличие от Path, значение параметра LiteralPath используется точно так, как оно введено. Никакие символы не интерпретируются как подстановочные знаки. Если путь содержит escape-символы, заключите его в одинарные кавычки ('). Одинарные кавычки сообщают PowerShell не интерпретировать никакие символы как escape-последовательности.

Этот параметр был введен в Windows PowerShell 3.0.

Тип :

String[]

Псевдонимы:

PSPath

Позиция:

Именованный

Значение по умолчанию:

None

Необходимый:

True

Примите ввод конвейера:

True

Принимайте подстановочные знаки:

False

-Passthru

Возвращает объект, представляющий измененный дескриптор безопасности. По умолчанию этот командлет не генерирует никаких выходных данных.

Тип :

SwitchParameter

Позиция:

Именованный

Значение по умолчанию:

None

Необходимый:

False

Примите ввод конвейера:

False

Принимайте подстановочные знаки:

False

-Path

Изменяет дескриптор безопасности указанного элемента. Введите путь к элементу, например путь к файлу или ключу реестра. Подстановочные знаки разрешены.

Если вы передаете объект безопасности в Set-Acl (либо с помощью параметров AclObject или SecurityDescriptor, либо путем передачи объекта безопасности из Get-Acl в Set-Acl), и вы опускаете параметр Path (имя и значение), Set-Acl использует путь, включенный в объект безопасности.

Тип :

String[]

Позиция:

0

Значение по умолчанию:

None

Необходимый:

True

Примите ввод конвейера:

True

Принимайте подстановочные знаки:

True

-WhatIf

Показывает, что произойдет, если командлет запустится. Командлет не запускается.

Тип :

SwitchParameter

Псевдонимы:

wi

Позиция:

Именованный

Значение по умолчанию:

False

Необходимый:

False

Примите ввод конвейера:

False

Принимайте подстановочные знаки:

False

Входы

Объектная безопасность

Вы можете передать объект ACL этому командлету.

CommonSecurityDescriptor

В этот командлет можно передать дескриптор безопасности.

Выходы

Нет

По умолчанию этот командлет не возвращает никаких результатов.

FileSecurity

При использовании параметра PassThru этот командлет возвращает объект безопасности. Тип объекта безопасности зависит от типа элемента.

Примечания

Этот командлет доступен только на платформах Windows.

Командлет Set-Acl поддерживается поставщиками файловой системы и реестра PowerShell. Таким образом, вы можете использовать его для изменения дескрипторов безопасности файлов, каталогов и ключей реестра.