You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用PowerShell将CSV文件上传至Box文件夹(无硬编码凭证)

无硬编码凭证实现PowerShell上传CSV到Box文件夹

一、安全认证方案(避免硬编码凭证)

推荐两种适合自动化场景的认证方式,完全不需要在脚本里写密码或密钥:

  • Box服务账户(JWT认证):适合无人值守的自动化脚本,通过本地加密的配置文件完成认证,全程无硬编码
  • OAuth2设备授权流:适合需要用户手动授权的场景,脚本运行时会弹出授权提示,凭证不会留存到代码中

二、前期准备

  1. 登录Box开发者控制台,创建一个自定义应用,选择对应的认证类型(优先选服务账户JWT)
  2. 下载应用的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 14:36:16