ค้นหาเว็บไซต์

ย้ายไดรฟ์ภายในบ้านของผู้ใช้ไปยัง 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 ก่อน:

  1. คัดลอกไฟล์ .adml และ .admx จาก %localappdata%\Microsoft\OneDrive\BuildNumber\adm\ บนเวิร์กสเตชัน
  2. วาง .admx ในร้านค้ากลางของตัวควบคุมโดเมน: \\โดเมน\sysvol\domain\Policies\PolicyDefinitions
  3. วาง .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 ซึ่งจะส่งคืนเส้นทางจริง

บทความที่เกี่ยวข้อง