PowerShell / Command Prompt - Tạo thư mục từ các thành viên nhóm AD


0

Có một tập lệnh đơn giản nào tôi có thể sử dụng để đưa ra một thư mục đích và nhóm AD tôi muốn sử dụng và nó sẽ tạo ra một tập hợp các thư mục với các thành viên của nhóm AD đó và ủy quyền cho các thư mục đó?

Tôi đã đi xa dsget group "FQN" -membersvà nó trả về một danh sách của FQN.

Đây là một ví dụ về những gì tôi đang tìm kiếm ...

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

Bạn đang cố gắng thiết lập hồ sơ chuyển vùng hoặc thư mục chuyển hướng? Nếu vậy, có một cách tốt hơn!
Jay Michaud

@Jay - không không tại thời điểm này.
Daniel A. Trắng

@Jay: Để hệ điều hành tạo ra chúng, IMHO, không phải là cách tốt hơn, nhưng chúng ta có thể thảo luận vào lúc khác ... cười
Evan Anderson

@Evan - điều đó có ý nghĩa không?
Daniel A. Trắng

@Daniel - Vâng. Tôi đã viết một cái gì đó nhanh chóng và bẩn thỉu để làm những gì bạn cần. Nó hoạt động tốt trên PC thử nghiệm của tôi.
Evan Anderson

Câu trả lời:


1

Ở đây-- có tại.

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

Một chuyến tham quan nhanh:

Đặt DOMAIN, GROUP và DESTINATION_PATH. Rõ ràng, bạn sẽ phải đăng nhập với tư cách là người dùng có quyền tạo thư mục và đặt quyền theo DESTINATION_PATH khi bạn chạy này.

Tôi có thể đã làm điều này hiệu quả hơn trong PowerShell, ngoại trừ việc tôi không thể chịu được PowerShell và không muốn bị làm phiền để hiểu sâu hơn về nó. > mỉm cười <Tương tự như vậy, tôi có thể đã thực hiện việc tạo thư mục với FileSystemObject, nhưng điều này nhanh hơn đối với tôi để viết. Tôi đã có thể làm một cái gì đó lạ hơn thay vì CACLS nhưng, hey, nó hoạt động.


Điều này không hoàn toàn hiệu quả - vì chúng tôi cũng có dịch vụ LDAP riêng. Đây là lỗi. Dòng: 19 Char: 1 Lỗi: Tên dịch: Không thể tìm thấy tên hoặc không đủ quyền để xem tên. Mã số: 80072116 Nguồn: (null)
Daniel A. White

Đợi đã-- bạn đang nói về việc đưa các thành viên ra khỏi một nhóm trên máy chủ LDAP không phải AD? Không-- đối tượng NameTranslate sẽ không quan tâm đến việc nâng vật nặng cho tôi ở đó. Bạn có thể nhận xét dòng 19 và đặt DN cho nhóm vào dòng 20 (ví dụ GetObject ("LDAP: // - dn ở đây--") làm ví dụ) và nó có thể làm những gì bạn muốn. Có lẽ.
Evan Anderson

Cảm ơn rất nhiều! Tôi viết lại một số lĩnh vực và nó hoạt động rất đẹp.
Daniel A. White

0

Bạn có thể sử dụng powershell để làm cả hai. Tùy thuộc vào kích thước và độ sâu của các thư mục của bạn, có thể cần một số đệ quy để làm việc.

Bạn có thể tạo một thư mục đơn giản

New-Item c:\scripts\Windows PowerShell -type directory

Sau đó, cách dễ nhất để đặt quyền có lẽ là sử dụng câu lệnh if hoặc đại loại như thế.

Trong powershell, bạn sử dụng hai lệnh get-acl và set-acl để thay đổi quyền. Vì vậy, hãy lấy quyền được đặt từ một thư mục được xác định trước với các quyền chính xác và đặt chúng vào thư mục bạn đang làm việc.

Hoặc xác định các quyền thành một biến và chỉ sử dụng set-acl tùy thuộc vào việc bạn có muốn các quyền tương tự cho mỗi thư mục hay không.

Sau đó, sử dụng một vài câu lệnh IF hoặc soemthing để chỉ định các quyền dựa trên tên thư mục.

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
  }

Tôi đang cố gắng điền thông tin này từ một nhóm thư mục hoạt động.
Daniel A. Trắng

Bạn cũng có thể cần một snap AD. Vì vậy, bạn có thể sử dụng các lệnh như Get-ADUser -group. Sau đó, có một tuyên bố sẽ tạo thư mục có cùng tên hoặc tương tự với người dùng AD. Sau đó áp dụng quyền với Set-Acl.
dùng10711
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.