0xC*_*DCD 8 powershell powershell-5.0
我正在尝试使用HttpClient自定义HttpClientHandler(以修复未通过重定向正确管理的 Cookie 问题)。
两者都位于System.Net.Http程序集(和命名空间)中,并且 Powershell(和 ISE)大多数时候看不到类(也看不到命名空间)。
它确实找到了一个类System.Net.Http(实际上它是WebRequestMethods.Http),我不会对它破坏一切感到惊讶。
所以我创建了这个 KISS 示例:
\n\nusing namespace System.Net.Http\n\nclass Wtf : HttpClientHandler {\n}\n\n$t = [HttpClient]::new()\nRun Code Online (Sandbox Code Playgroud)\n\n如果我运行它,它会告诉我该类型不存在。(如果我使用完整的命名空间而不是 ,它也会这样做using)。
然而有趣的是接下来发生的事情。\n如果我在 ISE 中使用相同的代码,IDE 只会告诉我HttpClient找不到基类。(没有关于实例化的内容)
我发现这Add-Type可以帮助我,所以我添加
Add-Type -AssemblyName System.Net.Http\n\nWrite-Host "Hello World"\nRun Code Online (Sandbox Code Playgroud)\n\n之间using namespace System.Net.Httpclass Wtf : HttpClientHandler {
尝试运行它时我仍然遇到相同的错误 - 但我根本看不到我的"Hello World"!\n因此解析它时似乎失败了,并且它甚至没有尝试运行它。\nISE 仍然显示相同的内容IDE 中的错误。
然后,如果我Add-Type -AssemblyName System.Net.Http在再次运行脚本之前运行(无论是从 PowerShell 提示符还是 ISE),一切都会正常运行。\n此外,从那时起,ISE IDE 智能感知可以列出命名空间内的所有内容System.Net.Http。
那么用户如何才能只启动我的 PowerShell 脚本,而不必同时运行Add-Type我的脚本呢?
我在 Win10 上使用 PS 5.1,虽然我有 C# 背景,但我还是 PowerShell 环境的新手。
\n\nEDIT1:使用 HttpClientHandler 而不是 HttpClient (但无论问题是相同的)
\n\n编辑2:\n这是我现在正在使用的
\n\nusing assembly System.Net.Http\nusing namespace System.Net.Http\n\nclass Test : HttpClient {\n}\n\n[HttpClient]::new()\nRun Code Online (Sandbox Code Playgroud)\n\n这是输出:
\n\nAu caract\xc3\xa8re C:\\Users\\0xdcdcdcd\\Desktop\\Test.ps1:4 : 14\n+ class Test : HttpClient {\n+ ~~~~~~~~~~\nType [HttpClient] introuvable.\n + CategoryInfo : ParserError: (:) [], ParentContainsErrorRecordException\n + FullyQualifiedErrorId : TypeNotFound\nRun Code Online (Sandbox Code Playgroud)\n
# test.ps1
Add-Type -AssemblyName System.Net.Http
class Test : system.Net.Http.HttpClient {
}
At C:\users\admin\test.ps1:3 char:14
+ class Test : system.Net.Http.HttpClient {
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~
Unable to find type [system.Net.Http.HttpClient].
+ CategoryInfo : ParserError: (:) [], ParseException
+ FullyQualifiedErrorId : TypeNotFound
Run Code Online (Sandbox Code Playgroud)
我现在知道了。太疯狂了,它在脚本中不起作用。我相信这里提供了一些解决方案: Powershell:使用 PS 5 类时无法找到类型
编辑:实际上,这在 PS 6 中适用于我。如果您使用的是 Windows 10 1809,则许多命令在 PS 6 中再次有效。
那么用户如何才能只启动我的 PowerShell 脚本而不必同时运行 Add-Type 和我的脚本呢?
高级 PowerShell 脚本以一些 using 语句开头是很常见的,因此您可以像这样开始脚本:
using assembly System.Net.Http
using namespace System.Net.Http
#your code here
Run Code Online (Sandbox Code Playgroud)
但大多数时候,在现代 PowerShell 中,尤其是对于 Web 命令,您可以而且应该从使用 PowerShell cmdlet 开始。
那么我问你的问题是你想用 HttpClient 做什么?让我知道您想做什么,我很乐意向您展示“PowerShell”方式来实现它:)
| 归档时间: |
|
| 查看次数: |
16215 次 |
| 最近记录: |