2017-06-22 45 views
1

我想將一個變量作爲參數傳遞給SessionVariable,這樣我就可以使用任何名稱作爲SessionObject,這樣我就可以測試/發送到其他函數,並且不開心硬編碼。即通過$TCSessionVar而不是硬編碼的TCSessionVar參數。在Invoke-WebRequest中的SessionVariable參數化

$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 
} 

我得到的錯誤是:

無法將類型 「System.String」 的 「Microsoft.PowerShell.Commands.WebRequestSession」 價值型 「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); 

回答

1

它的工作原理,如果我 -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 

}