Если вы являетесь IT-специалистом и испытываете трудности с настройкой разрешений файловой системы для вашей организации, вам повезло. Управление разрешениями NTFS с использованием графического интерфейса пользователя (GUI) занимает много времени, особенно при работе с многими пользователями или группами. К счастью, у нас есть PowerShell, чтобы все улучшить. Как? С помощью модуля Microsoft.PowerShell.Security.
PowerShell имеет две командлета, специально предназначенные для работы с списками управления доступом (ACL) – Get-ACL
и Set-ACL
. Эти две командлета могут извлекать и присваивать любое количество разрешений NTFS, о чем вы узнаете в этом руководстве. Если вы хотите стать более эффективными и сразу начать использовать управление разрешениями NTFS, продолжайте читать.
Нет времени читать? Нет проблем! Посмотрите это сопутствующее видео от TechSnips.io с Антони Хауэллом ниже:
Управление и отчетность по Active Directory, Exchange и Microsoft 365 с использованием ADManager Plus от ManageEngine. Скачайте бесплатную пробную версию!
Предварительные требования
Для выполнения примеров в этом руководстве вам потребуется:
- PowerShell 7 или Windows PowerShell 5.1
- A basic understanding of NTFS file and folder permissions
Создание файлов/папок для тестирования
Этот учебник будет построен вокруг простой “лаборатории” или одной папки. Вы узнаете, как работать с разрешениями NTFS в PowerShell с нуля; на вашей стороне не требуется никаких дополнительных действий.
- Для начала откройте сеанс PowerShell от имени администратора.
- Создайте пустую папку с именем Share где-то в файловой системе. В следующих примерах предположим, что эта папка находится по адресу C:\Share. Это сделает примеры более краткими и легкими для следования. Вы можете создать этот каталог, скопировав приведенный ниже код:
3. Создайте папку с именем C:\Share\Assets.
4. Создайте файл с именем client_list.txt в папке C:\Share.
5. Создайте файл с именем client_projects.txt в папке C:\Share.
6. Затем назначьте переменную для пути к папке Share. Создание переменных упрощает набор и делает путь более удобным для повторного использования. Предположим, что вы используете C:\Share, скопируйте следующий пример кода в ваш сеанс PowerShell:
7. Нажмите Enter. Теперь у вас есть пустой каталог, и этот путь сохранен как переменная.
Просмотр разрешений NTFS с помощью Get-Acl
PowerShell позволяет быстро просматривать разрешения NTFS с использованием cmdlet Get-Acl
. В следующих разделах вы узнаете, как использовать cmdlet для просмотра разрешений NTFS для файла или папки.
Список контроля доступа (ACL представляет собой список записей контроля доступа (ACE). Каждая ACE в ACL идентифицирует доверенное лицо и указывает разрешенные, запрещенные или проверяемые права доступа. Дескриптор безопасности для объекта, который можно защитить, может содержать два типа ACL: DACL и SACL.
Отображение прав NTFS
Традиционно вы просматривали ACL, щелкая правой кнопкой мыши на папке C:\Share, щелкая по Свойства, выбирая вкладку Безопасность и нажимая кнопку Дополнительно. Ниже вы можете увидеть пример того, как GUI отображает разрешения.

В приведенном выше примере есть некоторые записи разрешений и пронумерованные свойства. Внимательно изучите их, так как вы увидите сравнение позже в этом разделе.
Используя ранее созданную директорию, отобразите текущие права NTFS для директории, используя Get-Acl
.
Теперь вы должны увидеть путь, владельца и детали уровня доступа на следующем снимке экрана.

Свойство Access
, показанное на приведенном выше снимке экрана, содержит дополнительную информацию о списке управления доступом (ACL), но оно выходит за пределы экрана, как показано троеточием в конце FullControl выше. Есть лучший способ просмотра этого свойства – заключить предыдущую команду в круглые скобки или круглые скобки, чтобы просмотреть Access
свойства объекта. Ищите только свойство Access
в этом объекте, запустив следующий код.
Вышеуказанную команду также можно выразить, используя объект
Access
и параметр-ExpandProperties
:Get-Acl -Path $dir | Select-Object -ExpandProperty Access
Как показано на следующем снимке экрана, вывод обернут, чтобы упростить просмотр отдельных Access
свойств:

Просмотр свойств доступа указанным способом может привести к быстрому прокручиванию вывода терминала вниз по экрану, если у вас много сущностей контроля доступа (ACE). Каждая сущность содержит FileSystemRights, AccessControlType, IdentityReference, IsInherited, InheritenceFlags и PropagationFlags свойства. Чтобы сделать это все более читаемым, направьте объекты на Format-Table -AutoSize
. Запустите следующую команду.
Как видно на следующем снимке экрана, свойства доступа становятся более чистыми и организованными при использовании Format-Table -AutoSize
:

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

Фильтрация объектов доступа
Иногда вам захочется быть более точным при изучении разрешений NTFS. Для этого вы можете фильтровать конкретный ACE или находить определенные результаты с унаследованными или явными разрешениями NTFS в рамках ACL с использованием PowerShell. Вместо прокрутки окна терминала глазами построчно, вы можете использовать командлет Where-Object
для фильтрации.
Приведенный ниже пример кода фильтрует объекты, не наследующие разрешения NTFS. Это достигается с использованием Where-Object
с операндом -Not
, рассматривающим текущий объект в конвейере как свойство объекта $_.
IsInherited
, которое указывает, является ли ACE результатом наследования и не установлено явным образом:
Не забывайте направлять объекты к
Format-Table -AutoSize
, иначе вывод будет прокручиваться вниз экрана. Сделайте это новой привычкой; позже вы мне благодарны будите!
Используя приведенный ниже код, замените 'USERNAME'
на другое имя пользователя, чтобы увидеть конкретные результаты:
Приведен пример того, как могут выглядеть результаты:

В приведенном примере показаны все ACE, для которых свойство IdentityReference
– это имя пользователя или группа безопасности, которой назначены разрешения.
Продолжайте практиковаться в использовании команды
Get-Acl
. Изучите различные файлы и папки на вашей системе. Это поможет вам увидеть множество различных дескрипторов безопасности для разных контекстов. Это также поможет развить навыки.
Давайте поднимем планку и назначим разрешения NTFS.
Изменение разрешений NTFS с помощью Set-Acl
Теперь, когда вы можете просматривать разрешения NTFS, пришло время назначать и изменять разрешения NTFS с помощью PowerShell. Команда Set-Acl
делает это возможным. В следующих разделах будет показано, как использовать эту команду совместно с Get-Acl
, чтобы копировать, изменять наследование и удалять разрешения NTFS для файла или папки.
Копирование разрешений NTFS
У вас может быть файл или папка, содержащие необходимый уровень разрешений NTFS, который вам нужно использовать для нового ACL. Вы можете сэкономить время, копируя разрешения из одного файла или папки в другой.
Копирование существующих ACL/ACE может снизить вероятность человеческой ошибки при настройке разрешений NTFS, предполагая, что дескриптор безопасности, который вы копируете, корректен и соответствует месту назначения. Как говорится, “С великой силой приходит великая ответственность”. Помните об этом.
Рассмотрите следующий снимок экрана. Здесь вы просматриваете ACL для файла в C:\Share под названием Client_List.txt. ACL имеет правильный уровень разрешений NTFS, который вам нужен:

Теперь рассмотрим следующий снимок экрана. На этот раз вы просматриваете ACL для другого файла в C:\Share под названием Client_Projects.txt. У этого файла нет нужных вам разрешений NTFS:

Вам нужно скопировать разрешения NTFS из Client_List.txt в Client_Projects.txt. Как вы можете это сделать? Вы измените разрешения, получив ACL из Client_List.txt и затем используя командлет Set-Acl
с параметром -AclObject
. Когда вы запускаете приведенный ниже код, весь ACL из Client_List.txt копируется в Client_Projects.txt :
Как видно на пронумерованном снимке экрана ниже, файл Client_Projects.txt теперь имеет те же дескрипторы безопасности, что и Client_list.txt.
- Получите существующий ACL из существующего файла.
- Установите скопированный объект ACL для файла или папки.
- Проверьте, что ACL правильно скопирован в файл или папку.

Теперь вы видите, что ACL идентичен для файла Client_Projects.txt как для файла Client_List.txt в столбце IdentityReference с параметром AccessControlType, установленным на Allow. Вы используете ту же технику для назначения разрешений NTFS для папок.
Добавление разрешений NTFS
В последнем разделе вы скопировали существующие разрешения NTFS с одного объекта файла на другой. На этот раз вы собираетесь создать разрешения NTFS с нуля. Это позволит вам назначить разрешения NTFS, которые будут применены к файлу или папке.
Сначала начните назначать некоторые переменные для создания нового объекта, используемого Set-Acl
. Этот способ делает его немного проще, когда приходит время запускать команду. Ниже приведен код, который создает свойства ACE, которые станут разрешениями NTFS, назначенными файлу или папке:
Затем назначьте еще одну переменную, которая получит начальное ACL для папки Assets
. Затем, используя метод члена AddAccessRule
, добавьте правило доступа, используя переменную $ACE
:
Теперь вы готовы добавить только что созданный ACE к ACL C:\Share\Assets
. Теперь используйте Set-Acl
, чтобы применить это новое ACE к соответствующему каталогу:
Затем проверьте, имеет ли выбранный вами пользователь разрешения на просмотр нужного каталога, используя приведенный ниже код:
Удаление разрешений NTFS
Возможно, наступит момент, когда вам потребуется удалить разрешения NTFS для ресурса.
Для удаления разрешений NTFS начните с получения текущего ACL для файла или папки. В этом примере файл называется Client_Projects.txt
:
Теперь отфильтруйте нужный ACE, который вы хотите удалить. Для этого вызовите объекты-члены $Acl
и направьте результаты на Where-Object
и несколько операндов:
Затем используйте переменную $Acl
, которая содержит текущие дескрипторы безопасности ACL, вызовите метод RemoveAccessRule
и передайте объект ACE, созданный выше с помощью cmdlet New-Object
, методу RemoveAccessRule()
. Это удалит запись:
Важно помнить, что вы изменили существующий ACL здесь и еще не подтвердили изменения.
Теперь, чтобы изменения вступили в силу, выполните cmdlet Set-Acl
, предоставив параметры -Path
и -AclObject
с соответствующими значениями "$dir\Client_Projects.txt"
и $Acl
. После ввода следующей команды нажмите Enter:
Управляйте и отчеты о каталоге Active Directory, Exchange и Microsoft 365 с помощью ManageEngine ADManager Plus. Скачайте бесплатную пробную версию!
Сводка
В этой статье вы узнали о управлении разрешениями NTFS с помощью PowerShell. Вы узнали о двух командных файлах Get-Acl
и Set-Acl
, и о том, что они делают с разрешениями NTFS.
Вы также узнали, как использовать фильтры для выбора конкретного ACE в ACL для использования в вышеупомянутых командных файлах. С небольшой практикой вы сможете легко управлять большим количеством запросов на разрешения NTFS, чем когда-либо раньше.