Введение
Управление разрешениями файлов и папок через графический интерфейс удобно, но для автоматизации или выполнения множества задач быстрее использовать PowerShell. В этой статье вы узнаете, как извлечь текущий ACL объекта с помощью Get-Acl и изменить или заменить его с помощью Set-Acl. После выполнения всех шагов вы сможете программно задавать права доступа, что особенно полезно для администрирования серверов или создания скриптов по защите данных.
Требования
- Операционная система: Windows 10 или Windows 11 (x64).
- PowerShell версии 5.1 или выше (встроен в Windows).
- Права администратора на целевом компьютере и доступ к папкам, разрешения которых вы изменяете.
- Базовое знакомство с PowerShell и понятием ACL (списка контроля доступа).
Пошаговая инструкция
Шаг 1: Запустить PowerShell от имени администратора
Откройте меню быстрого доступа (Win + X) и выберите Windows PowerShell (Администратор). Это предотвратит ошибки «Доступ запрещен» при чтении или записи ACL.
Шаг 2: Получить текущий ACL с помощью Get-Acl
Введите команду, которая извлечет ACL для нужного объекта и сохранит его в PowerShell-переменной:
$acl = Get-Acl -Path "C:\ExampleFolder"
Get-Aclвозвращает объект типаFileSecurity.- Переменная
$aclпозволяет редактировать разрешения перед сохранением.
Шаг 3: Изменить разрешения в ACL
Например, вы хотите предоставить группе Users право на чтение содержимого папки. Добавьте правило доступа следующим образом:
$rule = New-Object System.Security.AccessControl.FileSystemAccessRule(
"Users",
"Read",
"ContainerInherit,ObjectInherit",
"None",
"Allow")
$acl.SetAccessRule($rule)
FileSystemAccessRuleописывает одно правило.SetAccessRuleдобавляет его в текущий ACL.
Шаг 4: Сохранить обновленный ACL с помощью Set-Acl
После редактирования примените изменения к исходному объекту на диске:
Set-Acl -Path "C:\ExampleFolder" -AclObject $acl
Set-Aclперезаписывает существующий ACL новым объектом$acl.- Если исходный ACL был изменен несколькими процессами, команда перезапишет все несохраненные изменения.
Шаг 5: Проверить результат
Повторно извлеките ACL, чтобы убедиться, что правило появилось:
Get-Acl -Path "C:\ExampleFolder" | Format-List *
- В консоли отобразится полный список разрешений.
- Также можно открыть Свойства папки → Безопасность, чтобы визуально подтвердить новое разрешение.
Шаг 6: Дополнительные советы и распространенные ошибки
- Спецсимволы: если путь содержит пробелы или символы
*, используйте-LiteralPathвместо-Path. - Массовая обработка: создайте цикл
foreach, чтобы обрабатывать несколько папок за один скрипт. - Резервное копирование: перед изменением ACL экспортируйте его для восстановления:
$acl | Export-Csv -Path "acl_backup.csv" -NoTypeInformation
- Права администратора: если команда завершается с ошибкой «Доступ запрещен», убедитесь, что PowerShell действительно запущен с правами администратора.
Проверка результата
Если вы видите новое разрешение в списке или графическом интерфейсе, ACL успешно обновлен. Также можно запустить скрипт проверки, который сравнивает исходный и новый ACL:
$original = Get-Acl -Path "C:\ExampleFolder"
$original | Export-Csv -Path "before_check.csv" -NoTypeInformation
# ... выполните изменения ...
$updated = Get-Acl -Path "C:\ExampleFolder"
Compare-Object $original.Access $updated.Access
Если различий нет, изменения не были применены; повторите шаги.
Возможные проблемы
- «Путь не найден» – убедитесь, что путь корректен и папка существует.
- «Имя пользователя не найдено» – используйте полное доменное имя (например,
DOMAIN\Users) или SID. - «Доступ запрещен» – проверьте, что PowerShell запущен от имени администратора.
- «Невозможно заменить ACL» – убедитесь, что целевой объект не является системным или защитным (например,
C:\Windows).
Если после выполнения этих действий проблема сохраняется, создайте новый запрос в службу поддержки, указав полное описание шага и получаемую ошибку.