Отправка данных в ServiceNow через Powershell с использованием Invoke-WebRequest

Я пытаюсь отправить информацию POST в таблицу в ServiceNow с помощью сценария Powershell. Когда я запускаю его, я получаю ошибку

Invoke-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 

person Ben    schedule 26.06.2017    source источник


Ответы (2)


В ServiceNow есть обозреватель REST API с различными примерами кода, с которыми можно начать работу.

Ниже приведен пример, который я собрал, который отправляет сообщения в таблицу инцидентов с учетной записью администратора. Два важных фактора здесь: у пользователя должны быть роли (здесь для информации https://docs.servicenow.com/bundle/istanbul-servicenow-platform/page/integrate/inbound-rest/reference/r_RESTAPIRoles.html) для использования API и должен иметь доступ к таблице, в которую вы пытаетесь отправить сообщение. Также обратите внимание, что текст сообщения должен быть в формате RAW 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
person Brandon Wilson    schedule 13.07.2017

Несмотря на то, что вы разместили код, вы не разместили ничего, относящегося к проблеме. Каким бы ни был ServiceNow, может иметь API для справки о том, что он ожидает. Часто при взаимодействии с веб-API существует структура, необходимая для того, чтобы API мог понимать данные, которые вы предоставляете в $postParams. Иногда это могут быть просто пары ключ->значение в случае простого HTTP POST, но часто для RESTful API вам нужно структурировать заголовок JSON, как определено в документации API.

Если вы выполните поиск «взаимодействие с powershell servicenow», похоже, что есть проект GitHub для взаимодействия с ServiceNow через PowerShell, а также PDF-файл, который специально охватывает эту тему.

person thepip3r    schedule 26.06.2017