0

从 Powershell (core/7)中的 .Net 类访问 KeyValuePairs 的最佳方法是什么?我发现我尝试使用的类不允许我使用索引器中的键名访问值。

我目前的理论是,这是由于底层.net类使用了Powershell无法解决的扩展方法(但我可能走错了路……)。

这是一个示例对象:

$HTTPMsg = [System.Net.Http.HttpRequestMessage]::new()
$HTTPMsg.Headers.Add("WWW-Authenticate", "Basic realm=C:\xxx")
$HTTPMsg.Headers.Add("Date", "Wed, 02 Mar 2022 09:41:36 GMT")


$HTTPMsg.Headers

***Output:
Key              Value
---              -----
WWW-Authenticate {Basic realm=C:\xxx}
Date             {Wed, 02 Mar 2022 09:41:36 GMT}

理想情况下,我希望能够通过以下方式访问 Date 值:

$MyDate = $HTTPMsg.Headers["Date"]

但这会返回 $null。

到目前为止,我发现的最好方法如下,但这看起来比应该的要难:

$MyDate = $HTTPMsg.Headers.Value[$HTTPMsg.Headers.Key.IndexOf("Date")]

我错过了什么?

提前致谢!

4

2 回答 2

0

@Jeroen Mostert 在评论中回答:

$HTTPMsg.Headers.GetValues("日期")

于 2022-03-04T11:00:18.650 回答
0

试试这个。

function Get-HttpHeadersKeyValue {
    param (        
        [Parameter(Mandatory = $true, Position = 0)]
        [System.Net.Http.Headers.HttpHeaders]$HttpHeaders,
        [Parameter(Mandatory = $true, Position = 1)]
        [string]$Key
    )
    $Return = $null
    foreach ($HTTPHeader in $HttpHeaders) {
        if ($HttpHeader.Key -eq $Key) {
            $Return = [string]$HttpHeader.Value
        }
    }    
    return $Return
}

$HTTPMsg = [System.Net.Http.HttpRequestMessage]::new()
$HTTPMsg.Headers.Add("WWW-Authenticate", "Basic realm=C:\xxx")
$HTTPMsg.Headers.Add("Date", "Wed, 02 Mar 2022 09:41:36 GMT")

$DateString = Get-HttpHeadersKeyValue $HTTPMsg.Headers 'Date'
$DateString
$DateTime = [DateTime]::ParseExact($DateString, 'R', $null)
$DateTime

输出:

Wed, 02 Mar 2022 09:41:36 GMT

Wednesday, March 2, 2022 9:41:36 AM
于 2022-03-02T19:40:14.983 回答