可以在PowerShell会话中添加内存中编译的Cmdlet吗?

时间:2018-08-07 05:32:15

标签: powershell

我有一个用C#编写的cmdlet,可以使用Microsoft.CSharp.CSharpCodeProvider成功地在内存中编译cmdlet(即,使用编译器选项.GenerateInMemory = $ true)。编译后,我可以访问已编译的cmdlet对象,例如[Namespace.InvokeApartmentCommand],因此该对象在某种程度上已加载到内存中。

这是问题所在:我希望能够从我现有的PowerShell会话中调用cmdlet(即,我用来编译C#的那个)。我不想将任何已编译的代码写入磁盘,而是在内存中工作。有可能吗?

我尝试了以下操作:

$foo = [Namespace.InvokeApartmentCommand]::New()
$foo.Apartment = [Threading.ApartmentState]::MTA # Specifics here do not matter, I would like this to work for any arbitrary cmdlet
$foo.Expression = {[Threading.Thread]::CurrentThread.GetApartmentState()}
$foo.Invoke()

不幸的是,当我运行.Invoke()时,出现以下错误:

An error occurred while enumerating through a collection: Cmdlets derived from PSCmdlet cannot be invoked directly.  .
At line:1 char:1
+ $foo.Invoke()
+ ~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (System.Manageme...t+<Invoke>d__40:<Invoke>d__40) [], RuntimeException
    + FullyQualifiedErrorId : BadEnumeration

我该如何解决?

0 个答案:

没有答案