我正在尝试复制可以使用Invoke-RestMethod从GUI发送的POST调用。我想自动化它并且一直在尝试使用PowerShell来实现它。
它alwasy返回202代码,现在已经尝试了几个小时,但无法进展。这是我第一次玩invoke-restmedod和Rest所以请详细说明错误。任何帮助都非常感谢。
因此Fiddler捕获的成功电话就是:
powershell代码是:
$WfManDirUserPass = "Password"
$secpasswd = ConvertTo-SecureString $WfManDirUserPass -AsPlainText -Force
$cred = New-Object System.Management.Automation.PSCredential ("admin", $secpasswd)
$active = @{
ipaddress="192.168.100.116"
Port="62805"
status="0"
}
$json = $active | ConvertTo-Json
try{
$response = invoke-restmethod -uri https://myhost/MAM/wfservice/workers/?ip="&"port="&"newStatus=Deactivating -Method POST -Body $json -Credential $cred -ContentType 'application/json'
} catch {
write-host("Sorry, it does not work")
}
Fiddler中的这个powershell代码返回:
我可以看到JSON在附加图像上并不完全相同。但是我现在卡住了,现在真的很感激一些帮助。
答案 0 :(得分:1)
这是1RedOne(Reddit)用户的回复,帮助了我:
首先,让我们将整个-URI用单引号括起来并删除双引号。您的网址可能搞砸了,这无济于事。
$uri = 'https://myhost/MAM/wfservice/workers/?ip=&port=&newStatus=Deactivating'
$ response = invoke-restmethod -uri $ uri-Method POST -Body $ json -Credential $ cred -ContentType'application / json'
2。 此外,来自fiddler的调用使用基本身份验证,可能与使用-Credential对象不兼容。尝试使用此格式替换您的凭据。
$user = "yourusername"
$pass = 'yourPassWord'
# Build auth header
$base64AuthInfo = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(("{0}:{1}" -f $user, $pass)))
# Set proper headers
$headers = New-Object "System.Collections.Generic.Dictionary[[String],[String]]"
$headers.Add('Authorization',('Basic {0}' -f $base64AuthInfo))
然后,在你的Invoke-RestMethod中引用$ header对象,就像这样。
$response = invoke-restmethod -uri $uri- Method POST `
-Body $json -Header $headers -ContentType 'application/json'
就是这样。它就像一个魅力!