Поиск по сайту:

Как передать права доступа к файлам с помощью PowerShell


Поддержание разрешений общего доступа к файлам на разных серверах может быть серьезной проблемой, но с помощью PowerShell мы можем автоматизировать этот процесс, что позволит вам уйти домой пораньше.

При любой миграции файлов вы должны учитывать не только сами файлы и папки, но и разрешения, установленные для этих объектов. В каждом файле и папке потенциально может быть другой набор записей управления доступом (ACE), которые составляют список управления доступом (ACL). В зависимости от того, сколько файлов вы переносите, это может быть много.

При перемещении файлов в новое место разрешения не всегда приходят с ними. При выполнении массовой миграции, такой как целые файловые серверы со сложными разрешениями, важно сохранить эти разрешения для объектов, когда они перемещаются в новое место.

Есть несколько способов сделать это.

Одним из любимых инструментов для переноса файлов является robocopy. Robocopy – отличный инструмент с множеством наворотов, но его использование может оказаться сложным, и он может работать не во всех ситуациях. Когда это происходит, я обычно обращаюсь к инструменту под названием icacls. Этот инструмент существует уже давно и, как и robocopy, имеет множество переключателей, поэтому давайте немного упростим этот инструмент с помощью PowerShell.

Использование PowerShell для передачи разрешений

Хотя вы можете использовать утилиту командной строки icacls напрямую, ее не так просто понять. Чтобы исправить это, вы узнаете о PowerShell как об оболочке для вызова инструмента icacls, чтобы упростить этот порой сложный процесс.

Во-первых, нам нужно загрузить существующий инструмент, который уже создан для нас. Одна из замечательных особенностей сообщества PowerShell заключается в том, что обычно существует инструмент, который может нам помочь. В этом случае нам понадобится модуль PowerShell. Этот модуль PowerShell можно найти в галерее PowerShell.

Если у вас есть PowerShell v4 или более поздняя версия, у вас уже есть несколько команд для быстрого доступа к этому модулю.

PS> Find-Module -Name NTFSPermissionMigration | Install-Module

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

PS> Save-Acl -FolderPath \\OLDSERVER\FileShare -SaveFilePath C:\FilePermissions.txt

Как только это будет запущено, вы должны увидеть вывод, похожий на этот, и начать видеть, что файл сохранения начинает расти.

processed file: \\OLDSERVER\FileShare\File1.txt
processed file: \\OLDSERVER\FileShare\File2.exe
Successfully processed X files; Failed processing 0 files

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

Чтобы восстановить разрешения на новый путь к папке, мы теперь будем использовать команду Restore-Acl.

PS> Restore-Acl -RestoreToFolderPath \\NEWFILESERVER\FileShare -PermissionFilePath C:\FilePermissions.txt
Successfully processed XXX files; Failed processing 0 files

Как только это будет завершено, все разрешения NTFS должны быть зеркально отражены из вашей исходной папки и новой папки назначения!

Краткое содержание

Использование бесплатного модуля PowerShell сообщества и немного магии сценариев может превратить сложную задачу переноса разрешений NTFS с одного сервера на другой в кусок пирога.