การโยกย้ายเพื่อแลกเปลี่ยนออนไลน์ด้วย PowerShell
ในส่วนแรกของชุดนี้ การย้ายกล่องจดหมายไปยัง Exchange Online ด้วย PowerShell - ส่วนที่ 1 เราได้กล่าวถึงวิธีการเตรียมการสำหรับการย้ายกล่องจดหมาย ซึ่งรวมถึงชุดการตรวจสอบล่วงหน้าสำหรับการย้ายกล่องจดหมาย ตอนนี้เราไปยังรหัส PowerShell สำหรับการย้ายกล่องจดหมายจาก Exchange Server ไปยัง Exchange Online เราจะอธิบายเกี่ยวกับ cmdlets คำขอย้ายต่างๆ และวิธีที่เราสามารถใช้เพื่อดำเนินการย้ายข้อมูลหลักของเรา ไปที่รหัส!
การดำเนินงาน
ในส่วนนี้ เราจะกล่าวถึงการดำเนินการต่างๆ อย่างรวดเร็วที่สามารถทำได้ด้วยกล่องจดหมายเมื่อจัดการการย้ายไปยัง Exchange Online การดำเนินการเหล่านี้จะอยู่ในรูปแบบของ PowerShell cmdlets ที่เราจะต้องเรียกใช้
- New-MoveRequest: สร้างคำขอย้ายเริ่มต้นสำหรับการย้ายกล่องจดหมายจาก Exchange Server ไปยัง Exchange Online
- Suspend-MoveRequest: ระงับการย้ายข้อมูลที่ทำงานอยู่ และทำให้การย้ายข้อมูลอยู่ในสถานะถูกระงับหรือหยุดชั่วคราว
- Set-MoveRequest: เปลี่ยนลักษณะบางส่วนของคำขอย้ายที่สามารถกำหนดค่าได้
- Remove-MoveRequest: ลบคำขอย้ายที่ระบุ และข้อมูลกล่องจดหมายใด ๆ ที่ย้ายจะถูกลบทิ้ง
- Get-MoveRequest: แสดงรายการคำขอย้ายที่ระบุ
การสร้างคำขอย้ายใหม่
เมื่อย้ายกล่องจดหมายไปยัง Exchange Online มีบางสิ่งที่คุณต้องการเพื่อสร้างคำขอย้าย
ขั้นแรก เราต้องการที่อยู่อีเมลของกล่องจดหมาย ซึ่งเราจะเรียกว่า ข้อมูลระบุตัวตน
ต่อไป เราต้องการ Migration Endpoint ซึ่งเป็นจุดเชื่อมต่อ HTTPS ที่เปิดไปยัง Exchange Servers ในพื้นที่ของคุณสำหรับ Exchange Online เพื่อเริ่มต้นการย้ายและดึงข้อมูล
TargetDomain เป็นสิ่งจำเป็นเนื่องจากเป็นโดเมนผู้เช่าของคุณ ซึ่งโดยปกติจะอยู่ในรูปแบบนี้
ข้อมูลประจำตัว ในกรณีนี้ ต้องใช้ข้อมูลรับรอง Active Directory ของคุณ เพื่อให้ Exchange Online สร้างการเชื่อมต่อ/การเชื่อมต่อการโยกย้าย
เมื่อสร้างคำขอย้าย เรายังมีตัวเลือกให้การย้ายดำเนินไปจนเสร็จสิ้นหรือระงับชั่วคราวเมื่อการซิงค์เสร็จสมบูรณ์ ข้อดีของตัวเลือกหลังคือเราสามารถเตรียมการย้ายกล่องจดหมายล่วงหน้าสำหรับเหตุการณ์การย้ายกล่องจดหมายเฉพาะได้
หลังจากการซิงค์ครั้งแรก การย้ายกล่องจดหมายของสเตจจะซิงค์วันละครั้งเพื่อให้แน่ใจว่ามีการเปลี่ยนแปลงล่าสุดในสำเนากล่องจดหมายใน Exchange Online เมื่อเราพร้อมที่จะย้ายให้เสร็จสิ้น ข้อมูลเดียวที่จะซิงค์คือการเปลี่ยนแปลงนับตั้งแต่การซิงค์ครั้งล่าสุด ซึ่งโดยปกติจะมีขนาดเล็ก และกระบวนการเสร็จสิ้นจะเร็วขึ้น เราสามารถใช้สวิตช์ 'SuspendWhenReadyToComplete' สำหรับสิ่งนี้ใน New-MoveRequest cmdlet
มาสร้างตัวอย่างคำขอย้าย:
$Mailbox = "< Mailbox PrimarySMTPAddress>"$EndPoint = "mail.domain.com"$TargetDomain = "<tenant>.onmicrosoft.com"$OPCred = Get-Credentialsเมื่อนำตัวแปรเหล่านี้ทั้งหมดมารวมกัน เราจะได้ New-MoveRequest:
New-MoveRequest -Identity $Mailbox -Remote -RemoteHostName $Endpoint -TargetDeliveryDomain $TargetDomain -RemoteCredential $OPCred -SuspendWhenReadyToComplete -ErrorAction STOPการใช้ตัวแปรยังทำให้กระบวนการสามารถปรับขนาดได้ โดยสามารถจัดกลุ่มกล่องจดหมายเป็นไฟล์ CSV เป็นรายการที่อยู่ SMTP หลักได้ การวนซ้ำ CSV ด้วย Foreach loop ช่วยให้เราสามารถเรียกใช้ one-liner เหล่านี้ได้มากเท่าที่เราต้องการย้ายกล่องจดหมายในไฟล์ CSV
กรอกคำร้องขอย้าย
เมื่อจัดเตรียมคำขอย้าย และเมื่อการซิงค์ (รายวันหรือเริ่มต้น) เสร็จสมบูรณ์ คำขอย้ายสำหรับกล่องจดหมายจะอยู่ในสถานะถูกระงับ หากเราต้องการย้ายให้เสร็จสิ้นและโอนกล่องจดหมายไปยัง Exchange Online โดยสมบูรณ์ เราจำเป็นต้องดำเนินการคำขอย้ายต่อ การใช้ cmdlet Resume-MoveRequest เป็นวิธีที่เราสามารถทำได้
บรรทัดเดียวสำหรับการร้องขอเรซูเม่นั้นง่ายกว่ามากเนื่องจากการทำงานหนักในการสร้างคำขอย้ายได้เสร็จสิ้นไปแล้ว ซับในหนึ่งเรซูเม่มีลักษณะดังนี้:
Resume-MoveRequest $Mailbox -Confirm:$Falseเกณฑ์เดียวที่จำเป็นคือที่อยู่ SMTP หลักของกล่องจดหมายที่เราต้องการกรอก
การระงับคำขอย้าย
ตอนนี้การย้ายกล่องจดหมายไม่ราบรื่นทั้งหมด บางครั้งคำขอย้ายใช้แบนด์วิดท์มากเกินไป และอาจส่งผลกระทบต่อ WAN หรือลิงก์อินเทอร์เน็ตของบริษัทไปยังจุดที่โครงการหรือผลประโยชน์ทางธุรกิจอื่น ๆ ได้รับผลกระทบ ถ้ากล่องจดหมายของเราเคลื่อนไหวเต็มที่ เราจะลดผลกระทบได้อย่างไร เรามี cmdlet ชื่อ Suspend-MoveRequest
บรรทัดเดียวสำหรับคำขอ Suspend นั้นง่ายกว่ามาก เนื่องจากการทำงานหนักในการสร้างคำขอย้ายได้เสร็จสิ้นไปแล้ว สายการบินหนึ่ง Suspend มีลักษณะดังนี้:
Suspend-MoveRequest $SMTPAddress -Confirm:$Falseเกณฑ์เดียวที่จำเป็นคือที่อยู่ SMTP หลักของกล่องจดหมายที่เราต้องการกรอก
การลบคำขอย้าย
ในบางครั้ง คำขอย้ายกล่องจดหมายอาจจำเป็นต้องถูกเอาออก อาจเป็นเพราะพวกเขาถูกสร้างขึ้นโดยไม่ได้ตั้งใจ หรือผู้ใช้ไม่ต้องการถูกย้ายเนื่องจากการขึ้นต่อกันอื่นๆ หรือบางทีเราอาจจำเป็นต้องสำรองข้อมูลชุดการโยกย้าย และคำขอใดๆ ที่เกี่ยวข้องจำเป็นต้องถูกลบออก ด้วยเหตุนี้ Microsoft จึงมี Remove-MoveRequest cmdlet เพื่อจัดการกับสถานการณ์เหล่านี้ เมื่อเราเรียกใช้ cmdlet เรากำลังลบคำขอย้าย และที่แบ็กเอนด์ Microsoft จะลบข้อมูลที่ซิงค์ทั้งหมดเพื่อล้างข้อมูลในภายหลัง
บรรทัดเดียวสำหรับ ReMove Request นั้นง่ายกว่ามาก เนื่องจากการทำงานหนักในการสร้าง Move Request ได้สำเร็จไปแล้ว Remove one-liner มีลักษณะดังนี้:
Remove-MoveRequest $SMTPAddress -Confirm:$Falseเกณฑ์เดียวที่จำเป็นคือที่อยู่ SMTP หลักของกล่องจดหมายที่เราต้องการกรอก
แผนสำรอง
เปลี่ยนใจ? เราไม่ต้องการกล่องจดหมายทั้งหมดของเราใน Exchange Online เพื่อให้ฟีเจอร์ที่ยอดเยี่ยมทั้งหมดที่ Microsoft สร้างขึ้นนั้นพร้อมใช้งานสำหรับผู้ใช้ของเราใช่หรือไม่ แน่นอนว่าเราทำ แต่จะเกิดอะไรขึ้นหากเกิดปัญหาร้ายแรงขึ้น หรือเราไม่ได้รับการสนับสนุนที่จำเป็นสำหรับ Office 365 หรือผู้นำคนใหม่ในด้านไอที (ลองนึกถึง CIO) ตัดสินใจว่าระบบภายในองค์กรคือหนทางสู่อนาคต … ถ้าอย่างนั้น เราจำเป็นต้องมีแผนสำรองบางอย่าง สำหรับงานส่วนใหญ่ หากคำขอย้ายยังไม่เสร็จสิ้น เราสามารถหยุดหรือระงับคำขอย้ายแล้วลบคำขอย้ายนั้นได้ ในการดำเนินการดังกล่าว เราจะปล่อยให้กล่องจดหมายอยู่ในสถานที่และไม่ถูกย้ายไปยัง Exchange Online อย่างไรก็ตาม จะเกิดอะไรขึ้นถ้าเราย้ายกล่องจดหมายไปที่ Exchange Online และเราจำเป็นต้องย้ายกลับ
เราต้องทำอะไรเพื่อย้ายกลับ
การย้ายกลับไปใช้ Exchange ภายในองค์กรจำเป็นต้องมีรายละเอียดและความรู้เกี่ยวกับเซิร์ฟเวอร์ Exchange ของคุณ เราต้องการที่อยู่ SMTP ของกล่องจดหมาย ฐานข้อมูลกล่องจดหมายเพื่อใส่กล่องจดหมายเมื่อถูกคัดลอกกลับไปยัง Exchange ซึ่งเป็นอุปกรณ์ปลายทางที่จะเชื่อมต่อ (อันเดียวกับที่เราใช้ในการย้ายกล่องจดหมายไปยัง Exchange Online) โดเมนเป้าหมาย (โดเมนของ ที่อยู่ SMTP หลักของคุณจะทำ) ข้อมูลรับรองภายในองค์กร ก็แค่นั้นแหละ:
$Mailbox = "< Mailbox PrimarySMTPAddress>"$EndPoint = "mail.domain.com"$TargetDomain = "<yourdomain.com>"$Database = "<Database for mailbox>"$OpCred = Get-Credentialนอกจากนี้เรายังจำเป็นต้องมีสวิตช์ขาออกเพื่อให้แน่ใจว่า Exchange Online รู้ว่าคำขอกำลังส่งกล่องจดหมายออกจาก Exchange Online
New-MoveRequest -identity $Mailbox -OutBound -RemoteTargetDatabase $Database -RemoteHostName $Endpoint -RemoteCredential $OPCred -TargetDeliveryDomain $TargetDomainมีข้อควรระวังบางประการในเรื่องนี้ เนื่องจากบางครั้งการระงับจะทำให้กล่องจดหมายไม่สามารถเคลื่อนย้ายได้ และคุณอาจต้องยกเลิกการระงับนั้นแล้วจึงย้ายกล่องจดหมาย มิฉะนั้น กระบวนการย้ายกลับไปยัง Exchange Server จะเหมือนกับ Exchange Online ซึ่งงานจะซิงค์ไปที่ 95% และรอให้เสร็จสิ้นเพื่อเริ่มต้น และจนกว่าจะซิงค์ จะซิงค์ทุกวัน
การแปลงการใช้งานครั้งเดียวเป็นชุดการโยกย้าย
แม้ว่าการดำเนินการย้ายกล่องจดหมายครั้งละครั้งอาจเป็นประโยชน์ในบางครั้ง แต่ควรใช้ PowerShell ในวงกว้างตลอดเวลาจะดีกว่า มิฉะนั้นประสิทธิภาพจะสูญหายไป ยกตัวอย่าง ผู้ใช้กลุ่มใหม่ที่ต้องย้าย เราได้เห็นแล้วว่า New-MoveRequest cmdlet สามารถใช้ทำงานเดี่ยวๆ ได้อย่างไร หากต้องการแปลงเป็นการใช้เป็นกลุ่ม ก่อนอื่นเราต้องมีไฟล์ CSV ซึ่งเราสามารถนำเข้าไปยังตัวแปรสำหรับ PowerShell ได้ ไฟล์ CSV แบบธรรมดาจะมีลักษณะดังนี้:
PrimarySMTPAddressJohn.Doe@domain.comJane.Doe@domain.comรับตัวแปรจากส่วน Move Request โดยเพิ่ม Read-Host one-liner และ Foreach loop ตอนนี้เรามีโค้ดนี้:
$Mailbox = "< Mailbox PrimarySMTPAddress>"$EndPoint = "mail.domain.com"$TargetDomain = "<tenant>.onmicrosoft.com"$OPCred = Get-Credentials$CSV = Read-Host -Prompt "Please specify a CSV file for the current wave of users to move to Office 365"$WaveCSV = Import-CSV $CSV
Foreach ($Line in $WaveCSV) {
$Mailbox = $Line.SMTPAddress
New-MoveRequest -Identity $Mailbox -Remote -RemoteHostName $Endpoint -TargetDeliveryDomain $TargetDomain -RemoteCredential $OPCred -SuspendWhenReadyToComplete}คำเตือนประการหนึ่งสำหรับโค้ดก็คือ ไม่มีการตรวจสอบข้อผิดพลาดหรือการรวบรวมข้อผิดพลาด ซึ่งหมายความว่าหากการย้ายล้มเหลว เราอาจจำเป็นต้องคัดลอกรหัสข้อผิดพลาดจากหน้าจอเพื่อระบุปัญหา นอกจากนี้ยังไม่มีการบันทึกความพยายามที่ดีและไม่ดีอีกด้วย ด้วยเหตุนี้ รหัสนี้จึงเป็นวิธีที่รวดเร็วในการย้าย/ซิงค์กล่องจดหมายจำนวนมากไปยัง Exchange Online ในทำนองเดียวกัน กรอบโค้ดนี้สามารถนำไปใช้สำหรับการระงับ ดำเนินการต่อ และลบการโยกย้ายกล่องจดหมาย เพียงใส่ซับในหนึ่งเส้นในวง Foreach ที่ตรงกับการทำงานที่ถูกต้อง
การรายงาน
เมื่อย้ายกล่องจดหมายไปยัง Exchange Online จำเป็นอย่างยิ่งที่การโยกย้ายเหล่านี้จะต้องได้รับการตรวจสอบเพื่อให้แน่ใจว่าการโยกย้ายเป็นไปอย่างดี ไม่ถูกจำกัดปริมาณจนเกินไป และดำเนินการให้เสร็จสิ้นทันเวลา เราสามารถใช้ PowerShell เพื่อเรียกใช้รายงานและสร้างการรายงานในรูปแบบไฟล์ CSV ที่สามารถนำไปใช้เพื่อการวิเคราะห์ได้ สำหรับสิ่งนี้ เราจำเป็นต้องมี cmdlets สองสามรายการร่วมกัน: Get-MoveRequest และ Get-MoveRequestStatistics เมื่อรวมกันแล้ว เราสามารถเรียกใช้สิ่งนี้เพื่อดูว่าการโยกย้ายของเรากำลังดำเนินไปอย่างไร:
Get-MoveRequest | Get-MoveRequestStatistics -ErrorAction STOP | ft DisplayName,Status,PercentCompleteด้วยบรรทัดเดียวนี้ เราจะได้รับความรู้สึกถึงความคืบหน้าสำหรับการเคลื่อนไหวทั้งหมดของเรา ด้วยการแสดงชื่อกล่องจดหมาย สถานะการย้าย รวมถึงเปอร์เซ็นต์ของการย้ายที่เสร็จสมบูรณ์จนถึงตอนนี้ ซับเดียวเดียวกันนี้ยังสามารถพุชเพื่อส่งออกสถิติไปยังไฟล์ CSV:
$CSV = Read-Host -Prompt "Please specify a CSV file for the current wave of users to move to Office 365"$Row = "DisplayName,Status,PercentComplete" = Out-File $DestinationFileForeach ($Line in $CSV) {$Move = Get-MoveRequestStatistics -Identity $Mailbox | Select DisplayName,Status,PercentComplete$DisplayName = $Move.DisplayName$Status = $Move.Status$PercentComplete = $Move.PercentComplete$Row = "$DisplayName,$Status,$PercentComplete"$Row = Out-File $DestinationFile -Append}คำเตือน CSV
สิ่งหนึ่งที่ควรจำก็คือ เมื่อทำงานกับคำขอย้ายใดๆ ผ่านทาง CSV ไฟล์ CSV จะไม่ใช่ขีดจำกัดที่ชัดเจน เพียงเพราะการย้ายถูกสร้างขึ้นโดยใช้ไฟล์ CSV ไฟล์เดียว ไม่ได้หมายความว่าคำขอย้ายไม่สามารถระงับ ลบ ดำเนินการต่อ หรือรายงานโดยบุคคลอื่นได้ กล่าวอีกนัยหนึ่ง หากมี 25 ชื่อในไฟล์ CSV ที่สร้าง เราสามารถสร้างไฟล์ CSV ใหม่ที่มี 15 ชื่อหรืออาจจะ 50 ชื่อที่จะจัดการ คำขอย้ายแต่ละรายการมีความเป็นอิสระจากกันโดยสิ้นเชิง ดังนั้นทำการปรับเปลี่ยนตามความจำเป็นเพราะคุณจะทำได้
บทสรุป
ในบทความชุดนี้เกี่ยวกับการโยกย้ายกล่องจดหมายไปยัง Exchange Online เราได้สำรวจข้อกำหนดเบื้องต้นต่างๆ รวมถึงการดำเนินการย้ายกล่องจดหมายที่สามารถทำได้ทั้งหมดผ่าน PowerShell
เราพิจารณาอุปสรรคที่เป็นไปได้ เช่น โดเมน SMTP ที่ไม่ถูกต้อง รวมถึงนโยบายที่ต้องระวังเมื่อกล่องจดหมายย้ายไปที่ Exchange Online ในส่วนของคำขอย้าย เราได้พิจารณาถึงการสร้าง การระงับ การดำเนินการต่อ การดำเนินการให้เสร็จสิ้น และแม้กระทั่งการย้อนกลับไปยัง Exchange Server ภายในองค์กร
สิ่งที่ควรชัดเจนคือสคริปต์ที่ครอบคลุมจะมีเหตุผลมากมายที่ต้องครอบคลุม แต่ทั้งหมดนี้สามารถทำได้ใน PowerShell เรายังปรับแต่งการเขียนโค้ดเพิ่มเติมเพื่อรวมการบันทึกสคริปต์โดยละเอียด (อาจเป็นบทความในบล็อกในอนาคต) การปรับแต่งการรายงานการย้ายกล่องจดหมาย และอื่นๆ อีกมากมาย PowerShell มอบเครื่องมือที่ยอดเยี่ยมสำหรับการจัดการงานจำนวนมาก และช่วยเราประหยัดเวลาจากการสร้างการเคลื่อนไหวทั้งหมดนี้ใน GUI
