Windows Management Framework (WMF) 5.x 发行说明
WMF 5.0 更改
- PowerShell 5.0 添加了新的结构化 信息 流
- 对 DSC 的改进,包括四个新的 DSC 资源:
- WindowsFeatureSet
- WindowsOptionalFeatureSet
- ServiceSet
- ProcessSet
- 添加了 Just Enough Administration,通过 PowerShell 远程处理启用基于角色的管理
- PowerShell 5.0 扩展语言以包括用户定义的类和枚举
- 改进了 PowerShell ISE 中的调试功能并添加了远程调试
- 添加了 PowerShellGet 和 PackageManagement 模块
- 增强的 PowerShell 脚本日志记录和脚本
- 添加加密消息语法 cmdlet
- WMF 5.0 包括适用于 Windows 的 NetworkSwitchManager 模块
- 添加了 Microsoft.PowerShell.ODataUtils 模块
- 添加了对软件清单日志记录的支持(SIL)
- 响应用户请求和问题时,将新 cmdlet 或更新 cmdlet
WMF 5.1 更改
WMF 5.1 包括随 Windows Server 2016 一起发布的 PowerShell、WMI、WinRM 和软件清单日志记录(SIL)组件。 WMF 5.1 可安装在 Windows 7、Windows 8.1、Windows Server 2008 R2、2012 和 2012 R2 上,并针对 WMF 5.0 提供多项改进,包括:
- 新 cmdlet
- PowerShellGet 改进包括强制实施已签名模块和安装 JEA 模块
- PackageManagement 添加了对容器、CBS 设置、基于 EXE 的设置、CAB 包的支持
- DSC 和 PowerShell 类的调试改进
- 安全增强功能,包括强制实施来自请求服务器的目录签名模块以及使用 PowerShellGet cmdlet 时
- 对许多用户请求和问题的响应
重要
在 Windows Server 2008 或 Windows 7 上安装 WMF 5.1 之前,请确认未安装 WMF 3.0。 有关详细信息,请参阅 Windows Server 2008 R2 SP1 和 Windows 7 SP1的 WMF 5.1 先决条件。
PowerShell 版本
从版本 5.1 开始,PowerShell 在不同版本中可用,这些版本表示不同的功能集和平台兼容性。
- 桌面版: 基于 .NET Framework 构建,并与脚本和模块兼容,这些脚本和模块面向在 Windows 的完全占用版本(如 Server Core 和 Windows Desktop)上运行的 PowerShell 版本。
- Core Edition: 基于 .NET Core 构建,并提供与脚本和模块的兼容性,这些脚本和模块面向在缩减的 Windows 版本(如 Nano Server 和 Windows IoT)上运行的 PowerShell 版本。
详细了解如何使用 PowerShell 版本
- 使用 $PSVersionTable 确定正在运行的 PowerShell 版本
- 使用 PSEdition 参数
按 CompatiblePSEditions 筛选 Get-Module 结果 - 阻止脚本执行,除非在兼容版本的 PowerShell 上运行
- 声明模块与特定 PowerShell 版本的兼容性
模块分析缓存
从 WMF 5.1 开始,PowerShell 可控制用于缓存有关模块的数据的文件,例如导出的命令。
默认情况下,此缓存存储在文件 ${env:LOCALAPPDATA}\Microsoft\Windows\PowerShell\ModuleAnalysisCache
中。 缓存通常在启动时读取,同时搜索命令,并在导入模块后某个时候在后台线程上写入。
若要更改缓存的默认位置,请先设置 $env:PSModuleAnalysisCachePath
环境变量,然后再启动 PowerShell。 对此环境变量的更改只会影响子进程。 该值应命名 PowerShell 有权创建和写入文件的完整路径(包括文件名)。 若要禁用文件缓存,请将此值设置为无效位置,例如:
$env:PSModuleAnalysisCachePath = 'nul'
这会设置无效设备的路径。 如果 PowerShell 无法写入路径,则不会返回错误,但可以使用跟踪器查看错误报告:
Trace-Command -PSHost -Name Modules -Expression { Import-Module Microsoft.PowerShell.Management -Force }
写出缓存时,PowerShell 将检查不再存在的模块,以避免不必要的大型缓存。 有时不需要这些检查,在这种情况下,可以通过设置将其关闭:
$env:PSDisableModuleAnalysisCacheCleanup = 1
设置此环境变量将在当前进程中立即生效。
指定模块版本
在 WMF 5.1 中,using module
与 PowerShell 中的其他模块相关构造的行为方式相同。
以前,你无法指定特定的模块版本;如果存在多个版本,则会导致错误。
在 WMF 5.1 中:
可以使用 ModuleSpecification 构造函数(哈希表)。
此哈希表的格式与
Get-Module -FullyQualifiedName
相同。示例:
using module @{ModuleName = 'PSReadLine'; RequiredVersion = '1.1'}
如果模块有多个版本,PowerShell 将使用
与 ,并且不会返回与相同的解析逻辑 和 相同的行为。
对 Pester 的改进
在 WMF 5.1 中,PowerShell 附带的 Pester 版本已从 3.3.5 更新到 3.4.0。 此更新为 Nano Server 上的 Pester 启用更好的行为。
可以通过在 GitHub 存储库中检查 CHANGELOG 来查看 Pest 中的更改。