Как экспортировать общую папку с разрешениями и связанными группами

Я работаю на сервере Windows 2008 r2 и пытаюсь экспортировать конфигурацию общей папки со всеми связанными с ними группами, разрешениями и разрешениями файловой системы.

Есть ли способ сделать это?

может с пауэршеллом?

@edit: другая проблема заключается в том, что мне нужно сделать это после перезагрузки, поэтому я должен сохранить конфигурацию, например, в файле, а затем повторно импортировать ее.


person rschirin    schedule 30.07.2014    source источник
comment
Вы хотите экспортировать настройки всех общих ресурсов или только настройки одной конкретной общей папки?   -  person Ansgar Wiechers    schedule 30.07.2014
comment
это не имеет значения. если у вас есть какие-либо идеи, объясните это мне. Мне нужна вся общая папка, кроме системной.   -  person rschirin    schedule 30.07.2014


Ответы (3)


Я работаю над модулем (см. здесь), который должен уметь делать это для тебя. Это скриптовый модуль, так что вы можете открыть его и посмотреть/изменить код. Если вы используете его, вы можете сделать что-то вроде этого (вызов Export-Csv закомментирован, но вы можете вставить его после подтверждения того, что это результат, который вы ищете):

Get-WmiObject Win32_Share -ComputerName ServerName | 
    Get-AccessControlEntry #| Export-Csv -Path CsvLocation.csv

Вы получите ошибки для встроенных системных общих ресурсов, например, C$, поэтому вы можете добавить -ErrorAction SilentlyContinue и/или -ErrorVariable к вызову Get-AccessControlEntry.

Чтобы вернуть разрешения, вы просто передадите выходные данные Get-AccessControl в Add-AccessControlEntry:

Import-Csv -Path CsvLocation.csv | Add-AccessControlEntry -WhatIf

Add-AccessControlEntry запрашивает подтверждение по умолчанию. Используйте переключатель -Force для подавления подсказок.

Изменить это для работы с разрешениями NTFS тоже очень просто. Просто измените вызов Get-WmiObject на вызов Get-ChildItem, и все остальное должно остаться прежним.

person Rohn Edwards    schedule 30.07.2014

Если вы хотите создать резервную копию/восстановить все существующие общие ресурсы, вы можете экспортировать/импортировать ключ реестра HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\LanmanServer\Shares.

Резервное копирование:

reg export HKLM\SYSTEM\CurrentControlSet\Services\LanmanServer\Shares shares.reg

Восстановить:

reg import shares.reg
net stop server && net start server

ACL файлов/папок можно сохранить и восстановить следующим образом:

Резервное копирование:

Get-WmiObject -Class Win32_Share -Filter 'Type = 0' | select -Expand Path | % {
  $path = $_
  Get-Acl $path | select @{n='Path';e={$path}}, Sddl
} | Export-Csv 'C:\path\to\acls.csv'

Восстановить:

Import-Csv 'C:\path\to\acls.csv' | % {
  $acl = Get-Acl $_.Path
  $acl.SetSecurityDescriptorSddlForm($_.Sddl)
  Set-Acl -Path $_.Path -AclObject $acl
}
person Ansgar Wiechers    schedule 30.07.2014
comment
Я могу использовать этот способ, но с его помощью я могу сохранить и импортировать только разрешение общего доступа, но не разрешение безопасности (также известное как ACL). - person rschirin; 30.07.2014
comment
@rschirin: вы должны были уточнить в своем вопросе, что хотите сделать резервную копию разрешений как общего доступа, так и файловой системы. Смотрите обновленный ответ. - person Ansgar Wiechers; 30.07.2014

Интересный вопрос, я думаю, что единственный способ сделать это — вручную получить ACL в исходной папке, а затем повторно применить их к скопированной папке. Используемые командлеты: Get-Acl -path $youfolder, Copy-Item и Set-Acl.

person Naigel    schedule 30.07.2014
comment
get-acl работает с разрешением на файловую систему. а что делать для SMB? - person rschirin; 30.07.2014
comment
если вы используете хотя бы PS3 на win8+/2012+, вы можете использовать New-SmbShare - person Naigel; 30.07.2014
comment
к сожалению нет. у меня вин 2008 р2 - person rschirin; 30.07.2014