Invoke-WebRequest 中的 SessionVariable 参数化
SessionVariable parametrised in Invoke-WebRequest
我想将一个变量作为参数传递给 SessionVariable
,这样我就可以为 SessionObject
使用任何名称,这样我就可以 test/send 给其他函数,而不是很高兴它被硬编码...即传递 $TCSessionVar
而不是硬编码的 TCSessionVar
参数。
$Response= Invoke-WebRequest -Uri $TeamCityUrl `
-SessionVariable $TCSessionVar -Method `
Get -Headers @{"Authorization"="Basic $Encoded"}
$ReturnObject =New-Object PSCustomObject @{
SessionVar=[Microsoft.PowerShell.Commands.WebRequestSession]$TCSessionVar
Response=$Response
}
我得到的错误是:
Cannot convert the "Microsoft.PowerShell.Commands.WebRequestSession" value of type "System.String" to type "Microsoft.PowerShell.Commands.WebRequestSession".
--注意:我可以从响应中创建 WebReuestSessionObject,但是 SessionVariable 毫无意义..
$TCCookieName="TCSESSIONID"
$Cookies=$Response.Headers.'set-cookie'
$TCCookie= $cookies.Split(";")| Where-Object {$_ -match $TCCookieName}
$CookieName=$TCCookie.Split("=")[0]
$CookieValue=$TCCookie.Split("=")[1]
$TCSession = New-Object Microsoft.PowerShell.Commands.WebRequestSession
$cookie = New-Object System.Net.Cookie
$cookie.Name = $CookieName
$cookie.Value = $CookieValue
$cookie.Domain=([uri]$TeamCityUrl).Host
$TCSession.Cookies.Add($cookie);
如果我
-SessionVariable (get-variable -name "TCSessionVar" -ValueOnly)
并得到如下响应:(get-variable -name (get-variable "TCSessionVar" -valueonly) -valueonly)
$Response= Invoke-WebRequest -Uri $TeamCityUrl -SessionVariable (get-variable -name "TCSessionVar" -ValueOnly) -Method Get -Headers @{"Authorization"="Basic $Encoded"}
$ReturnObject =New-Object PSCustomObject @{
SessionVar=[Microsoft.PowerShell.Commands.WebRequestSession](get-variable -name (get-variable "TCSessionVar" -valueonly) -valueonly)
Response=$Response
}
有效!
$sess = New-Object Microsoft.PowerShell.Commands.WebRequestSession
$IWRParams = @{
SessionVariable = Get-Variable -name sess -ValueOnly
Method = 'GET'
Uri = "$($Server)/login"
Headers = @{'X-Redmine-API-Key'=$Key}
}
$Response = Invoke-WebRequest @IWRParams
$this.CSRFToken = $Response.Forms.Fields['authenticity_token']
$this.Session = Get-Variable -name $sess -ValueOnly
我想将一个变量作为参数传递给 SessionVariable
,这样我就可以为 SessionObject
使用任何名称,这样我就可以 test/send 给其他函数,而不是很高兴它被硬编码...即传递 $TCSessionVar
而不是硬编码的 TCSessionVar
参数。
$Response= Invoke-WebRequest -Uri $TeamCityUrl `
-SessionVariable $TCSessionVar -Method `
Get -Headers @{"Authorization"="Basic $Encoded"}
$ReturnObject =New-Object PSCustomObject @{
SessionVar=[Microsoft.PowerShell.Commands.WebRequestSession]$TCSessionVar
Response=$Response
}
我得到的错误是:
Cannot convert the "Microsoft.PowerShell.Commands.WebRequestSession" value of type "System.String" to type "Microsoft.PowerShell.Commands.WebRequestSession".
--注意:我可以从响应中创建 WebReuestSessionObject,但是 SessionVariable 毫无意义..
$TCCookieName="TCSESSIONID"
$Cookies=$Response.Headers.'set-cookie'
$TCCookie= $cookies.Split(";")| Where-Object {$_ -match $TCCookieName}
$CookieName=$TCCookie.Split("=")[0]
$CookieValue=$TCCookie.Split("=")[1]
$TCSession = New-Object Microsoft.PowerShell.Commands.WebRequestSession
$cookie = New-Object System.Net.Cookie
$cookie.Name = $CookieName
$cookie.Value = $CookieValue
$cookie.Domain=([uri]$TeamCityUrl).Host
$TCSession.Cookies.Add($cookie);
如果我
-SessionVariable (get-variable -name "TCSessionVar" -ValueOnly)
并得到如下响应:(get-variable -name (get-variable "TCSessionVar" -valueonly) -valueonly)
$Response= Invoke-WebRequest -Uri $TeamCityUrl -SessionVariable (get-variable -name "TCSessionVar" -ValueOnly) -Method Get -Headers @{"Authorization"="Basic $Encoded"}
$ReturnObject =New-Object PSCustomObject @{
SessionVar=[Microsoft.PowerShell.Commands.WebRequestSession](get-variable -name (get-variable "TCSessionVar" -valueonly) -valueonly)
Response=$Response
}
有效!
$sess = New-Object Microsoft.PowerShell.Commands.WebRequestSession
$IWRParams = @{
SessionVariable = Get-Variable -name sess -ValueOnly
Method = 'GET'
Uri = "$($Server)/login"
Headers = @{'X-Redmine-API-Key'=$Key}
}
$Response = Invoke-WebRequest @IWRParams
$this.CSRFToken = $Response.Forms.Fields['authenticity_token']
$this.Session = Get-Variable -name $sess -ValueOnly