PowerShell для управления файлами (часть 2)
- PowerShell для управления файлами (часть 6)
В предыдущей статье этой серии я показал вам некоторые приемы использования PowerShell для поиска файлов на сервере. В этой статье я хочу немного сместить обсуждение и рассказать о некоторых вещах, которые вы можете делать с разрешениями NTFS.
Поскольку я собираюсь говорить о разрешениях NTFS, мне нужно создать папку, которую я могу использовать для демонстрационных целей. Командлет PowerShell, используемый для создания папок, называется New-Item. При использовании этого командлета необходимо указать путь и тип элемента. Например, если вы хотите создать папку под названием Demo, вы должны использовать эту команду:
Новый элемент C:Demo -Type Directory
Вы можете увидеть, как это выглядит на рисунке ниже.
Вы можете использовать командлет New-Item для создания папки.
Итак, теперь, когда я создал папку, которую могу использовать в демонстрационных целях, давайте взглянем на разрешения NTFS, которые в настоящее время существуют для этой папки. Командлет PowerShell, используемый для получения разрешений NTFS, называется Get-NTFSAccess. Однако если вы попытаетесь использовать этот командлет, вы получите сообщение об ошибке.
Причина этого в том, что командлеты NTFS изначально не поддерживаются PowerShell (поверьте, я тоже был удивлен). Однако Microsoft предоставляет модуль NTFS, который вы можете загрузить.
Чтобы установить модуль, откройте проводник Windows и перейдите в папку C:WindowsSystem32WindowsPowerShell1.0Modules. Теперь создайте папку с именем NTFSSecurity и скопируйте в нее содержимое ZIP-файла, который вы загрузили. Вы должны использовать NTFSSecurity в качестве имени папки, иначе вы не сможете импортировать модуль PowerShell.
Теперь откройте PowerShell и введите следующую команду:
Get-Module -ListAvailable
После нажатия Enter вы должны увидеть список доступных модулей. Убедитесь, что в списке модулей присутствует NTFSSecurity, как показано на рисунке ниже.
Убедитесь, что модуль NTFSSecurity указан в списке.
На этом этапе вы должны разблокировать каждый из файлов в папке NTFSSecurity. Для каждого файла щелкните файл правой кнопкой мыши и выберите команду «Свойства» в появившемся контекстном меню. Когда откроется диалоговое окно свойств файла, найдите кнопку «Разблокировать» на вкладке «Общие», как показано ниже. Если эта кнопка существует, нажмите ее, чтобы разблокировать файл. Если кнопки нет, то файл не заблокирован.
Используйте кнопку Разблокировать, чтобы разрешить доступ к файлам.
Теперь откройте административное окно PowerShell и введите следующую команду:
Модуль импорта NTFSSecurity
Если вы получаете сообщение об ошибке, указывающее на то, что PowerShell не удалось загрузить файл или сборку, проблема, скорее всего, в том, что один из файлов вашего модуля все еще заблокирован. Если вы разблокируете все, но по-прежнему получаете сообщение об ошибке, попробуйте повторно загрузить файл, но на этот раз разблокируйте ZIP-файл, прежде чем извлекать его содержимое.
Как только модуль будет импортирован, вы можете начать его использовать. Чтобы проверить разрешения NTFS для созданной ранее папки, введите следующую команду:
Get-Item C:Demo | Get-NTFSAccess
Как вы можете видеть на изображении ниже, PowerShell отображает разрешения NTFS, которые были назначены для папки.
PowerShell отображает разрешения NTFS для папки.
Замечательно иметь возможность просматривать разрешения NTFS для папки, но мы также можем использовать PowerShell для назначения разрешений. В производственной среде разрешения обычно назначаются группам, а не непосредственно пользователям, но для демонстрации я собираюсь назначить разрешения нескольким учетным записям пользователей. Я назначу права на чтение Пользователю 1, права полного доступа Пользователю 2 и заблокирую доступ Пользователю 3. Я могу использовать следующие команды для назначения разрешений User1 и User2:
Add-NTFSAccess -Path C:Demo -Account 'PoseydemoUser1' -AccessRights Read
Add-NTFSAccess -Path C:Demo -Account 'PoseydemoUser2' -AccessRights FullControl
Однако я не могу использовать эту команду, чтобы запретить доступ к User3:
Add-NTFSAccess -Path C:Demo -Account 'PoseydemoUser3' -AccessRights Deny
Причина, по которой это не работает, заключается в том, что когда вы используете NTFS для блокировки доступа к кому-либо, вы не назначаете право с именем Запретить, а скорее отказываете в возможности использовать конкретное право. Итак, если я попытаюсь использовать приведенную выше команду, я получу ошибку, подобную показанной здесь:
Вы можете назначить Чтение и Полный доступ, но не Запретить.
Так как же нам запретить пользователю User3 доступ к папке Demo? Единственный командлет, который выполнит эту работу, — это командлет Remove-NTFSAccess. Проблема с этим командлетом заключается в том, что мы должны указать разрешения, которые мы хотим удалить, и мы можем удалить только те разрешения, которые были назначены. Например, я мог удалить разрешения на чтение для пользователя 1, но я не мог удалить разрешения FullControl для пользователя 1, поскольку у пользователя 1 нет разрешений FullControl.
Давайте посмотрим, как работает эта команда. Я воспользуюсь командлетом Remove-NTFSAccess, чтобы удалить разрешения на чтение для пользователя User1. Вот команда, используемая для этого:
Remove-NTFSAccess C:Demo -Account 'poseydemouser1' -AccessRights Read
Эта команда не создает никаких видимых результатов, но вы можете использовать командлет Get-NTFSAccess, чтобы убедиться, что разрешение было удалено. Вы можете увидеть процесс удаления в действии ниже.
Я удалил разрешение на чтение для пользователя User1.
Итак, теперь, когда вы знаете, как просматривать, добавлять и удалять разрешения NTFS, вам может быть любопытно узнать, какие еще действия можно выполнять с помощью модуля NTFSSecurity. К сожалению, мне еще предстоит найти какую-либо исчерпывающую документацию для модуля. Тем не менее, можно получить список встроенных командлетов модуля. После этого вы можете выполнить поиск в Интернете по отдельным командлетам, чтобы найти синтаксис.
Чтобы просмотреть список доступных командлетов, введите следующую команду:
Get-Command-модуль NTFSSecurity
Вы можете увидеть список командлетов модуля на изображении ниже.
Вот список командлетов модуля NTFSSecurity.
Еще один способ выяснить, как использовать командлеты NTFSSecurity, — воспользоваться встроенной справкой PowerShell. Например, последний командлет, указанный на рисунке выше, называется Test-Path2. Если вы хотите узнать синтаксис этого командлета, вы можете ввести следующую команду:
Get-Command Test-Path2 | Получить помощь
Вы можете увидеть синтаксис команды, показанный на рисунке ниже.
Вы можете использовать командлет Get-Help PowerShell, чтобы найти полный синтаксис незнакомых командлетов.
Как видите, модуль NTFSSecurity для PowerShell позволяет получить доступ к разрешениям NTFS для файлов и папок из командной строки. До сих пор я показал вам, как просматривать, добавлять и удалять разрешения NTFS для папки. Однако модуль NTFSSecurity содержит гораздо больше командлетов, и я только начал поверхностно изучать возможности этого модуля PowerShell. В следующей статье этой серии я планирую показать вам некоторые возможности модуля по аудиту и отчетности.
- PowerShell для управления файлами (часть 6)