如何通过PowerShell+Microsoft Graph快速获取OneDrive文件的Drive Item ID
优化通过Microsoft Graph获取OneDrive文件Drive Item ID的方法
方法一:通过文件直接路径定位(最快)
如果知道目标文件在OneDrive中的具体路径,直接用Get-MgDriveItem通过路径寻址,无需遍历整个Drive,速度会大幅提升。比如文件在根目录的话,路径参数用:/test.xlsx:即可:
$DriveId = "" # 直接通过文件路径获取DriveItem $DriveItem = Get-MgDriveItem -DriveId $DriveId -Path ":/test.xlsx:" $DriveItemID = $DriveItem.Id Get-MgDriveItemVersion -DriveId $DriveId -DriveItemId $DriveItemID
如果文件在子文件夹里(比如Documents/test.xlsx),路径就写:/Documents/test.xlsx:。
方法二:精准优化Search-MgDrive的查询参数
原脚本用-Q "test.xlsx"会返回所有包含该字符串的文件,还要本地用Where-Object过滤,效率很低。可以把查询条件改成精准匹配文件名,让服务端直接过滤结果:
$DriveId = "" # 用name:精准匹配文件名,服务端直接返回符合的结果 $DriveItemID = (Search-MgDrive -DriveId $DriveId -Q "name:test.xlsx").Id Get-MgDriveItemVersion -DriveId $DriveId -DriveItemId $DriveItemID
这样不需要本地再过滤,能减少数据传输量和处理时间。
核心原因
原方法慢是因为Search-MgDrive默认会扫描整个OneDrive的内容再返回匹配结果;而路径定位是直接通过OneDrive的文件系统索引获取目标,相当于直接“跳转到”文件位置,速度差异非常明显。
内容的提问来源于stack exchange,提问作者aasenomad
相关产品推荐
相关产品推荐

