背景
我一直在尝试编写PowerShell脚本来添加/删除文件夹的权限。这个脚本是一系列脚本中的第五个脚本,它们一个接一个地开始。脚本有共享变量等。
脚本如下:
我尝试执行以下操作(NTFS):
我尝试执行以下操作(分享):
以下是我一直在尝试使用的内容:
如果我在本地使用此方法,它的效果很好。它共享一个文件夹,例如" 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 - 这不是一个重复的问题(我猜有人将其标记为这样)...请参阅下面我对用户的回复。
答案 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有点棘手。问题是权限。以下是几个链接。
Another approach without permissions.
Docs on the Create method for Win32_Share. - 您可以将其与第二个链接结合使用以添加安全描述符。