วิธีใช้ PowerShell เพื่อลบไฟล์ OneDrive ที่พบในการค้นหาเนื้อหา
เมื่อเร็วๆ นี้ ขณะดำเนินการค้นหาเนื้อหา มีคำถามเกิดขึ้นเกี่ยวกับวิธีการลบเอกสาร OneDrive ที่พบในการค้นหาแบบเลือกสรร แม้ว่าคุณจะสามารถลบอีเมลออกได้โดยใช้การดำเนินการค้นหาเนื้อหา แต่ Office 365 จะไม่มีวิธีการล้างข้อมูลเอกสาร OneDrive ที่พบในการค้นหาเนื้อหา
คำถามคือวิธีลบเอกสาร OneDrive บางส่วน แต่ไม่ใช่ทั้งหมดที่พบในการค้นหาเนื้อหา บทความนี้สาธิตวิธีการใช้ PowerShell เพื่อดูชุดของไฟล์ จากนั้นเลือกไฟล์ที่จะลบ
อยากรู้ว่าคุณสามารถใช้ PowerShell เพื่อจัดการนโยบายการเข้าถึงแบบมีเงื่อนไข (CA) ได้อย่างไร Damian ตรวจสอบ cmdlets แปดรายการในบทความนี้
การค้นหาเนื้อหาฐาน
ขั้นแรก เราต้องเรียกใช้การค้นหาเนื้อหา ในศูนย์การปฏิบัติตามข้อบังคับของ Microsoft 365 ให้ไปที่ส่วนการค้นหาเนื้อหาและสร้างการค้นหาใหม่ ป้อน “Exchange” เป็นคำหลักสำหรับการค้นหาและเลือกตำแหน่งการค้นหา OneDrive เป้าหมาย การค้นหาเริ่มต้นและสร้างชุดตัวอย่างผลลัพธ์ อาจใช้เวลาสักครู่จึงจะเสร็จสมบูรณ์ ทั้งนี้ขึ้นอยู่กับจำนวนตำแหน่งการค้นหา
เมื่อการค้นหาเสร็จสิ้น เราสามารถตรวจสอบผลลัพธ์การแสดงตัวอย่างได้ เมื่อคุณพอใจที่การค้นหาพบรายการที่ถูกต้อง ให้สร้างรายงานผลลัพธ์โดยเลือก 'ส่งออกรายงาน':
เมื่อส่งออกรายงานแล้ว เราจะดาวน์โหลดไฟล์ CSV ที่สร้างขึ้นได้:
การดาวน์โหลดรายงานต้องใช้รหัส (รูปที่ 3) ซึ่งสามารถคัดลอกจากรายละเอียดการค้นหาและวางลงในยูทิลิตี้ Microsoft Export:
เมื่อการค้นหาเสร็จสิ้นและดาวน์โหลดรายงานแล้ว เราสามารถใช้ไฟล์ CSV นั้นเพื่อกำหนดไฟล์ OneDrive ที่จะลบได้
การตรวจสอบผลการสืบค้นและการลบ OneDrive แบบเลือก
ภารกิจต่อไปคือการนำเสนอข้อมูลที่ส่งออกจากไฟล์ CSV ในลักษณะที่ใช้งานได้ ในการดำเนินการนี้ เราใช้ PowerShell เพื่อจัดกลุ่มไฟล์ตามที่อยู่ OneDrive ของผู้ใช้ และอนุญาตให้ผู้ตรวจสอบเลือกไฟล์หนึ่งไฟล์ บางส่วน ทั้งหมด หรือไม่มีเลยที่จะลบออก เราใช้ cmdlets จากโมดูล SharePoint Online และ PNP PowerShell เพื่อดำเนินการกับไฟล์ OneDrive โดยมีสิทธิ์ที่จำเป็นในการดำเนินงานเหล่านี้ สคริปต์ฉบับเต็มสามารถดาวน์โหลดได้ที่นี่จาก GitHub ตอนนี้ฉันจะเน้นส่วนสำคัญบางส่วน
ไฟล์ CSV
ไฟล์ CSV ที่เราดาวน์โหลดมาอยู่ในรูปแบบดังที่แสดงด้านล่าง:
กระบวนการสคริปต์โดยรวม
ไฟล์ส่งออกไม่ได้รับการจัดเรียงหรืออยู่ในรูปแบบที่เราสามารถใช้ได้ ดังนั้นก่อนอื่นจะต้องประมวลผลข้อมูลเพื่อสร้างสิ่งที่มีประโยชน์มากขึ้น ในโค้ดด้านล่าง เราขอชื่อไฟล์ CSV ให้ดึงองค์ประกอบหลัก (ผู้ใช้และไฟล์) จากไฟล์อินพุต และจัดเก็บข้อมูลนี้ไว้ในตัวแปรที่เรียกว่า $Table สุดท้าย ให้จัดเรียงตัวแปร $Table ตาม User และจัดเก็บผลลัพธ์ไว้ในตัวแปรชื่อ $SortedResults:
$CSVName = Read-Host "Please specify a CSV file to import [i.e. Results.csv]"
$CSV = Import-Csv $CSVName
$Table = Foreach ($Line in $CSV) {
$User = $Line.Location
$FullFilePath = $Line."Original Path"
$Type = $Line.Type
$File = $FullFilePath.Split('/')[-1]
New-Object -TypeName PSCustomObject -Property @{
User = $User
File = $File
}
}
$SortedResults = $Table | Sort-Object User,File
เชื่อมต่อกับ SharePoint Online
ตอนนี้เรามีข้อมูลที่ดีแล้ว เราก็สามารถเชื่อมต่อกับ SharePoint Online ได้แล้ว ตรวจสอบให้แน่ใจว่าใช้ชื่อผู้เช่าที่ถูกต้องเพื่อเชื่อมต่อกับจุดสิ้นสุดผู้ดูแลระบบ SharePoint Online (ในวงเล็บ - บรรทัดแรกของโค้ด):
$SharePointURL = 'https://<tenant domain>-admin.sharepoint.com'
$GAUPN = Read-Host "Please enter your Global Admin account UPN"
$Password = Read-Host -assecurestring "Please password for Global Admin account specified above"
$Credentials = New-Object -typeName System.Management.Automation.PSCredential -argumentlist $GAUPN, $Password
Connect-SPOService -Url $SharePointURL -Credential $Credentials
เมื่อเชื่อมต่อแล้ว เราก็สามารถเริ่มประมวลผลไฟล์ CSV ได้ เราใช้กฎบางอย่างในการประมวลผลข้อมูลเมื่อเราวนซ้ำรายการต่างๆ ในไฟล์ ขั้นแรก ลูปคือลูป foreach โดยแต่ละบรรทัดจะอ่านแยกกัน และดำเนินการภายในแต่ละลูป โดยรวมแล้ว ขั้นตอนในสคริปต์ที่เราจะดำเนินการคือ:
- Foreach loop จะจัดกลุ่มแต่ละบรรทัดสำหรับผู้ใช้รายเดียวให้เป็นตัวแปร
- มีการให้สิทธิ์แก่ตัวดำเนินการสคริปต์ (ผู้ดูแลไซต์คอลเลกชัน) สำหรับสคริปต์เพื่อดำเนินการต่างๆ
- เมื่อได้รับสิทธิ์แล้ว จะทำการเชื่อมต่อกับบัญชี OneDrive ของผู้ใช้
- ในขณะที่เชื่อมต่อ ID ของไฟล์จะถูกสอบถามและจัดเก็บตามที่จำเป็นเพื่อระบุไฟล์ที่จะลบ
- เมื่อตรวจพบการเปลี่ยนแปลงของผู้ใช้ รายการไฟล์ปัจจุบันจะดำเนินการตามขั้นตอนเหล่านี้
ก. ขั้นตอนที่ 1 - แสดงไฟล์ด้วย Out-GridView
b. ขั้นตอนที่ 2 - ใช้เอาต์พุตจาก Out-GridView เพื่อเริ่มการลบไฟล์
ค. ขั้นตอนที่ 3 - อนุญาตให้โอเปอเรเตอร์ไม่ลบไฟล์ (ตัวเลือกคุณแน่ใจหรือไม่) - หลังจากประมวลผลไฟล์ของผู้ใช้แล้ว ลูป Foreach จะย้ายไปยังผู้ใช้รายถัดไป
- ขั้นตอนที่ 1-6 ดำเนินต่อไปจนกว่าจะตรวจพบผู้ใช้คนสุดท้าย (บรรทัดสุดท้ายของไฟล์ CSV)
- สคริปต์ออก
การเข้าถึง OneDrive ของผู้ใช้
หากต้องการลบไฟล์ออกจากบัญชี OneDrive ของผู้ใช้ เราจำเป็นต้องเชื่อมต่อโดยตรงกับ URL ของ OneDrive (ในไฟล์ CSV) เมื่อเชื่อมต่อแล้ว เราจะให้สิทธิ์ผู้ดูแลไซต์คอลเลกชัน งานทั้งสองนี้สามารถทำได้โดยใช้สคริปต์ด้านล่าง:
Connect-PnPOnline -Url $UserOneDrive -Credentials $Credentials
Set-SPOUser -Site $UserOneDrive -LoginName $GAUPN -IsSiteCollectionAdmin $TrueOut-GridView และ Remove-PnPItemListItem
สำหรับขั้นตอนที่ 5 ของกระบวนการโดยรวมที่แสดงไว้ข้างต้น เราจำเป็นต้องแสดงไฟล์แก่ผู้ปฏิบัติงาน จัดเก็บไฟล์ที่เลือก จากนั้นให้ผู้ใช้สามารถตัดสินใจเกี่ยวกับไฟล์ได้ การกำจัด ขั้นแรก ให้แสดงไฟล์โดยใช้ Out-GridView:
$FilesToRemove = $RemovalList | Out-GridView -PassThru
• $FilesToRemove: (รูทีนถึง?) จะจัดเก็บไฟล์ใดๆ ที่ถูกเลือกโดยผู้ปฏิบัติงาน
• $RemovalList: รายการต้นฉบับของไฟล์ทั้งหมดจาก CSV
• -PassThru: ตัวเลือกนี้อนุญาตให้ส่งคืน ตัวเลือกที่เลือกจาก Out-GridView cmdlet ซึ่งจะถูกจัดเก็บไว้ในตัวแปร $FilesToRemove
หลังจากเลือกไฟล์แล้ว แต่ละไฟล์จะถูกแสดงรายการ และผู้ปฏิบัติงานสามารถเลือกได้ว่าควรลบไฟล์หรือไม่:
Write-Host "Removing $File from $User with ID of $SubID ..." -ForegroundColor Yellow
$ConfirmRemoval = Read-Host " Confirm file removal [y or n] "
If ($ConfirmRemoval -eq 'y') {
Remove-PnPListItem -List Documents -Identity $SubID
} Else {
Write-Host " *** FILE WAS NOT DELETED **" -ForegroundColor Yellow
}
มุมมองผู้ดำเนินการ
เมื่อเราได้ตรวจสอบส่วนโค้ดที่สำคัญบางส่วนแล้ว เรามาตรวจสอบกระบวนการโดยรวมสำหรับการลบไฟล์กัน หลังจากดาวน์โหลดไฟล์ CSV และประมวลผลเนื้อหาแล้ว เราสามารถใช้เป็นพื้นฐานในการลบไฟล์ได้ เมื่อเรารันสคริปต์ สิ่งแรกคือการเชื่อมต่อกับผู้เช่าเป้าหมาย นอกจากนี้เรายังถามถึงไฟล์ CSV ผลลัพธ์ที่เราดาวน์โหลดจากการค้นหาอีกด้วย จากนั้นสคริปต์จะแสดงไฟล์ที่จะตรวจสอบและ/หรือลบโดยใช้ Out-GridView cmdlet:
หลังจากเลือกไฟล์บางไฟล์แล้ว เราก็สามารถตัดสินใจว่าจะลบหรือไม่ลบไฟล์ก็ได้ ตามตัวอย่างด้านล่างนี้:
ข้อกำหนดเบื้องต้น
ก่อนจึงจะสามารถเรียกใช้สคริปต์ได้ คุณต้องยินยอมให้ใช้โมดูล PnP PowerShell เนื่องจากสคริปต์ใช้การตรวจสอบสิทธิ์ OAuth หากเราไม่ให้ความยินยอมสำหรับแอป ข้อผิดพลาดเช่นนี้จะปรากฏขึ้น:
Connect-PnPOnline : AADSTS65001: The user or administrator has not consented to use the application with ID
'31359c7f-bd7e-475c-86db-fdb8c937548e' named 'PnP Management Shell'. Send an interactive authorization request for this user and resource.
หากต้องการใช้โมดูล PnP เราต้องทำตามขั้นตอนเหล่านี้:
$URL = 'https://<tenant>-my.sharepoint.com/personal/user_yourdomain_com'
Connect-PnPOnline -Url $Url -PnPManagementShell
การเรียกใช้ cmdlet เหล่านี้จะแสดงรหัสผ่านแบบใช้ครั้งเดียวเพื่อเข้าสู่ https://microsoft.com/devicelogin จากนั้นเราสามารถป้อนและเลือกบัญชีที่มีสิทธิ์ในการอนุญาต:
จากนั้นเราจะต้องอนุมัติความยินยอมสำหรับ cmdlets:
รายการสิทธิ์จำนวนมากเกิดจากการที่โมดูล PNP จำเป็นต้องเข้าถึงปริมาณงานหลายรายการในผู้เช่า ตั้งแต่ Teams ไปจนถึง SharePoint และรวมถึง Planner และ Flow ด้วยเช่นกัน ด้วยเหตุนี้ โมดูลจึงจำเป็นต้องมีการอนุญาตที่หลากหลายจึงจะทำงานได้ โปรดจำไว้ว่าความยินยอมนี้อนุญาตให้ใช้โมดูลในผู้เช่าเท่านั้นและสามารถจำกัดการใช้งานได้
หลังจากให้ความยินยอมแล้ว เราสามารถใช้โมดูล PnP เพื่อเชื่อมต่อกับ OneDrive และจัดการไฟล์ได้
ทำไมต้องใช้เชลล์การจัดการ PNP
PNP Management Shell คือชุด PowerShell cmdlet ที่ทรงพลังกว่า 500 รายการ ซึ่งอนุญาตให้เข้าถึงออบเจ็กต์ SharePoint Online รวมถึงความสามารถในการจัดการไฟล์ที่จัดเก็บไว้ในบัญชี OneDrive นอกจากนี้เรายังสามารถลบแท็ก Records โดยใช้ Clear-PnPListItemAsRecord cmdlet การดำเนินการนี้เป็นเวอร์ชัน PowerShell ในการเลือกรายการในไลบรารี SharePoint และการเลือกตัวเลือก 'ยกเลิกการประกาศบันทึก' ที่พร้อมใช้งานใน SharePoint Online
การตรวจสอบ
จากมุมมองการติดตามโดยรวม SharePoint Online จะบันทึกรายละเอียดของไฟล์ใดๆ ที่สคริปต์ลบในบันทึกการตรวจสอบของ Office 365 ค้นหา "ไฟล์ที่ถูกลบ" และรายละเอียดของไฟล์ที่ถูกลบจะปรากฏในบันทึก
บทสรุป
สคริปต์ที่อธิบายไว้ที่นี่ได้รับการออกแบบมาเพื่อจัดการกับกระบวนการที่น่าเบื่อในการรับข้อมูลรายงานสำหรับการค้นหาเนื้อหา และใช้เพื่อขับเคลื่อนกระบวนการลบเอกสาร ในปัจจุบันไม่มีสิ่งใดที่เทียบเท่าในศูนย์การปฏิบัติตามข้อบังคับของ Microsoft 365 หากต้องการเรียกใช้สคริปต์ คุณต้องมี cmdlets จาก Exchange Online (เชื่อมต่อกับจุดสิ้นสุดการปฏิบัติตามข้อบังคับ), SharePoint Online และโมดูล PnP สุดท้ายนี้ ผู้ดูแลระบบจะต้องให้ความยินยอมในการใช้ SharePoint PnP Module cmdlets ในผู้เช่า ต้องปฏิบัติตามเงื่อนไขเหล่านี้ทั้งหมดก่อนที่จะทำงานกับสคริปต์นี้
รหัสตัวอย่าง
เพื่อช่วยคุณสร้างโค้ดของคุณเองสำหรับโซลูชันนี้ มีการโพสต์โค้ดตัวอย่างสำหรับการดำเนินการสำหรับโซลูชันนี้ใน GitHub
ใช้โค้ดนี้ด้วยความระมัดระวัง เนื่องจากโค้ดจะทำงานหลายอย่างที่ควรทำโดยผู้ที่เข้าใจความหมายเท่านั้น:
- ให้สิทธิ์การเข้าถึงการเข้าถึง PNP Management Shell แก่ผู้เช่าของคุณ
- การใช้ Remove-PnPListItem ซึ่งลบไฟล์ออกจาก OneDrive ของผู้ใช้
- การให้สิทธิ์ SiteCollectionAdmin แก่ OneDrive ของผู้ใช้







