Mar*_*ndl 5 powershell encoding
我尝试PSCredential使用包含德语变音符号的密码创建一个对象,并将其传递给New-WebServiceProxycmdlet。只要密码不包含以下示例中的任何变音符号,代码就会按预期工作:
$secp = ConvertTo-SecureString 'abÜ312!' -AsPlainText -Force
$mycreds = New-Object System.Management.Automation.PSCredential('\user@db', $secp)
$proxy = New-WebServiceProxy -Uri "https://example.com/webservice/myWs?wsdl" -Credential $mycreds
Run Code Online (Sandbox Code Playgroud)
在这种情况下,我收到以下错误消息:
New-WebServiceProxy :请求失败,HTTP 状态为 401:未经授权。
当我使用例如 Fiddler 捕获流量时,我看到New-WebServiceProxycmdlet 将凭据添加为具有base64编码的基本授权:
GET https://example.com/webservice/myWs?wsdl HTTP/1.1
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; MS Web Services Client Protocol 4.0.30319.42000)
Authorization: Basic dXNlckBkYjphYtwzMTIh
Host: example.com
Run Code Online (Sandbox Code Playgroud)
这是解码后的 Base64 字符串在 Utf8 中的样子:
所以看起来 PowerShell 正在将元音符号编码为ANSI字符串。当我手动对凭据(dXNlckBkYjphYsOcMzEyIQ==而不是dXNlckBkYjphYtwzMTIh)进行 base64 编码并回复提琴手请求时,我得到了所需的响应。
不幸的是,我无法使用此解决方法,因为New-WebServiceProxy它不允许我自己添加 Authorization 标头。
有任何想法吗?
有趣的。您的解决方法使我找到了这个更通用的解决方法,它不依赖于保存错误编码的脚本文件。相反,它仅错误地对密码字符串进行编码
\n让我知道这个是否奏效。
\n$pw = 'ab\xc3\x9c312!'\n# incorrectly encode the UTF8-bytes as ANSI (this yields ab\xc3\x83\xc5\x93312!)\n$dummy = [Text.Encoding]::Default.GetString([Text.Encoding]::UTF8.GetBytes($pw))\n$secp = ConvertTo-SecureString $dummy -AsPlainText -Force\nRun Code Online (Sandbox Code Playgroud)\n我认为这对任何字符都不起作用,但我对编码的了解还不够确定。
\n| 归档时间: |
|
| 查看次数: |
73 次 |
| 最近记录: |