如何使用PowerShell将CSV文件上传至Box文件夹(无硬编码凭证)
无硬编码凭证实现PowerShell上传CSV到Box文件夹
一、安全认证方案(避免硬编码凭证)
推荐两种适合自动化场景的认证方式,完全不需要在脚本里写密码或密钥:
- Box服务账户(JWT认证):适合无人值守的自动化脚本,通过本地加密的配置文件完成认证,全程无硬编码
- OAuth2设备授权流:适合需要用户手动授权的场景,脚本运行时会弹出授权提示,凭证不会留存到代码中
二、前期准备
- 登录Box开发者控制台,创建一个自定义应用,选择对应的认证类型(优先选服务账户JWT)
- 下载应用的JSON配置文件(包含客户端ID、密钥、公钥等信息),存到只有脚本运行账户能访问的安全路径(比如加密的本地文件夹)
三、使用Box PowerShell模块快速实现
1. 安装模块
Install-Module -Name BoxPSModule -Scope CurrentUser -Force
2. 汇总多台设备的CSV文件
假设各设备的CSV文件都存在本地C:\DeviceData目录下,汇总成单个CSV:
$csvSourceDir = "C:\DeviceData" $combinedCsvPath = "C:\DeviceData\AllDeviceData.csv" # 遍历所有CSV并合并 Get-ChildItem -Path $csvSourceDir -Filter *.csv | ForEach-Object { Import-Csv -Path $_.FullName } | Export-Csv -Path $combinedCsvPath -NoTypeInformation -Encoding UTF8
3. 无硬编码认证并上传
通过环境变量传递配置文件路径,避免硬编码:
# 提前设置环境变量(可在系统设置里配置,或脚本运行前临时设置) # $env:BOX_CONFIG_PATH = "C:\Secure\box-app-config.json" Import-Module BoxPSModule # 用JWT配置文件登录 Connect-Box -ConfigFilePath $env:BOX_CONFIG_PATH # 上传到指定Box文件夹(文件夹ID可在Box网页端地址栏获取) $targetBoxFolderId = "123456789" # 替换为你的目标文件夹ID Upload-BoxFile -FilePath $combinedCsvPath -FolderId $targetBoxFolderId # 断开连接 Disconnect-Box
四、不依赖模块,直接调用Box API实现
如果不想安装第三方模块,可直接调用Box REST API:
1. 获取JWT访问令牌
$config = Get-Content $env:BOX_CONFIG_PATH | ConvertFrom-Json # 生成JWT断言(这里简化逻辑,实际可使用PowerShell的JWT生成工具类) $jwtAssertion = "根据配置文件生成的JWT断言内容" # 请求访问令牌 $tokenResponse = Invoke-RestMethod -Uri "https://api.box.com/oauth2/token" -Method Post -Body @{ grant_type = "urn:ietf:params:oauth:grant-type:jwt-bearer" assertion = $jwtAssertion client_id = $config.clientID client_secret = $config.clientSecret } $accessToken = $tokenResponse.access_token
2. 上传CSV文件
$fileName = (Get-Item $combinedCsvPath).Name # 第一步:获取上传会话 $uploadSession = Invoke-RestMethod -Uri "https://upload.box.com/api/2.0/files/content" -Method Post -Headers @{ Authorization = "Bearer $accessToken" } -Form @{ folder_id = $targetBoxFolderId filename = $fileName } # 第二步:上传文件内容 Invoke-RestMethod -Uri $uploadSession.upload_url -Method Put -InFile $combinedCsvPath -Headers @{ "Content-Type" = "application/octet-stream" }
五、安全注意事项
- 给Box配置文件设置严格的权限,只有脚本运行账户能读取
- 绝对不要把配置文件提交到代码仓库或共享给无关人员
- 定期在Box开发者控制台轮换应用的密钥和证书
内容的提问来源于stack exchange,提问作者shubham kumar
相关产品推荐
相关产品推荐

