登录
/
注册
首页
论坛
其它
首页
科技
业界
安全
程序
广播
Follow
关于
导读
排行榜
资讯
发帖说明
登录
/
注册
账号
自动登录
找回密码
密码
登录
立即注册
搜索
搜索
关闭
CSDN热搜
程序园
精品问答
技术交流
资源下载
本版
帖子
用户
软件
问答
教程
代码
写记录
写博客
小组
VIP申请
VIP网盘
网盘
联系我们
发帖说明
道具
勋章
任务
淘帖
动态
分享
留言板
导读
设置
我的收藏
退出
腾讯QQ
微信登录
1
2
/ 2 页
下一页
返回列表
首页
›
业界区
›
安全
›
如何在Azure Pipeline中使用PowerShell从OneDrive for B ...
如何在Azure Pipeline中使用PowerShell从OneDrive for Business下载指定文件
[ 复制链接 ]
韶侪
2026-1-25 18:55:01
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
最近在配置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
相关帖子
用Mac的朋友们,你们都在使用Homebrew了吗
使用程序化的流程让智能体工作
MySQL不推荐使用UUID等字符串做主键
大模型使用中遇到的坑——HTTP query 参数探讨
Claude Code安装和使用教程
【译】 Microsoft.Testing.Platform 现已在 Azure DevOps 中得到全面支持
【译】 如何使用 .NET MAUI 构建 iOS 小部件
【UWP】使用 Vue/Vite 编写 WinJS/UWP
使用钉钉远程操作你的claude code
使用Microsoft Agent Framework构建C# AI代理
回复
使用道具
举报
提升卡
置顶卡
沉默卡
喧嚣卡
变色卡
千斤顶
照妖镜
相关推荐
业界
用Mac的朋友们,你们都在使用Homebrew了吗
0
670
嘀荼酴
2026-03-12
安全
使用程序化的流程让智能体工作
0
24
煞赶峙
2026-03-13
业界
MySQL不推荐使用UUID等字符串做主键
0
606
司寇涵涵
2026-03-15
安全
大模型使用中遇到的坑——HTTP query 参数探讨
0
999
铜坠匍
2026-03-15
安全
Claude Code安装和使用教程
0
6
驳嗦
2026-03-16
业界
【译】 Microsoft.Testing.Platform 现已在 Azure DevOps 中得到全面支持
0
536
甘子萱
2026-03-20
业界
【译】 如何使用 .NET MAUI 构建 iOS 小部件
0
971
剩鹄逅
2026-03-21
安全
【UWP】使用 Vue/Vite 编写 WinJS/UWP
0
200
颜清华
2026-03-21
业界
使用钉钉远程操作你的claude code
0
323
呈步
2026-03-21
业界
使用Microsoft Agent Framework构建C# AI代理
0
429
呈步
2026-03-22
回复
(25)
蒋炸役
2026-1-27 02:49:24
回复
使用道具
举报
照妖镜
程序园永久vip申请,无限下载程序园所有程序/软件/数据/等
感谢分享
褥师此
2026-1-28 02:29:27
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
这个有用。
娄静曼
2026-2-3 10:38:50
回复
使用道具
举报
照妖镜
程序园永久vip申请,无限下载程序园所有程序/软件/数据/等
很好很强大 我过来先占个楼 待编辑
遇玷
2026-2-4 05:36:39
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
这个有用。
匡菲
2026-2-6 04:09:46
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
感谢分享,学习下。
柴古香
2026-2-6 10:04:26
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
很好很强大 我过来先占个楼 待编辑
伯斌
2026-2-7 06:20:28
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
用心讨论,共获提升!
俞秋荣
2026-2-7 07:00:43
回复
使用道具
举报
照妖镜
程序园永久vip申请,无限下载程序园所有程序/软件/数据/等
谢谢楼主提供!
峰埋姚
2026-2-8 05:46:24
回复
使用道具
举报
照妖镜
程序园永久vip申请,无限下载程序园所有程序/软件/数据/等
收藏一下 不知道什么时候能用到
汲佩杉
2026-2-9 05:38:26
回复
使用道具
举报
照妖镜
程序园永久vip申请,无限下载程序园所有程序/软件/数据/等
热心回复!
沃盼盼
2026-2-9 11:49:01
回复
使用道具
举报
照妖镜
程序园永久vip申请,无限下载程序园所有程序/软件/数据/等
新版吗?好像是停更了吧。
劳暄美
2026-2-9 15:19:02
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
热心回复!
命煦砌
2026-2-9 18:54:15
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
新版吗?好像是停更了吧。
乱蚣
2026-2-9 21:28:12
回复
使用道具
举报
照妖镜
程序园永久vip申请,无限下载程序园所有程序/软件/数据/等
谢谢分享,试用一下
驶桐柢
2026-2-10 06:01:38
回复
使用道具
举报
照妖镜
程序园永久vip申请,无限下载程序园所有程序/软件/数据/等
鼓励转贴优秀软件安全工具和文档!
挫莉虻
2026-2-11 14:46:03
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
鼓励转贴优秀软件安全工具和文档!
厌外
2026-2-12 10:35:17
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
很好很强大 我过来先占个楼 待编辑
溜椎干
2026-2-13 09:43:27
回复
使用道具
举报
照妖镜
程序园永久vip申请,无限下载程序园所有程序/软件/数据/等
分享、互助 让互联网精神温暖你我
顶豌
2026-2-13 13:15:20
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
感谢分享,下载保存了,貌似很强大
下一页 »
1
2
/ 2 页
下一页
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
|
立即注册
回复
本版积分规则
回帖并转播
回帖后跳转到最后一页
浏览过的版块
业界
程序
签约作者
程序园优秀签约作者
发帖
韶侪
2026-2-13 13:15:20
关注
0
粉丝关注
16
主题发布
板块介绍填写区域,请于后台编辑
财富榜{圆}
3934307807
991125
anyue1937
9994892
kk14977
6845359
4
xiangqian
638210
5
神泱
9522
6
韶又彤
9912
7
宋子
9878
8
荪俗
9016
9
闰咄阅
9995
10
刎唇
9995
查看更多
今日好文热榜
506
【节点】[SampleTexture3D节点]原理解析与
166
记一次Webshell流量分析 | 添柴不加火
975
旧安卓手机部署openclaw
631
AI编程时代,35岁以上程序员将何去何从?
827
[Refactor]CPP Learn Data Day 1
0
Block Copy 的内存布局详解
613
把 Flask 搬进 ESP32,高中生自研嵌入式 We
5
渐得如意智能自动化办公平台——定义属于你
889
[AI/Agent/社交] AI Agent社交网络产品:Mo
526
C++协程入门
284
TCSSOFTDEPTCOPY.zip Can download source
801
Vue3 + Iframe 实战:打造企业级流程配置中
823
“你用AI,那我也会用AI,我还要你干什么?
621
自感痕迹论:先验意义场域与经验痕迹内外
9
一道KMP统考真题彻底讲透:nextval与滑动距
7
一道KMP统考真题彻底讲透:nextval与滑动距
741
从 Clubhouse 的崛起与陨落,看语聊房 RTC
244
老马失前蹄,竟然在数据库外键上翻车了,重
8
老马失前蹄,竟然在数据库外键上翻车了,重
7
老马失前蹄,竟然在数据库外键上翻车了,重