题 如何通过Powershell为用户提供NTFS文件夹权限


我正在尝试构建一个脚本,为我们的文件服务器上的新用户创建一个文件夹。然后从该文件夹中取出继承的权限并重新添加特定权限。我已成功添加文件夹(如果我在脚本中给它一个静态条目),给予域管理员权限,删除继承等...但是我我无法使用我设置为用户的变量。我不希望每次都有静态用户,我希望能够运行这个脚本,让它问我一个用户名,然后出去创建文件夹,然后给同一个用户完全权限基于我提供的用户名的文件夹。我可以使用Smithd作为用户,如下所示:

New-Item \\ fileserver \ home $ \ Smithd -Type目录

但无法让它像这样引用用户:

New-Item \\ fileserver \ home $ \ $ username -Type目录

这就是我所拥有的:

创建新文件夹并设置NTFS权限。

$username = read-host -prompt "Enter User Name"

New-Item \\\fileserver\home$\$username –Type Directory

Get-Acl \\\fileserver\home$\$username  

$acl = Get-Acl \\\fileserver\home$\$username

$acl.SetAccessRuleProtection($True, $False)

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

$rule = New-Object System.Security.AccessControl.FileSystemAccessRule("Domain\Domain Admins","FullControl", "ContainerInherit, ObjectInherit", "None", "Allow")
$acl.AddAccessRule($rule)

$rule = New-Object System.Security.AccessControl.FileSystemAccessRule("Domain\"+$username,"FullControl", "ContainerInherit, ObjectInherit", "None", "Allow")
$acl.AddAccessRule($rule)

Set-Acl \\\fileserver\home$\$username $acl

我已经尝试了几种方法让它工作,但没有运气。任何想法或建议都会受到欢迎,谢谢。


5
2017-11-15 23:00




尝试使用脚本的前两行创建目录时,我没有遇到任何错误。从阅读你的问题看来,这就是你得到错误的地方。您能否根据您收到的确切错误更新您的问题? - MDMarra
你收到什么错误?您可以尝试将其分解为New-Item -Path \\ fileserver \ home $ -Name $ username -Type Directory。不知道这是否有效。 - Shawn Melton
我发誓第二行之前对我不起作用,但它现在工作正常,拉出用户名变量就好了。 :/我之前显然做错了或者在测试时混淆了。再次回过头来,我将更新帖子,其中包含特定错误和详细信息,以及它挂起的位置。谢谢大家的意见。 - Don
好吧,我不确定前几天出了什么问题,但今天这样做似乎与上面的脚本一样好用,除了我已经将“Domain \”+ $ username改回原来的状态,这是“域\ $用户名”。我只能假设我胖了一些东西。谢谢大家对此的帮助!这是我正在处理的脚本的一部分,另一部分仍然有一点点导入活动目录模块,看看它是否也可以自行运行。 :) 谢谢! - Don


答案:


在我以前的工作中,我记得能够使用旧的'mkdir'命令在我的powershell脚本中创建文件夹,但是为了开始我会建议引用你的路径并首先使用echo / write-host进行测试。试试这个,只是为了测试:

write-host "\\${file_server}\home$\${user_name}"

我无法访问Windows机器进行测试,但我猜测'$'也可能是一个问题。

尝试使用后退来试图逃避 $

write-host "\\${file_server}\home`$\${user_name}"

并且不要继续,直到你知道字符串符合你的喜好。我认为您的读取主机中不需要-prompt,尽管这可能不是问题。写主持总是一个很好的理智检查。

我希望尽快访问Windows机器,以便提供更好的帮助。

此外,如果感兴趣,您可以在程序顶部提供用户名作为参数,因此您可以从另一个从$ file_server,$ user_name对的文件中读取名称的脚本重复调用该脚本。 只是一个人 param( [string] $file_server, [string] $user_name )

祝好运! :)


2
2017-11-19 18:13



谢谢你的回复!当我执行上面的行时,我分别得到\\\ home $ \和\\\ home'$。我希望能够在脚本顶部设置用户名的地方进行设置,这实际上是我试图从长远来看设置它的方式。在开始时它会提示用户名,然后从那时起我想要使用的用户名只需使用$ username。我只是不知道如何让它使用变量$ username,因为我希望这个脚本能够与任何新员工一起使用(而不必每次都手动更改代码。谢谢! - Don
我希望我有一台Windows机器可以测试。我完全翼了,哈哈。你试过了吗 write-host "username=$username" 分配$ username后立即?如果输出“username =”,则它必须是读取主机。另外,我们在使用$ user_name和$ username时存在差异。对于那个很抱歉。我确定你可能使用了$ username,但为了以防万一,以为我会仔细检查。希望我能提供更多帮助。祝你好运,唐。 - kikuchiyo


看看这些文章:

http://powershell.com/cs/blogs/tobias/archive/2011/09/21/applying-ntfs-permissions.aspx

http://consulting.risualblogs.com/blog/2011/03/25/powershell-to-assign-permissions-to-home-directories/

这些会有所帮助..


-2
2017-11-16 01:17



投票失败没有问题,但投票失败的人真的希望我在这里写完整个剧本。有人可以混合上面的资源并编写脚本并使其运行,就像我做的那样,当然在发布之前进行测试... - The_aLiEn
不鼓励直接联系。这是一个问答网站,不要与网站的Q&链接混在一起。从那时起,当这些链接被破坏时会发生什么?在你的答案中需要更多的肉和土豆,并用链接备份。 :) - Nixphoe
此外,OP在创建文件夹时遇到问题,而不是设置权限。尝试实际阅读超过标题。有时它们会产生误导。 - MDMarra