PowerShell/命令提示符-从 AD 组成员创建文件夹

PowerShell/命令提示符-从 AD 组成员创建文件夹

是否有一个简单的脚本可以用来提供目标文件夹和我想要使用的 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
  }

相关内容