Поделиться через


Set-Acl

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

Синтаксис

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. Оператор конвейера (|) передает в командлет объект , представляющий дескриптор Set-Acl безопасности Dog.txt.

Вторая команда использует Set-Acl для применения дескриптора безопасности Dog.txt к Cat.txt. После выполнения команды списки контроля доступа к файлам 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, унаследованные из папки "Домашние животные", будут применяться непосредственно к Dog.txt, а новые политики доступа, добавленные в раздел "Домашние животные", не изменят доступ к 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\Administrators полный доступ к файлу Dog.txt.

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

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

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

Параметры

-AclObject

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

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

Type:Object
Position:1
Default value:None
Required:True
Accept pipeline input:True
Accept wildcard characters:False

-ClearCentralAccessPolicy

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

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

Этот параметр впервые появился в Windows PowerShell 3.0.

Type:SwitchParameter
Position:Named
Default value:False
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Confirm

Запрос подтверждения перед выполнением командлета.

Type:SwitchParameter
Aliases:cf
Position:Named
Default value:False
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Exclude

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

Type:String[]
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:True

-Filter

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

Type:String
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:True

-Include

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

Type:String[]
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:True

-InputObject

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

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

Этот параметр впервые появился в Windows PowerShell 3.0.

Type:PSObject
Position:0
Default value:None
Required:True
Accept pipeline input:True
Accept wildcard characters:False

-LiteralPath

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

Этот параметр впервые появился в Windows PowerShell 3.0.

Type:String[]
Aliases:PSPath
Position:Named
Default value:None
Required:True
Accept pipeline input:True
Accept wildcard characters:False

-Passthru

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

Type:SwitchParameter
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Path

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

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

Type:String[]
Position:0
Default value:None
Required:True
Accept pipeline input:True
Accept wildcard characters:True

-WhatIf

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

Type:SwitchParameter
Aliases:wi
Position:Named
Default value:False
Required:False
Accept pipeline input:False
Accept wildcard characters:False

Входные данные

ObjectSecurity

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

CommonSecurityDescriptor

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

Выходные данные

None

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

FileSecurity

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

Примечания

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

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