问题
Add-Type
支持将C#、VB、JavaScript、dll等其他编程语言添加为新的 .NET 类型1,其扩展性极高。
但需要注意到,Add-Type
的类型是无法移除的,且同一会话窗口下一旦加载过了,重复运行只会抛出该 .NET 类型已存在的错误。
解决方案
参考StackOverflow
提问2中 x0n 的回答,已加载的类型只有在会话关闭后才会注销。Charlie Kilian 与 Start-Automating 巧妙使用Job
类型来启动一个额外的线程,并使用新的类型,实现运行结束后自动注销。代码如下:
Start-Job -ScriptBlock {
Add-Type -path 'my.dll'
$myObj = New-Object My.MyTestClassName
$result = $myObj.TestMethod
$result
} | Receive-Job -Wait -AutoRemoveJob