添加的参考:PowerShellStandard.Library
默认.net-core
项目中的Repro:
// ...
using System.Management.Automation;
using System.Collections.ObjectModel;
// ...
public static void Main(string[] args)
{
Collection<PSObject> output;
using (PowerShell ps = PowerShell.Create())
{
ps.AddScript("$test = Get-Date; $test");
output = ps.Invoke();
}
// ...
无论是否使用using
块,我都尝试过,但是最终得到的结果是相同的:Create
方法不是 not 创建一个{{1} }对象,但它也不引发异常。
这是PowerShell
PowerShell
库的常见问题吗?是否有解决方法或其他方法来解决我的问题?
其他信息,在我自己探索一种管理运行空间的方法时,.net-standard
类RunspaceFactory
方法也是如此。
答案 0 :(得分:2)
浏览PowerShellStandard库的源代码时,我注意到以下几行:
public static System.Management.Automation.PowerShell Create ( System.Management.Automation.Runspaces.InitialSessionState initialSessionState ) { return default(System.Management.Automation.PowerShell); }
public static System.Management.Automation.PowerShell Create ( ) { return default(System.Management.Automation.PowerShell); }
public static System.Management.Automation.PowerShell Create ( System.Management.Automation.RunspaceMode runspace ) { return default(System.Management.Automation.PowerShell); }
那些将始终返回密封的PowerShell类的default
,并且始终将是null
。
这使得PowerShellStandard Library 5.1不(完全)支持PowerShell。
RunspaceFactory.CreateRunspace
相同。
答案 1 :(得分:2)
PowerShellStandard是一个参考库,适用于将与PowerShell加载到同一AppDomain
中的项目。在这些情况下,所需的程序集已经加载完毕,因此拉下整个SDK会很浪费。
为了托管PowerShell(或从PowerShell会话外部使用PowerShell API),您需要引用PowerShell SDK(对于PowerShell Core)或GAC程序集(对于Windows PowerShell)。
要引用SDK,您需要在项目基本目录中的nuget.config
文件中添加PowerShell myget作为源。这是一个例子
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<packageSources>
<clear />
<add key="nuget.org" value="https://api.nuget.org/v3/index.json" />
<add key="dotnet-core" value="https://www.myget.org/F/dotnet-core/api/v3/index.json" />
<add key="powershell-core" value="https://powershell.myget.org/F/powershell-core/api/v3/index.json" />
</packageSources>
</configuration>
并在csproj中添加对SDK的引用
<ItemGroup>
<PackageReference Include="Microsoft.PowerShell.SDK" Version="6.0.3" />
</ItemGroup>
答案 2 :(得分:0)
这是最近发布的Microsoft.PowerShell.SDK 6.0.4。
它看起来像是为PowerShell托管和相关任务而设计的。 至少像代码这样的问题在我的.NET Core应用程序中工作正常。 这个包参考就足够了。