สร้างบัญชีอัตโนมัติโดยใช้ PowerShell คุณต้องเริ่มต้นอะไรบ้าง?

2 กรกฎาคม 2555 เวลา 23:09 น

วิธี “โยน” ผู้ใช้ใหม่ 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 เราสร้างไฟล์อัพโหลดและวางรายชื่อผู้ดูแลระบบไว้ในนั้น