กำลังยกเลิกการโหลดจากโฆษณา Excel แทน PowerShell: สืบค้นไปยัง AD และรายงานระบบ "ที่หัวเข่า"

สวัสดีตอนบ่าย ผู้อ่านที่รักและสมาชิก เรายังคงสำรวจความสามารถของ Powershell และ Active Directory ต่อไป อย่างที่คุณจำได้ บัญชีผู้ใช้และคอมพิวเตอร์ทั้งหมดของเธออยู่ในฐานข้อมูล NTDS.dit ทุกอย่างยอดเยี่ยมและรวมศูนย์ เมื่อบริษัทมีผู้ดูแลระบบมากกว่าหนึ่งคน สถานการณ์อาจเกิดขึ้นเมื่อขยะและข้อมูลประจำตัวที่ไม่จำเป็นสะสม เราทุกคนเป็นมนุษย์และสามารถลืมบางสิ่งบางอย่างได้ และในบางช่วงเวลาเราก็อาจถูกฟุ้งซ่านซึ่งจะนำไปสู่การลืมด้วย ข้อมูลสำคัญ- และเราก็ได้ข้อสรุปว่า Actvie Directory ไม่สะสม ผู้ใช้ที่ใช้งานอยู่(ไล่ออกหรือถูกลืม) ยังไงก็ดี ผู้ดูแลระบบจะต้องระบุ ปิดการใช้งาน และลบออกหากต้องการ ซึ่งเป็นสิ่งที่เราจะทำ

ผ่านสแน็ปอิน ADUC

ครั้งล่าสุดฉันได้ยกตัวอย่างการใช้ Active Snap-in ให้คุณแล้ว ผู้ใช้ไดเรกทอรีและคอมพิวเตอร์ ซึ่งเราค้นหาคอมพิวเตอร์ที่หายไปในเครือข่ายท้องถิ่นซึ่งไม่ปรากฏเป็นเวลาหนึ่งเดือน ตอนนี้เราจะทำเช่นเดียวกันกับบัญชีผู้ใช้ ฉันมีโฆษณาอยู่ วินโดวส์เซิร์ฟเวอร์ 2012 R2 เปิด ADUC โดยกด WIN+R แล้วป้อน dsa.msc

ในแบบฟอร์มคำขอที่เปิดขึ้น ให้ป้อน:

  • ชื่อคำขอ > สำหรับฉัน เหล่านี้คือผู้ใช้ที่สูญหาย
  • คำอธิบายหากจำเป็น
  • ร้องขอการรูท > คุณสามารถออกจากโดเมนทั้งหมดหรือระบุบน OU ที่ต้องการได้ที่นี่

จากนั้นคลิกปุ่มร้องขอ

บนแท็บผู้ใช้ เราเห็นรายการ "จำนวนวันนับตั้งแต่เข้าสู่ระบบครั้งล่าสุด" เช่น ฉันตั้งค่าเป็น 60 วัน

ด้วยเหตุนี้ คุณจะได้รับรายการที่คุณต้องการสำหรับบัญชีพนักงานที่ไม่ได้ใช้งาน

ผ่านสแน็ปอิน PowerShell

สิ่งเดียวกันนี้สามารถทำได้ผ่าน Powershell ฉันจะให้รหัสแก่คุณทันทีซึ่งมีหน้าที่ การค้นหาอยู่ระหว่างดำเนินการ ผู้ใช้ที่ไม่ได้ใช้งานสำหรับสิ่งนี้ ฉันเลือกระยะเวลา 45 วัน โดยปิดใช้งานข้อมูลผู้ใช้และย้ายไปยัง OU ที่กำหนดเป็นพิเศษ

$date_with_offset= (รับวันที่).AddDays(-45)
$users = Get-ADUser -คุณสมบัติ LastLogonDate -Filter (LastLogonDate -lt $date_with_offset ) | เรียงลำดับ LastLogonDate
foreach ($user ใน $users) (set-aduser $user -enabled $false; move-adobject -identity $user -targetpath "ou=Fired,ou=Moscow L. users,ou=Location,dc=msk,dc= contoso,dc=com")
รับ-ADUser - คุณสมบัติ LastLogonDate - ตัวกรอง (LastLogonDate -lt $date_with_offset ) | เรียงลำดับ LastLogonDate | ชื่อ FT, LastLogonDate - ขนาดอัตโนมัติ | ออกไฟล์ c:\Script\users.txt

  • ในบรรทัดแรก คุณจะประกาศตัวแปรที่คุณตั้งค่าคำค้นหา
  • สร้างตัวแปรและเลือกตามเวลาเข้าสู่ระบบครั้งล่าสุด
  • การย้ายผู้ใช้

  • การทำรายงานเป็นไฟล์

สิ่งที่มีประโยชน์เพิ่มเติมเกี่ยวกับการทำงานกับผู้ใช้ ก่อนที่จะใช้คำสั่งด้านล่าง คุณจะต้องโหลดโมดูล Active Directory ผ่านคำสั่งก่อน

รับความช่วยเหลือรับ ADUser

อุทิศ โดยใช้พลังเชลล์สำหรับการดูแลระบบ AD โดยเป็นจุดเริ่มต้น ผู้เขียนตัดสินใจรับงานการดูแลระบบ AD ทั่วไป 10 งาน และดูว่าจะทำให้งานเหล่านี้ง่ายขึ้นโดยใช้ PowerShell ได้อย่างไร:

  1. รีเซ็ตรหัสผ่านผู้ใช้
  2. เปิดใช้งานและปิดใช้งานบัญชี
  3. ปลดล็อคบัญชีผู้ใช้
  4. ลบบัญชี
  5. ค้นหากลุ่มว่าง
  6. เพิ่มผู้ใช้ในกลุ่ม
  7. รายชื่อสมาชิกกลุ่ม
  8. ค้นหาบัญชีคอมพิวเตอร์ที่ล้าสมัย
  9. ปิดการใช้งานบัญชีคอมพิวเตอร์
  10. ค้นหาคอมพิวเตอร์ตามประเภท

นอกจากนี้ผู้เขียนดูแลบล็อก (โดยใช้ PowerShell แน่นอน) เราขอแนะนำให้ดู - jdhitsolutions.com/blog และคุณสามารถรับข้อมูลล่าสุดได้จาก Twitter ของเขา twitter.com/jeffhicks.
ด้านล่างนี้คือการแปลบทความ “งาน Active Directory 10 อันดับแรกที่แก้ไขด้วย PowerShell”

การควบคุมแบบแอคทีฟไดเรกทอรี (AD) ใช้ วินโดว์ PowerShell– ง่ายกว่าที่คุณคิด และฉันอยากพิสูจน์ให้คุณเห็น คุณสามารถใช้สคริปต์ด้านล่างและใช้เพื่อแก้ไขงานการจัดการ AD หลายอย่าง

ความต้องการ

หากต้องการใช้ PowerShell ในการจัดการ AD คุณต้องปฏิบัติตามข้อกำหนดหลายประการ ฉันจะสาธิตวิธีการทำงานของ AD cmdlets โดยใช้คอมพิวเตอร์ Windows 7 เป็นตัวอย่าง
หากต้องการใช้ cmdlets คุณต้องมีตัวควบคุมโดเมน Windows Server 2008 R2 หรือคุณสามารถดาวน์โหลดและติดตั้งบริการ Active Directory Management Gateway บน DC รุ่นเก่าได้ โปรดอ่านเอกสารอย่างละเอียดก่อนการติดตั้ง จำเป็นต้องรีบูทซีดี
บนฝั่งไคลเอ็นต์ ให้ดาวน์โหลดและติดตั้ง (RSAT) สำหรับ Windows 7 หรือ Windows 8 บน Windows 7 คุณจะต้องเปิดใน แผงควบคุมบท โปรแกรมและเลือก เปิดหรือปิด คุณสมบัติของวินโดวส์(เปิดหรือปิดคุณสมบัติ Windows)- หา เครื่องมือการดูแลระบบเซิร์ฟเวอร์ระยะไกลและขยายส่วนออกไป เครื่องมือการบริหารบทบาท- เลือกรายการที่เหมาะสมสำหรับเครื่องมือ AD DS และ AD LDS โดยเฉพาะอย่างยิ่งโปรดทราบว่าต้องเลือกรายการนั้น โมดูลไดเรกทอรีที่ใช้งานอยู่ สำหรับวินโดวส์พาวเวอร์เชลล์ดังแสดงในรูปที่ 1 (ใน Windows 8 เครื่องมือทั้งหมดจะถูกเลือกตามค่าเริ่มต้น) ตอนนี้เราพร้อมที่จะทำงานแล้ว

รูปที่ 1 การเปิดใช้งานเครื่องมือ AD DS และ AD LDS

ฉันเข้าสู่ระบบด้วยบัญชีที่มีสิทธิ์ผู้ดูแลระบบโดเมน cmdlet ส่วนใหญ่ที่ฉันจะแสดงจะช่วยให้คุณสามารถระบุข้อมูลรับรองอื่นได้ ไม่ว่าในกรณีใด ฉันแนะนำให้อ่านความช่วยเหลือ ( รับความช่วยเหลือ) และตัวอย่างที่ผมจะสาธิตด้านล่าง
เริ่มเซสชัน PowerShell และนำเข้าโมดูล:

PS C:\> นำเข้าโมดูล ActiveDirectory

การนำเข้าจะสร้าง PSDrive ใหม่ แต่เราจะไม่ใช้มัน อย่างไรก็ตาม คุณสามารถดูคำสั่งที่มีอยู่ในโมดูลที่นำเข้าได้

PS C:\> รับคำสั่ง - โมดูล ActiveDirectory

ข้อดีของคำสั่งเหล่านี้ก็คือ ถ้าฉันสามารถใช้คำสั่งกับวัตถุ AD หนึ่งคำสั่งได้ ก็สามารถใช้คำสั่งนั้นกับ 10, 100 และแม้กระทั่ง 1,000 มาดูกันว่า cmdlet เหล่านี้บางส่วนทำงานอย่างไร

ภารกิจที่ 1: รีเซ็ตรหัสผ่านผู้ใช้

เริ่มต้นด้วยงานทั่วไป: การรีเซ็ตรหัสผ่านของผู้ใช้ คุณสามารถทำสิ่งนี้ได้อย่างง่ายดายและง่ายดายโดยใช้ cmdlet ตั้ง ADAccountPassword- ส่วนที่ยุ่งยากก็คือ รหัสผ่านใหม่ต้องมีคุณสมบัติเป็นสตริงที่มีการป้องกัน: ชิ้นส่วนของข้อความที่ถูกเข้ารหัสและจัดเก็บไว้ในหน่วยความจำในช่วงระยะเวลาของเซสชัน PowerShell ขั้นแรก เรามาสร้างตัวแปรด้วยรหัสผ่านใหม่:
PS C:\> $new=Read-Host "ป้อนรหัสผ่านใหม่" -AsSecureString

จากนั้นให้ป้อนรหัสผ่านใหม่:

ตอนนี้เราสามารถแยกบัญชีได้ (โดยใช้ แซมชื่อบัญชี– ตัวเลือกที่ดีที่สุด) และตั้งรหัสผ่านใหม่ นี่คือตัวอย่างสำหรับผู้ใช้ Jack Frost:

ป.ล.:\> ตั้ง-ADAccountPassword jfrost -รหัสผ่านใหม่ $ใหม่

ขออภัย มีข้อผิดพลาดกับ cmdlet นี้: -พาสทรู, -อะไรจะเกิดขึ้น, และ -ยืนยันไม่ทำงาน หากคุณต้องการทางลัด ให้ลองทำดังนี้:

PS C:\> Set-ADAccountPassword jfrost -NewPassword (ConvertTo-SecureString -AsPlainText -String "P@ssw0rd1z3" -force)

ด้วยเหตุนี้ ฉันจึงต้องการให้แจ็คเปลี่ยนรหัสผ่านในครั้งถัดไปที่เขาเข้าสู่ระบบ ดังนั้นฉันจึงแก้ไขบัญชีโดยใช้ ชุด-ADUser.

PS C:\> ชุด-ADUser jfrost -ChangePasswordAtLogon $True

ผลลัพธ์ของการเรียกใช้ cmdlet จะไม่ถูกเขียนลงในคอนโซล หากจำเป็นต้องทำ ให้ใช้ -จริง- แต่ฉันสามารถค้นหาได้ว่าการดำเนินการสำเร็จหรือไม่โดยการดึงชื่อผู้ใช้โดยใช้ cmdlet รับ-ADUserและระบุคุณสมบัติ รหัสผ่านหมดอายุดังแสดงในรูปที่ 2


ข้าว. 2. ผลลัพธ์ของ Get-ADUser Cmdlet ด้วยคุณสมบัติ PasswordExpired

บรรทัดล่าง: การรีเซ็ตรหัสผ่านของผู้ใช้โดยใช้ PowerShell นั้นไม่ใช่เรื่องยากเลย ฉันยอมรับว่าการรีเซ็ตรหัสผ่านนั้นทำได้ง่ายเพียงแค่สแน็ปอิน ผู้ใช้ Active Directory และคอมพิวเตอร์คอนโซล การจัดการไมโครซอฟต์คอนโซล (MMC)แต่ โดยใช้ PowerShellเหมาะสำหรับกรณีที่คุณต้องการมอบหมายงาน ไม่ต้องการปรับใช้สแน็ปอินที่กล่าวมาข้างต้น หรือกำลังรีเซ็ตรหัสผ่านโดยเป็นส่วนหนึ่งของกระบวนการไอทีอัตโนมัติขนาดใหญ่

ภารกิจที่ 2: เปิดใช้งานและปิดใช้งานบัญชี

ตอนนี้ขอปิดการใช้งานบัญชี มาร่วมงานกับแจ็ค ฟรอสต์กันต่อ รหัสนี้ใช้พารามิเตอร์ –อะไรจะเกิดขึ้นซึ่งคุณสามารถพบได้ใน comadlets อื่นๆ ที่ทำการเปลี่ยนแปลงเพื่อทดสอบคำสั่งของฉันโดยไม่ต้องรัน

PS C:\> ปิดใช้งาน-ADAccount jfrost - จะเกิดอะไรขึ้นถ้า: กำลังดำเนินการ "ตั้งค่า" บนเป้าหมาย "CN=Jack Frost, OU=staff,OU=Testing,DC=GLOBOMANTICS,DC=local"

ตอนนี้เรามาปิดการใช้งานจริง:

PS C:\> ปิดการใช้งาน-ADAAccount jfrost

และเมื่อถึงเวลาเปิดใช้งานบัญชี cmdlet ไหนจะช่วยเรา?

PS C:\> เปิดใช้งาน-ADAccount jfrost

cmdlet เหล่านี้สามารถใช้ได้ในนิพจน์ไปป์ไลน์ ซึ่งช่วยให้คุณสามารถเปิดใช้งานหรือปิดใช้งานบัญชีได้มากเท่าที่คุณต้องการ ตัวอย่างเช่น รหัสนี้จะปิดการใช้งานบัญชีทั้งหมดในแผนกขาย

PS C:\> get-aduser -filter "department -eq "sales"" | ปิดการใช้งาน adacount

แน่นอนเขียนตัวกรองสำหรับ รับ-ADUserค่อนข้างซับซ้อน แต่นี่คือจุดที่การใช้พารามิเตอร์ –อะไรจะเกิดขึ้นพร้อมกับ cmdlet ปิดการใช้งาน ADAccountมาช่วยเหลือ

ภารกิจที่ 3: ปลดล็อกบัญชีผู้ใช้

พิจารณาสถานการณ์ที่แจ็คล็อกบัญชีของเขาขณะพยายามป้อนรหัสผ่านใหม่ แทนที่จะพยายามค้นหาบัญชีของเขาผ่าน GUI ขั้นตอนการปลดล็อคสามารถทำได้โดยใช้คำสั่งง่ายๆ

PS C:\> ปลดล็อค-ADAAccount jfrost

cmdlet ยังรองรับพารามิเตอร์อีกด้วย -อะไรจะเกิดขึ้นและ -ยืนยัน.

ภารกิจที่ 4: ลบบัญชี

ไม่สำคัญว่าคุณจะลบผู้ใช้ออกกี่คน - ทำได้ง่ายๆ โดยใช้ cmdlet ลบ-ADUser- ฉันไม่ต้องการลบ Jack Frost แต่ถ้าต้องการ ฉันจะใช้โค้ดดังนี้:

PS C:\> Remove-ADUser jfrost - จะเกิดอะไรขึ้นถ้า: กำลังดำเนินการ "ลบ" บนเป้าหมาย "CN=Jack Frost,OU=staff,OU=Testing,DC=GLOBOMANTICS,DC=local"

หรือฉันสามารถป้อนผู้ใช้หลายรายและลบออกด้วยคำสั่งง่ายๆ เพียงคำสั่งเดียว:

PS C:\> get-aduser -filter "enabled -eq "false"" -property WhenChanged -SearchBase "OU=พนักงาน, DC=Globomantics,DC=Local" | โดยที่ ($_.WhenChanged -le (รับ-Date).AddDays(-180)) | ลบ ADuser -whatif

คำสั่งนี้จะค้นหาและลบบัญชีพนักงาน OU ที่ถูกปิดใช้งานซึ่งไม่มีการแก้ไขเป็นเวลา 180 วันขึ้นไป

ภารกิจที่ 5: ค้นหากลุ่มว่าง

การจัดการกลุ่มเป็นงานที่ไม่มีที่สิ้นสุดและไร้คุณค่า มีหลายวิธีในการค้นหากลุ่มว่าง นิพจน์บางอย่างอาจทำงานได้ดีกว่านิพจน์อื่น ทั้งนี้ขึ้นอยู่กับองค์กรของคุณ โค้ดด้านล่างนี้จะค้นหากลุ่มทั้งหมดในโดเมน รวมถึงกลุ่มที่มีอยู่แล้วด้วย

ป.ล.:\> get-adgroup -filter * | โดยที่ (-ไม่ใช่ ($_ | get-adgroupmember)) | เลือกชื่อ

หากคุณมีกลุ่มที่มีสมาชิกหลายร้อยคน การใช้คำสั่งนี้อาจใช้เวลานาน รับ ADGroupMemberตรวจสอบแต่ละกลุ่ม ถ้าคุณสามารถจำกัดหรือปรับแต่งได้จะดีกว่า
นี่เป็นอีกแนวทางหนึ่ง:

PS C:\> get-adgroup -filter "members -notlike "*" -AND GroupScope -eq "Universal"" -SearchBase "OU=Groups,OU=Employees,DC=Globomantics, DC=local" | เลือกชื่อกลุ่ม*

คำสั่งนี้ค้นหากลุ่ม Universal ทั้งหมดที่ไม่มีสมาชิกในกลุ่ม OU และแสดงคุณสมบัติบางอย่าง ผลลัพธ์จะแสดงในรูปที่ 3


ข้าว. 3. ค้นหาและกรองกลุ่มสากล

ภารกิจที่ 6: การเพิ่มผู้ใช้ในกลุ่ม

มาเพิ่ม Jack Frost ในกลุ่ม Chicago IT กัน:

PS C:\> add-adgroupmember "chicago IT" -สมาชิก jfrost

ใช่ มันง่ายมาก คุณสามารถเพิ่มผู้ใช้หลายร้อยรายในกลุ่มได้อย่างง่ายดาย แม้ว่าฉันจะพบว่าสิ่งนี้ดูอึดอัดเล็กน้อย:

PS C:\> Add-ADGroupMember "พนักงานในชิคาโก" - สมาชิก (get-aduser -filter "city -eq "Chicago"")

ฉันใช้นิพจน์ไปป์ไลน์แบบวงเล็บเพื่อค้นหาผู้ใช้ทั้งหมดที่มีคุณสมบัติ City ในชิคาโก โค้ดในวงเล็บจะถูกดำเนินการ และออบเจ็กต์ผลลัพธ์จะถูกส่งผ่านไปยังพารามิเตอร์ –Member ออบเจ็กต์ผู้ใช้แต่ละรายการจะถูกเพิ่มเข้าในกลุ่มพนักงานในชิคาโก ไม่สำคัญว่าเราจะติดต่อกับผู้ใช้ 5 หรือ 5,000 ราย การอัปเดตการเป็นสมาชิกกลุ่มใช้เวลาเพียงไม่กี่วินาที สำนวนนี้สามารถเขียนได้โดยใช้ สำหรับแต่ละวัตถุอะไรจะสะดวกกว่า:

PS C:\> Get-ADUser -filter "city -eq "Chicago"" | foreach (Add-ADGroupMember "พนักงานชิคาโก" - สมาชิก $_)

ภารกิจที่ 7: รายชื่อสมาชิกกลุ่ม

คุณอาจต้องการทราบว่าใครอยู่ในกลุ่มใดกลุ่มหนึ่ง ตัวอย่างเช่น คุณควรค้นหาว่าใครเป็นสมาชิกของกลุ่มผู้ดูแลระบบโดเมนเป็นระยะ:

PS C:\> รับ-ADGroupMember "ผู้ดูแลระบบโดเมน"

รูปที่ 4 แสดงผลลัพธ์


ข้าว. 4. สมาชิกกลุ่ม Domain Admins

cmdlet แสดงวัตถุ AD สำหรับสมาชิกกลุ่มแต่ละราย จะทำอย่างไรกับกลุ่มที่ซ้อนกัน? กลุ่มของฉัน Chicago All Users คือกลุ่มของกลุ่มที่ซ้อนกัน หากต้องการดูรายการบัญชีทั้งหมด ฉันแค่ต้องใช้พารามิเตอร์ –แบบเรียกซ้ำ.

PS C:\> Get-ADGroupMember "ผู้ใช้ทั้งหมดในชิคาโก" -Recursive | เลือกชื่อเฉพาะ

หากคุณต้องการไปทางอื่น ให้ค้นหาว่าผู้ใช้อยู่ในกลุ่มใด - ให้ใช้คุณสมบัติผู้ใช้ สมาชิกของ:

PS C:\> รับ aduser jfrost -property Memberof | เลือก -ExpandProperty memberOf CN=NewTest,OU=กลุ่ม,OU=พนักงาน, DC=GLOBOMANTICS,DC=local CN=การทดสอบในชิคาโก,OU=กลุ่ม,OU=พนักงาน, DC=GLOBOMANTICS,DC=local CN=Chicago IT,OU= กลุ่ม,OU=พนักงาน, DC=GLOBOMANTICS,DC=local CN=ผู้ใช้การขายในชิคาโก,OU=กลุ่ม,OU=พนักงาน, DC=GLOBOMANTICS,DC=local

ฉันใช้พารามิเตอร์ -ขยายคุณสมบัติเพื่อแสดงชื่อ สมาชิกของเหมือนเส้น

ภารกิจที่ 8: ค้นหาบัญชีคอมพิวเตอร์ที่ล้าสมัย

ฉันถูกถามคำถามนี้บ่อยครั้ง: “ฉันจะค้นหาบัญชีคอมพิวเตอร์ที่ล้าสมัยได้อย่างไร” และฉันมักจะตอบเสมอว่า: "อะไรล้าสมัยสำหรับคุณ" บริษัทกำหนดว่าเมื่อใด บัญชีคอมพิวเตอร์ (หรือผู้ใช้ไม่สำคัญ) ถือว่าล้าสมัยและไม่สามารถนำมาใช้ต่อไปได้ สำหรับฉัน ฉันให้ความสนใจกับบัญชีที่ไม่มีการเปลี่ยนรหัสผ่านมาระยะหนึ่งแล้ว ช่วงระยะเวลาหนึ่งเวลา. ช่วงเวลานี้สำหรับฉันคือ 90 วัน - หากคอมพิวเตอร์ไม่ได้เปลี่ยนรหัสผ่านพร้อมกับโดเมนในช่วงเวลานี้ มีแนวโน้มว่าคอมพิวเตอร์จะออฟไลน์และล้าสมัย Cmdlet ที่ใช้ รับ-ADComputer:

PS C:\> get-adcomputer -filter "Passwordlastset -lt "1/1/2012"" -properties *| เลือกชื่อ รหัสผ่านชุดสุดท้าย

ตัวกรองทำงานได้ดีกับค่าที่ยาก แต่รหัสนี้จะอัปเดตสำหรับบัญชีคอมพิวเตอร์ทั้งหมดที่ไม่ได้เปลี่ยนรหัสผ่านตั้งแต่วันที่ 1 มกราคม 2555 ผลลัพธ์แสดงในรูปที่ 5


ข้าว. 5. ค้นหาบัญชีคอมพิวเตอร์ที่ล้าสมัย

อีกทางเลือกหนึ่ง: สมมติว่าคุณอยู่ในระดับการทำงานเป็นอย่างน้อย โดเมนวินโดวส์ 2546. กรองตามคุณสมบัติ LastLogontimeStamp- ค่านี้คือจำนวนช่วงเวลา 100 นาโนวินาทีตั้งแต่วันที่ 1 มกราคม 1601 และจัดเก็บในรูปแบบ GMT ดังนั้นการทำงานกับค่านี้จึงยุ่งยากเล็กน้อย:

PS C:\> get-adcomputer -filter "LastlogonTimestamp -gt 0" -properties * | เลือกชื่อ,lastlogontimestamp, @(Name="LastLogon";Expression=(::FromFileTime ($_.Lastlogontimestamp))),passwordlastset | เรียงลำดับ LastLogonTimeStamp


ข้าว. 6. แปลงค่า LastLogonTimeStamp เป็นรูปแบบที่คุ้นเคย

หากต้องการสร้างตัวกรอง ฉันต้องแปลงวันที่ เช่น 1 มกราคม 2012 ให้เป็นรูปแบบที่ถูกต้อง การแปลงดำเนินการใน FileTime:

PS C:\> $cutoff=(รับวันที่ "1/1/2555").ToFileTime() PS C:\> $cutoff 129698676000000000

ตอนนี้ฉันสามารถใช้ตัวแปรนี้ในตัวกรองได้ รับ-ADComputer:

PS C:\> Get-ADComputer -Filter "(lastlogontimestamp -lt $cutoff) -หรือ (lastlogontimestamp -notlike "*")" -property * | เลือกชื่อ, LastlogonTimestamp, PasswordLastSet

โค้ดด้านบนค้นหาคอมพิวเตอร์เครื่องเดียวกับที่แสดงในรูปที่ 5

ภารกิจที่ 9: ปิดการใช้งานบัญชีคอมพิวเตอร์

บางทีเมื่อคุณพบบัญชีที่ไม่ได้ใช้งานหรือล้าสมัย คุณอาจต้องการปิดการใช้งานบัญชีเหล่านั้น มันค่อนข้างง่ายที่จะทำ เราจะใช้ cmdlet เดียวกับที่เราเคยทำงานกับบัญชีผู้ใช้ คุณสามารถชี้แจงได้โดยใช้ แซมชื่อบัญชีบัญชี.

PS C:\> ปิดการใช้งาน ADaccount - Identity "chi-srv01$" - จะเกิดอะไรขึ้นถ้า: กำลังดำเนินการ "ตั้งค่า" บนเป้าหมาย "CN=CHI-SRV01, CN=คอมพิวเตอร์,DC=GLOBOMANTICS,DC=local"

หรือใช้นิพจน์ไปป์ไลน์:

ป.ล.:\> รับ-adcomputer "chi-srv01" | ปิดการใช้งาน ADAccount

ฉันยังสามารถใช้รหัสของฉันเพื่อค้นหาบัญชีที่ล้าสมัยและปิดการใช้งานทั้งหมดได้:

PS C:\> get-adcomputer -filter "Passwordlastset -lt "1/1/2012"" -properties *| ปิดการใช้งาน ADAccount

ภารกิจที่ 10: ค้นหาคอมพิวเตอร์ตามประเภท

ฉันมักจะถูกถามถึงวิธีค้นหาบัญชีคอมพิวเตอร์ตามประเภท เช่น เซิร์ฟเวอร์หรือเวิร์กสเตชัน สิ่งนี้ต้องใช้ความคิดสร้างสรรค์ในส่วนของคุณ ไม่มีสิ่งใดใน AD ที่ทำให้เซิร์ฟเวอร์แตกต่างจากไคลเอนต์ ยกเว้นระบบปฏิบัติการ หากคอมพิวเตอร์ของคุณใช้ Windows Server 2008 คุณจะต้องทำตามขั้นตอนเพิ่มเติมสองสามขั้นตอน
ขั้นแรก คุณต้องได้รับรายการระบบปฏิบัติการ จากนั้นเราจะกรองบัญชีตามระบบปฏิบัติการที่มีอยู่

PS C:\> รับ-ADComputer - ตัวกรอง * - คุณสมบัติระบบปฏิบัติการ | เลือกระบบปฏิบัติการ -ไม่ซ้ำกัน | เรียงลำดับระบบปฏิบัติการ

ผลลัพธ์แสดงในรูปที่ 7


ข้าว. 7. การเรียกข้อมูลรายการระบบปฏิบัติการ

ฉันต้องการค้นหาคอมพิวเตอร์ทุกเครื่องที่ใช้ระบบปฏิบัติการเซิร์ฟเวอร์:

PS C:\> รับ-ADComputer - กรอง "ระบบปฏิบัติการ - เหมือน "* เซิร์ฟเวอร์ *"" - คุณสมบัติ ระบบปฏิบัติการ, ระบบปฏิบัติการ ServicePack | เลือกชื่อ,Op* | รายการรูปแบบ

ผลลัพธ์แสดงในรูปที่ 8

เช่นเดียวกับ AD Get cmdlets อื่นๆ คุณสามารถปรับแต่งพารามิเตอร์การค้นหาและจำกัดคำขอไปยัง OU ที่เฉพาะเจาะจงได้หากจำเป็น นิพจน์ทั้งหมดที่ฉันแสดงสามารถรวมเข้ากับนิพจน์ PowerShell ที่ใหญ่กว่าได้ ตัวอย่างเช่น คุณสามารถจัดเรียง จัดกลุ่ม ใช้ตัวกรอง ส่งออกเป็น CSV หรือสร้างและส่งไปที่ เมล HTMLรายงาน - ทั้งหมดจาก PowerShell! ในกรณีนี้ คุณจะไม่ต้องเขียนสคริปต์แม้แต่ตัวเดียว
นี่เป็นโบนัส: รายงานอายุรหัสผ่านของผู้ใช้ที่บันทึกไว้ในไฟล์ HTML:

PS C:\> รับ ADUser - ตัวกรอง "เปิดใช้งาน -eq "จริง" - และ PasswordNeverExpires -eq "เท็จ"" - คุณสมบัติ PasswordLastSet, รหัสผ่านNeverExpires, รหัสผ่านหมดอายุ | เลือก DistinguishedName,Name,pass*,@(Name="PasswordAge"; Expression=((Get-Date)-$_.PasswordLastSet)) |sort PasswordAge -Descending | ConvertTo-Html -Title "Password Age Report" | Out-File c:\Work\pwage.htm !}

แม้ว่าสำนวนนี้อาจดูน่ากลัวเล็กน้อย แต่ก็ใช้งานง่ายโดยมีความรู้เกี่ยวกับ PowerShell เพียงเล็กน้อย และมีเพียงคำแนะนำสุดท้ายเดียวเท่านั้น: วิธีกำหนดคุณสมบัติแบบกำหนดเองที่เรียกว่า รหัสผ่านAge- ค่านี้แสดงถึงช่องว่างระหว่างวันที่วันนี้และคุณสมบัติ PasswordLastSet จากนั้น ฉันจะจัดเรียงผลลัพธ์สำหรับสถานที่ให้บริการใหม่ของฉัน รูปที่ 9 แสดงผลลัพธ์สำหรับโดเมนทดสอบขนาดเล็กของฉัน

อัปเดต:
โพสต์มีการแปลบทความบนพอร์ทัล

ใช้เพื่อสร้าง แก้ไข และลบอ็อบเจ็กต์ไดเร็กทอรี ผู้ใช้ยังสามารถใช้คำสั่ง ldifdeเพื่อขยายสคีมา ส่งออก ข้อมูลที่ใช้งานอยู่ข้อมูลผู้ใช้ไดเรกทอรีและกลุ่มไปยังแอปพลิเคชันหรือบริการอื่น และเพื่อเติมบริการ ADAM (โหมดแอปพลิเคชัน Active Directory) ด้วยข้อมูลจากบริการไดเรกทอรีอื่น

ไวยากรณ์

ldifde [-ฉัน] [-ฉ ชื่อไฟล์] [-ส เซิร์ฟเวอร์_ชื่อ] [-ค บรรทัดที่ 1 บรรทัดที่ 2] [-v] [-เจ เส้นทาง] [-t พอร์ต_หมายเลข] [-d DN_ฐาน] [-ร ตัวกรอง_LDAP] [-พี ภูมิภาค] [-ล LDAP_attribute_list] [-o LDAP_attribute_list] [-ก] [-ม] [-n] [-เค] [-ก ] [-ข ] [-? ]

ตัวเลือก

-ฉัน ระบุโหมดการนำเข้า หากไม่ได้กำหนดพารามิเตอร์ โหมดการส่งออกจะถูกใช้ตามค่าเริ่มต้น -ฉชื่อไฟล์ ระบุชื่อของไฟล์นำเข้าหรือส่งออก -สเซิร์ฟเวอร์_ชื่อ ระบุคอมพิวเตอร์ที่ควรดำเนินการนำเข้าหรือส่งออก โปรแกรมเริ่มต้น ldifdeจะถูกดำเนินการบนคอมพิวเตอร์ที่ ldifdeติดตั้งแล้ว -คบรรทัดที่ 1 บรรทัดที่ 2 แทนที่เหตุการณ์ทั้งหมด เส้น1เนื้อหา เส้น2- โดยทั่วไปจะใช้เมื่อคุณนำเข้าข้อมูลจากโดเมนหนึ่งไปยังอีกโดเมนหนึ่ง และจำเป็นต้องเปลี่ยนชื่อที่แตกต่างของโดเมนที่ทำการส่งออก ( บรรทัดที่ 1) การนำเข้าชื่อโดเมน ( บรรทัดที่ 2). -v เปิดใช้งานโหมดการบันทึกแบบละเอียด -เจเส้นทาง ระบุตำแหน่งของไฟล์บันทึก ค่าเริ่มต้นคือเส้นทางปัจจุบัน -tพอร์ต_หมายเลข ระบุหมายเลขพอร์ต Lightweight Directory Access Protocol (LDAP) พอร์ต LDAP เริ่มต้นคือ 389 พอร์ต แคตตาล็อกทั่วโลกคือ 3268 -dDN_ฐาน ระบุชื่อที่แตกต่างของฐานการค้นหาสำหรับการส่งออกข้อมูล -รตัวกรอง LDAP สร้างตัวกรองการค้นหา LDAP สำหรับการส่งออกข้อมูล ตัวอย่างเช่น ตัวกรองต่อไปนี้จะส่งออกผู้ใช้ทั้งหมดที่มีชื่อกลางเฉพาะ: csvde -r (และ (objectClass=ผู้ใช้)(sn=นามสกุล)) -พีภูมิภาค ระบุพื้นที่การค้นหา พารามิเตอร์ขอบเขตการค้นหาคือ ฐาน, หนึ่งระดับและ ต้นไม้ย่อย. -ลLDAP_attribute_list ระบุรายการแอตทริบิวต์ที่ส่งคืนในผลลัพธ์ของการร้องขอการส่งออก หากละเว้นพารามิเตอร์นี้ แอ็ตทริบิวต์ทั้งหมดจะถูกส่งกลับ -oLDAP_attribute_list ระบุรายการแอ็ตทริบิวต์ที่จะละเว้นจากผลลัพธ์การร้องขอเอ็กซ์พอร์ต โดยทั่วไปตัวเลือกนี้จะใช้เมื่อส่งออกออบเจ็กต์จาก Active Directory แล้วนำเข้าไปยังไดเร็กทอรีอื่นที่เข้ากันได้กับ LDAP หากแค็ตตาล็อกอื่นไม่รองรับแอตทริบิวต์ใดๆ ก็สามารถแยกออกจากชุดผลลัพธ์ได้โดยใช้ตัวเลือกนี้ -ก กำจัดการค้นหาหน้า -ม ละเว้นแอตทริบิวต์ที่ไม่สามารถเขียนได้ เช่น ObjectGUIDและ objectSID. -n ละเว้นการส่งออกค่าไบนารี -เค ละเว้นข้อผิดพลาดระหว่างการดำเนินการนำเข้าและดำเนินการประมวลผลต่อไป ด้านล่างคือ รายการทั้งหมดข้อผิดพลาดที่ถูกละเว้น:

  • วัตถุนั้นเป็นสมาชิกของกลุ่มอยู่แล้ว
  • การละเมิดคลาสอ็อบเจ็กต์ (หมายความว่าไม่มีคลาสอ็อบเจ็กต์ที่ระบุ) หากออบเจ็กต์ที่นำเข้าไม่มีคุณลักษณะอื่น ๆ
  • วัตถุมีอยู่แล้ว
  • การละเมิดข้อ จำกัด
  • คุณลักษณะหรือค่ามีอยู่แล้ว
  • ไม่มีวัตถุดังกล่าวอยู่
-กแตกต่าง_name_password ระบุการดำเนินการของคำสั่งโดยใช้ที่ระบุ แตกต่าง_name_user_nameและ รหัสผ่าน -ข. -ขชื่อผู้ใช้ รหัสผ่านโดเมน ระบุคำสั่งที่จะดำเนินการโดยใช้ที่ระบุ ชื่อผู้ใช้ โดเมน และรหัสผ่าน- ตามค่าเริ่มต้น คำสั่งจะถูกดำเนินการโดยใช้ข้อมูลประจำตัวของผู้ใช้ที่อยู่ในนั้น ช่วงเวลาปัจจุบันที่ลงทะเบียนไว้บนเครือข่าย ไม่สามารถใช้กับพารามิเตอร์ได้ -ก. -? แสดงเมนูคำสั่ง

หมายเหตุ

  • พร้อมพารามิเตอร์ -คคุณสามารถใช้ค่าคงที่ได้ #schemaบริบทการตั้งชื่อและ #configurationการตั้งชื่อบริบทแทนชื่อที่แตกต่างของพาร์ติชันไดเร็กทอรี schema และพาร์ติชันไดเร็กทอรีการกำหนดค่า
  • เมื่อสร้างไฟล์นำเข้าสำหรับคำสั่ง ldifdeให้ใช้ค่า เปลี่ยนประเภทเพื่อกำหนดประเภทของการเปลี่ยนแปลงที่มีอยู่ในไฟล์นำเข้า ค่านิยม เปลี่ยนประเภทระบุไว้ในตารางด้านล่างนี้

ด้านล่างนี้คือตัวอย่างไฟล์นำเข้า LDAP ในรูปแบบ LDIF ที่ใช้ค่าดังกล่าว เพิ่ม:
DN: ซีเอ็น=เลือกแล้ว_ผู้ใช้,ดีซี=โดเมน_เนม
ประเภทการเปลี่ยนแปลง: เพิ่ม
ซีเอ็น: เลือกแล้ว_ผู้ใช้
คำอธิบาย:file_description
วัตถุคลาส: ผู้ใช้
วัตถุคลาส: เลือกแล้ว_ผู้ใช้

ตัวอย่าง

หากต้องการแยกเฉพาะชื่อที่แตกต่าง ชื่อสามัญ, ชื่อ, นามสกุล และหมายเลขโทรศัพท์ของออบเจ็กต์ที่ส่งคืน ให้ป้อน:
-ล โดดเด่น_ชื่อ, ซีเอ็น ชื่อ, เอส.เอ็น. โทรศัพท์
หากต้องการยกเว้น globally Unique identifier (GUID) สำหรับอ็อบเจ็กต์ ให้ป้อน:
-o เมื่อ_สร้าง, เมื่อ_เปลี่ยนแปลง, object_GUID

ไม่มีความลับว่าตั้งแต่ PowerShell เวอร์ชันแรก Microsoft ได้พยายามทำให้เป็นเครื่องมือหลัก การดูแลระบบ Windows- และได้ผลในหลาย ๆ ด้าน! วันนี้ เราจะแสดงความสามารถของ PowerShell ที่สามารถใช้เพื่อรับโดยใช้ตัวอย่างง่ายๆ ข้อมูลต่างๆเกี่ยวกับผู้ใช้ Active Directory และคุณลักษณะของพวกเขา

บันทึก- ก่อนหน้านี้ หากต้องการรับข้อมูลเกี่ยวกับคุณลักษณะของบัญชีผู้ใช้ AD คุณต้องใช้เครื่องมือต่างๆ: คอนโซล ADUC (รวมถึง) ยูทิลิตี้ ฯลฯ การเลือกเครื่องมือมักจะขึ้นอยู่กับงานที่มีอยู่และความสามารถในการเขียนโปรแกรมของผู้ดูแลระบบ

PowerShell 2.0 เปิดตัวโมดูลพิเศษสำหรับการทำงานกับ Active Directory - (แนะนำใน Windows Server 2008 R2) ซึ่ง cmdlets อนุญาตให้คุณดำเนินการต่างๆ กับวัตถุไดเรกทอรี AD เพื่อรับข้อมูลเกี่ยวกับผู้ใช้ โดเมนใช้งานอยู่ไดเรกทอรีและคุณสมบัติ cmdlet รับ-ADUser- คุณสามารถใช้ Get-ADUser cmdlet เพื่อรับค่าของแอตทริบิวต์ใดๆ ของบัญชีผู้ใช้ที่มีอยู่ใน AD นอกจากนี้ คุณยังสามารถระบุเกณฑ์การเลือกต่างๆ และสร้างรายชื่อผู้ใช้โดเมนและคุณลักษณะของผู้ใช้ได้

ในตัวอย่างนี้ เราจะแสดงวิธีใช้ PowerShell Get-ADUser cmdlet เพื่อดึงข้อมูลเกี่ยวกับเวลาที่เปลี่ยนรหัสผ่านของผู้ใช้ครั้งล่าสุดและหมดอายุเมื่อใด

เปิดหน้าต่าง Powershll ด้วยสิทธิ์ของผู้ดูแลระบบและนำเข้าโมดูล Active Directory ด้วยคำสั่ง:

นำเข้าโมดูล activedirectory

คำแนะนำ- ใน Windows Server 2012 และสูงกว่า คุณสามารถข้ามรายการนี้ได้เนื่องจากโมดูล PowerShell ใช้งานอยู่ไดเร็กทอรีเชื่อมต่อตามค่าเริ่มต้น

ในระบบปฏิบัติการไคลเอนต์ (เช่น Windows 10) เพื่อให้คำสั่ง Get-AdUser ทำงานคุณจะต้องติดตั้ง RSAT เวอร์ชันที่เหมาะสมและเปิดใช้งานส่วนประกอบในแผงควบคุม โมดูล Active Directory สำหรับ Windows PowerShell(เครื่องมือการดูแลเซิร์ฟเวอร์ระยะไกล -> เครื่องมือการดูแลระบบบทบาท -> เครื่องมือ AD DS และ AD LDS -> เครื่องมือ AD DS)

คุณสามารถรับรายการอาร์กิวเมนต์ทั้งหมดของ Get-ADUser cmdlet ได้ดังนี้:

ช่วยรับ ADUser

หากต้องการแสดงรายการบัญชีโดเมนทั้งหมด ให้รันคำสั่ง:

รับ ADUser - ตัวกรอง *

รูปแบบของรายการที่ส่งคืนไม่สะดวกในการใช้งานเพียงแสดงแอตทริบิวต์พื้นฐาน 10 รายการจากทั้งหมดมากกว่า 120 รายการและคุณสมบัติของบัญชีผู้ใช้ (DN, SamAccountName, Name, UPN ฯลฯ ) นอกจากนี้เรายังเห็นว่ามี ไม่มีข้อมูลเกี่ยวกับเวลาที่เปลี่ยนรหัสผ่านครั้งล่าสุด

หากต้องการแสดงข้อมูลที่ครบถ้วนเกี่ยวกับคุณลักษณะที่มีอยู่ทั้งหมดของผู้ใช้ tuser ให้รันคำสั่ง:

รับ ADUser -identity tuser -properties *

ดังนั้นเราจึงเห็นรายการคุณลักษณะผู้ใช้ AD ทั้งหมดและค่าที่เกี่ยวข้องกับบัญชีผู้ใช้ ต่อไป เราจะไปที่การจัดรูปแบบผลลัพธ์ของ Get-ADUser cmdlet เพื่อให้ฟิลด์ที่เราต้องการปรากฏขึ้น เราสนใจคุณสมบัติ:

  • รหัสผ่านหมดอายุ
  • รหัสผ่าน LastSet
  • รหัสผ่านไม่มีวันหมดอายุ

มารันคำสั่งกัน:

รับ ADUser tuser - คุณสมบัติ PasswordExpired, PasswordLastSet, PasswordNeverExpires

ขณะนี้ข้อมูลผู้ใช้ประกอบด้วยข้อมูลเกี่ยวกับวันที่เปลี่ยนรหัสผ่านและเวลาที่รหัสผ่านจะหมดอายุ มานำเสนอข้อมูลในรูปแบบตารางที่สะดวกยิ่งขึ้น:

รับ ADUser -filter * - คุณสมบัติรหัสผ่านหมดอายุ, PasswordLastSet, รหัสผ่านNeverExpires | ft ชื่อ, รหัสผ่านหมดอายุ, รหัสผ่านล่าสุด, รหัสผ่านไม่มีวันหมดอายุ

หากต้องการแสดงข้อมูลผู้ใช้จาก OU เฉพาะ ให้ใช้พารามิเตอร์ ค้นหาฐาน:

รับ ADUser -SearchBase 'OU = มอสโก, DC = winitpro, DC = loc' - ตัวกรอง * - คุณสมบัติ PasswordExpired, PasswordLastSet, PasswordNeverExpires | ft ชื่อ, รหัสผ่านหมดอายุ, รหัสผ่านล่าสุด, รหัสผ่านไม่มีวันหมดอายุ

ผลลัพธ์ของคำสั่งสามารถส่งออกไปยังไฟล์ข้อความ:

รับ ADUser -filter * - คุณสมบัติรหัสผ่านหมดอายุ, PasswordLastSet, รหัสผ่านNeverExpires | ft ชื่อ, PasswordExpired, PasswordLastSet, รหัสผ่านNeverExpires > C:\temp\users.txt

หรือในรูปแบบ CSV ซึ่งจะส่งออกไปยัง Excel ได้อย่างสะดวกในอนาคต (ใช้เพิ่มเติม เรียงลำดับวัตถุมาจัดเรียงตารางตามคอลัมน์ PasswordLastSet และเพิ่มเงื่อนไขด้วย ที่ไหน– ชื่อผู้ใช้จะต้องมีสตริง “Dmitry”):

รับ ADUser -filter * - คุณสมบัติรหัสผ่านหมดอายุ, PasswordLastSet, รหัสผ่านNeverExpires | โดยที่ ($_.name –like “*Dmitry*”) | เรียงลำดับวัตถุ PasswordLastSet | ชื่อวัตถุที่เลือก, PasswordExpired, PasswordLastSet, PasswordNeverExpires | ส่งออก-csv -path c:\temp\user-password-expires-2015.csv

ดังนั้นคุณจึงสามารถสร้างตารางที่มีคุณสมบัติที่จำเป็นได้ ผู้ใช้ที่ใช้งานอยู่ไดเรกทอรี

หากต้องการรับรายการบัญชีผู้ใช้ AD ตามคุณลักษณะเฉพาะ ให้ใช้พารามิเตอร์ –Filter เป็นอาร์กิวเมนต์ของพารามิเตอร์นี้ คุณสามารถระบุค่าของแอตทริบิวต์ผู้ใช้ Active Directory บางอย่างได้ ซึ่งจะทำให้ Get-ADUser cmdlet นำไปใช้กับผู้ใช้ที่ตรงกับเกณฑ์ตัวกรอง

ผลลัพธ์ของผู้ใช้ AD ที่ชื่อขึ้นต้นด้วย Roman:

Get-ADUser -filter (ชื่อเหมือน "Roman*")

รับ-ADUser -Filter (SamAccountName -like "*") | วัด-วัตถุ

รายการบัญชีที่ใช้งาน (ไม่ถูกบล็อก) ทั้งหมดใน AD:

รับ-ADUser -Filter (เปิดใช้งาน -eq "True") | เลือก-วัตถุ SamAccountName,ชื่อ,นามสกุล,GivenName | รูปแบบตาราง

รายชื่อบัญชีที่รหัสผ่านหมดอายุ:

รับ-ADUser -filter (เปิดใช้งาน -eq $True) -รหัสผ่านคุณสมบัติหมดอายุ | โดยที่($_.รหัสผ่านหมดอายุ)

รายชื่อบัญชีที่ใช้งานพร้อมที่อยู่อีเมล:

Get-ADUser -Filter ((mail -ne "null") -และ (Enabled -eq "true") -Properties Surname,GivenName,mail | เลือก-ชื่อวัตถุ,นามสกุล,GivenName,mail | รูปแบบตาราง

งาน: สำหรับรายการบัญชีที่จัดเก็บไว้ในไฟล์ข้อความ (หนึ่งบัญชีต่อบรรทัด) คุณต้องได้รับหมายเลขโทรศัพท์ของผู้ใช้ใน AD และอัปโหลดข้อมูลไปยังไฟล์ข้อความ csv (สามารถนำเข้าสู่ Esxel ได้อย่างง่ายดาย)

นำเข้า-Csv c:\ps\usernsme_list.csv | ForEach ( Get-ADUser -identity $_.user -Properties Name, TelephoneNumber | Select Name, TelephoneNumber | Export-CSV c:\ps\export_ad_list.csv -Append -Encoding UTF8 )

ตัวอย่างต่อไปนี้ช่วยให้คุณสามารถดาวน์โหลดสมุดที่อยู่ขององค์กรเป็นไฟล์ csv ซึ่งสามารถนำเข้าสู่ Outlook หรือ Mozilla Thunderbird ได้ในภายหลัง:

Get-ADUser -Filter ((mail -ne "null") -และ (Enabled -eq "true") -Properties Surname,GivenName,mail | เลือก-ชื่อวัตถุ,นามสกุล,GivenName,mail | ส่งออก-Csv -NoTypeInformation -เข้ารหัส utf8 -ตัวคั่น "," $env:temp\mail_list.csv

ผู้ใช้ที่ไม่ได้เปลี่ยนรหัสผ่านในช่วง 90 วันที่ผ่านมา:

$90_Days = (รับ-วันที่).adddays(-90) รับ-ADUser -filter ((รหัสผ่านlastset -le $90_days))

$ user = Get-ADUser winadmin - คุณสมบัติภาพขนาดย่อ $ user.thumbnailPhoto | ตั้งค่าเนื้อหา winadmin.jpg - การเข้ารหัสไบต์

รายชื่อกลุ่มที่มีบัญชีผู้ใช้อยู่

รับ AdUser winadmin - คุณสมบัติสมาชิกของ | เลือก memberof -expandproperty memberof

ในความคิดเห็นในบทความก่อนหน้านี้ เราจำเกี่ยวกับการบัญชีใน Excel แทน 1C ได้ มาดูกันว่าคุณรู้จัก Excel มากแค่ไหน วันนี้ฉันจะแสดงวิธีรับข้อมูลจาก Active Directory และใช้งานได้โดยไม่ต้องใช้มาโครและ PowerShell - เฉพาะกับกลไก Office มาตรฐานเท่านั้น ตัวอย่างเช่น คุณสามารถรับการวิเคราะห์การใช้งานระบบปฏิบัติการในองค์กรของคุณได้อย่างง่ายดาย หากคุณยังไม่มี Microsoft SCOM หรือเพียงแค่อุ่นเครื่องและเลิกสนใจสคริปต์


แน่นอน คุณสามารถรับข้อมูลตามตัวอย่างด้านล่างได้อย่างแท้จริงด้วยหนึ่งบรรทัดใน PowerShell แต่ประการแรก PowerShell น่าเบื่อเกินไปและประการที่สอง Excel สามารถอัปเดตข้อมูลแบบไดนามิก - เอกสารผลลัพธ์สามารถเผยแพร่ทางออนไลน์และลืมเกี่ยวกับการอัปเดตได้

ในการทำงานกับข้อมูล ฉันจะใช้กลไก Power Query สำหรับ Office 2010 และ 2013 คุณจะต้องติดตั้งปลั๊กอิน Microsoft Office 2016 มีโมดูลนี้อยู่แล้ว น่าเสียดายที่รุ่นมาตรฐานยังไม่เพียงพอสำหรับเรา เราต้องการ Professional


กลไกนี้ได้รับการออกแบบให้รับและประมวลผลข้อมูลจากแหล่งต่างๆ - จาก ODBC เก่าและ ไฟล์ข้อความเพื่อ Exchange, Oracle และ Facebook รายละเอียดเพิ่มเติมเกี่ยวกับกลไกและภาษาสคริปต์ในตัว "M" ได้เขียนไว้แล้วบนHabré แต่ฉันจะดูตัวอย่างการใช้งานสองสามตัวอย่าง พาวเวอร์คิวรีเพื่อดึงข้อมูลจาก Active Directory

อุ่นเครื่อง: มาดูกันว่าผู้ใช้ของเราเข้าสู่ระบบเมื่อใด

คำขอไปยังฐานข้อมูลโดเมนนั้นถูกสร้างขึ้นบนแท็บ “ข้อมูล ― คำขอใหม่ ― จากแหล่งอื่น ― จาก Active Directory”



ระบุแหล่งข้อมูล


คุณจะต้องเลือกชื่อโดเมนและระบุข้อมูลการเชื่อมต่อที่จำเป็น จากนั้นเลือกประเภทของออบเจ็กต์ ในตัวอย่างนี้ - ผู้ใช้- ทางด้านขวาในหน้าต่างแสดงตัวอย่าง แบบสอบถามกำลังทำงานอยู่ โดยแสดงตัวอย่างข้อมูล



เราเตรียมคำขอและชื่นชมตัวอย่าง


คุณควรเตรียมคำขอของคุณก่อนโดยคลิกปุ่ม "แก้ไข" และเลือก คอลัมน์ที่จำเป็น- โดยพื้นฐานแล้ว คอลัมน์เหล่านี้เป็นคลาส แต่ละคอลัมน์ประกอบด้วยชุดคุณลักษณะเฉพาะของวัตถุ Active Directory ยกเว้นคอลัมน์หลัก ชื่อที่แสดงซึ่งตัวมันเองเป็นคุณลักษณะ ฉันจะมุ่งเน้นไปที่ชั้นเรียน ผู้ใช้, บุคคล, สูงสุดและ ความปลอดภัยหลัก- ตอนนี้คุณต้องเลือก คุณสมบัติที่จำเป็นจากแต่ละคลาสโดยใช้ "ส่วนขยาย" - ไอคอนที่มีลูกศรสองอันที่ส่วนหัวของคอลัมน์:

  • ระดับ ผู้ใช้ขยายโดยการเลือก LastLogonTimestampและ userAccountControl;
  • วี บุคคลมาเลือกกัน หมายเลขโทรศัพท์;
  • วี สูงสุดเมื่อสร้างขึ้น;
  • และใน ความปลอดภัยหลักSamAccountName.


เราขยายคำขอ


ตอนนี้มาตั้งค่าตัวกรองกัน โดยเฉพาะอย่างยิ่ง เพื่อไม่ให้บัญชีถูกบล็อก คุณต้องมีแอตทริบิวต์ userAccountControl ที่มีค่า 512 หรือ 66048 ตัวกรองอาจแตกต่างกันในสภาพแวดล้อมของคุณ คุณสามารถอ่านเพิ่มเติมเกี่ยวกับแอตทริบิวต์ได้ในเอกสารประกอบของ Microsoft



การใช้ตัวกรอง.


บางครั้ง Excel ตรวจพบรูปแบบข้อมูลอย่างไม่ถูกต้อง โดยเฉพาะค่าของแอตทริบิวต์ LastLogonTimestamp หากโชคร้ายเกิดขึ้นกับคุณอย่างกะทันหัน คุณสามารถตั้งค่ารูปแบบที่ถูกต้องได้ในแท็บ "แปลง"

ตอนนี้ควรลบคอลัมน์ userAccountControl - ไม่จำเป็นเลยในจอแสดงผล และคลิก “ดาวน์โหลดและปิด”


ผลลัพธ์ที่ได้คือจานที่ต้องการการตกแต่งเพียงเล็กน้อย ตัวอย่างเช่น เปลี่ยนชื่อคอลัมน์ให้เป็นสิ่งที่อ่านง่ายขึ้น และปรับแต่ง อัปเดตอัตโนมัติข้อมูล.


การอัปเดตอัตโนมัติเมื่อเปิดตารางหรือตามระยะหมดเวลาได้รับการกำหนดค่าในแท็บ "ข้อมูล" ใน "คุณสมบัติ"



การตั้งค่าการอัพเดตข้อมูล


หลังจากการตั้งค่าการอัปเดตเสร็จสิ้น คุณสามารถมอบตารางให้กับแผนกบุคคลหรือบริการรักษาความปลอดภัยได้อย่างปลอดภัย - แจ้งให้พวกเขาทราบว่าใครเข้าสู่ระบบและเมื่อใด


รหัสคำขอในภาษา “M” อยู่ใต้สปอยเลอร์

ให้ Source = ActiveDirectory.Domains("domain.ru"), domain.ru = Source()[#"Object Categories"], user1 = domain.ru(), #"Remote Columns" = Table.RemoveColumns(user1,( "organizationalPerson", "shadowAccount", "posixAccount", "msExchOmaUser", "msExchBaseClass", "msExchIMRecipient", "msExchCertificateInformation", "msExchMultiMediaUser", "msExchMailStorage", "msExchCustomAttributes", "mailRecipient", "distinguishedName")), #"องค์ประกอบที่ขยาย securityPrincipal" = Table.ExpandRecordColumn(#"คอลัมน์ที่ถูกลบ", "securityPrincipal", ("sAMAccountName"), ("sAMAccountName")), #"องค์ประกอบที่ขยายด้านบน" = Table.ExpandRecordColumn(#"องค์ประกอบที่ขยาย securityPrincipal ", "top", ("whenCreated"), ("whenCreated")), #"บุคคลองค์ประกอบที่ขยาย" = Table.ExpandRecordColumn(#"องค์ประกอบที่ขยายด้านบน", "บุคคล", ("telephoneNumber"), ("telephoneNumber ")), #"ผู้ใช้องค์ประกอบที่ขยาย" = Table.ExpandRecordColumn(#"บุคคลองค์ประกอบที่ขยาย", "ผู้ใช้", ("lastLogonTimestamp", "userAccountControl"), ("lastLogonTimestamp", "userAccountControl")), #"แถว พร้อมตัวกรองที่ใช้" = Table.SelectRows(#"องค์ประกอบผู้ใช้ที่ขยาย" แต่ละ ( = 512 หรือ = 66048)), #"ประเภทที่เปลี่ยนแปลง" = Table.TransformColumnTypes(#"แถวที่ใช้ตัวกรอง",(("lastLogonTimestamp", พิมพ์ datetime))), #"Remoted columns1" = Table.RemoveColumns(#"Changed type",("userAccountControl")) ใน #"Remoted columns1"

การสร้างสมุดที่อยู่หรือจะทำอย่างไรเมื่อใด พอร์ทัลองค์กรไม่เป็นมิตรกับ AD

อีกทางเลือกหนึ่ง ใช้ Excelร่วมกับ Active Directory - นี่คือการสร้างสมุดที่อยู่ตามข้อมูล AD เป็นที่ชัดเจนว่า สมุดที่อยู่จะเกี่ยวข้องเฉพาะในกรณีที่โดเมนอยู่ในลำดับเท่านั้น


มาสร้างคำขอสำหรับวัตถุกัน ผู้ใช้, ขยายชั้นเรียน ผู้ใช้วี จดหมายและชั้นเรียน บุคคลวี หมายเลขโทรศัพท์- ลองลบคอลัมน์ทั้งหมดยกเว้น ชื่อที่โดดเด่น― โครงสร้างโดเมนซ้ำกับโครงสร้างขององค์กร ดังนั้นชื่อ หน่วยองค์กรตรงกับชื่อหน่วยงานต่างๆ ในทำนองเดียวกัน กลุ่มความปลอดภัยสามารถใช้เป็นพื้นฐานสำหรับชื่อแผนกได้


ตอนนี้จากบรรทัด CN=ชื่อผู้ใช้, OU=แผนกบัญชี, OU=แผนก, DC=โดเมน, DC=ruคุณต้องแยกชื่อแผนกออกโดยตรง วิธีที่ง่ายที่สุดในการทำเช่นนี้คือการใช้ตัวคั่นบนแท็บการแปลง



การแยกข้อความ


เป็นตัวคั่นที่ฉันใช้ อู๋=และ ,อู๋=- โดยหลักการแล้ว จุลภาคก็เพียงพอแล้ว แต่ฉันก็เล่นอย่างปลอดภัย



ป้อนตัวคั่น


ขณะนี้การใช้ตัวกรองคุณสามารถตัดส่วนที่ไม่จำเป็นออกได้ อู๋เช่น ผู้ใช้ที่ถูกบล็อก และ บิวท์อินกำหนดค่าการเรียงลำดับและโหลดข้อมูลลงในตาราง



มุมมองของตารางสรุป

รายงานด่วนเกี่ยวกับองค์ประกอบของเวิร์กสเตชัน โดยไม่ต้องแนะนำตัวแทนหรือการเตรียมการอื่นๆ

ตอนนี้เรามาลองสร้างตารางที่มีประโยชน์โดยการรับข้อมูลบนคอมพิวเตอร์ เราจะจัดทำรายงานการใช้งานของบริษัท ระบบปฏิบัติการ: ในการดำเนินการนี้ เราจะสร้างคำขอ แต่คราวนี้เราจะเลือก คอมพิวเตอร์.



เราทำการร้องขอวัตถุคอมพิวเตอร์


ออกจากคลาสคอลัมน์กันเถอะ คอมพิวเตอร์และ สูงสุดและขยายความ:

  • ระดับ คอมพิวเตอร์ขยายโดยการเลือก CN, ระบบปฏิบัติการ, ระบบปฏิบัติการServicePackและ ระบบปฏิบัติการเวอร์ชัน;
  • ในชั้นเรียน สูงสุดมาเลือกกัน เมื่อสร้างขึ้น.


คำขอขั้นสูง


หากต้องการคุณสามารถรายงานเฉพาะระบบปฏิบัติการเซิร์ฟเวอร์เท่านั้น ตัวอย่างเช่น กรองตามแอตทริบิวต์ระบบปฏิบัติการหรือระบบปฏิบัติการเวอร์ชัน ฉันจะไม่ทำเช่นนี้ แต่ฉันจะแก้ไขการแสดงเวลาสร้าง - ฉันสนใจเฉพาะปีเท่านั้น ในการดำเนินการนี้ บนแท็บ "การแปลง" ให้เลือกคอลัมน์ที่เราต้องการ และเลือก "ปี" ในเมนู "วันที่"



เราแยกปีนับจากเวลาที่คอมพิวเตอร์เข้าสู่โดเมน


ตอนนี้สิ่งที่เหลืออยู่คือการลบคอลัมน์ชื่อที่แสดงโดยไม่จำเป็นและโหลดผลลัพธ์ ข้อมูลพร้อมแล้ว ตอนนี้คุณสามารถทำงานร่วมกับพวกเขาได้เหมือนกับโต๊ะปกติ ขั้นแรก เรามาสร้างตารางสาระสำคัญบนแท็บ "แทรก" - " ตารางเดือย- เรามายอมรับการเลือกแหล่งข้อมูลและกำหนดค่าฟิลด์ของมันกัน



การตั้งค่าฟิลด์ตาราง Pivot


ตอนนี้สิ่งที่เหลืออยู่คือการปรับแต่งการออกแบบตามรสนิยมของคุณและชื่นชมผลลัพธ์:



ตารางสรุปเครื่องคอมพิวเตอร์ใน AD


หากต้องการคุณสามารถเพิ่มได้ กำหนดการสรุปบนแท็บแทรกด้วย เพิ่มใน "หมวดหมู่" (หรือใน "แถว" เพื่อลิ้มรส) ระบบปฏิบัติการไปยังข้อมูล ― CN- บนแท็บ "การออกแบบ" คุณสามารถเลือกประเภทของแผนภูมิที่คุณต้องการได้ ฉันชอบแผนภูมิวงกลมมากกว่า



แผนภูมิวงกลม


ตอนนี้เห็นได้อย่างชัดเจนว่าแม้จะมีการอัปเดตอย่างต่อเนื่อง แต่จำนวนเวิร์กสเตชันทั้งหมดที่ใช้ Windows XP และเซิร์ฟเวอร์ที่ใช้ Windows 2003 ก็ค่อนข้างมาก และมีบางอย่างที่ต้องต่อสู้เพื่อ


รหัสคำขออยู่ใต้สปอยเลอร์

ให้ Source = ActiveDirectory.Domains("domain.ru"), domain.ru = Source()[#"Object Categories"], computer1 = domain.ru(), #"Remote Columns" = Table.RemoveColumns(computer1,( "user", "organizationalPerson", "person")), #"คอลัมน์อื่นๆ ที่ถูกลบ" = Table.SelectColumns(#"Remoted columns",("displayName", "computer", "top")), #"ขยายรายการ คอมพิวเตอร์" = Table.ExpandRecordColumn(#"คอลัมน์ระยะไกลอื่นๆ", "คอมพิวเตอร์", ("cn", "operatingSystem", "operatingSystemServicePack", "operatingSystemVersion"), ("cn", "operatingSystem", "operatingSystemServicePack", " OperatingSystemVersion")), #"ขยายด้านบน" = Table.ExpandRecordColumn(#"คอมพิวเตอร์แบบขยาย", "ด้านบน", ("เมื่อสร้าง"), ("เมื่อสร้าง")), #"ปีที่แยก" = Table.TransformColumns( #" องค์ประกอบที่ขยาย top",(("whenCreated", Date.Year))), #"คอลัมน์ระยะไกล1" = Table.RemoveColumns(#"ปีที่แยกออกมา",("displayName")) ใน #"คอลัมน์ระยะไกล1"

เพิ่มแท็ก