如何用PowerShell调用BambooHR API下载CSV报告?
解决BambooHR API PowerShell自动下载CSV报告的问题
我帮你梳理下这个问题,你遇到的「The underlying connection was closed」错误,大概率是TLS版本不兼容导致的——BambooHR的API要求使用TLS 1.2或更高版本,但默认的PowerShell环境可能还在使用老旧的TLS协议。另外你的原命令还有几个需要修正的地方,下面一步步给你搞定:
第一步:先启用正确的TLS版本
在调用下载命令之前,先执行这行代码,强制PowerShell使用TLS 1.2:
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
第二步:调整身份验证和URI格式
你原命令里直接把API Token塞在URL里的方式容易出解析问题,而且URI用了HTTP(BambooHR API只支持HTTPS),咱们换更规范的凭证传递方式:
首先,把你的API Token和固定密码「x」转换成PowerShell能识别的凭证对象:
$apiToken = "你的API_TOKEN" $password = ConvertTo-SecureString "x" -AsPlainText -Force $credential = New-Object System.Management.Automation.PSCredential ($apiToken, $password)
然后构造正确的HTTPS请求地址,记得把占位符换成你自己的信息:
$uri = "https://api.bamboohr.com/api/gateway.php/你的公司域名/reports/你的报告ID/?format=csv"
这里的「你的公司域名」是你登录BambooHR时的前缀(比如你登录地址是acme.bamboohr.com,就填acme);「你的报告ID」可以在浏览器打开报告时从URL里找到,或者用报告的自定义别名。
第三步:执行下载并保存CSV
最后调用命令把报告下载到指定路径:
Invoke-WebRequest -Uri $uri -Credential $credential -OutFile "C:\你要保存的路径\BambooHR_Report.csv"
完整可直接用的脚本
把上面的内容整合起来,替换掉占位符就能用:
# 强制启用TLS 1.2,解决连接关闭问题 [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12 # 配置BambooHR API凭证 $apiToken = "替换成你的API_TOKEN" $password = ConvertTo-SecureString "x" -AsPlainText -Force $credential = New-Object System.Management.Automation.PSCredential ($apiToken, $password) # 构造请求地址 $companyName = "替换成你的公司域名前缀" $reportId = "替换成你的报告ID或别名" $uri = "https://api.bamboohr.com/api/gateway.php/$companyName/reports/$reportId/?format=csv" # 下载并保存CSV报告 Invoke-WebRequest -Uri $uri -Credential $credential -OutFile "C:\Downloads\BambooHR_Employee_Report.csv"
额外检查项
- 确认你的API Token在BambooHR后台有访问该报告的权限(可以在BambooHR的API设置里核对)
- 检查URI里的报告ID/别名是否正确,浏览器里能打开的报告地址,替换成API格式后应该也能正常访问
内容的提问来源于stack exchange,提问作者Michael De Abreu
相关产品推荐
相关产品推荐

