使用Invoke WebRequest通过Powershell向ServiceNow发布数据

使用Invoke WebRequest通过Powershell向ServiceNow发布数据,powershell,soap,servicenow,invoke-command,Powershell,Soap,Servicenow,Invoke Command,我正试图通过Powershell脚本将信息发布到ServiceNow中的表中。当我运行它时,我得到一个错误 调用WebRequest:远程服务器返回错误:(500)内部服务器错误 有人能帮我解决这个问题吗?提前谢谢大家 $userName = 'helpMe' $password = 'iAmStuck' | ConvertTo-SecureString -asPlainText -Force $cred = New-Object System.Management.Automation.PSC

我正试图通过Powershell脚本将信息发布到ServiceNow中的表中。当我运行它时,我得到一个错误

调用WebRequest:远程服务器返回错误:(500)内部服务器错误

有人能帮我解决这个问题吗?提前谢谢大家

$userName = 'helpMe'
$password = 'iAmStuck' | ConvertTo-SecureString -asPlainText -Force
$cred = New-Object System.Management.Automation.PSCredential($userName, $password)
$uri = 'stuff'
$postParams = "test"
#[System.Net.ServicePointManager]::ServerCertificateValidationCallback = {$true}
Invoke-WebRequest -Uri $uri -Method Post -Body $postParams -Credential $cred 

即使您发布了代码,也没有发布与问题相关的内容。无论ServiceNow是什么,都可能有一个API作为其预期的参考。通常,当与基于web的API交互时,API需要一个结构,以便能够理解您以$postParams格式提供的数据。有时,在平面HTTP POST的情况下,它可能只是键->值对,但对于RESTful API,通常需要按照API文档的定义构造JSON头


如果您搜索“servicenow powershell交互”,看起来有一个GitHub项目可以通过powershell与servicenow交互,还有一个PDF文件专门介绍了此主题。

servicenow有一个REST API资源管理器,其中包含各种代码示例

下面是一个我用管理员帐户发布到事件表的示例。这里有两个重要因素,用户必须具有角色(此处提供信息)才能使用API,并且必须能够访问您试图发布到的表。另外,请注意文章的主体需要是原始JSON,URL中提供了所有正确的标题数据。如果成功,ServiceNow将返回关于帖子的JSON数据

# Eg. User name="admin", Password="admin" for this code sample.
$user = "admin"
$pass = "noPassword"

# Build auth header
$base64AuthInfo = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(("{0}:{1}" -f $user, $pass)))

# Set proper headers
$headers = New-Object "System.Collections.Generic.Dictionary[[String],[String]]"
$headers.Add('Authorization',('Basic {0}' -f $base64AuthInfo))
$headers.Add('Accept','application/json')
$headers.Add('Content-Type','application/json')

# Specify endpoint uri
$uri = "https://xxxxx.service-now.com/api/now/table/incident"

# Specify HTTP method
$method = "post"

# Specify request body
{request.body ? "$body = \"" :""}}{\"active\":\"true\",\"number\":\"123\",\"short_description\":\"test\"}"

# Send HTTP request
$response = Invoke-WebRequest -Headers $headers -Method $method -Uri $uri -Body $body

# Print response
$response.RawContent