Sử dụng Get-ADUser để nhận nhiều thông tin khác nhau về người dùng miền AD. Tìm kiếm người dùng không hoạt động trong Active Directory

Xin chào các độc giả và người đăng ký thân mến, chúng tôi tiếp tục khám phá các khả năng của Powershell và Active Directory với bạn. Như bạn nhớ, tất cả tài khoản người dùng và máy tính đều nằm trong cơ sở dữ liệu NTDS.dit, mọi thứ đều tuyệt vời và tập trung. Khi một công ty có nhiều quản trị viên hệ thống, một tình huống có thể dẫn đến rác và thông tin xác thực không cần thiết tích tụ trong đó. Tất cả chúng ta đều là con người và chúng ta có thể quên một số thứ, và vào một số thời điểm chúng ta có thể bị phân tâm, điều này cũng sẽ dẫn đến việc quên những thông tin quan trọng. Và chúng tôi đi đến kết luận rằng những người dùng không hoạt động (bị sa thải hoặc bị lãng quên) tích lũy trong Thư mục Actvie, trong mọi trường hợp, quản trị viên hệ thống tốt nên xác định chúng, vô hiệu hóa chúng và sau đó xóa chúng theo ý muốn, điều mà chúng tôi sẽ thực hiện.

Thông qua ADUC snap-in

Lần trước, tôi đã cung cấp cho bạn một ví dụ về việc sử dụng phần đính vào Người dùng và Máy tính Active Directory, qua đó chúng tôi tìm kiếm các máy tính bị thiếu trên mạng cục bộ đã không xuất hiện trong một tháng. Bây giờ chúng ta hãy làm tương tự với tài khoản người dùng. Tôi có AD trên Windows Server 2012 R2, mở ADUC, để nhấn WIN + R và nhập dsa.msc.

Trong biểu mẫu yêu cầu mở ra, hãy chỉ định:

  • Yêu cầu tên> Tôi đã mất người dùng
  • Mô tả nếu cần thiết
  • Yêu cầu root> tại đây, bạn có thể để lại toàn bộ miền hoặc chỉ định nó trên đơn vị tổ chức mong muốn

Sau đó, chúng tôi nhấn yêu cầu nút.

Trên tab người dùng, chúng tôi thấy mục "Số ngày kể từ lần đăng nhập cuối cùng" tôi đã đặt 60 ngày làm ví dụ.

Kết quả là bạn sẽ nhận được danh sách các tài khoản nhân viên không hoạt động mà bạn cần.

Thông qua snap-in powershell

Tất cả điều tương tự có thể được thực hiện thông qua Powershell. Ngay lập tức tôi sẽ đưa ra một mã có nhiệm vụ tìm kiếm những người dùng không hoạt động, vì điều này tôi đã chọn khoảng thời gian 45 ngày, ngắt kết nối dữ liệu người dùng và chuyển đến một đơn vị tổ chức được chỉ định đặc biệt.

$ date_with_offset = (Get-Date) .AddDays (-45)
$ users = Get-ADUser -Properties LastLogonDate -Filter (LastLogonDate -lt $ date_with_offset) | Sắp xếp LastLogonDate
foreach ($ user trong $ users) (set-aduser $ user -enabled $ false; move-adobject -identity $ user -targetpath "ou = Fired, ou = Msk L. users, ou = Location, dc = msk, dc = contoso, dc = com ")
Get-ADUser -Properties LastLogonDate -Filter (LastLogonDate -lt $ date_with_offset) | Sắp xếp LastLogonDate | FT Name, LastLogonDate -AutoSize | Out-File c: \ Script \ users.txt

  • Trên dòng đầu tiên, bạn khai báo một biến trong đó bạn đặt cụm từ tìm kiếm
  • Tạo một biến và mẫu trước lần đăng nhập cuối cùng
  • Di chuyển người dùng

  • Tạo báo cáo cho một tệp

Nhiều điều hữu ích hơn để làm việc với người dùng. Trước khi sử dụng các lệnh bên dưới, bạn cần tải mô-đun Active Directory thông qua lệnh

Get-Help Get-ADUser

Dành riêng cho việc sử dụng PowerShell để quản lý AD. Khi bắt đầu, tôi quyết định thực hiện 10 nhiệm vụ quản trị AD phổ biến và xem xét cách chúng có thể được đơn giản hóa bằng PowerShell:

  1. Đặt lại mật khẩu người dùng
  2. Kích hoạt và hủy kích hoạt tài khoản
  3. Bỏ chặn tài khoản người dùng
  4. Xóa tài khoản của bạn
  5. Tìm nhóm trống
  6. Thêm người dùng vào nhóm
  7. Liệt kê các thành viên của nhóm
  8. Tìm tài khoản máy tính lỗi thời
  9. Hủy kích hoạt tài khoản máy tính
  10. Tìm máy tính theo loại

Ngoài ra, tác giả duy trì một blog (tất nhiên là sử dụng PowerShell), chúng tôi khuyên bạn nên xem - jdhitsolutions.com/blog. Và những gì liên quan nhất mà bạn có thể nhận được từ twitter của anh ấy twitter.com/jeffhicks.
Vì vậy, dưới đây là bản dịch của bài viết “10 nhiệm vụ hàng đầu của Active Directory được giải quyết bằng PowerShell”.

Quản lý Active Directory (AD) với Windows PowerShell dễ dàng hơn bạn nghĩ và tôi muốn chứng minh điều đó cho bạn. Bạn có thể chỉ cần lấy các tập lệnh bên dưới và sử dụng chúng để giải quyết một số nhiệm vụ quản lý quảng cáo.

Yêu cầu

Để sử dụng PowerShell để quản lý AD, có một số yêu cầu phải được đáp ứng. Tôi sẽ chứng minh cách các lệnh ghép ngắn AD hoạt động trên máy tính Windows 7 làm ví dụ.
Để sử dụng lệnh ghép ngắn, bạn phải có bộ điều khiển miền Windows Server 2008 R2 hoặc bạn có thể tải xuống và cài đặt Dịch vụ Cổng quản lý Thư mục Hoạt động trên các DC cũ. Đọc kỹ tài liệu trước khi cài đặt; Yêu cầu khởi động lại CD.
Về phía máy khách, tải xuống và cài đặt (RSAT) cho Windows 7 hoặc Windows 8. Trong Windows 7, bạn sẽ cần mở trong Bảng điều khiển chương Các chương trình và lựa chọn Bật hoặc tắt các tính năng của Windows... Tìm thấy Công cụ quản trị máy chủ từ xa và mở rộng phần Công cụ quản trị vai trò... Chọn các mục thích hợp cho Công cụ AD DS và AD LDS, đặc biệt lưu ý rằng mục đó phải được chọn Mô-đun Active Directory cho Windows PowerShell như trong Hình 1. (Trong Windows 8, tất cả các công cụ được chọn theo mặc định). Bây giờ chúng tôi đã sẵn sàng để đi.

Hình 1 Bật công cụ AD DS và AD LDS

Tôi đã đăng nhập bằng tài khoản có quyền quản trị viên miền. Hầu hết các lệnh ghép ngắn mà tôi sẽ hiển thị sẽ cho phép bạn chỉ định thông tin đăng nhập thay thế. Dù sao, tôi khuyên bạn nên đọc phần trợ giúp ( Được trợ giúp) và các ví dụ mà tôi sẽ chứng minh bên dưới.
Bắt đầu phiên PowerShell và nhập mô-đun:

PS C: \> ActiveDirectory mô-đun nhập

Việc nhập sẽ tạo ra một PSDrive mới, nhưng chúng tôi sẽ không sử dụng nó. Tuy nhiên, bạn có thể xem những lệnh nào trong mô-đun đã nhập.

PS C: \> get-command -module ActiveDirectory

Cái hay của những lệnh này là nếu tôi có thể sử dụng một lệnh cho một đối tượng AD, thì nó có thể được sử dụng cho 10, 100 và thậm chí là 1000. Hãy xem một số lệnh ghép ngắn này hoạt động như thế nào.

Nhiệm vụ 1: Đặt lại mật khẩu người dùng

Hãy bắt đầu với một tác vụ điển hình: đặt lại mật khẩu của người dùng. Điều này có thể được thực hiện dễ dàng và đơn giản thông qua lệnh ghép ngắn Set-ADAccountPassword... Phần khó khăn là mật khẩu mới phải đủ điều kiện là một chuỗi an toàn: một đoạn văn bản được mã hóa và lưu trữ trong bộ nhớ trong suốt phiên PowerShell. Đầu tiên, hãy tạo một biến với mật khẩu mới:
PS C: \> $ new = Read-Host "Nhập mật khẩu mới" -AsSecureString

Sau đó, hãy nhập mật khẩu mới:

Bây giờ chúng tôi có thể truy xuất tài khoản (bằng cách sử dụng samAccountname Là lựa chọn tốt nhất) và đặt mật khẩu mới. Đây là một ví dụ cho người dùng Jack Frost:

PS C: \> Set-ADAccountPassword jfrost -NewPassword $ new

Thật không may, có một lỗi với lệnh ghép ngắn này: -Passthru, -Chuyện gì xảy ra nếu, và -Xác nhận không hoạt động. Nếu bạn thích cắt ngắn, hãy thử những cách sau:

PS C: \> Set-ADAccountPassword jfrost -NewPassword (ConvertTo-SecureString -AsPlainText -String " [email được bảo vệ]"-lực lượng)

Do đó, tôi cần Jack thay đổi mật khẩu vào lần đăng nhập tiếp theo và tôi sửa đổi tài khoản bằng cách sử dụng Set-ADUser.

PS C: \> Set-ADUser jfrost -ChangePasswordAtLogon $ True

Kết quả của việc chạy lệnh ghép ngắn không được ghi vào bảng điều khiển. Nếu nó cần được thực hiện, hãy sử dụng -Thật... Nhưng tôi có thể tìm hiểu xem thao tác có thành công hay không bằng cách trích xuất tên người dùng bằng lệnh ghép ngắn Get-ADUser và xác định tài sản Mật khẩu quá hạn như trong Hình 2.


Lúa gạo. 2. Kết quả của lệnh ghép ngắn Get-ADUser Cmdlet với thuộc tính PasswordExpired

Điểm mấu chốt: Đặt lại mật khẩu của người dùng bằng PowerShell không khó chút nào. Thú thực là việc đặt lại mật khẩu cũng dễ dàng chỉ trong tích tắc. kích hoạt các người dùng và máy tính bàn điều khiển Bảng điều khiển quản lý Microsoft (MMC). Tuy nhiên, sử dụng PowerShell sẽ tốt nếu bạn cần ủy quyền một nhiệm vụ, không muốn triển khai snap-in nói trên hoặc đặt lại mật khẩu của bạn trong một quy trình CNTT tự động lớn.

Nhiệm vụ 2: Kích hoạt và hủy kích hoạt tài khoản

Bây giờ hãy hủy kích hoạt tài khoản. Hãy tiếp tục làm việc với Jack Frost. Mã này sử dụng tham số -Chuyện gì xảy ra nếu, mà bạn có thể thấy trong các lệnh ghép ngắn khác thực hiện các thay đổi để kiểm tra lệnh của tôi mà không cần chạy lệnh đó.

PS C: \> Disable-ADAccount jfrost -whatif Điều gì sẽ xảy ra nếu: Thực hiện thao tác "Đặt" trên Mục tiêu "CN = Jack Frost, OU = staff, OU = Testing, DC = GLOBOMANTICS, DC = local".

Bây giờ hãy hủy kích hoạt thực sự:

PS C: \> Disable-ADAccount jfrost

Và khi đã đến lúc kích hoạt tài khoản của bạn, lệnh ghép ngắn nào sẽ giúp chúng ta?

PS C: \> Enable-ADAccount jfrost

Các lệnh ghép ngắn này có thể được sử dụng trong một biểu thức tổng hợp, cho phép bạn kích hoạt hoặc hủy kích hoạt bao nhiêu tài khoản tùy thích. Ví dụ: mã này hủy kích hoạt tất cả các tài khoản trong bộ phận Bán hàng

PS C: \> get-aduser -filter "Department -eq" sales "" | vô hiệu hóa tài khoản quảng cáo

Tất nhiên, viết một bộ lọc cho Get-ADUser khá phức tạp, nhưng đây là nơi sử dụng tham số -Chuyện gì xảy ra nếu cùng với lệnh ghép ngắn Disable-ADAccountđến để giải cứu.

Nhiệm vụ 3: Mở khóa tài khoản người dùng

Hãy xem xét tình huống Jack đã khóa tài khoản của mình khi cố gắng nhập mật khẩu mới. Thay vì cố gắng tìm tài khoản của anh ấy thông qua GUI, quy trình mở khóa có thể được thực hiện bằng một lệnh đơn giản.

PS C: \> Mở khóa-ADAccount jfrost

Lệnh ghép ngắn cũng hỗ trợ các tham số -Chuyện gì xảy ra nếu-Xác nhận.

Nhiệm vụ 4: Xóa tài khoản

Không quan trọng bạn xóa bao nhiêu người dùng, thật dễ dàng thực hiện với lệnh ghép ngắn Remove-ADUser... Tôi không muốn xóa Jack Frost, nhưng nếu muốn, tôi sẽ sử dụng mã như sau:

PS C: \> Remove-ADUser jfrost -whatif Điều gì xảy ra nếu: Thực hiện thao tác "Remove" trên Target "CN = Jack Frost, OU = staff, OU = Testing, DC = GLOBOMANTICS, DC = local".

Hoặc tôi có thể nhập nhiều người dùng và xóa họ bằng một lệnh đơn giản:

PS C: \> get-aduser -filter "đã bật -eq" false "" -property WhenChanged -SearchBase "OU = Nhân viên, DC = Globomantics, DC = Địa phương" | where ($ _. WhenChanged -le (Get-Date) .AddDays (-180)) | Remove-ADuser -whatif

Lệnh này sẽ tìm và xóa bất kỳ tài khoản OU Nhân viên đã vô hiệu hóa nào không thay đổi trong 180 ngày trở lên.

Nhiệm vụ 5: Tìm Nhóm trống

Quản lý nhóm là vô tận và vô ơn. Có nhiều cách để tìm nhóm trống. Một số biểu thức có thể hoạt động tốt hơn các biểu thức khác, tùy thuộc vào tổ chức của bạn. Đoạn mã dưới đây sẽ tìm thấy tất cả các nhóm trong một miền, bao gồm cả những nhóm tích hợp sẵn.

PS C: \> get-adgroup -filter * | ở đâu (-Không ($ _ | get-adgroupmember)) | Chọn tên

Nếu bạn có nhóm với hàng trăm thành viên, thì việc sử dụng lệnh này có thể tốn thời gian; Get-ADGroupMember kiểm tra từng nhóm. Nếu bạn có thể giới hạn hoặc tùy chỉnh thì sẽ tốt hơn.
Đây là một cách tiếp cận khác:

PS C: \> get-adgroup -filter "Member -notlike" * "-AND GroupScope -eq" Universal "" -SearchBase "OU = Groups, OU = Nhân viên, DC = Globomantics, DC = local" | Chọn Tên, Nhóm *

Lệnh này tìm tất cả các nhóm Universal không có tư cách thành viên Nhóm OU và hiển thị một số thuộc tính. Kết quả được thể hiện trong Hình 3.


Lúa gạo. 3. Tìm kiếm và lọc các nhóm phổ quát

Nhiệm vụ 6: Thêm người dùng vào nhóm

Hãy thêm Jack Frost vào nhóm IT Chicago:

PS C: \> add-adgroupmember "chi Chicago IT" -Members jfrost

Vâng, nó đơn giản vậy thôi. Bạn cũng có thể dễ dàng thêm hàng trăm người dùng vào các nhóm, mặc dù điều này hơi khó xử theo quan điểm của tôi:

PS C: \> Add-ADGroupMember "Chicago Nhân viên" -member (get-aduser -filter "city -eq" Chicago "")

Tôi đã sử dụng biểu thức pipelined trong dấu ngoặc đơn để tìm tất cả người dùng có tài sản Thành phố ở Chicago. Mã trong ngoặc đơn được thực thi và các đối tượng kết quả được chuyển đến tham số –Member. Mỗi đối tượng tùy chỉnh được thêm vào nhóm Nhân viên Chicago. Không thành vấn đề nếu chúng tôi đang giao dịch với 5 hay 5000 người dùng, việc cập nhật tư cách thành viên nhóm chỉ mất vài giây. Biểu thức này cũng có thể được viết bằng cách sử dụng ForEach-Object, có thể thuận tiện hơn:

PS C: \> Get-ADUser -filter "city -eq" Chicago "" | foreach (Add-ADGroupMember "Chicago Nhân viên" -Member $ _)

Nhiệm vụ 7: Hiển thị danh sách thành viên nhóm

Bạn có thể muốn biết ai trong một nhóm cụ thể. Ví dụ: bạn nên tìm hiểu định kỳ ai là thành viên của nhóm Quản trị viên miền:

PS C: \> Get-ADGroupMember "Quản trị viên miền"

Hình 4 cho thấy kết quả.


Lúa gạo. 4. Thành viên của nhóm Quản trị viên miền

Lệnh ghép ngắn liệt kê đối tượng AD cho mỗi thành viên của nhóm. Nhưng những gì về các nhóm lồng nhau? Nhóm Tất cả Người dùng Chicago của tôi là một tập hợp các nhóm lồng nhau. Để có được danh sách tất cả các tài khoản, tôi chỉ cần sử dụng tham số –Recursive.

PS C: \> Get-ADGroupMember "Chicago All Users" -Recursive | Chọn Tên phân biệt

Nếu bạn muốn làm theo cách khác - tìm người dùng thuộc nhóm nào - hãy sử dụng thuộc tính người dùng Thành viên của:

PS C: \> get-aduser jfrost -property Memberof | Chọn -ExpandProperty memberOf CN = NewTest, OU = Groups, OU = Nhân viên, DC = GLOBOMANTICS, DC = local CN = Chicago Test, OU = Groups, OU = Nhân viên, DC = GLOBOMANTICS, DC = local CN = Chicago IT, OU = Groups, OU = Nhân viên, DC = GLOBOMANTICS, DC = CN địa phương = Người dùng bán hàng ở Chicago, OU = Groups, OU = Nhân viên, DC = GLOBOMANTICS, DC = địa phương

Tôi đã sử dụng tham số -ExpandPropertyđể hiển thị tên Thành viên của như dây.

Nhiệm vụ 8: Tìm tài khoản máy tính cũ

Tôi thường được hỏi câu hỏi này: "Làm cách nào để tìm các tài khoản máy tính đã lỗi thời?" Và tôi luôn trả lời: "Cái gì là lỗi thời đối với bạn?" Các công ty có các định nghĩa khác nhau về thời điểm tài khoản máy tính (hoặc người dùng, điều đó không quan trọng) không còn được dùng nữa và không còn sử dụng được nữa. Đối với tôi, tôi chú ý đến những tài khoản mà mật khẩu không được thay đổi trong một thời gian nhất định. Khoảng thời gian này đối với tôi là 90 ngày - nếu máy tính không thay đổi mật khẩu cùng với miền trong khoảng thời gian này, rất có thể nó đang ngoại tuyến và lỗi thời. Lệnh ghép ngắn được sử dụng Get-ADComputer:

PS C: \> get-adcomputer -filter "Passwordlastset -lt" 1/1/2012 "" -properties * | Chọn tên, mật khẩu

Bộ lọc hoạt động tốt với giá trị cứng, nhưng mã này sẽ cập nhật cho tất cả các tài khoản máy tính chưa thay đổi mật khẩu kể từ ngày 1 tháng 1 năm 2012. Kết quả được thể hiện trong Hình 5.


Lúa gạo. 5. Tìm tài khoản máy tính lỗi thời

Một tùy chọn khác: giả sử bạn ít nhất ở cấp chức năng của miền Windows 2003. Lọc theo thuộc tính LastLogontimeStamp... Giá trị này là số khoảng thời gian 100 nano giây kể từ ngày 1 tháng 1 năm 1601 và được lưu trữ theo GMT, do đó, làm việc với giá trị này hơi phức tạp:

PS C: \> get-adcomputer -filter "LastlogonTimestamp -gt 0" -properties * | chọn tên, lastlogontimestamp, @ (Name = "LastLogon"; Expression = (:: FromFileTime ($ _. Lastlogontimestamp))), passwordlastset | Sắp xếp LastLogonTimeStamp


Lúa gạo. 6. Chuyển đổi giá trị LastLogonTimeStamp sang định dạng thông thường

Để tạo bộ lọc, tôi cần chuyển đổi ngày, ví dụ: ngày 1 tháng 1 năm 2012, thành định dạng chính xác. Chuyển đổi được thực hiện trong FileTime:

PS C: \> $ cutoff = (Get-Date "1/1/2012"). ToFileTime () PS C: \> $ cutoff 129698676000000000

Bây giờ tôi có thể sử dụng biến này trong bộ lọc cho Get-ADComputer:

PS C: \> Get-ADComputer -Filter "(lastlogontimestamp -lt $ cutoff) -or (lastlogontimestamp -notlike" * ")" -property * | Chọn Tên, LastlogonTimestamp, PasswordLastSet

Đoạn mã trên tìm thấy các máy tính giống nhau được hiển thị trong Hình 5.

Nhiệm vụ 9: Hủy kích hoạt tài khoản máy tính

Có lẽ khi bạn tìm thấy các tài khoản không hoạt động hoặc đã lỗi thời, bạn muốn hủy kích hoạt chúng. Điều này khá đơn giản để làm. Chúng tôi sẽ sử dụng cùng một lệnh ghép ngắn mà chúng tôi đã sử dụng với tài khoản người dùng. Bạn có thể tinh chỉnh nó bằng cách sử dụng samAccountname tài khoản.

PS C: \> Disable-ADAccount -Identity "chi-srv01 $" -whatif Điều gì xảy ra nếu: Thực hiện thao tác "Đặt" trên Mục tiêu "CN = CHI-SRV01, CN = Máy tính, DC = GLOBOMANTICS, DC = cục bộ".

Hoặc sử dụng biểu thức pipelined:

PS C: \> get-adcomputer "chi-srv01" | Disable-ADAccount

Tôi cũng có thể sử dụng mã của mình để tìm các tài khoản đã lỗi thời và hủy kích hoạt tất cả:

PS C: \> get-adcomputer -filter "Passwordlastset -lt" 1/1/2012 "" -properties * | Disable-ADAccount

Nhiệm vụ 10: Tìm máy tính theo loại

Tôi cũng thường được hỏi câu hỏi về cách tìm tài khoản máy tính theo loại, chẳng hạn như máy chủ hoặc máy trạm. Điều này đòi hỏi bạn phải có sự sáng tạo nhất định. Không có gì trong AD phân biệt máy chủ với máy khách, có lẽ ngoại trừ hệ điều hành. Nếu máy tính của bạn đang chạy Windows Server 2008, có một số bước bổ sung cần thực hiện.
Trước tiên, bạn cần lấy danh sách hệ điều hành, sau đó chúng tôi lọc tài khoản theo hệ điều hành có sẵn.

PS C: \> Get-ADComputer -Filter * -Properties OperatingSystem | Chọn hệ điều hành-đơn vị | Sắp xếp Hệ điều hành

Kết quả được thể hiện trong Hình 7.


Lúa gạo. 7. Truy xuất danh sách hệ điều hành

Tôi muốn tìm tất cả các máy tính có hệ điều hành máy chủ:

PS C: \> Get-ADComputer -Filter "OperatingSystem -like" * Server * "" -properties OperatingSystem, OperatingSystem ServicePack | Chọn Tên, Op * | danh sách định dạng

Kết quả được thể hiện trong Hình 8.

Như với các lệnh ghép ngắn AD Get khác, bạn có thể tùy chỉnh các tham số tìm kiếm của mình và giới hạn truy vấn đối với các đơn vị tổ chức cụ thể, nếu cần. Tất cả các biểu thức tôi đã hiển thị có thể được tích hợp vào các biểu thức PowerShell lớn. Ví dụ: bạn có thể sắp xếp, nhóm, áp dụng bộ lọc, xuất sang CSV hoặc tạo và gửi báo cáo HTML qua email - tất cả đều từ PowerShell! Trong trường hợp này, bạn không phải viết một tiếng rít nào.
Đây là phần thưởng: báo cáo tuổi mật khẩu của người dùng được lưu trong tệp HTML:

PS C: \> Get-ADUser -Filter "Đã bật -eq" Đúng "-AND PasswordNeverExpires -eq" False "" -Properties PasswordLastSet, PasswordNeverExpires, PasswordExpired | Chọn Tên phân biệt, Tên, mật khẩu *, @ (Tên = "Mật khẩu"; Biểu thức = ((Lấy-Ngày) - $ _. Mật khẩuLastSet)) | sắp xếp Mật khẩu-Tăng dần | ConvertTo-Html -Title "(! LANG: Báo cáo độ tuổi mật khẩu" | Out-File c:\Work\pwage.htm !}

Mặc dù biểu thức này có thể trông hơi đáng sợ, nhưng với một chút kiến ​​thức về PowerShell, bạn có thể dễ dàng sử dụng. Và chỉ còn lại lời khuyên cuối cùng: cách xác định thuộc tính tùy chỉnh được gọi là PasswordAge... Giá trị đại diện cho khoảng thời gian giữa ngày hôm nay và thuộc tính PasswordLastSet. Sau đó, tôi sắp xếp các kết quả cho tài sản mới của tôi. Hình 9 cho thấy kết quả đầu ra cho miền thử nghiệm nhỏ của tôi.

Cập nhật:
Bài đăng có phần dịch của bài viết trên cổng thông tin điện tử

Trong phần bình luận cho bài viết trước, họ đã nhớ về kế toán trên Excel thay vì 1C. Vâng, hãy kiểm tra xem bạn biết Excel bao nhiêu. Hôm nay tôi sẽ chỉ cho bạn cách lấy dữ liệu từ Active Directory và làm việc với nó mà không cần macro và PowerShell - chỉ với các cơ chế Office tiêu chuẩn. Ví dụ: bạn có thể dễ dàng nhận được số liệu phân tích về việc sử dụng các hệ điều hành trong tổ chức của mình nếu bạn chưa có một cái gì đó như Microsoft SCOM. Tốt, hoặc chỉ cần khởi động và phân tâm khỏi các kịch bản.


Tất nhiên, bạn có thể lấy dữ liệu như trong các ví dụ bên dưới chỉ trong một dòng trong PowerShell. Tuy nhiên, thứ nhất, PowerShell quá nhàm chán và thứ hai, Excel có thể cập nhật dữ liệu động - các tài liệu kết quả có thể được xuất bản trên mạng và quên việc cập nhật chúng.

Để làm việc với dữ liệu, tôi sẽ sử dụng công cụ Power Query. Đối với office 2010 và 2013, bạn sẽ phải cài đặt một plug-in, trong Microsoft Office 2016 module này đã được tích hợp sẵn. Thật không may, phiên bản tiêu chuẩn là không đủ cho chúng tôi, chúng tôi cần Chuyên nghiệp.


Bản thân cơ chế này được thiết kế để nhận và xử lý dữ liệu từ nhiều nguồn khác nhau - từ ODBC và tệp văn bản cũ, đến Exchange, Oracle và Facebook. Thông tin chi tiết hơn về cơ chế và ngôn ngữ kịch bản tích hợp "M" đã được viết trên Habré, nhưng tôi sẽ phân tích một vài ví dụ về việc sử dụng Power Query để truy xuất dữ liệu từ Active Directory.

Khởi động: xem khi nào người dùng của chúng tôi đăng nhập

Bản thân truy vấn đến cơ sở dữ liệu miền được tạo trên tab "Dữ liệu - Truy vấn mới - Từ các nguồn khác - Từ Active Directory".



Chúng tôi cho biết nguồn dữ liệu.


Bạn sẽ cần phải chọn một tên miền, chỉ định dữ liệu cần thiết để kết nối. Tiếp theo, chúng tôi chọn loại đối tượng, trong ví dụ này - người sử dụng... Ở phía bên phải của cửa sổ xem trước, truy vấn đang chạy, hiển thị bản xem trước của dữ liệu.



Chuẩn bị yêu cầu, chiêm ngưỡng bản xem trước.


Trước đó, bạn nên chuẩn bị yêu cầu của mình bằng cách nhấp vào nút "thay đổi" và chọn các cột cần thiết. Trên thực tế, các cột này là các lớp Mỗi trong số chúng chứa một tập hợp các thuộc tính cụ thể của đối tượng Active Directory, ngoại trừ cột chính tên hiển thị mà bản thân nó là một thuộc tính. Tôi sẽ tập trung vào các lớp học người sử dụng, người, đứng đầuan ninh... Bây giờ bạn cần chọn các thuộc tính bắt buộc từ mỗi lớp bằng cách sử dụng "tiện ích mở rộng" - biểu tượng có hai mũi tên ở tiêu đề cột:

  • Lớp người sử dụng mở rộng bằng cách chọn lastLogonTimestampuserAccountControl;
  • v người lựa chọn số điện thoại;
  • v đứng đầukhi được tạo ra;
  • và trong an ninhSamAccountName.


Mở rộng yêu cầu.


Bây giờ hãy định cấu hình bộ lọc: cụ thể là để không nhận được các tài khoản bị chặn, bạn cần thuộc tính userAccountControl có giá trị 512 hoặc 66048. Bộ lọc có thể khác trong môi trường của bạn. Bạn có thể đọc thêm về thuộc tính trong tài liệu của Microsoft.



Áp dụng bộ lọc.


Đôi khi Excel xác định sai định dạng của dữ liệu, đặc biệt là giá trị của thuộc tính lastLogonTimestamp. Nếu bất ngờ xảy ra điều không may như vậy, trên tab "Chuyển đổi", bạn có thể đặt định dạng chính xác.

Bây giờ cột userAccountControl sẽ bị xóa - nó không cần thiết trong màn hình. Và nhấp vào "Tải và Đóng".


Kết quả là một tấm, vẫn còn khá nhiều thứ để ghi nhớ. Ví dụ: đổi tên các cột thành một thứ gì đó có thể đọc được. Và thiết lập cập nhật dữ liệu tự động.


Cập nhật tự động khi mở bảng hoặc theo thời gian chờ được định cấu hình trong tab "Dữ liệu" trong "Thuộc tính".



Định cấu hình làm mới dữ liệu.


Sau khi cấu hình cập nhật xong, bạn có thể an toàn đưa bảng cho bộ phận nhân sự hoặc dịch vụ bảo mật - cho họ biết ai đã đăng nhập và khi nào.


Yêu cầu mã bằng ngôn ngữ "M" dưới trình hướng dẫn.

let Source = ActiveDirectory.Domains ("domain.ru"), domain.ru = Source () [# "Object Category"], user1 = domain.ru (), # "Remote Columns" = Table.RemoveColumns (user1, ( "OrganisationPerson", "shadowAccount", "posixAccount", "msExchOmaUser", "msExchBaseClass", "msExchIMRecipient", "msExchCertificateInformation", "msExchMultiMediaUser", "msExchMailStorage", "msExpredPrin" # "Các cột đã Xóa", "securityPrincipal", ("sAMAccountName"), ("sAMAccountName")), # "Top Expanded" = Table.ExpandRecordColumn (# "SecurityPrincipal Expanded", "top", ("whenCreate"), ( "whenCreate")), # "Expanded person" = Table.ExpandRecordColumn (# "Expanded top", "person", ("phoneNumber"), ("phoneNumber")), # "Mở rộng người dùng" = Table.ExpandRecordColumn (# "Người được mở rộng", "người dùng", ("lastLogonTimestamp", "userAccountControl" ), ("lastLogonTimestamp", "userAccountControl")), # "Filtered Rows" = Table.SelectRows (# "Expanded user", each (= 512 or = 66048)), # "Modified Type" = Table. TransformColumnTypes (# "Các hàng được lọc", (("lastLogonTimestamp", nhập datetime))), # "Các cột đã xóa1" = Table.RemoveColumns (# "Loại đã thay đổi", ("userAccountControl")) trong # "Các cột đã xóa1"

Tạo sổ địa chỉ hoặc phải làm gì khi cổng thông tin công ty không thân thiện với AD

Một tùy chọn khác để sử dụng Excel kết hợp với Active Directory là hình thành sổ địa chỉ dựa trên dữ liệu AD. Rõ ràng là sổ địa chỉ sẽ chỉ có liên quan nếu có đơn đặt hàng trong miền.


Hãy tạo một yêu cầu cho một đối tượng người sử dụng, mở rộng lớp học người sử dụng v thư và lớp học người v số điện thoại... Xóa tất cả các cột ngoại trừ phân biệt- cấu trúc của miền lặp lại cấu trúc của doanh nghiệp, do đó tên Đơn vị tổ chức tương ứng với tên các phòng ban. Tương tự, các nhóm bảo mật có thể được sử dụng làm cơ sở cho tên đơn vị tổ chức.


Bây giờ từ dòng CN = Tên người dùng, OU = Bộ phận Kế toán, OU = Bộ phận, DC = miền, DC = ru bạn cần trích xuất tên của bộ phận trực tiếp. Cách dễ nhất để làm điều này là sử dụng dấu phân cách trên tab Chuyển đổi.



Chúng tôi trích xuất văn bản.


Làm dấu phân cách tôi sử dụng OU =, OU =... Về nguyên tắc, một dấu phẩy là đủ, nhưng tôi được đảm bảo.



Nhập dấu phân cách.


Bây giờ sử dụng bộ lọc, bạn có thể cắt bỏ những thứ không cần thiết OU như những người dùng bị chặn và Được xây dựng trong, thiết lập sắp xếp và tải dữ liệu vào bảng.



Xem bảng tóm tắt.

Báo cáo nhanh về thành phần của các máy trạm, không cần giới thiệu các tác nhân và chuẩn bị khác

Bây giờ chúng ta hãy thử tạo một bảng hữu ích bằng cách lấy dữ liệu trên máy tính. Hãy tạo báo cáo về hệ điều hành được công ty sử dụng: đối với điều này, chúng tôi sẽ tạo một yêu cầu, nhưng lần này trong trình điều hướng, chúng tôi sẽ chọn máy vi tính.



Chúng tôi thực hiện một yêu cầu cho máy tính.


Hãy rời khỏi các lớp cột máy vi tínhđứng đầu và mở rộng chúng:

  • Lớp máy vi tính mở rộng bằng cách chọn cn, hệ điều hành, OperatingSystemServicePackOperatingSystemVersion;
  • Trong lớp đứng đầu lựa chọn khi được tạo ra.


Truy vấn mở rộng.


Nếu muốn, bạn chỉ có thể tạo báo cáo trên hệ điều hành máy chủ. Ví dụ: lọc theo hệ điều hành hoặc hệ điều hành. Tôi sẽ không làm điều này, nhưng tôi sẽ sửa lại hiển thị thời gian tạo - tôi chỉ quan tâm đến năm. Để thực hiện việc này, trên tab "Chuyển đổi", chọn cột bắt buộc và chọn "Năm" trong menu "Ngày".



Chúng tôi trích xuất năm kể từ thời điểm máy tính nhập miền.


Bây giờ tất cả những gì còn lại là xóa cột tên hiển thị không cần thiết và tải kết quả. Dữ liệu đã sẵn sàng. Bây giờ bạn có thể làm việc với chúng như với một bảng thông thường. Đầu tiên, hãy tạo một bảng tổng hợp trên tab "Chèn" - "Bảng tổng hợp". Hãy đồng ý với sự lựa chọn của nguồn dữ liệu và cấu hình các trường của nó.



Cài đặt trường bảng tổng hợp.


Bây giờ nó vẫn còn để tùy chỉnh thiết kế theo ý thích của bạn và chiêm ngưỡng kết quả:



Bảng tóm tắt cho máy tính trong AD.


Nếu muốn, bạn có thể thêm biểu đồ trục, cũng trên tab "Chèn". Trong "Danh mục" (hoặc "Hàng", để nếm thử), hãy thêm hệ điều hành, vào dữ liệu - cn... Trên tab "Thiết kế", bạn có thể chọn loại biểu đồ theo ý thích của mình, tôi thích biểu đồ hình tròn hơn.



Biểu đồ tròn.


Bây giờ bạn có thể thấy rõ rằng, mặc dù cập nhật liên tục, nhưng tổng số máy trạm chạy Windows XP và máy chủ Windows 2003 là khá lớn. Và có điều gì đó để phấn đấu.


Yêu cầu mã dưới spoiler.

let Source = ActiveDirectory.Domains ("domain.ru"), domain.ru = Source () [# "Object Category"], computer1 = domain.ru (), # "Remote Columns" = Table.RemoveColumns (computer1, ( "user", "organizationPerson", "person")), # "Các cột đã xóa khác" = Table.SelectColumns (# "Các cột đã xóa", ("displayName", "computer", "top")), # "Mục được mở rộng computer "= Table.ExpandRecordColumn (#" Các cột từ xa khác "," computer ", (" cn "," OperatingSystem "," OperatingSystemServicePack "," OperatingSystemVersion "), (" cn "," OperatingSystem "," OperatingSystemServicePack "," OperatingSystemVersion ")), #" Mở rộng đầu "= Table.ExpandRecordColumn (#" Máy tính được mở rộng "," đầu ", (" khi được tạo "), (" khi được tạo ")), #" Năm được truy xuất "= Table.TransformColumns (#" Mở rộng đầu trang ", ((" khi Được tạo ", Ngày. Năm))), #" Đã xóa Cột1 "= Table.RemoveColumns (#" Năm được truy xuất ", (" displayName ")) trong #" Cột đã xóa1 "

Thêm thẻ

Hôm nay chúng tôi sẽ cố gắng tải danh sách tất cả người dùng lên một tệp riêng biệt từ Active Directory. PowerShell sẽ là trợ lý chính của chúng tôi trong vấn đề này. Thực tế là Microsoft đã lên kế hoạch ban đầu bảng điều khiển lệnh PowerShell làm công cụ chính để quản lý các thành phần máy chủ Windows. Và ngày nay, khi chúng ta đã có phiên bản 2.0, nói chung là như vậy.

Ngay cả trong quá khứ gần đây, để tương tác với AD bằng cách nào đó, quản trị viên phải có tiện ích dsquery hoặc tất cả các loại script hoặc tiện ích. Ngày nay, bắt đầu với Windows Server 2008 R2, chúng ta có thể làm việc với AD thông qua PowerShell. Với sự ra đời của PowerShell 2.0, một mô-đun đặc biệt được sử dụng để tương tác với Active Directory Mô-đun Active Directory cho Windows PowerShell trong đó chứa danh sách lệnh ghép ngắn cần thiết. Đối với các nhiệm vụ của chúng tôi, chúng tôi sẽ sử dụng lệnh Get-ADUser.

Vì vậy, tùy thuộc vào hệ điều hành mà chúng tôi sẽ chạy bảng điều khiển PowerShell, chúng tôi sẽ cần thực hiện "các bước chuẩn bị".

1) Nếu chúng tôi làm việc từ trong Windows Server lên đến phiên bản 2012, sau đó chúng ta cần thực hiện lệnh:

  • Thư mục đã kích hoạt mô-đun nhập - lệnh nhập mô-đun vào AD

Đối với các phiên bản hệ điều hành từ 2012 trở lên, mô-đun này đã được bật theo mặc định.

2) Nếu chúng tôi làm việc từ bất kỳ ứng dụng khách Windows nào, thì gói quản trị từ xa RSAT phải được cài đặt trên đó, với mô-đun Active Directory cho thành phần Windows PowerShell được cài đặt.

Cần lưu ý rằng lệnh ghép ngắn Get-ADUser được khuyến nghị chạy khi lượng dữ liệu được tải lên lên đến 1000 người dùng.

Xuất người dùng AD bằng PowerShell sang một tệp riêng biệt

Đầu tiên, hãy gọi trợ giúp cho lệnh Get-ADUser. Kết quả là bạn sẽ nhận được tất cả các lệnh cần thiết để quản trị thêm.

  • trợ giúp Get-ADUser - lệnh để gọi trợ giúp

Để nhận danh sách tất cả người dùng với tất cả các thuộc tính trong cửa sổ PowerShell, hãy chạy lệnh sau:

  • Bộ lọc Get-ADUser * - xuất danh sách người dùng AD

Nội dung tải lên này không hoàn toàn mang tính thông tin và không phù hợp với tất cả các thông tin cần thiết trong cửa sổ. Do đó, hãy cố gắng thu hẹp tìm kiếm và hiển thị các thuộc tính của một người dùng cụ thể có tên là user1:

  • Get-ADUser -identity user1 -properties * - xuất các thuộc tính của một người dùng cụ thể

Bây giờ, hãy thử xuất danh sách tất cả người dùng có thuộc tính của họ ra bên ngoài. txt hoặc csv tập tin:

  • Get-ADUser -filter * -properties * | Export-csv -path c: \ users.csv -encoding Unicode - xuất người dùng sang một tệp riêng biệt

Tôi muốn thu hút sự chú ý đặc biệt đến chìa khóa -encoding Unicode... Nó được sử dụng để bảng chữ cái Kirin Nga, sau khi xuất từ ​​AD, có thể được hiển thị chính xác trong tệp đã tải lên. Ví dụ, thông qua Microsoft Excel, chúng ta sẽ thấy các dấu chấm hỏi thay vì các chữ cái tiếng Nga.

Khi xem một tệp, dữ liệu được xuất trên một dòng và do đó không thể đọc được. Để thay đổi điều này, chúng ta cần làm như sau: