如何通过Powershell向Sharepoint、Onedrive或Dropbox的CSV文件追加单行数据
实现方案
完全可以通过PowerShell调用对应平台的开放API实现远程CSV文件追加写入,无需下载完整文件,以下是三个平台的具体实现方案:
一、SharePoint/OneDrive(微软企业生态优先推荐)
前置准备
- 在Azure AD注册应用,获取
TenantID、ClientID、ClientSecret - 为应用授予目标SharePoint站点/OneDrive的
Files.ReadWrite.All(最小权限可仅授权目标文件)应用权限 - 记录目标CSV文件的DriveID和ItemID,可通过Graph API查询获取
示例代码
# 配置参数 $tenantId = "你的租户ID" $clientId = "你的应用ID" $clientSecret = "你的应用密钥" $csvFileId = "目标CSV文件的ItemID" $driveId = "目标文件所在Drive的ID" # 获取访问令牌 $tokenUrl = "https://login.microsoftonline.com/$tenantId/oauth2/v2.0/token" $tokenBody = @{ client_id = $clientId scope = "https://graph.microsoft.com/.default" client_secret = $clientSecret grant_type = "client_credentials" } $tokenResponse = Invoke-RestMethod -Uri $tokenUrl -Method Post -Body $tokenBody $headers = @{Authorization = "Bearer $($tokenResponse.access_token)"} # 构造要追加的CSV行,需和表头列顺序完全一致 $newRecord = [PSCustomObject]@{ 门店ID = "US-NY-001" 访问时间 = (Get-Date).ToString("yyyy-MM-dd HH:mm:ss") 访客姓名 = "John Doe" 备注 = "正常拜访" } # 转换为CSV格式行,去掉表头,添加换行符 $appendContent = ($newRecord | ConvertTo-Csv -NoTypeInformation | Select-Object -Skip 1) + "`n" # 编码为UTF-8避免乱码 $byteContent = [System.Text.Encoding]::UTF8.GetBytes($appendContent) # 调用Graph API追加内容 $uploadUrl = "https://graph.microsoft.com/v1.0/drives/$driveId/items/$csvFileId/content" Invoke-RestMethod -Uri $uploadUrl -Method Patch -Headers $headers -Body $byteContent -ContentType "text/csv"
二、Dropbox实现
前置准备
- 在Dropbox开发者平台创建应用,获取应用AccessToken
- 为应用授予
files.content.write权限,设置可访问目标CSV文件的路径
示例代码
# 配置参数 $dropboxToken = "你的Dropbox应用AccessToken" $targetCsvPath = "/门店访问数据/访问记录.csv" # 构造追加的CSV行 $newRecord = [PSCustomObject]@{ 门店ID = "UK-LN-003" 访问时间 = (Get-Date).ToString("yyyy-MM-dd HH:mm:ss") 访客姓名 = "Tom Smith" 备注 = "设备巡检" } $appendContent = ($newRecord | ConvertTo-Csv -NoTypeInformation | Select-Object -Skip 1) + "`n" $byteContent = [System.Text.Encoding]::UTF8.GetBytes($appendContent) # 调用Dropbox上传API,使用append模式追加内容 $headers = @{ Authorization = "Bearer $dropboxToken" "Dropbox-API-Arg" = (@{ path = $targetCsvPath mode = "append" autorename = $false } | ConvertTo-Json) } Invoke-RestMethod -Uri "https://content.dropboxapi.com/2/files/upload" -Method Post -Headers $headers -Body $byteContent -ContentType "application/octet-stream"
通用注意事项
- 所有门店客户端统一CSV编码为UTF-8、列顺序、换行符格式,避免写入后格式错乱
- 首次写入空CSV文件时需先写入表头,可先查询文件大小,若为0则先写入表头内容再追加数据
- 高并发场景下建议添加本地缓存机制,写入失败时先将数据存在本地临时文件,网络恢复后批量重试上传,避免数据丢失
- 权限分配遵循最小原则,仅给应用分配目标文件的写入权限,不要授予全目录读写权限
内容的提问来源于stack exchange,提问作者Miha Žitko
相关产品推荐
相关产品推荐

