- This topic has 2 replies, 1 voice, and was last updated March 25, 2021 by
Terry W.
Zerto API – Invoke-rest vs invoke-web
You must be logged in to create new topics.
Click here to login
something that always confused me (and this is probably Zerto specific but I’ll throw it out here)
I do all my requests using <strong>invoke-restmethod</strong>
execpt 1, the inital <strong>invoke-webrequest</strong>
to get my token
for example
$ZertoServer = 'zerto-zvm.internaldomain.local' $ZertoPort = "9669" $ZertoUser = "domain\Zerto-account" $ZertoPassword = "HLlmmt2W4rvcs3hlz8w" $BaseURL = "https://$($ZertoServer):$($ZertoPort)/v1" $AuthInfo = ("{0}:{1}" -f $ZertoUser, $ZertoPassword) $AuthInfo = [System.Text.Encoding]::UTF8.GetBytes($AuthInfo) $AuthInfo = [System.Convert]::ToBase64String($AuthInfo) $TokenSplat = @{ Method = 'Post' SkipCertificateCheck = $true Uri = "$BaseURL/session/add" Headers = @{Authorization = ("Basic {0}" -f $AuthInfo) } Body = @{ "AuthenticationMethod" = "1" } | ConvertTo-Json ContentType = "application/JSON" } # Why in gods green earth dosnt this work with invoke rest? $RestResponce = Invoke-RestMethod @TokenSplat $WebResponce = Invoke-WebRequest @TokenSplat $ZToken = @{"x-zerto-session" = "{0}" -f $WebResponce.headers.get_item("x-zerto-session") } $AlertsSpat = @{ Headers = $ZToken Uri = "$BaseURL/alerts" Method = 'Get' SkipCertificateCheck = $true } $AlertsJSON = Invoke-RestMethod @AlertsSpat
so why does (using all the same details mind you)
$RestResponce = Invoke-RestMethod @TokenSplat # Returns Nothing $WebResponce = Invoke-WebRequest @TokenSplat # Returns my session
I see it in everyone’s examples, and its something I don’t understand why <strong>invoke-restmethod</strong>
couldn’t achieve the same thing
not sure what happened to my formatting, but it’s good enough now
I notice I’ve put this in the wrong forum, should have been in the API/REST forum
I cant seem to edit the post
**Solved:** invoke-restmethod
does not return the response headers by default invoke-webrequest
does
Capturing those headers in the variable fixes the problem (ps6/7 only likely), code below
Invoke-RestMethod @TokenSplat -ResponseHeadersVariable RestSessinToken $ZToken = @{"x-zerto-session" = "{0}" -f $RestSessinToken.get_item("x-zerto-session") }