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. Таким образом, вы можете использовать его для изменения дескрипторов безопасности файлов, каталогов и ключей реестра.