ย้ายไดรฟ์ภายในบ้านของผู้ใช้ไปยัง OneDrive for Business ด้วย PowerShell
ขณะนี้เรามี Office 365 มาเกือบ 3 ปีแล้ว และสิ่งหนึ่งที่อยู่ในรายการสิ่งที่ต้องทำของฉันคือการโยกย้ายโฟลเดอร์หลักของผู้ใช้ไปยัง OneDrive for Business เมื่อปีที่แล้วฉันได้ลองใช้ โดยขอให้ทุกคนคัดลอกหรือย้ายไฟล์ด้วยตนเอง แต่กลับไม่เป็นไปตามที่วางแผนไว้
คราวนี้ฉันต้องเปลี่ยนกลยุทธ์ เห็นได้ชัดว่าผู้ใช้ (150+) จะไม่ย้ายไฟล์ด้วยตนเอง ตอนนี้ฉันรู้แล้วว่า OneDrive มีความสามารถในการย้ายโฟลเดอร์ที่รู้จัก (เดสก์ท็อป เอกสาร และรูปภาพ) แต่นั่นไม่ใช่ไฟล์ส่วนบุคคลที่จัดเก็บไว้ในเซิร์ฟเวอร์ไฟล์ ดังนั้นเพื่อย้ายไฟล์เราจะใช้ PowerShell
พื้นที่จัดเก็บเซิร์ฟเวอร์มีราคาแพง ดังนั้นจึงเป็นการเสียเงินในการซื้อพื้นที่เก็บข้อมูลสำหรับโฮมโฟลเดอร์เมื่อผู้ใช้ทุกคนได้รับพื้นที่เก็บข้อมูลไม่จำกัดในระบบคลาวด์ ข้อดีอีกประการหนึ่งสำหรับผู้ใช้คือพวกเขาสามารถเข้าถึงไฟล์ได้จากทุกที่แน่นอน
กำลังเตรียมการย้ายโฮมโฟลเดอร์
ก่อนที่เราจะสามารถย้ายไฟล์ได้เราต้องเตรียมบางสิ่งก่อน มีการตั้งค่า GPO บางอย่างที่เราสามารถกำหนดค่า ตรวจสอบการตั้งค่าผู้ดูแลระบบ OneDrive เราจำเป็นต้องแจ้งให้ผู้ใช้ของเราทราบ และเราต้องปรับใช้สคริปต์
ปัญหาที่อาจเกิดขึ้นอีกประการหนึ่งคือชื่อไฟล์ไม่ถูกต้องหรือเส้นทางแบบยาว เช่นเดียวกับที่ SharePoint มีข้อจำกัดบางประการของไฟล์ใน OneDrive for Business:
- ชื่อไฟล์หรือโฟลเดอร์ไม่ถูกต้อง
- อักขระไม่ถูกต้อง ( ” * : < > ?/\ |)
- ขนาดไฟล์สูงสุด 15Gb
- ขีดจำกัดเส้นทางอักขระ 400 ตัว
อ่านรายการข้อจำกัดทั้งหมดได้ที่นี่
กำลังตรวจสอบ OneDrive for Business Admin Center
เป็นเรื่องดีเสมอที่จะตรวจสอบศูนย์การจัดการ Office 365 ก่อนที่คุณจะหมดการโยกย้ายประเภทนี้ มีการเพิ่มการตั้งค่าใหม่เป็นประจำ และคุณอาจต้องการจำกัด เช่น ตัวเลือกการแชร์สำหรับ OneDrive for Business
ตรวจสอบให้แน่ใจว่าการตั้งค่าสอดคล้องกับนโยบายความปลอดภัยทางธุรกิจของคุณ
OneDrive for Business การย้ายโฟลเดอร์ที่รู้จัก
การย้ายโฟลเดอร์ที่รู้จัก (เดสก์ท็อป เอกสาร และรูปภาพ) ไปยัง OneDrive เป็นสิ่งที่คุณควรเปิดใช้งานจริงๆ ต้องใช้การตั้งค่า GPO เพียงสองรายการในการตั้งค่า และจะเปิดใช้งานด้วยตัวเอง ผู้ใช้ของคุณสามารถทำงานและจัดเก็บไฟล์ได้เหมือนเดิม แต่จะได้รับการสำรองข้อมูลอย่างปลอดภัยในระบบคลาวด์
เมื่อเราเปลี่ยนจากสภาพแวดล้อม Citrix เต็มรูปแบบเป็นแบบสแตนด์อโลน หนึ่งในข้อกังวลของฉันคือการรักษาข้อมูลของผู้ใช้ให้ปลอดภัย แน่นอนว่าพวกเขาจัดเก็บไฟล์ที่เกี่ยวข้องกับงานไว้ในไดรเวอร์เครือข่ายและขณะนี้อยู่ใน SharePoint แต่เราทุกคนรู้ดีว่าผู้ใช้ต้องการเก็บไฟล์ที่เกี่ยวข้องกับงานไว้บนเดสก์ท็อป ไม่เช่นนั้นอาจบันทึกไว้ในโฟลเดอร์เอกสารโดยไม่รู้ตัว
ใช่ เราจำเป็นต้องให้ความรู้แก่ผู้ใช้ของเรา แต่ด้วยการตั้งค่าโฟลเดอร์ที่รู้จัก เราจะมีปัญหาหนึ่งข้อที่ไม่ต้องกังวลอีกต่อไป
รับรหัสผู้เช่า Office 365 ของคุณ
ก่อนที่เราจะสามารถกำหนดค่า GPO ได้ เราจำเป็นต้องได้รับ ID ผู้เช่าของเราก่อน ด้วย PowerShell เราสามารถทำได้ด้วยคำสั่งเดียวเท่านั้น:
# Connect to the Azure AD
connect-azuread
# result:
Account Environment Tenant
------- ----------- ------
johndoe@lazyadmin.nl AzureCloud <your tenant ID>
# Optional - Get your tenant details
get-azureadtenantdetailหลังจากที่คุณเชื่อมต่อกับ Azure AD สำเร็จแล้ว คุณจะได้รับรหัสผู้เช่าในผลลัพธ์ หากคุณไม่เข้าใจ คุณสามารถใช้ cmdlet Get-AzureAdTenantDetail โดยที่ objectid คือรหัสผู้เช่าของคุณ
การกำหนดค่า GPO
มี GPO สองสามรายการที่เราจำเป็นต้องกำหนดค่า โปรดทราบว่าหากคุณเปิดใช้งาน GPO นี้สำหรับทั้งองค์กรในคราวเดียว คุณจะมีการรับส่งข้อมูลเครือข่ายขนาดใหญ่เนื่องจากการซิงโครไนซ์ OneDrive ดังนั้นคุณอาจต้องการใช้กลุ่มความปลอดภัยชั่วคราวเพื่อกำหนดเป้าหมาย GPO
สร้าง GPO ใหม่และไปที่นโยบายต่อไปนี้:
Computer configuration\Policies\Administrative Templates\OneDrive
หากคุณไม่พบนโยบายกลุ่มของ OneDrive คุณอาจต้องคัดลอกไฟล์ adml และ admx ก่อน:
- คัดลอกไฟล์ .adml และ .admx จาก %localappdata%\Microsoft\OneDrive\BuildNumber\adm\ บนเวิร์กสเตชัน
- วาง .admx ในร้านค้ากลางของตัวควบคุมโดเมน: \\โดเมน\sysvol\domain\Policies\PolicyDefinitions
- วาง .adml ลงในโฟลเดอร์ภาษาที่ถูกต้องในร้านค้ากลาง
หากคุณยังไม่ได้ดำเนินการ ขั้นแรกให้เปิดใช้งานนโยบายกำหนดค่า OneDrive แบบไม่มีข้อมูลโดยใช้บัญชี Windows หลัก วิธีนี้จะช่วยให้ผู้ใช้เข้าสู่ระบบเพิ่มเติมได้เมื่อตั้งค่า OneDrive ในครั้งแรก
นอกจากนี้ ตรวจสอบให้แน่ใจว่าคุณจำกัดแบนด์วิดท์ในการอัพโหลด ด้วยวิธีนี้ผู้ใช้รายหนึ่งจะไม่สามารถทำให้การเชื่อมต่ออินเทอร์เน็ตทั้งหมดช้าลงได้ ตั้งค่านโยบาย ตั้งค่าเปอร์เซ็นต์สูงสุดของแบนด์วิดท์การอัปโหลดที่ OneDrive.exe ใช้ เป็นค่าประมาณ 70
หากต้องการย้ายโฟลเดอร์ที่รู้จัก ให้เปิดใช้งานนโยบาย เปลี่ยนเส้นทางโฟลเดอร์ Windows ที่รู้จักไปยัง OneDrive และป้อนรหัสผู้เช่า คุณสามารถเปิดใช้งานการแจ้งเตือนผู้ใช้ได้หากต้องการ
ขอแนะนำให้เปิดใช้งานนโยบายแจ้งให้ผู้ใช้ย้ายโฟลเดอร์ Windows Known ไปยัง OneDrive เพื่อสนับสนุนไคลเอ็นต์ OneDrive รุ่นเก่า
การย้ายโฟลเดอร์โฮมของผู้ใช้
ขั้นตอนสุดท้ายและนี่คือสิ่งที่เราวางแผนไว้ว่าจะทำคือย้ายข้อมูลโฟลเดอร์เริ่มต้นของผู้ใช้ไปยังบัญชี OneDrive for Business ในกรณีของฉันคือไฟล์ที่จัดเก็บไว้ในไฟล์เซิร์ฟเวอร์ ดังนั้นผู้ใช้ทุกคนจึงมีไดรฟ์เครือข่ายที่แมปกับโฟลเดอร์ของตน
บางสิ่งที่เราต้องแก้ไขในสคริปต์ PowerShell ของเราคือการค้นหาโฟลเดอร์ OneDrive ของผู้ใช้ ตรวจสอบว่ามีการเชื่อมต่ออยู่หรือไม่ และทิ้งข้อบ่งชี้ไว้ในโฟลเดอร์หลักเพื่อให้เรารู้ว่ามีการคัดลอกแล้ว เราจะไม่ย้ายไฟล์ เพียงแค่คัดลอกมัน ฉันวางแผนที่จะย้ายไฟล์ไปยังเซิร์ฟเวอร์เก็บถาวรของเราในภายหลัง เพื่อให้เราสำรองข้อมูลไว้เสมอ
PowerShell และวันไดรฟ์
เพื่อตรวจสอบว่า OneDrive เชื่อมต่ออยู่หรือไม่ เราจำเป็นต้องนำเข้าไฟล์ DLL เพื่ออ่านสถานะ OneDrive ดาวน์โหลด OneDriveLib.dll จากที่เก็บ GitHub นี้ วางไว้ในตำแหน่งที่ผู้ใช้ทุกคนสามารถเข้าถึงได้ ฉันขอแนะนำ netlogon แต่การแชร์เครือข่ายอื่นๆ ก็สามารถทำงานได้เช่นกัน
ขั้นแรก เรานำเข้าไฟล์ DLL:
Import-Module \\contoso.local\netlogon\OnedriveLib.dll
ต่อไปเราต้องได้รับเส้นทางไปยังโฟลเดอร์ OneDrive ของผู้ใช้ ตำแหน่งเริ่มต้นสำหรับโฟลเดอร์นี้คือโฟลเดอร์โปรไฟล์ผู้ใช้ หากคุณมีโฟลเดอร์ OneDrive หลายโฟลเดอร์ คุณสามารถใช้ตัวแปร USERPROFILE ได้ ไม่เช่นนั้น ฉันขอแนะนำให้ใช้ตัวแปร OneDriveCommercial
#Find OneDrive folder
$path = $env:OneDriveCommercial
# Alternative:
# $path = $env:USERPROFILE + '\OneDrive - LazyAdmin'หากต้องการตรวจสอบว่าเรามีโฟลเดอร์ที่ถูกต้องและเชื่อมต่อ OneDrive แล้ว เราจะได้รับสถานะ OneDrive:
#Get OneDrive status
$ODStatus = Get-ODStatus -ByPath $path
# or in short:
$ODStatus = Get-ODStatus -ByPath $env:OneDriveCommercialหากเชื่อมต่ออยู่ ระบบจะส่งกลับ 'UpToDate' หรือ 'Syncing' ดังนั้นเราจึงตรวจสอบผลลัพธ์และใช้ robocopy เพื่อคัดลอกไฟล์
if ($ODStatus -eq 'UpToDate' -or $ODStatus -eq 'Syncing') {
#OneDrive is connected
write-host 'OneDrive connected and found'
robocopy $env:HOMESHARE $env:OneDriveCommercial /E /SEC
new-item $env:HOMESHARE -name '_FILES COPIED TO ONEDRIVE.txt' -ItemType 'file' -Value 'Files Copied'
}ดังที่คุณเห็นในบรรทัดสุดท้าย เราสร้างรายการใหม่ ซึ่งเป็นไฟล์ข้อความ เราเรียกใช้สคริปต์ PowerShell ในภายหลัง เพื่อตรวจสอบว่าเราย้ายโฟลเดอร์โฮมไดรฟ์ทุกโฟลเดอร์ก่อนที่จะเก็บถาวรหรือไม่
บทสรุป
เรียกใช้ PowerShell ในโหมดบริบทของผู้ใช้ที่เข้าสู่ระบบ คุณสามารถใช้ PDQ Deploy สำหรับสิ่งนี้ GPO (สคริปต์การเข้าสู่ระบบ) หรือ SCCM หากคุณมีผู้ใช้จำนวนมาก ตรวจสอบให้แน่ใจว่าคุณได้กระจายการปรับใช้เพื่อจำกัดผลกระทบต่อเครือข่ายของคุณ
ด้วย PowerShell ตรวจสอบให้แน่ใจว่าคุณตรวจสอบตัวแปรสภาพแวดล้อมที่มีอยู่ ในความพยายามครั้งแรกที่จะสร้างสคริปต์นี้ ฉันลองใช้อักษรระบุไดรฟ์ของโฮมโฟลเดอร์ของผู้ใช้ นั่นไม่ได้ผล ในขณะที่มองหาทางเลือกอื่น ฉันสังเกตเห็นว่าเราสามารถใช้ $env:HomeDrive ซึ่งจะส่งคืนอักษรระบุไดรฟ์หรือ $env:HomeShare ซึ่งจะส่งคืนเส้นทางจริง
