如何用PowerShell通过ServiceNow REST API上传CSV/XLSX至事件?遇415错误
解决ServiceNow附件上传API的415 Unsupported Media Type错误
这个415错误的根源在于你调用ServiceNow附件上传API的方式不对——/api/now/attachment/upload接口要求用multipart/form-data格式提交请求,而不是你当前用的JSON格式,同时也不能直接传文件路径,得把文件内容作为表单数据的一部分上传。
核心问题分析
- 你之前手动设置了
Content-Type: text/csv,还把请求体转成了JSON,这完全不符合接口的要求 - ServiceNow的附件上传接口需要通过表单字段传递三个关键信息:
table_name(表名)、table_sys_id(记录的sys_id)、uploadFile(文件的字节内容),同时可以指定file_name来设置附件在系统中显示的名称
修正后的完整脚本
# 检查并获取ServiceNow凭据 if (!$script:ServiceNowCreds) { $script:ServiceNowCreds = Get-Credential } # 1. 获取目标事件的sys_id $snow_url = 'https://dev652xx.service-now.com/api/now/table/incident' $Body = @{ 'number' = 'INC00xx059' } $result = Invoke-RestMethod -Uri $snow_url -Credential $script:ServiceNowCreds -Body $Body -ContentType "application/json" # 2. 遍历查询结果(按事件编号查询通常只会返回一条记录) $result.result | Select-Object sys_id, number | ForEach-Object { $sys_id = $_.sys_id $incident_number = $_.number Write-Host "准备上传附件到事件: $incident_number (sys_id: $sys_id)" $Upload_snow_url = 'https://dev652xx.servicenow.com/api/now/attachment/upload' # 读取要上传的文件原始字节内容 $filePath = 'C:\Users\suganthanraj.p\Documents\Servers.csv' $fileContent = Get-Content -Path $filePath -Raw -Encoding Byte # 构建multipart/form-data表单参数 $formParams = @{ table_name = 'incident' table_sys_id = $sys_id file_name = [System.IO.Path]::GetFileName($filePath) # 提取纯文件名,避免传递本地路径 uploadFile = $fileContent } # 调用上传接口,使用-Form参数自动处理multipart格式 try { $UploadResult = Invoke-RestMethod -Uri $Upload_snow_url -Credential $script:ServiceNowCreds -Method Post -Form $formParams Write-Host "附件上传成功!返回结果:" $UploadResult } catch { Write-Error "上传失败:$_" } }
关键改动说明
- 移除了手动设置的
Content-Type和Accept头:Invoke-RestMethod使用-Form参数时会自动添加正确的multipart/form-data头,无需手动指定 - 用
Get-Content -Raw -Encoding Byte读取文件的原始字节内容,作为uploadFile字段的值传递给接口,这是ServiceNow识别附件内容的正确方式 - 使用
-Form参数替代-Body,让PowerShell自动处理multipart表单的编码逻辑,避免手动拼接格式出错 - 用
[System.IO.Path]::GetFileName($filePath)提取纯文件名,避免把本地文件路径传递给ServiceNow,保证跨环境兼容性
这样修改后,就能完全符合ServiceNow API的要求,解决415错误了。
内容的提问来源于stack exchange,提问作者Suganthan Raj
相关产品推荐
相关产品推荐

