从.NET Core运行PowerShell

有没有办法从.net-core运行PowerShell脚本?

我正在尝试在新的.net核心’website \ api’中运行PowerShell脚本。 据我所知,为了在.net上运行PowerShell,我们需要添加

System.Management.Automation命名空间。

这对于.net核心是不可能的(或者我没有找到合适的方法来添加它)。 还有一些NuGet包也旨在将这个DLL添加到项目中,但这些包与.net核心也不兼容。 有没有办法在.net核心上执行此操作? 以下是我尝试过的一些链接,但没有一个是.net核心特定的:

Writing a PowerShell module in C#, Part 1: The basics

在Visual Studio中引用system.management.automation.dll

https://www.nuget.org/packages/System.Management.Automation/

官方的答案是目前不支持从您自己的应用程序运行PowerShell Core。 可能最大的问题是.Net Core缺少AppDomain.GetAssemblies() ,可能会在.Net Core 1.2中修复。

看起来它在.NET Core 2.0和PowerShell 6 Beta 3中得到了很好的支持(尽管它在Beta 1和2中也得到了支持,但也不那么容易),这里是GitHub repo中Host PowerShell文档的链接

他们提供了一个很好的示例应用程序,显示它运行.NET Core 2.0和PowerShell Core v6.0.0-beta.3及更高版本:

https://github.com/PowerShell/PowerShell/tree/master/docs/host-powershell/sample-dotnet2.0-powershell.beta.3/MyApp

为了将正确的包装到我的NuGet包列表中,我确实需要添加powershell-core作为新的NuGet存储库位置,它是:

https://powershell.myget.org/F/powershell-core/api/v3/index.json

然后我可以安装NuGet包:

 install-package microsoft.powershell.sdk -version 6.0.0-rc install-package microsoft.powershell.commands.diagnostics -version 6.0.0-rc install-package microsoft.wsman.management -version 6.0.0-rc 

所有这三个依赖项都是必需的,然后我可以在我的asp.net核心MVC Web应用程序中执行以下简单的PowerShell命令:

 public class PowerShellHelper { public void Execute(string command) { using (var ps = PowerShell.Create()) { var results = ps.AddScript(command).Invoke(); foreach (var result in results) { Debug.Write(result.ToString()); } } } } 

尽管詹姆斯·艾比的回答是正确的,但我发现有一些新信息对我有用。

现在有PowerShell Core可用于跨平台使用。 它是开源的!

以下是Microsoft文章中的一些有用的观点:

PowerShell现在正式支持macOS和Linux,包括:

  • Windows 7,8.1和10
  • Windows Server 2008 R2,2012 R2,2016
  • Windows Server半年度频道
  • Ubuntu 14.04,16.04和17.04
  • Debian 8.7+和9
  • CentOS 7
  • 红帽企业Linux 7
  • OpenSUSE 42.2
  • Fedora 25,26
  • macOS 10.12+

记录

在macOS上,PowerShell使用本机os_log API登录Apple的统一日志记录系统。 在Linux上,PowerShell使用Syslog,这是一种无处不在的日志记录解决方案。

基于SSH的PowerShell远程处理

除了传统的基于WinRM的PSRP之外,PowerShell远程协议(PSRP)现在还可以使用Secure Shell(SSH)协议。 资源

突破性变化链接