我正在尝试构建一个脚本,该脚本将为我们的文件服务器上的新用户创建一个文件夹。然后从该文件夹中删除继承的权限并重新添加特定权限。我已成功添加文件夹(如果我在脚本中为其提供静态条目),授予域管理员权限,删除继承等...但我无法让它使用我设置为用户的变量。我不希望每次都有静态用户,我希望能够运行此脚本,让它向我询问用户名,然后它会出去创建文件夹,然后根据我提供的用户名授予同一用户对该文件夹的完整权限。我可以使用 Smithd 作为用户,如下所示:
新项目 \\fileserver\home$\Smithd –类型目录
但无法让它像这样引用用户:
新项目 \\fileserver\home$\$username –类型目录
以下是我所拥有的:
创建新文件夹并设置 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
我尝试了几种方法让它工作,但没有成功。欢迎任何想法或建议,谢谢。
答案1
在我以前的工作中,我记得能够使用旧的“mkdir”命令在我的 powershell 脚本中创建文件夹,但首先我建议引用你的路径并首先使用 echo/write-host 进行测试。试试这个,只是为了测试:
write-host "\\${file_server}\home$\${user_name}"
我无法使用 Windows 机器进行测试,但我猜测“$”也可能是一个问题。
尝试使用反引号来尝试逃避$
:
write-host "\\${file_server}\home`$\${user_name}"
并且不要继续,直到您知道该字符串符合您的喜好。我认为您不需要在 read-host 中使用 -prompt,尽管这可能不是问题。write-hosting 始终是一个很好的健全性检查。
我希望能很快获得一台 Windows 机器,以便提供更好的帮助。
此外,如果感兴趣的话,您可以在程序顶部提供用户名作为参数,这样您就可以从另一个脚本重复调用该脚本,该脚本从 $file_server、$user_name 对的文件中读取名称。只需放入一个param( [string] $file_server, [string] $user_name )
祝你好运! :)