我有一个POSH脚本,它执行一组步骤(函数)来实例化对ADFS服务器的请求,使用默认凭据登录到它,解析响应并最终将安全数据发布到/_trust/
端点上SharePoint服务器获取FedAuth cookie。
这是为了访问特定的SharePoint站点。
我将省略细节,事实上,该脚本几周前正在运行,现在它向我显示错误:
Method invocation failed because [System.Boolean] does not contain a method named 'GetResponse'.
At XXXXXX.ps1:48 char:5
+ [System.Net.HttpWebResponse]$response = $request.GetResponse()
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (:) [], RuntimeException
+ FullyQualifiedErrorId : MethodNotFound
错误输出引用的行如下:
[System.Net.HttpWebResponse]$response = $request.GetResponse()
脚本的重要部分(负责上述代码)是:
function GetADFSRequest {
$url = ($adfsUrl+$wia+"wa="+$wa+'&'+"wtrealm="+$wtrealm+'&'+"wctx="+$wctx+'&'+"wreply="+$wreply)
$address = New-Object System.Uri($url)
[System.Net.HttpWebRequest]$request = [System.Net.WebRequest]::Create($address)
$request.Headers.Add("Accept-Encoding", "gzip, deflate")
$request.Headers.Add("Accept-Language", "en-US,en;q=0.7,ru;q=0.3")
$request.Method = "GET"
$request.Host = $adfsUrl.TrimStart("https://").TrimEnd("/adfs/ls")
$request.UseDefaultCredentials;
[System.Net.ServicePointManager]::ServerCertificateValidationCallback = {$true}
return $request
}
function GetADFSResponse($request) {
$request = GetADFSRequest
[System.Net.HttpWebResponse]$response = $request.GetResponse()
$reader = New-Object System.IO.StreamReader($response.GetResponseStream())
$obj = $reader.ReadToEnd()
$reader.Close()
当然,像System.Web
或System.Net
这样的必需程序集会加载到脚本体中。
我有一个建议,这可能与最近的ADFS服务器升级有关(v.2012到v.2016)但是,我不知道为什么会显示转换\类型转换错误。
通过调试模式检查时,将显示以下内容:
[DBG]: PS C:\temp>> $request | Get-Member
TypeName: System.Net.HttpWebRequest
Name MemberType Definition
---- ---------- ----------
Abort Method void Abort()
AddRange Method void AddRange(int from, int to), void AddRange(long from, long to), void AddRange(int range), void AddRange(long range...
表示使用$request
语句正确设置[System.Net.HttpWebRequest]$request
类型。
实际上,在$response
类型下执行相同检查时会显示错误:
[DBG]: PS C:\temp>> $response | gm
gm : You must specify an object for the Get-Member cmdlet.
At line:1 char:13
+ $response | gm
+ ~~
+ CategoryInfo : CloseError: (:) [Get-Member], InvalidOperationException
+ FullyQualifiedErrorId : NoObjectInGetMember,Microsoft.PowerShell.Commands.GetMemberCommand
这是可以解释的,因为上述错误([System.Boolean]
,在这种情况下,$request
变量没有方法"GetResponse"
。)