是否有一个简单的脚本可以用来提供目标文件夹和我想要使用的 AD 组,它会生成一组包含该 AD 组成员的文件夹并将适当的权限委托给这些文件夹?
我已经得到了它dsget group "FQN" -members
并返回了 FQN 列表。
这是我正在寻找的一个例子...
SomeADGroup
member1
member2
...
memberN
Root Folder - has permission for SomeADGroup (already set up)
member1 - member1 has modify; other SomeADGroup members, no permissions
member2 - member2 has modify; other SomeADGroup members, no permissions
...
memberN - memberN has modify; other SomeADGroup members, no permissions
答案1
这儿——有。
Option Explicit
' DOMAIN\Group to process
Const DOMAIN = "DOMAIN"
Const GROUP = "Human Resources Department"
' Destination path - Do not append a "\"
Const DESTINATION_PATH = "C:\Test"
' Constants for the NameTranslate object.
Const ADS_NAME_INITTYPE_GC = 3
Const ADS_NAME_TYPE_NT4 = 3
Const ADS_NAME_TYPE_1779 = 1
Dim objNameTranslate, objGroup, strUser, objShell
Set objNameTranslate = CreateObject("NameTranslate")
objNameTranslate.Init ADS_NAME_INITTYPE_GC, ""
objNameTranslate.Set ADS_NAME_TYPE_NT4, DOMAIN & "\" & GROUP
Set objGroup = GetObject("LDAP://" & Replace(objNameTranslate.Get(ADS_NAME_TYPE_1779), "/", "\/"))
set objShell = CreateObject("Wscript.Shell")
For Each strUser in objGroup.Members
objShell.Run "%COMSPEC% /c mkdir " & DESTINATION_PATH & "\" & strUser.samAccountName
objShell.Run "CACLS " & DESTINATION_PATH & "\" & strUser.samAccountName & " /E /G " & DOMAIN & "\" & strUser.samAccountName & ":F"
Next ' strUser
快速浏览:
设置 DOMAIN、GROUP 和 DESTINATION_PATH。显然,运行此命令时,您必须以具有创建目录和在 DESTINATION_PATH 下设置权限的权限的用户身份登录。
我本可以在 PowerShell 中更高效地完成此操作,只是我无法忍受 PowerShell,也不想费心去深入了解它。>smile< 同样,我本可以使用 FileSystemObject 完成目录创建,但这对我来说写起来更快。我本可以做一些更花哨的事情来代替 CACLS,但嘿,它有效。
答案2
您可以使用 powershell 来执行这两项操作。根据文件夹的大小和深度,可能需要一些递归才能开始工作。
您可以简单地创建一个文件夹
New-Item c:\scripts\Windows PowerShell -type directory
那么设置权限的最简单方法可能是使用 if 语句或类似的语句。
在 powershell 中,您可以使用两个命令行 get-acl 和 set-acl 来更改权限。因此,从具有正确权限的预定义文件夹中获取权限集,并将其设置为您正在处理的文件夹。
或者将权限定义为变量,然后根据是否希望每个文件夹具有相同的权限使用 set-acl。
然后使用几个 IF 语句或某些内容根据文件夹名称指定权限。
foreach ($file in $(Get-ChildItem $StartingDir -recurse)) {
$acl=get-acl $file.FullName
#Add this access rule to the ACL
$acl.SetAccessRule($rule)
#Write the changes to the object
set-acl $File.Fullname $acl
}