SharePoint Online文件自动删除/归档方案咨询:C#与Azure Blob可行性
一、无代码/低代码实现方案
1. 合规中心保留标签
- 在Microsoft 365合规中心创建保留标签,设置触发条件为「创建/修改时间早于2022-01-01」,动作选择「删除」或「归档到保留库」
- 配置自动应用规则,将标签绑定到目标文档库,系统会自动按规则处理文件
- 局限:归档仅支持Microsoft 365保留库,若要到Azure Blob需结合其他工具
2. Power Automate 自动化流
- 创建定时触发的流(如每周执行),添加「获取文件(属性仅)」动作,筛选条件设为
Created le '2021-12-31'或Modified le '2021-12-31',指定目标文档库 - 分支处理:
- 删除:遍历符合条件的文件,执行「删除文件」动作
- 归档到Azure Blob:先获取文件内容,再通过「创建Blob」动作上传到指定容器,上传完成后可选择删除原文件
二、C#编程实现方案
可以通过Microsoft Graph API(推荐)或SharePoint CSOM实现,以下是核心步骤:
1. 前置准备
- 在Azure AD注册应用,授予
Sites.ReadWrite.All(或文档库级权限)和Storage.BlobContributor权限 - 安装NuGet包:
Microsoft.Graph、Azure.Storage.Blobs
2. 核心代码示例
(1)筛选符合条件的文件
var graphClient = new GraphServiceClient(yourAuthProvider); var siteId = "目标站点ID"; var driveId = "目标文档库ID"; var cutoffDate = new DateTime(2022, 1, 1); // 查询创建时间早于截止日期的文件 var files = await graphClient.Sites[siteId].Drives[driveId].Root .SearchWithQ($"created:<{cutoffDate:yyyy-MM-dd}") .Request() .GetAsync();
(2)批量删除文件
foreach (var file in files) { await graphClient.Sites[siteId].Drives[driveId].Items[file.Id] .Request() .DeleteAsync(); }
(3)归档到Azure Blob并删除原文件
// 初始化Blob客户端 var blobClient = new BlobServiceClient("你的Blob连接字符串") .GetBlobContainerClient("归档容器名称"); await blobClient.CreateIfNotExistsAsync(); foreach (var file in files) { // 获取文件流 using var fileStream = await graphClient.Sites[siteId].Drives[driveId].Items[file.Id] .Content .Request() .GetAsync(); // 上传到Blob await blobClient.UploadBlobAsync(file.Name, fileStream); // 删除原文件 await graphClient.Sites[siteId].Drives[driveId].Items[file.Id] .Request() .DeleteAsync(); }
3. 自动化执行
将程序打包为控制台应用,通过Windows任务计划、Azure Functions或GitHub Actions定时触发运行。
三、关键注意事项
- 权限校验:确保执行账号拥有文档库的读写权限和Blob容器的上传权限
- 测试先行:在测试环境或小范围文档库验证规则/代码,避免误删重要数据
- 日志记录:添加操作日志,记录处理的文件路径、操作结果,便于问题排查
内容的提问来源于stack exchange,提问作者Suprateem Bose
相关产品推荐
相关产品推荐

