【问题标题】:PowerShell v3 Managing Share/NTFS PermissionsPowerShell v3 管理共享/NTFS 权限
【发布时间】:2015-06-06 13:16:19
【问题描述】:

背景:

我一直在尝试编写一个 PowerShell 脚本来添加/删除文件夹的权限。该脚本是接连启动的一系列脚本中的第 5 个脚本。脚本有共享变量等。

脚本如下:

  1. 创建 AD 组对象
  2. 创建 AD 用户对象(或两个、三个、四个、 等)
  3. 在应用服务器上创建用户文件夹并创建数据 文件服务器上的文件夹(由所有关联用户共享)
  4. 这个脚本,它将权限更改为原来的样子 应该是

我正在尝试执行以下操作 (NTFS):

  1. 用户文件夹 - SYSTEM(完整)、管理员(完整)、域管理员(完整)、AD 组(修改)、USERS(修改)
  2. 数据文件夹 - SYSTEM (Full)、Administrator (Full)、Domain Admin (Full)、AD Group (Modify)、NETWORK SERVICE (FULL)、USERS (READ)

我正在尝试执行以下操作(分享):

  1. 数据文件夹 - SYSTEM(完整)、管理员(完整)、域管理员(完整)、AD 组(修改)

这是我一直在尝试的工作:

如果我在本地使用这种方法,效果很好。它毫无问题地共享诸如“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 年。


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

【问题讨论】:

  • 嗨@SoheilHashemi,虽然它很相似,但讨论中的链接不再有效。此外,该链接中列出的代码对我不起作用(见上文),因为我(猜测)使用变量($gname=$FullSharePath)而不是映射驱动器或其他任何东西。这就是我发布的原因...谢谢!

标签: powershell permissions share ntfs


【解决方案1】:

编辑 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)

【讨论】:

    【解决方案2】:

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

    使用远程处理应该是直截了当的,但 WMI 有点棘手。问题是权限。这里有几个链接可供查看。

    One approach.

    Another approach without permissions.

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

    【讨论】:

    • 谢谢@Rich Chiavaroli。链接“一种方法”下的信息。非常适合分享。现在我只需要弄清楚如何编辑文件夹的 NTFS 权限。
    猜你喜欢
    • 1970-01-01
    • 2014-12-20
    • 1970-01-01
    • 2023-03-16
    • 1970-01-01
    • 2016-02-10
    • 1970-01-01
    • 2019-07-07
    • 1970-01-01
    相关资源
    最近更新 更多