วิธี “โยน” ผู้ใช้ใหม่ 100,500 รายอย่างรวดเร็ว ไดเรกทอรีที่ใช้งานอยู่(เติบโตใน MS วินโดวส์เซิร์ฟเวอร์ 2003) หรือสคริปต์สำหรับการเพิ่มบัญชีผู้ใช้ลงใน Active Directory
- การเขียนโปรแกรมระบบ
มันบังเอิญว่าฉันเลือกอาชีพ ผู้ดูแลระบบ- และฉันได้ทำงานนี้บางครั้งโดยไม่เห็นคุณค่ามาเกือบ 6 ปีแล้ว
ครั้งหนึ่งเมื่อสองสามปีที่แล้ว ฉันต้องเผชิญกับคำถามซึ่งต่อมากลายเป็นงาน ซึ่งก็คือจะสร้างบัญชีผู้ใช้ใหม่ใน AD ภายใต้ MS Windows Server 2003 ได้อย่างรวดเร็วได้อย่างไร
ฉันคิดว่าทุกคนรู้วิธีการเพิ่มผู้ใช้ในโดเมน หรือพูดง่ายๆ ก็คือ "ด้วยตนเอง" นั่นคือในการเพิ่มบัญชีผู้ใช้ AD ใหม่คุณต้องทำสิ่งต่อไปนี้โดยประมาณ: เปิดสแน็ปอิน "ผู้ใช้และคอมพิวเตอร์" ของระบบปฏิบัติการที่กล่าวถึงข้างต้นเปิด OU ที่เกี่ยวข้อง (Organization Unite) เริ่มต้นใด ๆ วิธีการที่ทราบการสร้างผู้ใช้ จากนั้นในหน้าต่างที่เปิดขึ้น ให้สร้างผู้ใช้ทีละราย เห็นด้วยนี่ค่อนข้างยาวและน่าเบื่อโดยเฉพาะอย่างยิ่งหากบัญชีผู้ใช้ที่ต้องการไม่ใช่ 10 แต่เป็น 300, 500 หรือมากกว่านั้น สิ่งนี้จะกลายเป็นงานประจำโดยเฉพาะอย่างยิ่งเมื่อคุณต้องการกรอกข้อมูลไม่เพียง แต่ในช่อง "เข้าสู่ระบบ" และ "รหัสผ่าน" เท่านั้น แต่ยังรวมถึงช่อง "นามสกุล", "ชื่อนามสกุล", "ตำแหน่ง", "แผนก", "องค์กร" ” ซึ่งอยู่ในแท็บต่างๆ "ฯลฯ แน่นอนคุณจะบอกว่ายังไม่มีใครยกเลิกวิธี "คัดลอกวาง" และ "พิมพ์แบบตาบอด" แต่ลองใช้แล้วสัมผัสได้ถึงจำนวนผู้ใช้ที่คุณเบื่อและถ้าคุณไม่เบื่อล่ะก็ นับจำนวนข้อผิดพลาดที่เกิดขึ้นเมื่อป้อนข้อมูล
โดยทั่วไป เมื่อตระหนักว่าฉันต้องทำอะไรบางอย่างเกี่ยวกับเรื่องนี้ และเนื่องจากฉันมีเวลาจำกัด ฉันจึงหันไปหาแหล่งข้อมูลทางอินเทอร์เน็ตเพื่อค้นหาสคริปต์ที่ควรมีอยู่และแก้ไขปัญหานี้ ดังสัญชาตญาณของฉันบอกฉัน อนิจจาฉันเกือบจะผิดหวังกับสิ่งที่เห็น อินเทอร์เน็ตเต็มไปด้วยสคริปต์อัตโนมัติทุกประเภท งานต่างๆในสภาพแวดล้อม AD แต่สิ่งที่ฉันต้องการหายไปโดยสิ้นเชิง ฉันต้องหันไปหาแหล่งข้อมูลภาษาอังกฤษซึ่งหนึ่งในนั้น (อนิจจาฉันได้สูญเสียลิงค์ไซต์ไปแล้วในขณะที่เขียนบทความนี้ ฉันมีความคิดที่จะดูและถ้าฉันพบฉันจะเผยแพร่) มีสคริปต์ "fish" บางตัวบน VBS ในรูปแบบ "ดิบ" มากเมื่อปรากฏเมื่อพยายามนำไปใช้ ระบบทดสอบซึ่งไม่ได้นำไปสู่สิ่งใดเลย - มันเป็นเพียงนิรนัยไม่ทำงานเนื่องจากมีข้อบกพร่องมากมายและข้อผิดพลาดซ้ำ ๆ ดังที่ฉันพบในภายหลัง ฉันต้องแก้ไข เพิ่มโค้ด และยิ่งไปกว่านั้น ฉันได้เป็นโปรแกรมเมอร์ VBS สักหน่อย :)
สำหรับสิ่งนี้ ฉันขอนำเสนอสคริปต์สำหรับการเพิ่มบัญชีผู้ใช้ใน AD ให้กับ OU ที่สร้างไว้ล่วงหน้า (ระดับที่ 1) ต่อสาธารณะชน หากคำถามเกิดขึ้นว่าทำไม OU จึงไม่ถูกสร้างขึ้นโดยอัตโนมัติ ฉันจะตอบล่วงหน้าว่าฉันไม่พบวิธีการทำเช่นนี้และการควบคุมการเปลี่ยนแปลงที่ทำใน AD นั้นเข้มงวดมากขึ้น - คุณยังไม่ต้องเล่นในแซนด์บ็อกซ์ แต่ทำการเปลี่ยนแปลงที่จับต้องได้กับระบบเรียลไทม์ที่ทรงพลังและใช้งานได้จริง ที่เรียกว่า “Active Directory”
หมายเหตุสำคัญ!
คุณต้องสร้างไฟล์ไว้ล่วงหน้าโดยคั่นด้วย ";" พารามิเตอร์ที่จำเป็น:
เข้าสู่ระบบ; รหัสผ่าน; ชื่อนามสกุล; นามสกุล; ตำแหน่งงาน; แผนก; องค์กร;
จำเป็นต้องมีตัวคั่นต่อท้าย ";" ในแต่ละบรรทัด เช่น
สิริน-bird1; รหัสผ่าน1; ชื่อ นามสกุล 1; นามสกุล1; ตำแหน่ง1; แผนก1; องค์กร1;
สิริน-bird2; รหัสผ่าน2; ชื่อ นามสกุล2; นามสกุล2; ตำแหน่ง2; แผนก2; องค์กร2;
สิริน-bird4; รหัสผ่าน3; ชื่อจริง2 ชื่อกลาง3; นามสกุล3; ตำแหน่ง3; แผนก3; องค์กร3;
สิริน-bird3; รหัสผ่าน4; ชื่อ นามสกุล4; นามสกุล4; ตำแหน่ง4; แผนก4; องค์กร4;
สิริน-bird5; รหัสผ่าน5; ชื่อจริง2 ชื่อกลาง5; นามสกุล5; ตำแหน่ง5; แผนก5; องค์กร5;
… … … … … … …
การสร้างไฟล์ดังกล่าวยังสามารถมอบหมายให้กับบุคลากรที่ไม่มีคุณสมบัติเหมาะสมซึ่งรู้วิธีใช้โปรแกรมแก้ไขข้อความพื้นฐาน จากนั้นเพียงตรวจสอบความถูกต้องของการพิมพ์และการวางตัวคั่นตามที่ผู้รับใช้ผู้ต่ำต้อยของคุณทำ
อีกสิ่งหนึ่ง หมายเหตุสำคัญ!
พารามิเตอร์ "องค์กร" เป็น OU สำหรับผู้ใช้ที่เกี่ยวข้องและไม่ได้สร้างโดยสคริปต์นี้ ดังนั้นเพื่อให้ทุกอย่างทำงานได้ ก่อนอื่นให้สร้าง OU ที่เหมาะสมในรูทโดเมน (ใกล้กับโฟลเดอร์ "Users" OU) สิ่งนี้อธิบายได้จากข้อเท็จจริงที่ว่าในโดเมนของฉันมีองค์กรลูกค้าหลายองค์กรที่มีผู้ใช้เป็นพนักงานของตนเอง ดังนั้นแผนกนี้จึงเกิดขึ้น
ดังนั้นสคริปต์นั้นเอง:
ตั้ง objArgs = WScript.Arguments
ถ้า objArgs.Count = 0 แล้ว
WScript.Echo "เพิ่มผู้ใช้ในโดเมน"
WScript.Echo "add_to_ad.vbs [ชื่อไฟล์]"
WScript.Echo "[ชื่อไฟล์] - ไฟล์พร้อมรายชื่อผู้ใช้"
WScript.Echo "รูปแบบไฟล์: เข้าสู่ระบบ; รหัสผ่าน; ชื่อ - นามสกุล; นามสกุล; ตำแหน่ง; แผนก; องค์กร;"
WScript.ออก
สิ้นสุดถ้า
เส้นทาง = objArgs (0)
ตั้งค่า fso = CreateObject("Scripting.FileSystemObject")
ตั้งค่า objFile = fso.OpenTextFile (เส้นทาง 1)
ทำจนถึง objFile.AtEndOfStream
str = objFile.ReadLine
สำหรับ i = 1 ถึง Len(str) ขั้นตอนที่ 1
strCh = กลาง(str, i, 1)
ถ้า strCh = ";" แล้ว
เลือกกรณี Z
กรณีที่ 0
UserName = strRez " *** เข้าสู่ระบบ
กรณีที่ 1
UserPassword = strRez " *** รหัสผ่าน
กรณีที่ 2
FirstName = strRez " *** ชื่อ - นามสกุล
กรณีที่ 3
LastName = strRez " *** นามสกุล
กรณีที่ 4
Title = strRez " *** ตำแหน่ง
กรณีที่ 5
แผนก = strRez " *** แผนก
กรณีที่ 6
บริษัท = strRez " *** องค์กร
“กรณีที่ 7
"ผู้จัดการ = strRez" *** ผู้จัดการ
“กรณีที่ 8
"OfficeRoom = strRez " *** ห้อง
สิ้นสุดการเลือก
strRez = ""
strCh = ""
ซี = ซี + 1
อื่น
strRez = strRez + strCh
สิ้นสุดถ้า
ต่อไป
strRez = ""
strCh = ""
ซี=0
ตั้งค่า objRoot = GetObject("LDAP://RootDSE")
ตั้ง objADSystemInfo = CreateObject("ADSystemInfo")
DomainDNSName = objADSystemInfo.DomainDNSName
DomainDN = objRoot.Get("DefaultNamingContext")
ContainerDN = "ou="&บริษัท & "," & DomainDN
PName = ชื่อผู้ใช้ & "@" & DomainDNSName ""@snb.local"
"!!! สำคัญ !!!*** เราระบุ OU ที่สร้างขึ้นก่อนหน้านี้ซึ่งผู้ใช้ใหม่รีบเร่ง *******
ตั้งค่า objOU = GetObject("LDAP://" & ContainerDN)
"*********************** สร้างบัญชีผู้ใช้โดเมน ****************** * ****
ตั้งค่า objUser = objOU.Create("User", "cn=" + UserName)
" **** เข้าสู่ระบบ *****
objUser.ใส่ "sAMAccountName", ชื่อผู้ใช้
objUser.SetInfo
" ****** รหัสผ่าน *******
ตั้ง objUser = GetObject("LDAP://cn=" + ชื่อผู้ใช้ + "," + ContainerDN)
objUser.SetPassword UserPassword
" ******* อัพ **********
objUser.ใส่ "userPrincipalName", pName
"****** ปิดการใช้งานบัญชี *******
objUser.AccountDisabled = จริง
" ******** ชื่อ *********
objUser.ใส่ "givenName", FirstName
" ***** นามสกุล *********
objUser.ใส่ "sn", นามสกุล
" ***** ชื่อที่แสดง ******
objUser.Put "displayName", นามสกุล & " " & ชื่อ
“อักษรย่อ
objUser.Put "ชื่อย่อ" ซ้าย (ชื่อ 1) & "." "& ซ้าย(นามสกุล,1)
" ***** ตำแหน่งงาน ******
objUser.Put "ชื่อ", ชื่อ
" ***** แผนก ******
objUser.Put "แผนก", แผนก
" องค์กร
objUser.Put "บริษัท" บริษัท
" หัวหน้างาน
"objUser.Put"ผู้จัดการ" ผู้จัดการ
" ห้อง
"objUser.Put "physicalDeliveryOfficeName", OfficeRoom
" ***** กำหนดให้ต้องเปลี่ยนรหัสผ่านเมื่อเข้าสู่ระบบครั้งถัดไป ***
objUser.ใส่ "pwdLastSet", CLng(0)
ObjUser.SetInfo
"WScript.Echo "ผู้ใช้ - " + ชื่อผู้ใช้ + " เพิ่มในโฆษณา"
วนซ้ำ
WScript.Echo "เพิ่มผู้ใช้ใน AD"
objFile ปิด
รหัสเพิ่มเติมที่จะแทรกลงในสคริปต์:
"โฮมไดเร็กตอรี่
"objUser.Put "HomeDirectory", strHomeDirPath
"กล่องจดหมาย
"objUser.Put "mailNickname", strName
“ตัวอย่างเพิ่มเติมบางส่วน:
"ObjUser.Put "คำอธิบาย", "ปีที่ 2"
"objUser.Put "physicalDeliveryOfficeName", sOfficeName
"objUser.Put "ProfilePath", sScPath
"sHDrive objUser ใส่ "HomeDrive", "Z"
"objUser.Put "TerminalServicesProfilePath", sTermProf
"objUser.Put "TerminalServicesHomeDirectory", sTermHDir
รหัสจาก โปรแกรมแก้ไขข้อความคุณต้องบันทึกด้วยนามสกุล .vbs
สคริปต์ถูกเปิดใช้งานโดยการส่งพารามิเตอร์จากไฟล์
ตัวอย่างเช่น script.vbs users.txt
, ที่ไหน
script.vbs - สคริปต์นั้นเอง
users.txt - ไฟล์ที่มีข้อมูลอินพุต
การรันสคริปต์ใช้เวลาไม่กี่วินาทีพร้อมผลลัพธ์ทันที
ดังที่คุณเห็นจากโค้ด หากคุณไม่ใส่เครื่องหมายข้อคิดเห็นอีกสองสามบรรทัดและทำการเพิ่มเติมในไฟล์ พารามิเตอร์อินพุตจากนั้นคุณสามารถป้อนผู้จัดการและหมายเลขห้อง "อัตโนมัติ" ได้ สามารถพัฒนาสคริปท์ได้ไม่จำกัด เช่น เพิ่มความสามารถในการป้อนข้อมูลในช่อง เช่น “โทรศัพท์” ในลักษณะเดียวกัน
ในฐานะโปรแกรมแก้ไขข้อความสำหรับ Windows ฉันสามารถแนะนำ Notepad++ ฟรีและใช้งานได้ดีมาก
หนึ่งใน ลิงค์ที่เป็นประโยชน์โดยมีสคริปต์ใน VBS
ในตัวมาก รุ่นที่เรียบง่ายการสร้างบัญชีผู้ใช้ใหม่จะใช้เวลาประมาณสองสามนาที เปิดสแน็ปอิน "Active Directory - ผู้ใช้และคอมพิวเตอร์" ไปที่หน่วยองค์กรที่ต้องการ (OU) เลือกใหม่ - ผู้ใช้จากเมนูป้อนชื่อผู้ใช้และรหัสผ่าน เพียงเท่านี้บัญชีก็พร้อมคุณก็สามารถทำงานได้
ตอนนี้ลองจินตนาการว่าด้วยวิธีนี้คุณไม่จำเป็นต้องสร้างบัญชี แต่พูด 50 บัญชีและทำสิ่งนี้เป็นประจำ
เนื่องจากไม่น่าเป็นไปได้ที่ใครจะชอบใช้เวลาพิมพ์ข้อมูลรับรองผู้ใช้อย่างโง่เขลา เราจึงได้ข้อสรุปง่ายๆ - กระบวนการสร้างผู้ใช้เป็นสิ่งที่จำเป็น อัตโนมัติ- และ PowerShell จะช่วยเราในเรื่องนี้
ลองจินตนาการว่าเราจำเป็นต้องสร้างบัญชีประเภทเดียวกันจำนวน 50 บัญชีอย่างเร่งด่วน มาเขียนสคริปต์ต่อไปนี้:
$ชื่อผู้ใช้=″นักเรียน″
$นับ=1..50
foreach ($i เป็น $count)
( ผู้ใช้โฆษณาใหม่ -ชื่อ $ชื่อผู้ใช้$i -Path $org -passThru )
เราเรียกใช้สคริปต์ และผู้ใช้ 50 รายที่มีชื่อ Student1-student50 จะถูกสร้างขึ้นในแผนกนักเรียน ตามค่าเริ่มต้น บัญชีจะถูกปิดใช้งาน และผู้ใช้จะยังคงถูกบังคับให้ติดต่อคุณเพื่อเปิดใช้งาน ลองหลีกเลี่ยงสิ่งนี้:
$ชื่อผู้ใช้=″นักเรียน″
$นับ=1..50
foreach ($i เป็น $count)
-AccountPassword (แปลงเป็น SecureString "p@$$w0rd" -AsPlainText -force) -passThru )
ที่นี่เราสร้าง บัญชีใช้งานและตั้งค่าแล้ว p@$$w0rdเป็นรหัสผ่านเริ่มต้นและระบุว่าต้องเปลี่ยนเมื่อเข้าสู่ระบบครั้งแรก เพื่อหลีกเลี่ยงการส่งรหัสผ่านไปที่ แบบฟอร์มเปิดให้ใช้ cmdlet ConvertTo-SecureStringซึ่งแปลว่า สตริงข้อความในรูปแบบที่ปลอดภัย
ตอนนี้เรามาทำให้สคริปต์ของเรามีความยืดหยุ่นมากขึ้นอีกหน่อย การใช้ cmdlet อ่าน-Hostมาทำให้สคริปต์ของเราขอชื่อและจำนวนผู้ใช้:
$org=″OU=นักเรียน,DC=contoso,DC=com″
$count=1..$หมายเลข
foreach ($i เป็น $count)
( ผู้ใช้โฆษณาใหม่ -ชื่อ $ชื่อผู้ใช้$i -Path $org
สร้างบัญชีแล้วและผู้ใช้สามารถเข้าสู่ระบบและทำงานได้ ตอนนี้จำเป็นต้องกำหนดค่า - เพิ่มในกลุ่มความปลอดภัยที่ลงทะเบียนแล้ว โฮมไดเร็กทอรี, สคริปต์เข้าสู่ระบบ ฯลฯ คุณสามารถทำได้โดยใช้เทมเพลต พูดง่ายๆ ก็คือ เราสร้างบัญชีเทมเพลต ปรับแต่งบัญชีให้สมบูรณ์ จากนั้นจึงสร้างสำเนาตามจำนวนที่ต้องการโดยใช้พารามิเตอร์ -ตัวอย่าง :
$template = Get-AdUser -Identity “นักเรียน”
$org=″OU=นักเรียน,DC=contoso,DC=com″
$username=Read-Host ″ใส่ชื่อ″
$number=Read-Host ″ใส่หมายเลข″
$count=1..$หมายเลข
foreach ($i เป็น $count)
( ผู้ใช้โฆษณาใหม่ - ชื่อ $username$i -UserPrincipalName $username$i -Path $org -Instance `
$แม่แบบ
-เปิดใช้งาน $True -ChangePasswordAtLogon $true `
-AccountPassword (แปลงเป็น SecureString ″p@$$w0rd″ -AsPlainText -force) -passThru )
อีกวิธีหนึ่งในการสร้างบัญชีอัตโนมัติคือการนำเข้าจากไฟล์ CSV วิธีนี้เหมาะสมหากคุณได้รับรายชื่อผู้ใช้ และพวกเขาจำเป็นต้องสร้างบัญชีตามรายการนี้ ตามกฎแล้ว รายการที่คล้ายกันถูกสร้างขึ้นใน Excel ในรูปแบบของตารางที่มีคอลัมน์ ชื่อ ตำแหน่ง แผนก ฯลฯ ประมาณนี้
หน้าที่ของเราคือบันทึกในรูปแบบ CSV จากนั้นระบุลงในสคริปต์โดยใช้ cmdlet นำเข้า CSVหากไฟล์ CSV ของคุณมีคอลัมน์ที่จำเป็นทั้งหมด ใหม่-ADUser จะเชื่อมโยงพวกเขากับคุณสมบัติผู้ใช้ที่ถูกต้องโดยอัตโนมัติ:
$csv = Import-CSV -Path ″C:\scripts\users.csv″
$csv | ผู้ใช้โฆษณาใหม่ -Path $org
-เปิดใช้งาน $True -ChangePasswordAtLogon $true `
- รหัสผ่านบัญชี (แปลงเป็น SecureString ″p@$$w0rd″ -AsPlainText -force) -passThru
วิธีนี้ทำให้คุณสามารถนำเข้าผู้ใช้ใหม่หลายร้อยรายได้ภายในไม่กี่วินาที แต่วิธีการนี้มีข้อผิดพลาดอยู่:
- ชื่อคอลัมน์ควร อย่างเต็มที่ตรงกับชื่อของคุณลักษณะผู้ใช้ เช่น ชื่อ องค์กร ตำแหน่ง ไม่เช่นนั้นจะไม่มีอะไรทำงาน รายการเต็มสามารถดูคุณสมบัติได้
- ในตาราง จำเป็นคุณต้องระบุ SamAccountName มิฉะนั้นคุณจะได้รับข้อผิดพลาดที่ระบุว่ามีบัญชีอยู่แล้ว
- หากตั้งค่าแอตทริบิวต์ในเค้าโครงภาษารัสเซียตามตัวอย่างของเรา ปัญหาในการเข้ารหัสอาจเกิดขึ้นได้ สิ่งที่ช่วยฉันแก้ปัญหานี้ได้คือการแยกเนื้อหาของไฟล์ CSV โดยใช้ cmdlet รับเนื้อหาและบันทึกเป็นไฟล์ CSV อื่น: รับเนื้อหา users.csv >> users1.csvหลังจากนั้นคุณลักษณะภาษารัสเซียทั้งหมดก็เริ่มแสดงได้ตามปกติ
และอีกจุดสำคัญ: เพื่อเรียกใช้ cmdlet ใหม่-ADUserคุณต้องนำเข้าโมดูล Active Directory สำหรับ PowerShell ก่อน นี้จะกระทำโดยทีมงาน นำเข้าโมดูล ActiveDirectory,คุณสามารถวางบรรทัดนี้ลงในสคริปต์ได้ . ข้อยกเว้นคือเมื่อคุณเรียกใช้สคริปต์จากสแน็ปอินพิเศษ " โมดูลที่ใช้งานอยู่ไดเรกทอรีสำหรับ Windows PowerShell"
เราสร้างบัญชีอัตโนมัติด้วย โดยใช้ PowerShell
ในรูปแบบที่ง่ายที่สุด การสร้างบัญชีผู้ใช้ใหม่จะใช้เวลาประมาณสองสามนาที เปิดสแนปอิน "Active Directory - ผู้ใช้และคอมพิวเตอร์" ไปที่หน่วยองค์กรที่ต้องการ (OU) เลือกใหม่ - ผู้ใช้จากเมนู ป้อนชื่อผู้ใช้และรหัสผ่าน เพียงเท่านี้บัญชีก็พร้อมคุณก็สามารถทำงานได้
ตอนนี้ลองจินตนาการว่าด้วยวิธีนี้คุณไม่จำเป็นต้องสร้างบัญชี แต่พูด 50 บัญชีและทำสิ่งนี้เป็นประจำ
เนื่องจากไม่น่าเป็นไปได้ที่ใครจะชอบใช้เวลาพิมพ์ข้อมูลรับรองผู้ใช้อย่างโง่เขลา เราจึงได้ข้อสรุปง่ายๆ - กระบวนการสร้างผู้ใช้จะต้อง อัตโนมัติ- และ PowerShell จะช่วยเราในเรื่องนี้
ลองจินตนาการว่าเราจำเป็นต้องสร้างบัญชีประเภทเดียวกันจำนวน 50 บัญชีอย่างเร่งด่วน มาเขียนสคริปต์ต่อไปนี้:
$ชื่อผู้ใช้=″นักเรียน″
$นับ=1..50
foreach ($i เป็น $count)
( ผู้ใช้โฆษณาใหม่ -ชื่อ $ชื่อผู้ใช้$i -Path $org -passThru )
เราเรียกใช้สคริปต์ และผู้ใช้ 50 รายที่มีชื่อ Student1-student50 จะถูกสร้างขึ้นในแผนกนักเรียน ตามค่าเริ่มต้น บัญชีจะถูกปิดใช้งาน และผู้ใช้จะยังคงถูกบังคับให้ติดต่อคุณเพื่อเปิดใช้งาน ลองหลีกเลี่ยงสิ่งนี้:
$org=″OU=นักเรียน,DC=contoso,DC=com″
$ชื่อผู้ใช้=″นักเรียน″
$นับ=1..50
foreach ($i เป็น $count)
-AccountPassword (แปลงเป็น SecureString "p@$$w0rd" -AsPlainText -force) -passThru )
ที่นี่เราสร้างบัญชีที่ใช้งานและตั้งค่าไว้แล้ว p@$$w0rdเป็นรหัสผ่านเริ่มต้นและระบุให้เปลี่ยนเมื่อเข้าสู่ระบบครั้งแรก เพื่อหลีกเลี่ยงการส่งรหัสผ่านในรูปแบบข้อความที่ชัดเจน เราใช้ cmdlet ConvertTo-SecureStringซึ่งแปลงสตริงข้อความเป็นรูปแบบที่มีการป้องกัน
ตอนนี้เรามาทำให้สคริปต์ของเรามีความยืดหยุ่นมากขึ้นอีกหน่อย การใช้ cmdlet อ่าน-Hostมาทำให้สคริปต์ของเราขอชื่อและจำนวนผู้ใช้:
$org=″OU=นักเรียน,DC=contoso,DC=com″
$count=1..$หมายเลข
foreach ($i เป็น $count)
( ผู้ใช้โฆษณาใหม่ - ชื่อ $ชื่อผู้ใช้$i -Path $org - เปิดใช้งาน $True -ChangePasswordAtLogon $true `
สร้างบัญชีแล้วและผู้ใช้สามารถเข้าสู่ระบบและทำงานได้ ตอนนี้จำเป็นต้องกำหนดค่า - เพิ่มในกลุ่มความปลอดภัย, ลงทะเบียนในโฮมไดเร็กตอรี่, สคริปต์การเข้าสู่ระบบ ฯลฯ คุณสามารถทำได้โดยใช้เทมเพลต พูดง่ายๆ ก็คือ เราสร้างบัญชีเทมเพลต ปรับแต่งอย่างเต็มที่ จากนั้นจึงสร้างสำเนาตามจำนวนที่ต้องการโดยใช้พารามิเตอร์ -ตัวอย่าง :
$template = Get-AdUser -Identity “นักเรียน”
$username=Read-Host ″ใส่ชื่อ″
$number=Read-Host ″ใส่หมายเลข″
$count=1..$หมายเลข
foreach ($i เป็น $count)
( ผู้ใช้โฆษณาใหม่ - ชื่อ $username$i -UserPrincipalName $username$i -Path $org -Instance `
$template -เปิดใช้งาน $True -ChangePasswordAtLogon $true `
-AccountPassword (แปลงเป็น SecureString ″p@$$w0rd″ -AsPlainText -force) -passThru )
อีกวิธีหนึ่งในการสร้างบัญชีอัตโนมัติคือการนำเข้าจากไฟล์ CSV วิธีนี้เหมาะสมหากคุณได้รับรายชื่อผู้ใช้ และพวกเขาจำเป็นต้องสร้างบัญชีตามรายการนี้ ตามกฎแล้วรายการดังกล่าวจะถูกสร้างขึ้นใน Excel ในรูปแบบของตารางที่มีคอลัมน์ชื่อตำแหน่งแผนก ฯลฯ ในลักษณะนี้:
หน้าที่ของเราคือบันทึกในรูปแบบ CSV จากนั้นระบุลงในสคริปต์โดยใช้ cmdlet นำเข้า CSVหากไฟล์ CSV ของคุณมีคอลัมน์ที่จำเป็นทั้งหมด ใหม่-ADUser จะเชื่อมโยงพวกเขากับคุณสมบัติผู้ใช้ที่ถูกต้องโดยอัตโนมัติ:
$csv = Import-CSV -Path ″C:\scripts\users.csv″
$csv | ผู้ใช้โฆษณาใหม่ -เส้นทาง $org -เปิดใช้งาน $True -ChangePasswordAtLogon $true `
- รหัสผ่านบัญชี (แปลงเป็น SecureString ″p@$$w0rd″ -AsPlainText -force) -passThru
วิธีนี้ทำให้คุณสามารถนำเข้าผู้ใช้ใหม่หลายร้อยรายได้ภายในไม่กี่วินาที แต่วิธีการนี้มีข้อผิดพลาดอยู่:
- ชื่อคอลัมน์ควร อย่างเต็มที่ตรงกับชื่อของคุณลักษณะผู้ใช้ เช่น ชื่อ องค์กร ตำแหน่ง ไม่เช่นนั้นจะไม่มีอะไรทำงาน สามารถดูรายการแอตทริบิวต์ทั้งหมดได้
- ในตาราง จำเป็นคุณต้องระบุ SamAccountName มิฉะนั้นคุณจะได้รับข้อผิดพลาดที่ระบุว่ามีบัญชีอยู่แล้ว
- หากตั้งค่าแอตทริบิวต์ในเค้าโครงภาษารัสเซียตามตัวอย่างของเรา ปัญหาในการเข้ารหัสอาจเกิดขึ้นได้ สิ่งที่ช่วยฉันแก้ปัญหานี้ได้คือการแยกเนื้อหาของไฟล์ CSV โดยใช้ cmdlet รับเนื้อหาและบันทึกเป็นไฟล์ CSV อื่น: รับเนื้อหา users.csv >> users1.csvหลังจากนั้นคุณลักษณะภาษารัสเซียทั้งหมดก็เริ่มแสดงได้ตามปกติ
โดยสรุปประเด็นสำคัญบางประการ:
เพื่อเรียกใช้ cmdlet ใหม่-ADUserคุณต้องนำเข้าโมดูล Active Directory สำหรับ PowerShell ก่อน นี้จะกระทำโดยทีมงาน นำเข้าโมดูล ActiveDirectory,คุณสามารถวางบรรทัดนี้ลงในสคริปต์ได้ . ข้อยกเว้นคือเมื่อคุณเรียกใช้สคริปต์จากสแน็ปอิน Active Directory Module พิเศษสำหรับ Windows PowerShell
โมดูล ActiveDirectory มีอยู่บนเซิร์ฟเวอร์ภายใต้ การควบคุมหน้าต่างเซิร์ฟเวอร์ 2008R2/2012 รวมถึงผู้ปฏิบัติงานด้วย สถานีวินโดวส์ 7/8 วิ แพ็คเกจที่ติดตั้งการบริหารระบบ RSAT
โมดูล ActiveDirectory ต้องใช้ Active Directory Web Service (ADWS) ซึ่งมีเว็บอินเตอร์เฟสสำหรับการเข้าถึงบริการไดเร็กทอรี ตามค่าเริ่มต้น บริการนี้จะได้รับการติดตั้งโดยอัตโนมัติเมื่อคุณเพิ่มบทบาทเซิร์ฟเวอร์ AD DS และ AD LDS บนเซิร์ฟเวอร์ที่ใช้ Windows Server 2008R2 และใหม่กว่า สำหรับ Windows Server 2003\2008 สามารถติดตั้งบริการนี้แยกต่างหากได้โดยการดาวน์โหลด
สคริปต์ต้องผ่านเซิร์ฟเวอร์ทั้งหมดจาก Active Directory ดูที่องค์ประกอบ กลุ่มท้องถิ่น ผู้ดูแลระบบและบันทึกรายการลงในไฟล์ จะมีประโยชน์ในการรักษาความปลอดภัยในสภาพแวดล้อมด้วย จำนวนมากเซิร์ฟเวอร์
สคริปต์ตัวอย่าง
คำอธิบายสคริปต์
1 - 4 | เรากำหนดตัวแปรเพื่อใช้ต่อไป |
1 | พาธไปยังไฟล์ที่จะบันทึกผลลัพธ์ |
2 | คอนเทนเนอร์ใน Active Directory ที่ประกอบด้วยบัญชีคอมพิวเตอร์เซิร์ฟเวอร์ |
3 | เรายังสร้างอาร์เรย์แฮชด้วย ใน Powershell จะต้องดำเนินการนี้ก่อนใช้งาน |
4 | สร้างตัวแปรว่าง เราจะกรอกรายชื่อผู้ใช้ที่เป็นสมาชิกของกลุ่มผู้ดูแลระบบ |
6 - 21 | ฟังก์ชั่นการค้นหาผู้ใช้ในกลุ่มผู้ดูแลระบบ |
7 | ชื่อเซิร์ฟเวอร์จะถูกส่งไปยังฟังก์ชัน เราจะบันทึกมันไว้ในตัวแปร $strcomputer |
8 - 12 | เราสร้างข้อยกเว้นสำหรับการดำเนินการที่กำลังดำเนินการ หากคำขอไม่เสร็จสมบูรณ์อย่างถูกต้อง ชื่อเซิร์ฟเวอร์จะแสดงบนหน้าจอ |
9 | เราเข้าถึงวัตถุ win32_groupuser ใน WMI พร้อมรายการกลุ่ม Windows |
11 | หากการเรียก WMI ล้มเหลว (ส่วนใหญ่มักเกิดจากการไม่พร้อมใช้งานของ RPC) ชื่อของเซิร์ฟเวอร์ที่คุณกำลังเข้าถึงจะปรากฏบนหน้าจอ ในขณะนี้อยู่ระหว่างดำเนินการอุทธรณ์ |
13 | มีการตรวจสอบเงื่อนไขการมีอยู่ของตัวแปรพร้อมรายชื่อกลุ่มที่ได้รับในบรรทัดที่ 9 |
14 | เราสร้างตัวแปรที่จะรวมรายชื่อผู้ใช้ของผู้ดูแลระบบหรือกลุ่มผู้ดูแลระบบ (บนเซิร์ฟเวอร์ที่มีเวอร์ชันภาษาอังกฤษ) |
15 - 18 | เราลบผู้ใช้ออกจากกลุ่มผู้ดูแลระบบและลบข้อมูลบริการที่ไม่จำเป็น |
19 | ฟังก์ชั่นส่งคืนรายชื่อผู้ใช้ |
23 | เราสร้างตัวแปรและวางรายการคอมพิวเตอร์ที่เราจะค้นหาผู้ดูแลระบบไว้ในนั้น ใน ในตัวอย่างนี้ซึ่งเป็นคอมพิวเตอร์จาก Active Directory |
24 - 29 | เราแยกเซิร์ฟเวอร์ทีละเครื่องที่ได้รับในบรรทัดที่ 23 |
25 | เราเรียกใช้ฟังก์ชันและส่งผ่านชื่อเซิร์ฟเวอร์ ผลลัพธ์ของงานถูกเขียนลงในตัวแปร $UserList |
26 | เงื่อนไขจะตรวจสอบว่ามีค่าอยู่ในตัวแปร $UserList หรือไม่ |
27 | หากมีรายชื่อผู้ใช้ ให้เพิ่มลงในอาร์เรย์ $AdminList |
31 - 35 | เราดำเนินการผ่านอาร์เรย์ $AdminList และเพิ่มลงในรายชื่อเซิร์ฟเวอร์และผู้ดูแลระบบสำหรับพวกเขา |
32 | เราสร้างตัวแปรที่เราเขียนชื่อเซิร์ฟเวอร์ |
33 | เราสร้างตัวแปรโดยเราจะวางรายชื่อผู้ใช้สำหรับเซิร์ฟเวอร์จากบรรทัดที่ 32 |
34 | ตัวแปร $ToCSV มีบรรทัดสำหรับไฟล์ในอนาคต แต่ละบรรทัดคือชื่อเซิร์ฟเวอร์และรายชื่อผู้ดูแลระบบ คั่นด้วยเครื่องหมายอัฒภาค |
37 - 39 | เราตรวจสอบการมีอยู่ของไฟล์ในระบบที่เราต้องการวางผลลัพธ์ของสคริปต์ หากมีไฟล์อยู่ ให้ลบออก |
41 | เราสร้างไฟล์อัพโหลดและวางรายชื่อผู้ดูแลระบบไว้ในนั้น |