我想在 serviceNow(如 Facebook)中创建一个应用程序,它可以通过 OAuth 为不同的实例调用 REST API。
假设,我在 servicenow 的实例 A 中创建了一个应用程序,现在通过适当的 OAuth 和权限机制,我想访问其他实例的 REST API。
到目前为止,我能够创建一个应用程序并将其注册到应用程序注册表中,并且我还能够验证该实例的 Oauth(生成令牌);但现在我想为其他实例执行此操作,而无需每次都创建一个新应用程序。当我尝试这样做时,我收到此错误:
未经授权的客户端:提供的客户端凭据(
您正在使用的服务的凭据)无效或不受信任
我目前正在开发一个 powershell 脚本,该脚本应该能够从现在服务票中下载附加的 excel 文件,在我解释更多之前,请参阅下面的自动化的基本流程。
完成所有这些之后,我在网上找到了一个示例脚本,我正在尝试对其进行配置以满足我的需求;但是,我不确定从哪里获取该示例脚本的值。您可以检查脚本下方的项目符号以了解我想到的问题。
$IncidentNumber = Read-Host -Prompt 'Enter Incident Request #'
#$admin = "admin"
#$password = "admin" | ConvertTo-SecureString -AsPlainText -Force
#$Credential = New-Object pscredential -ArgumentList ($admin,$password)
$Uri = "https://dev42835.service-now.com/api/now/table/incident?sysparm_query=number=$($IncidentNumber)&sysparm_fields=sys_id&sysparm_limit=1"
$IncidentResult = Invoke-RestMethod -Uri $Uri #-Method Get -Credential $Credential
if($IncidentResult.result.sys_id -ne $null) {
$IncidentAttachments = Invoke-RestMethod -Uri "https://dev42835.service-now.com/api/now/attachment?sysparm_query=table_sys_id=$($IncidentResult.result.sys_id)" #-Method Get -Credential $Credential
$IncidentAttachments.result | Select file_name , download_link
}
else{
"Incident Not Found!"
}
Run Code Online (Sandbox Code Playgroud)
我是 powershell 自动化的新手,所以如果您能推荐更好的方法,我将不胜感激。
这是一个 REST API,我正在尝试将数据下载为 CSV 文件。
(function process(/*RESTAPIRequest*/ request, /*RESTAPIResponse*/ response) {
var data = '\n'; // workaround to separate <xml> start tag on first line
data += 'Firstname,Lastname,Username' + '\n';
data += 'Nikhil,vartak,niksofteng' + '\n';
data += 'Unknown,person,anonymous' + '\n';
response.setHeader("Content-Disposition", "attachment;filename=Xyz.csv");
response.setContentType("text/csv");
response.setBody({'data':data});
})(request, response);
Run Code Online (Sandbox Code Playgroud)
根据文档 setBody需要一个 JS 对象,因此如果我只是传递data变量,我会收到错误,指出数据无法解析为ScriptableObject.
因此,使用当前代码我得到以下响应:
{
"result": {
"data": "\nFirstname,Lastname,Username\nNikhil,vartak,niksofteng\nUnknown,person,anonymous\n"
}
}
Run Code Online (Sandbox Code Playgroud)
生成的 CSV 如下所示:
知道如何去掉第一行和第五行的 XML 标记吗?
我正在尝试使用使用 ldap 身份验证的curl 连接到servicenow 服务器。
我的命令:
curl -ntlm -u user https://my.service-now.com/api/now/table/incident
Run Code Online (Sandbox Code Playgroud)
然后我得到:
Enter host password for user 'user':
{"error":{"message":"User Not Authenticated","detail":"Required to provide Auth information"},"status":"failure"}
Run Code Online (Sandbox Code Playgroud)
如何通过curl命令获得身份验证?
我试图将变量传递到 requests.post() 中的数据字段,但我继续收到错误,
Error Response: {'error': {'message': 'Exception while reading request',
'detail': 'Cannod decode: java.io.StringReader@1659711'}, 'status': 'failure'}
Run Code Online (Sandbox Code Playgroud)
这是我的代码
#Fill array from CSV
temp=[]
for row in csv.iterrows():
index, data = row
temp.append(data.tolist())
#Create new asset for all assets in CSV
for index, row in enumerate(temp):
make = temp[index][0]
serial = str(temp[index][1])
date = str(temp[index][2])
response = requests.post(url, auth=(user, pwd), headers=headers,
data='{"asset_tag":"test1", "assigned_to":"test2",
"company":"test3", "serial_number":serial}')
Run Code Online (Sandbox Code Playgroud)
我最初尝试使用直接从 CSV 提供数据
str(temp[index][1])
Run Code Online (Sandbox Code Playgroud)
这不起作用,所以我尝试分配str(temp[index][1])给变量serial,然后像这样传递变量,但这也会导致相同的错误。
如果能找到正确的方向就太好了,谢谢!