Reputation: 397
Does anyone have experience with using the Websense API through PowerShell? I need to translate the curl commands (which I have working) into Powershell so they can be scripted. Anyone have any resources that would be useful? Examples of curl commands that I need to translate are below:
Start a new transaction:
curl -k -u <username>:<password> -X POST https://<ps_ip_address>:<port>/api/web/v1/categories/start
Add an API-managed category (all data in the HTTPS request):
curl -k -u <username>:<password> -X POST https://<ps_ip_address>:<port>/api/web/v1/categories -d "{\"Transaction ID\":\"<transaction_ID_string>\",\"Categories\": [ {\"Category Name\": \"<name_string>\",\"Category Description\":\"<description_string>\",\"Parent\": <numeric_category_ID>}]}"
Add a URL (all data in the HTTPS request):
curl -k -u <username>:<password> -X POST https://<ps_ip_address>:<port>/api/web/v1/categories/urls -d "{\"Transaction ID\": \"<transaction_ID_string>\",\"Category ID\": <numeric_ID>,\"URLs\":[\"https://www.new_url.com/\"]}" --cacert PolApiServer.crt
Commit the transaction:
curl -k -u <username>:<password> -X POST https://<ps_ip_address>:<port>/api/web/v1/categories/commit?TransactionID="<id_string>"
Upvotes: 2
Views: 18979
Reputation: 894
You could just translate into PowerShell syntax using splatting.
PS> curl.exe '-k',
'-u', '<username>:<password>',
'-X', 'POST ',
'https://<ps_ip_address>:<port>/api/web/v1/categories/start'
PS> curl.exe '-k',
'-u', '<username>:<password>',
'-X', 'POST ',
'https://<ps_ip_address>:<port>/api/web/v1/categories',
'-d', "{\"Transaction ID\":\"<transaction_ID_string>\",\"Categories\": [ {\"Category Name\": \"<name_string>\",\"Category Description\":\"<description_string>\",\"Parent\": <numeric_category_ID>}]}"
PS> curl.exe '-k',
'-u', '<username>:<password>',
'-X', 'POST ',
'https://<ps_ip_address>:<port>/api/web/v1/categories/commit?TransactionID="<id_string>"'
This command will call curl.exe from windows OS. To know where this file just run
PS> Get-Command curl.exe
Upvotes: 0
Reputation: 8538
I am not going to write the interpreter for you but it is most certainly possible...or you could just run curl.exe
from PowerShell (obviously, you'll need to install curl.exe
on the machine you are using to run the curl commands from PowerShell)..
Look into Invoke-WebRequest
or Invoke-RestMethod
- both of those functions exhibit curl-like-behavior.
Edit:
So, the curl
command in PowerShell is nothing more than an alias for Invoke-WebRequest
.. run this: Get-Alias -Definition Invoke-WebRequest
and review the output. Each parameter in Invoke-WebRequest
matches up to a curl
switch. All you have to do is review the curl
documentation, and match their params up to Invoke-WebRequest
params. A lot of what you're asking depends upon the API/site you are sending your HTTP request to (both curl
and Invoke-WebRequest
send HTTP requests).. For example, authenticating to an API/site.. if the site uses Basic Auth you would do something like this in PowerShell:
Invoke-WebRequest -Method Post -Uri "https://<ps_ip_address>:<port>/api/web/v1/categories/start" -Headers @{"Authorization" = "Basic %your_encoded_credentials_here%" }
.. The curl -X
switch represents the HTTP method.. the Invoke-WebRequest -Method
parameter serves the same purpose.. It sounds like you really just need to read up on Invoke-WebRequest
or Invoke-RestMethod
- the only difference in the two is the return they give you.
I think your confusion on how to differentiate, and ultimately interpret, curl
to Invoke-WebRequest
, has to do with the fact that you seem to be fresh into HTTP requests. Both of those commands send HTTP Requests - they just use different switches - if you learn how each command handles HTTP requests, you can interpret from curl
to Invoke-WebRequest
..
More here: Invoke-WebRequest and Invoke-RestMethod
There are also a TON of examples on how to interpret curl
to Invoke-WebRequest
/Powershell
on this site alone.. you just need to brush up on HTTP requests and how curl
handles them and the differences in how Invoke-WebRequest
handles them.
Upvotes: 1
Reputation: 725
Here are a few ways to do so. 1. download curl.exe and point a variable to it then pass the command to it
$curlExe = "C:\download\curl-7.59.0\src\curl.exe"
& $curlExe -i -k -X POST -d '"{\"groupId\": xxxx}"' "https://site/site?access_token=zzzzzz" -s
Another would be
Invoke-RestMethod -uri https://site Get -Headers @{"x-api-key" = "mykey"} -ContentType "application/vnd.api+json" -Credential $adminCredential
I hope this help
Upvotes: 1