2015-04-01 4 views
1

фона:PowerShell v3 Управление Share Permissions/NTFS

Я пытался написать сценарий PowerShell, чтобы добавить/удалить разрешения для папки. Этот скрипт является пятым сценарием в последовательности скриптов, которые начинаются после другого. Сценарии имеют общие переменные и т.д.

Сценарии следующим образом:

  1. Создание AD Group Object
  2. Создание пользователя AD объект (или два, три, четыре, и т.д.)
  3. Создать папку пользователя на сервере приложений и создать данные Папка (которая будет использоваться всеми связанными пользователями) на Файловом сервере
  4. Этот скрипт, который будет изменять разрешения, они должны быть

Я пытаюсь сделать следующее (NTFS): Папка

  1. пользователя - SYSTEM (Full), администратор (Full), администратора домена (Full), AD Group (Изменить), ПОЛЬЗОВАТЕЛИ (Изменить)
  2. Папка данных - СИСТЕМА (Полная), Администратор (Полный), Администратор домена (Полный), Группа AD (Изменить), СЕТЕВЫЕ СЛУЖБЫ (ПОЛНЫЕ), ПОЛЬЗОВАТЕЛИ (READ)

Я пытаюсь сделать следующее (Share):

  1. папки Data - SYSTEM (Full), администратора (Full), администратор домена (Full), AD Group (Изменить)

Вот что я пытался работать с:

Если я использую этот метод локально, он работает Великий. Он обменивается папкой, такой как «C: Test», без проблем. Но я не могу заставить это работать против серверов (не уверен, что это потому, что я использую переменные или что). В этом случае именно папка с данными - это то, что я пытаюсь изменить.

# Configures the folders to have necessary permissions 

# Set the folder path 

# gname, sharedcomputername, and clientname all come from values in previous script 

$Server = $ShareComputerName 
$Share = "\d$\Tran\"+$ClientName 
$FullSharePath = "$Server"+"$Share" 

# Assign the permissions 

net share $gname=$FullSharePath '/Grant:Administrators,FULL' '/Grant:Domain\Account,CHANGE' 

OS Сервер 2008 R2 и PowerShell v3. DC/AD - это 2012 год.


EDIT 4/2/15 - Это не дублирует вопрос (я предполагаю, что кто-то пометил его как таковой) ... см мой ответ ниже пользователем.

+0

возможный дубликат [Общий доступ к папке и установление разрешений в PowerShell] (http://stackoverflow.com/questions/399971/sharing-a-folder-and-setting-permissions-in-powershell) – powershell

+0

Привет @SoheilHashemi, хотя это похоже, li nk в обсуждении больше не работает. Кроме того, код, указанный в этой ссылке, не работает для меня (см. Выше), потому что я (угадывание) использует переменные ($ gname = $ FullSharePath) вместо сопоставленных дисков или что-то еще. Вот почему я отправил ... спасибо! – Ilya

ответ

1

EDIT 4/6/15 - Как я сделал то, что я искал, чтобы сделать ...

Вот что я в конечном итоге делает, благодаря указателю (для других потоков/источников) от Богатого Чьявароли.

Для обработки разрешений NTFS, я сделал следующее:

# Setting NTFS directory permissions 

$acl = Get-Acl "\\$servername\folderpath" 

$rule = New-Object System.Security.AccessControl.FileSystemAccessRule("domain\user or usergroup","Modify", "ContainerInherit, ObjectInherit", "None", "Allow") 
$acl.AddAccessRule($rule) 

$rule = New-Object System.Security.AccessControl.FileSystemAccessRule("Users","Modify", "ContainerInherit, ObjectInherit", "None", "Allow") 
$acl.AddAccessRule($rule) 

Set-Acl "\\$servername\folderpath" $acl 

Для обработки Делитесь разрешения, я сделал следующее:

# Configures the folders to have necessary permissions 

# Set the folder path 

$Server = Enter your server name here (ex: \\test) 
$Share = Enter the path to the folder here (ex: C:\Test) 

# Assign the Share Permissions 

# User Name/Group to give permissions to 
$trustee = ([wmiclass]'Win32_trustee').psbase.CreateInstance() 
$trustee.Domain = "Corp" 
$trustee.Name = "$gname" 

$trustee2 = ([wmiclass]'Win32_trustee').psbase.CreateInstance() 
$trustee2.Domain = "Domain" 
$trustee2.Name = "Domain Admins" 

# Access mask values 
$fullcontrol = 2032127 
$change = 1245631 
$read = 1179785 

# Create access-list 
$ace = ([wmiclass]'Win32_ACE').psbase.CreateInstance() 
$ace.AccessMask = $fullcontrol 
$ace.AceFlags = 3 
$ace.AceType = 0 
$ace.Trustee = $trustee 

$ace2 = ([wmiclass]'Win32_ACE').psbase.CreateInstance() 
$ace2.AccessMask = $fullcontrol 
$ace2.AceFlags = 3 
$ace2.AceType = 0 
$ace2.Trustee = $trustee2 

# Security descriptor containing access 
$sd = ([wmiclass]'Win32_SecurityDescriptor').psbase.CreateInstance() 
$sd.ControlFlags = 4 
$sd.DACL = $ace, $ace2 
$sd.group = $trustee 
$sd.owner = $trustee 

$share = Get-WmiObject Win32_Share -List -ComputerName "$Server" 
$share.create("$Share", "Name of the share", 0, 100, "", "", $sd) 
0

Проблема в том, что вы используете NET SHARE, предназначенную только для совместного использования локального каталога. Вы не можете использовать его для совместного использования удаленного каталога. Вы должны запустить NET SHARE в удаленной системе. Однако есть пара вариантов. Можно было бы использовать PowerShell Remoting для удаленного доступа к серверу, а затем запустить команду NET SHARE.Другой вариант - использовать WMI для удаленного создания ресурса.

Использование Remoting должно быть прямым, но WMI немного сложнее. Проблема заключается в разрешениях. Вот пара ссылок для просмотра.

One approach.

Another approach without permissions.

Docs on the Create method for Win32_Share. - Вы можете использовать это в сочетании со второй ссылке, чтобы добавить в дескрипторе безопасности.

+0

Спасибо @Rich Chiavaroli. Информация по ссылке «Один подход». отлично поработал над долей. Теперь мне просто нужно выяснить, как редактировать разрешения NTFS для этой папки. – Ilya