PowerShell v3管理共享/ NTFS权限

时间:2015-04-01 18:46:36

标签: powershell permissions share ntfs

背景

我一直在尝试编写PowerShell脚本来添加/删除文件夹的权限。这个脚本是一系列脚本中的第五个脚本,它们一个接一个地开始。脚本有共享变量等。

脚本如下:

  1. 创建AD组对象
  2. 创建AD用户对象(或两个,三个,四个, 等)
  3. 在Application Server上创建用户文件夹并创建数据 文件服务器上的文件夹(由所有关联用户共享)
  4. 此脚本将更改权限 应该是
  5. 我尝试执行以下操作(NTFS):

    1. 用户文件夹 - SYSTEM(完整),管理员(完整),域管理员(完整),AD组(修改),USERS(修改)
    2. 数据文件夹 - 系统(完整),管理员(完整),域管理员(完整),AD组(修改),网络服务(完整),用户(阅读)
    3. 我尝试执行以下操作(分享):

      1. 数据文件夹 - SYSTEM(完整),管理员(完整),域管理员(完整),AD组(修改)
      2. 以下是我一直在尝试使用的内容:

        如果我在本地使用此方法,它的效果很好。它共享一个文件夹,例如" 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'
        

        服务器操作系统是2008 R2和PowerShell v3。 DC / AD虽然是2012年。


        编辑4/2/15 - 这不是一个重复的问题(我猜有人将其标记为这样)...请参阅下面我对用户的回复。

2 个答案:

答案 0 :(得分:2)


编辑4/6/15 - 我是如何完成我的目标......

这是我最终要做的事情,这要归功于Rich Chiavaroli的指针(来自其他线程/来源)。

要处理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

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

答案 1 :(得分:0)

问题是您正在使用NET SHARE,它仅用于共享本地目录。您无法使用它来共享远程目录。您必须在远程系统上运行NET SHARE。虽然有几种选择。一种方法是使用PowerShell Remoting远程访问服务器,然后运行NET SHARE命令。另一种方法是使用WMI远程创建共享。

使用远程处理应该是直截了当的,但WMI有点棘手。问题是权限。以下是几个链接。

One approach.

Another approach without permissions.

Docs on the Create method for Win32_Share. - 您可以将其与第二个链接结合使用以添加安全描述符。