.net Powershell 2.0 Webrequest POST

.net Powershell 2.0 Webrequest POST,.net,powershell,powershell-2.0,invoke,.net,Powershell,Powershell 2.0,Invoke,我是Powershell的初学者,不知道是否有人能帮我完成以下工作 $baseurl = "some url address" $Body = @{ jsonrpc = "2.0" method = "user.login" params = @{ user = "username" password = "password" }

我是Powershell的初学者,不知道是否有人能帮我完成以下工作

$baseurl = "some url address"
$Body = @{
    jsonrpc = "2.0"
    method = "user.login"
    params = @{
        user = "username"
        password = "password"
    }
    id = 1
    auth = $null
}

$BodyJSON = ConvertTo-Json $Body
write-host $BodyJSON
try {
    $zabSession = Invoke-RestMethod ("$baseurl/api_jsonrpc.php") -ContentType "application/json" -Body $BodyJSON -Method Post | `
    Select-Object jsonrpc,@{Name="session";Expression={$_.Result}},id,@{Name="URL";Expression={$baseurl}}

问题是我需要将上面的方法转换为在powershell 2.0中使用,因为invoke restmethod不起作用。有人能提供代码或其他帮助吗?我正在苦苦挣扎。多谢各位

为了实现与PowerShell v2中Invoke-RestMethod cmdlet类似的功能,我认为您需要使用.NET System.NET.WebRequest&System.IO.StreamWriter/StreamReader类。下面是一个模拟Invoke-RestMethod cmdlet基本功能的快速函数

函数调用列表{
[CmdletBinding()]
Param(
[参数(必需=$true,位置=0)]
[字符串]$URI,
[参数(必需=$true,位置=1)]
[字符串]$ContentType,
[参数(必需=$false,位置=2)]
[string]$Body,
[参数(必需=$false,位置=3)]
[ValidateSet('POST','GET')]#您可以将其扩展到所有System.Net.WebRequest方法。
[string]$Method='POST'
)
试一试{
$restRequest=[System.Net.WebRequest]::创建($URI)
$restRequest.ContentType=$ContentType
$restRequest.Method=$Method
如果($Method-eq'POST'){
$encoding=[System.Text.encoding]::UTF8
$restRequestStream=$restRequest.GetRequestStream()
$restRequestWriter=New Object System.IO.StreamWriter($restRequestStream,$encoding)
$restRequestWriter.Write($Body)
}
}
最后{
如果($null-ne$restStream){$restRequestStream.Dispose()}
如果($null-ne$restWriter){$restRequestWriter.Dispose()}
}
试一试{
$restResponse=$restRequest.GetResponse()
$restResponseStream=$restResponse.GetResponseStream()
$responseStreamReader=新对象System.IO.StreamReader($responseStreamReader)
$responseString=$responseStreamReader.ReadToEnd()
}
最后{
如果($null-ne$response){$response.Dispose()}
如果($null-ne$responsestream){$responsestream.Dispose()}
如果($null-ne$responseStreamReader){$responseStreamReader.Dispose()}
}
返回$responseString
}

此函数将以字符串形式返回响应。然后可以将字符串转换为适当的类型(convertfromjson/convertfromyaml/customconverter)。

堆栈溢出不是一种代码编写服务。请参考文档,做独立的研究,并尝试自己解决问题。对-但这是一个提供帮助的平台,所以也许让我们支持,如果你有任何信息,请告诉我。此外,我一直在做这方面的研究,试图解决这一问题,因此我在这里寻求帮助。更新问题,包括您尝试过的内容和不起作用的内容。非常感谢!我用了你写的东西,用了下面的东西,写了一个比你更简单的版本,但效果很好!非常感谢你!!