Private/Get-KB4HeaderValue.ps1
|
function Get-KB4HeaderValue { [CmdletBinding()] param( [Parameter()] [AllowNull()] [object] $Headers, [Parameter(Mandatory)] [string[]] $Name ) if ($null -eq $Headers) { return $null } foreach ($headerName in $Name) { $value = $null # Tests use hashtables, while live Invoke-RestMethod returns header objects. if ($Headers -is [System.Collections.IDictionary]) { $matchingKey = $Headers.Keys | Where-Object ` { [string] $_ -ieq $headerName } | Select-Object -First 1 if ($null -ne $matchingKey) { $value = $Headers[$matchingKey] } } elseif ($Headers.PSObject.Properties['AllKeys']) { $matchingKey = $Headers.AllKeys | Where-Object ` { [string] $_ -ieq $headerName } | Select-Object -First 1 if ($null -ne $matchingKey) { $value = $Headers[$matchingKey] } } else { # Fall back to object properties or enumerated Key/Value pairs. $property = $Headers.PSObject.Properties[$headerName] if ($property) { $value = $property.Value } if ($null -eq $value) { foreach ($header in $Headers) { if ($header.PSObject.Properties['Key'] -and [string] $header.Key -ieq $headerName) { $value = $header.Value break } } } } if ($null -ne $value) { if ($value -is [array] -or ($value -is [System.Collections.IEnumerable] -and $value -isnot [string])) { return ($value | Select-Object -First 1) } return $value } } $null } |