2017-02-23 7 views
1

私はこれら2つの(動作中の)カールコマンドをpowershellに翻訳しようとしています。 Invoke-WebRequestでCookieをどのように保存しますか?Powershellは認証にクッキーを使用します

セッションCookieのbashの取得

curl -k \ 
--cookie-jar cookie \ 
-H 'Content-Type: application/json' \ 
-d '{"jsonrpc": "2.0", "id": 1, "method": "login", "params": {"username": "bob", "password": "correct-horse-battery-staple"}}' \ 
https://foo.example.com/api/session 

取得セッションCookieのPowerShellの

$data = @{} 
$data.jsonrpc = '2.0' 
$data.id = '1' 
$data.method = 'login' 
$data.params = @{} 
$data.params.username = 'bob' 
$data.params.password = 'correct-horse-battery-staple' 
$url = "https://foo.example.com/api/session" 
$webrequest = Invoke-WebRequest -Method POST ` 
-ContentType 'application/json' ` 
-Body $data ` 
-Uri $url ` 
-SessionVariable websession ` 
-UseBasicParsing 
$cookies = $websession.Cookies.GetCookies($url) 
Write-Host "$($cookies[0].name) = $($cookies[0].value)" 

のGetバージョンのbash

curl -k \ 
--cookie cookie \ 
-H 'Content-Type: application/json' \ 
-d '{"jsonrpc": "2.0", "id": 2, "method": "version"}' \ 
https://foo.example.com/api/about 

のGetバージョンのPowerShell

$data = @{} 
$data.jsonrpc = '2.0' 
$data.id = '2' 
$data.method = 'version' 
$url = "https://foo.example.com/api/about" 
Invoke-WebRequest -Method POST ` 
-ContentType 'application/json' ` 
-Body $data ` 
-Uri $url ` 
-WebSession $websession ` 
-UseBasicParsing 

2番目のコマンドが正常にクッキーを渡すとエラーが返されていません

StatusCode  : 200 
StatusDescription : OK 
Content   : {"error":{"code":-32000,"message":"Decoding failed: Syntax error","data":null},"id":null} 
RawContent  : HTTP/1.1 200 OK 
        Pragma: no-cache 
        Keep-Alive: timeout=5, max=100 
        Connection: Keep-Alive 
        Content-Length: 89 
        Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0 
        Content-Ty... 
Forms    : 
Headers   : {[Pragma, no-cache], [Keep-Alive, timeout=5, max=100], [Connection, Keep-Alive], [Content-Length, 89]...} 
Images   : {} 
InputFields  : {} 
Links    : {} 
ParsedHtml  : 
RawContentLength : 89 

「の復号化が失敗した」なぜ成功したクッキーでの認証が、PowerShellのエラーカールのでしょうか? APIはJSON

$data.gettype() 

IsPublic IsSerial Name          BaseType 
-------- -------- ----          -------- 
True  True  Hashtable        System.Object 

ソリューションはに$データを変換することです期待し、一方、$データ変数変数$ websession

$websession 

Headers    : {} 
Cookies    : System.Net.CookieContainer 
UseDefaultCredentials : False 
Credentials   : 
Certificates   : 
UserAgent    : Mozilla/5.0 (Windows NT; Windows NT 6.3; en-US) 
         WindowsPowerShell/5.0.10586.117 
Proxy     : 
MaximumRedirection : -1 

答えて

1

Found the solution here

を見てみると

は、オブジェクトでありますjson (ConvertTo-Json $data)

Invoke-WebRequest -Method POST ` 
-ContentType 'application/json' ` 
-Body (ConvertTo-Json $data) ` 
-Uri $url ` 
-WebSession $websession ` 
-UseBasicParsing 
関連する問題