我正在尝试将HttpClient
与自定义HttpClientHandler
配合使用(以解决Cookie的问题,该问题无法通过重定向正确解决。)
两者都进入System.Net.Http
程序集(和名称空间)中,而Powershell(和ISE)在大多数时间都看不到类(也没有名称空间)。
它确实找到了一个类System.Net.Http
(实际上是WebRequestMethods.Http),我不会惊讶地破坏了所有内容。
所以我创建了这个KISS示例:
using namespace System.Net.Http
class Wtf : HttpClientHandler {
}
$t = [HttpClient]::new()
如果我运行它,它将告诉我该类型不存在。 (如果我使用完整的命名空间而不是using
也是如此)。
有趣的是接下来是什么。
如果我在ISE中使用相同的代码,则IDE只会告诉我找不到基类HttpClient
。 (与实例无关)
我发现Add-Type
在这里可以为我提供帮助,因此我添加了
Add-Type -AssemblyName System.Net.Http
Write-Host "Hello World"
using namespace System.Net.Http
和class Wtf : HttpClientHandler {
之间
尝试运行该错误时我仍然遇到相同的错误-但我根本看不到我的"Hello World"
!
因此,它在解析时似乎失败了,甚至没有尝试运行它。
ISE在IDE中仍然显示相同的错误。
然后,如果我在再次运行脚本之前(无论是从PowerShell提示符还是ISE)运行Add-Type -AssemblyName System.Net.Http
,一切都会正常运行。
同样从那时起,ISE IDE的智能感知功能就可以列出System.Net.Http
名称空间中的所有内容。
那么用户如何才能仅启动我的PowerShell脚本,而不必同时运行Add-Type
和我的脚本?
我在Win10上使用PS 5.1,并且在PowerShell环境中是新手,尽管我确实具有C#背景。
EDIT1 :使用HttpClientHandler而不是HttpClient(但无论问题是什么)
EDIT2 : 这是我现在正在使用的东西
using assembly System.Net.Http
using namespace System.Net.Http
class Test : HttpClient {
}
[HttpClient]::new()
以下是输出:
Au caractère C:\Users\0xdcdcdcd\Desktop\Test.ps1:4 : 14
+ class Test : HttpClient {
+ ~~~~~~~~~~
Type [HttpClient] introuvable.
+ CategoryInfo : ParserError: (:) [], ParentContainsErrorRecordException
+ FullyQualifiedErrorId : TypeNotFound
答案 0 :(得分:2)
# 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
我现在明白了。不能在脚本中运行很疯狂。我相信这里提供了一些解决方案:Powershell: Unable to find type when using PS 5 classes
编辑: 实际上,这在PS 6中对我有效。如果您在Windows 10 1809中,则许多命令在PS 6中也可以再次工作。
答案 1 :(得分:0)
那么用户如何才能仅启动我的PowerShell脚本,而不必同时运行Add-Type和我的脚本?
看到高级PowerShell脚本以一些using语句开头很常见,因此您可以像这样开始脚本:
using assembly System.Net.Http
using namespace System.Net.Http
#your code here
但是在大多数现代PowerShell中,尤其是对于Web命令,您可以并且应该从使用PowerShell cmdlet开始。
然后我对您的问题是,您打算如何使用HttpClient?让我知道您想做什么,我将很乐意向您展示“ PowerShell”的实现方法:)