![PowerShell cmdlet 可以在 Linux dotnet 上运行吗?还是只能在 Microsoft .NET 上运行?](https://linux22.com/image/1554146/PowerShell%20cmdlet%20%E5%8F%AF%E4%BB%A5%E5%9C%A8%20Linux%20dotnet%20%E4%B8%8A%E8%BF%90%E8%A1%8C%E5%90%97%EF%BC%9F%E8%BF%98%E6%98%AF%E5%8F%AA%E8%83%BD%E5%9C%A8%20Microsoft%20.NET%20%E4%B8%8A%E8%BF%90%E8%A1%8C%EF%BC%9F.png)
标题说明了一切。维基百科说:
设计[编辑] PowerShell 的开发人员根据 POSIX 1003.2 的核心语法设计了该工具的核心语法。[21]
Windows PowerShell 可以执行四种命名命令:[22]
cmdlet(用于与 PowerShell 交互的 .NET Framework 程序) PowerShell 脚本(以 .ps1 为后缀的文件) PowerShell 函数 独立可执行程序 如果命令是独立可执行程序,PowerShell 会在单独的进程中启动它;如果它是 cmdlet,则会在 PowerShell 进程中执行。 PowerShell 提供了一个交互式命令行界面,可以在其中输入命令并显示其输出。基于 Win32 控制台的用户界面提供可自定义的 Tab 键补全。 PowerShell 支持为 cmdlet 创建别名,PowerShell 会将其以文本形式转换为原始命令的调用。 PowerShell 支持命令的命名参数和位置参数。在执行 cmdlet 时,将参数值绑定到参数的工作由 PowerShell 本身完成,但对于外部可执行文件,参数由外部可执行文件独立于 PowerShell 解释进行解析。[需要引证]
PowerShell 扩展类型系统 (ETS) 基于 .NET 类型系统,但具有扩展语义(例如 propertySets 和第三方可扩展性)。例如,它允许通过仅公开数据字段、属性和方法的子集以及指定自定义格式和排序行为来创建对象的不同视图。这些视图使用基于 XML 的配置文件映射到原始对象。[23]
这表明这.NET
是必需的,并且dotnet
Linux不足的运行 cmdlet。
答案1
微软最近在 Linux 和 Windows 上发布了 PowerShell 6.0。两者在功能上可以互换。但是,两者都与 Windows 上的 PowerShell 5.1 有很大不同。因此,您必须针对 v6 进行开发以确保兼容性。
您的包管理器将处理任何依赖项。
答案2
Windows PowerShell 与 PowerShell Core
以下常见问题解答详细说明了这些差异。
PowerShell Core 是 Windows PowerShell 5.1 的后继者,可在 Windows、Linux 和 macOS 上运行。
...
我的所有旧 Windows PowerShell 脚本是否可以在 PowerShell Core 上运行,也就是说,PowerShell Core 是否向后兼容 Windows PowerShell?
以前的 PowerShell 更新完全向后兼容。这仅部分适用于 PowerShell Core。由于 PowerShell Core 是 PowerShell 的跨平台版本,因此 Microsoft 做出了一些妥协。这意味着您必须测试每个脚本以确保它也可以在 PowerShell Core 上运行。
我为 PowerShell Core 编写的所有脚本都能在所有受支持的平台上运行吗?
基本脚本可以在所有平台上运行。但是,考虑到所支持平台之间的巨大差异,您必须在所有要运行的平台上测试每个脚本。
Windows PowerShell 的所有模块是否都在 PowerShell Core 上运行?
不, 许多复杂模块必须适应 PowerShell Core。在某些情况下,两个 PowerShell 版本都存在不同的模块版本。
我可以在 PowerShell Core 上使用所有 .NET Framework 类吗?
不,PowerShell 依赖于 .NET Core,而 .NET Core 缺少 .NET Framework 的许多功能。例如,.NET Core 缺少 Windows Presentation Foundation (WPF)、Windows Forms 和 Windows Workflow。您可以找到更多信息这里。
(重点是我的)
答案3
电源外壳可用对于 Linux,因此可以假设脚本将保留至少大部分甚至全部功能,而不管平台如何。
答案4
您可以轻松地自己确定这一点,只需并排查看它们即可。
意思是可用的模块、cmdlet 等等......
PowerShell v6 / Core
https://docs.microsoft.com/en-us/powershell/scripting/powershell-scripting?view=powershell-6
PowerShell v6.0.1
Copyright (c) Microsoft Corporation. All rights reserved.
https://aka.ms/pscore6-docs
Type 'help' to get help.
PS D:\> (Get-Command -Module *).Count
425
PS D:\> (Get-Command -Name *).Count
1483
Windows PowerShell
Copyright (C) Microsoft Corporation. All rights reserved.
PS C:\> (Get-Command -Module *).Count
1529
PS C:\> (Get-Command -Name *).Count
2474
所以你确实有模块减少“1104”和减少“945”个 cmdlet您可以在 PSCore/v6 中使用。所以,是的,这取决于您使用的是哪个以及它们是否可用。
此外,为了尝试让 PSCore 与 Windows PowerShell 更加接近,Microsoft 发布了 PowerShell 兼容包。然而...
正如上个月报道的那样,适用于 .NET core 的 Windows 兼容包现已推出。这增加了 .NET core 缺少的一些功能。“此功能仅适用于 Windows 计算机。”
https://richardspowershellblog.wordpress.com/2018/01/04/windows-compatibility-pack