Windows

Как получить и установить ACL в PowerShell: пошаговое руководство

В этом руководстве вы научитесь извлекать ACL объектов с помощью Get-Acl и изменять их с помощью Set-Acl в PowerShell. После выполнения всех шагов вы сможете управлять разрешениями файлов и папок через командную строку.

Обновлено 31 июля 2026 г.
10-15 мин
Средняя
FixPedia Team
Применимо к:Windows 10 (x64)Windows 11 (x64)PowerShell 5.1+

Введение

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

Если после выполнения этих действий проблема сохраняется, создайте новый запрос в службу поддержки, указав полное описание шага и получаемую ошибку.

Часто задаваемые вопросы

Как получить ACL папки с помощью PowerShell?
Как изменить разрешения с помощью Set-Acl?
Что делать, если команда выдает ошибку 'Access Denied'?
Можно ли импортировать ACL из другого компьютера?

Полезное

Запустить PowerShell от имени администратора
Получить текущий ACL с помощью Get-Acl
Изменить разрешения в ACL
Сохранить обновленный ACL с помощью Set-Acl
Проверить результат
Дополнительные советы и распространенные ошибки

Эта статья помогла вам решить проблему?