So einfach geht Salesforce REST mit Powershell
Es muss ja nicht immer curl
sein. //
Salesforce Setup
- Eine konfigurierte connected App (Unter Apps => Create)
- Relaxed IP Restrictions
- All User may self authorize
- aktivierte myDomain
- full OAUTH Scope (nur zum privaten Test, wenn das klappt, weiter einschränken)
- Client ID und Client Secret der connected App
- Username, Paßwort und Security Token
Powershell Script
Mittels weniger Zeilen hole ich eine strukturierte Liste meiner zu letzt verwendenten Salesforce Objekte vom Recent
Endpoint ab.
$instance = "https://sz-dev-ed.my.salesforce.com"
$services = Invoke-RestMethod -uri ($instance+"/services/data/v39.0") -Headers (getHeaders $instance)
Invoke-RestMethod -uri ($instance+$services.recent) -Headers (getHeaders $instance)
Das bißchen magic sauce besteht aus der kleinen Funktion getHeaders
, in der alles nötige eingetragen und TLS 1.2 festgeschrieben ist. Für den persönlichen Gebrauch habe ich verschiedene Environment Variabeln angelegt, damit die Funktion wiederverwendbar ist. Zur Laufzeit geht das mit $env:TestVariable = "This is a test environment variable."
function getHeaders(){
# set tls properly by configuring .NET framework
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
# use mydomain url
$instance = $args[0]
$uri = $instance+"/services/oauth2/token"
$body = @{
grant_type="password";
client_id="3MXXXXXXXX....";
client_secret="111800.......";
username="user@salesforce.com";
password="myPasswordMyToken";
}
$token = (Invoke-RestMethod -Uri $uri -Method POST -Body $body).access_token
return $headers = @{
Authorization = "Bearer $token"
}
}
PS: In Powershell 3.0 gibts auch curl
. Das ist ein Alias für Invoke-WebRequest
, verhält sich aber oft gleich - ist aber nicht dasselbe :). Invoke-RestMethod
bietet mehr Möglichkeiten im Umgang mit REST.