登录
/
注册
首页
论坛
其它
首页
科技
业界
安全
程序
广播
Follow
关于
导读
排行榜
资讯
发帖说明
登录
/
注册
账号
自动登录
找回密码
密码
登录
立即注册
搜索
搜索
关闭
CSDN热搜
程序园
精品问答
技术交流
资源下载
本版
帖子
用户
软件
问答
教程
代码
写记录
写博客
小组
VIP申请
VIP网盘
网盘
联系我们
发帖说明
道具
勋章
任务
淘帖
动态
分享
留言板
导读
设置
我的收藏
退出
腾讯QQ
微信登录
返回列表
首页
›
业界区
›
安全
›
如何在Azure Pipeline中使用PowerShell从OneDrive for B ...
如何在Azure Pipeline中使用PowerShell从OneDrive for Business下载指定文件
[ 复制链接 ]
韶侪
2026-1-25 18:55:01
程序园永久vip申请,500美金$,无限下载程序园所有程序/软件/数据/等
最近在配置AzureDevOps Pipeline的时候需要在执行任务之前下载一个cli工具,但是由于工具的下载服务器速度不稳定,有时候会造成Pipeline执行速度过慢导致整个流水线超时,这时我想到可以把文件上传到OneDrive for Business,这样当在同一个区域访问的时候,因为都在Azure的相同Region,可以直接通过内网下载文件,确保了访问速度。
但是接下来的问题是Azure Pipeline没有直接提供从OneDrive for Business获取文件的工具,通过查看Github文档内Microsoft hosted agent的定义文件:
Ubuntu2404-Readme.md
我发现系统默认安装了:PowerShell,Microsoft.Graph,于是我想到可以使用PowerShell的Microsoft.Graph模块来下载文件。
根据文档,Microsoft.Graph需要先登录,登录方式支持多种方式,适合Pipeline使用的是证书验证或客户端密钥验证,我选择使用客户端密钥验证。
无论使用证书验证还是客户端密钥验证都需要在Microsoft Entra ID里面先注册应用,并设置访问Microsoft Graph API访问的应用权限。
在设置权限并生成了客户端密钥后,就可以通过Microsoft.Graph模块访问OneDrive for Business数据。以下是登录的PowerShell脚本:
Import-Module Microsoft.Graph.Authentication
Import-Module Microsoft.Graph.Files
Write-Host "Microsoft.Graph modules imported."
$SecureSecret = ConvertTo-SecureString -String $(ClientSecret) -AsPlainText -Force
$Credential = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList $(ClientId), $SecureSecret
Write-Host "Connecting Microsoft.Graph"
Connect-MgGraph -TenantId $(TenantId) -ClientSecretCredential $Credential -NoWelcome
登陆完成后可以继续获取数据,脚本如下:
$Drive = Get-MgUserDefaultDrive -UserId $(User)
$DriveItem = Get-MgDriveItem -DriveId $Drive.Id -DriveItemId $(ItemPath)
注意,在获取完Drive信息后,本来是可以直接使用Get-MgDriveItemContent
Get-MgDriveItemContent -DriveId -DriveItemId -OutFile
下载文件到指定目录,但是这个命令在Linux发行版里面有Bug,详见Github issue: Get-MgDriveItemContent_Get: Cannot set percent because PercentComplete cannot be greater than 100. (Parameter 'value') Actual value was 2147483647. #3105
所以我不得不使用先通过Get-MgDriveItem获取下载链接再使用Invoke-WebRequest下载文件的方式完成。
这里面有个坑,按照文档和示例,
获取Item可以使用ItemID或Item的路径,但对于路径的规则设定,文档里没有明确给出示例,比如我把文件A.txt放在根目录下,那么我会认为路径就是"/A.txt"或"A.txt",但很可惜,这两种路径调用都会直接返回400错误,说明路径的格式不正确,后来我注意到文档的Http示例里面有一个这样的请求URL:
GET /drives/{drive-id}/root:/{item-path}
于是我想到,需要在path前面加上/root:/变成/root:/A.txt才是正确的路径格式。
获取到DriveItem后,需要提取下载地址,这里会遇到第二个坑,根据文档
获取到的DriveItem内有一个
@microsoft.graph.downloadUrl
可以获取到一个不需要身份验证就能下载文件的临时地址,但如果在PowerShell里面直接访问这个属性会返回空结果,文档里关于返回的driveItem的数据结构说明也很明确应该直接通过对象访问属性:
DriveItem JSON representation
文档看完以后就更迷糊到底这个属性在哪里?
原来由于'@microsoft.graph.downloadUrl'的命名方式由于不满足C#的属性命名规则,于是DriveItem里面设置了一个AdditionalProperties,以Key-Value的形式保存了这个属性,很奇怪的是这一点在PowerShell的文档示例里面完全没有提到。知道了这一点获取这个属性就很容易了。
$DownloadUrl = $DriveItem.AdditionalProperties['@microsoft.graph.downloadUrl']
Invoke-WebRequest -Uri $DownloadUrl -OutFile $(DownloadPath)
Disconnect-MgGraph
折腾了半天,终于搞定了在Azure Pipeline的Linux agent下通过PowerShell下载OneDrive for Business文件的任务。
这里的坑主要在于文档示例语焉不详和一个陈年bug一直不修,只有踩完一遍坑才能完成这个看起来很简单的需求。
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
何在
Azure
Pipeline
使用
PowerShell
相关帖子
使用腾讯云免费轻量云服务器搭建一个 clawdbot (Moltbot) 服务
使用腾讯云免费轻量云服务器搭建一个 clawdbot (Moltbot) 服务
使用腾讯云免费轻量云服务器搭建一个 clawdbot (Moltbot) 服务
如何在 linux 下使用命令行调试器调试 C# 程序
使用C#调用Yolo26模型的ONNX
使用ui-ux-pro-max skill设计网页
从0到1,快速训练并使用YOLO模型
Arthas使用
Spring AI学习:使用WSL2安装Ubuntu&安装redis-8.4.0
回复
使用道具
举报
提升卡
置顶卡
沉默卡
喧嚣卡
变色卡
千斤顶
照妖镜
相关推荐
安全
使用腾讯云免费轻量云服务器搭建一个 clawdbot (Moltbot) 服务
2
190
刘凤
2026-01-29
安全
使用腾讯云免费轻量云服务器搭建一个 clawdbot (Moltbot) 服务
2
118
溧久苟
2026-01-29
安全
使用腾讯云免费轻量云服务器搭建一个 clawdbot (Moltbot) 服务
1
829
乱蚣
2026-01-29
安全
如何在 linux 下使用命令行调试器调试 C# 程序
0
462
臧莞然
2026-01-29
安全
使用C#调用Yolo26模型的ONNX
0
375
莠畅缕
2026-01-30
安全
使用ui-ux-pro-max skill设计网页
0
516
方方仪
2026-01-30
业界
从0到1,快速训练并使用YOLO模型
0
839
坡琨
2026-01-31
业界
Arthas使用
1
588
箝德孜
2026-02-02
业界
Spring AI学习:使用WSL2安装Ubuntu&安装redis-8.4.0
0
161
陶田田
2026-02-02
回复
(2)
蒋炸役
7 天前
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
感谢分享
褥师此
6 天前
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
这个有用。
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
|
立即注册
回复
本版积分规则
回帖并转播
回帖后跳转到最后一页
浏览过的版块
业界
科技
签约作者
程序园优秀签约作者
发帖
韶侪
6 天前
关注
0
粉丝关注
16
主题发布
板块介绍填写区域,请于后台编辑
财富榜{圆}
3934307807
991124
anyue1937
9994892
kk14977
6845359
4
xiangqian
638210
5
宋子
9939
6
韶又彤
9952
7
闰咄阅
9993
8
刎唇
9995
9
蓬森莉
9921
10
俞瑛瑶
9998
查看更多
今日好文热榜
727
细节全公开!我是如何用 AI 一天上线一个网
691
MCP官方Go SDK尝鲜
264
基于允许非法状态的贪心策略
766
[大模型实战 02] 图形化的大模型交互: Open
344
数据一致性与容灾——RTO/RPO指标、备份演
971
Modbus 协议 学习一则
325
洛谷 P3503 [POI 2010] KLO-Blocks 题解
4
AI驱动的业务开发新范式:将Skills引入工程
422
DTS按业务场景批量迁移阿里云MySQL库实战(
137
从零学习Kafka:配置参数
507
高性价比小程序商城 SaaS 平台推荐!赋能中
510
OpenClaw架构解析:AI工程师的实战学习范本
640
AI Agent 框架探秘:拆解 OpenHands(5)--
876
一个昏暗的编程教室,电脑屏幕前坐着一位程
535
C++算法算法训练第十二天
914
语言开发随笔2
881
Ivanti EPMM RCE CVE-2026-1340/1281完整分
744
城市智能体:宜昌点军区算力供应链平台的区
252
微软发布Maia200,它也开始与英伟达谷歌掰
923
微软发布Maia200,它也开始与英伟达谷歌掰