求助:使用PowerShell调用Invoke-RestMethod上传CSV至4me/xurrent接口报错
问题排查与解决
错误原因
错误提示中的路径包含System.Collections.Hashtable,核心问题是误用了Invoke-RestMethod的-InFile参数:
-InFile要求传入单个文件路径字符串,但你传入了整个哈希表$importBody- PowerShell尝试将哈希表转换为字符串时,得到了
System.Collections.Hashtable,拼接到用户路径后形成无效路径,最终触发文件找不到的错误
解决方法
修改代码,使用-Form参数处理多部分表单数据(同时上传文件和其他字段),并移除手动设置的Content-Type头(PowerShell会自动生成正确的multipart/form-data请求头):
$importUrl = "https://api.xurrent.qa/v1/import" # Create the headers for the import request $ImportHeaders = @{ Authorization = "Bearer $bearerToken" "X-4me-Account" = "XXX" } # Create the body for the import request $importBody = @{ file = Get-Item $ImportFile # 转换为FileInfo对象,确保PowerShell正确识别文件 type = "cis" } # QA Import to Xurrent with PROXY $importResponse = Invoke-RestMethod -Method Post -Uri $importUrl -Headers $ImportHeaders -Form $importBody
关键修改点
- 移除
ImportHeaders中的"Content-Type" = "multipart/form-data":手动设置会覆盖PowerShell自动生成的带边界标识的正确请求头,导致服务端无法解析表单内容 - 将
-inFile $importBody替换为-Form $importBody:-Form参数专门用于处理multipart/form-data类型的请求,支持同时传递文件和普通表单字段 - 用
Get-Item $ImportFile将文件路径转换为FileInfo对象:确保PowerShell能正确识别并读取目标文件的内容
内容的提问来源于stack exchange,提问作者Beorn
相关产品推荐
相关产品推荐

