about_Windows_Powershell_5.1

简短说明

介绍了 Windows PowerShell 5.1 中包含的新功能。

长说明

Windows PowerShell 5.1 新增了大量功能,不仅扩展并提升了自身的用途和可用性,还方便用户能够更轻松、全面地控制和管理基于 Windows 的环境。

Windows PowerShell 5.1 可向后兼容。 为 Windows PowerShell 4.0、Windows PowerShell 3.0 和 Windows PowerShell 2.0 设计的 cmdlet、提供程序、模块、管理单元、脚本、函数和配置文件通常适用于 Windows PowerShell 5.1,无需更改。

  • 新 cmdlet:本地用户和组;Get-ComputerInfo
  • PowerShellGet 改进包括强制签名模块和安装 JEA 模块
  • PackageManagement 增加了对容器、CBS 安装程序、基于 EXE 的安装程序、CAB 包的支持
  • DSC 和 PowerShell 类的调试改进
  • 安全增强包括强制执行来自请求服务器和使用 PowerShellGet cmdlet 时的目录签名模块
  • 响应大量的用户请求和问题

Windows PowerShell 5.1 默认安装在 Windows Server 版本 2016 及更高版本以及 Windows 客户端版本 10 及更高版本上。

若要在旧版 Windows 上安装 Windows PowerShell 5.1,请参阅安装和配置 WMF 5.1。 请务必先阅读下载详细信息并确保满足所有系统要求,然后再安装 Windows Management Framework 5.1。

你还可以在 Windows PowerShell 中的新增功能中了解 Windows PowerShell 5.1 的更改。

PowerShell 版本

从 5.1 版本开始,PowerShell 在具有不同功能集和平台兼容性的不同版本中可用。

  • 桌面版: 以 .NET Framework 为基础构建,提供与面向在完整功能 Windows 版本(如服务器核心和 Windows 桌面)上运行的 PowerShell 版本的脚本和模块的兼容性。
  • 核心版: 以 .NET Core 为基础构建,提供与面向在缩减功能 Windows 版本(如 Nano Server 和 Windows IoT)上运行的 PowerShell 版本的脚本和模块的兼容性。

详细了解如何使用 PowerShell 版本

目录 Cmdlet

Microsoft.PowerShell.Security 模块中新增了两个新 cmdlet。 这些 cmdlet 可用于生成和验证 Windows 目录文件。

New-FileCatalog

New-FileCatalog 用于为文件夹和文件集合创建 Windows 目录文件。 该目录文件包含指定路径中的所有文件的哈希值。 用户可以分发文件夹集合以及代表这些文件夹的对应的目录文件。 该信息对于验证自目录创建以来是否对文件夹进行了任何更改很有用。

New-FileCatalog [-CatalogFilePath] <string> [[-Path] <string[]>]
 [-CatalogVersion <int>] [-WhatIf] [-Confirm] [<CommonParameters>]

支持目录版本 1 和 2。 版本 1 使用 SHA1 哈希算法来创建文件哈希值;版本 2 则使用 SHA256。 应使用目录版本 2。

若要验证目录文件(上面示例中的 Pester.cat 文件)的完整性,应使用 Set-AuthenticodeSignature cmdlet 对其进行签名。

Test-FileCatalog

Test-FileCatalog 用于验证代表一组文件夹的目录。

Test-FileCatalog [-Detailed] [-FilesToSkip <String[]>]
 [-CatalogFilePath] <String> [[-Path] <String[]>]
 [-WhatIf] [-Confirm] [<CommonParameters>]

此 cmdlet 将目录中找到的所有文件的哈希值及其相对路径与磁盘中的文件进行比较。 如果它检测到文件哈希值和路径之间存在任何不匹配,将返回状态 ValidationFailed。 用户可通过使用 Detailed 参数检索所有这些信息。 它还在 Signature 属性中显示目录的签名状态,该结果与针对目录文件调用 Get-AuthenticodeSignature cmdlet 的结果相同。 用户还可以使用 FilesToSkip 参数在验证过程中跳过任何文件。

模块分析缓存

从 WMF 5.1 开始,PowerShell 针对用于缓存有关模块的数据(如它导出的命令)的文件提供了控制。

默认情况下,此缓存存储在文件 ${env:LOCALAPPDATA}\Microsoft\Windows\PowerShell\ModuleAnalysisCache 中。 缓存通常在启动时进行读取(同时搜索命令),在模块导入一段时间之后在后台线程上进行写入。

若要更改缓存的默认位置,可在启动 PowerShell 前,设置 $env:PSModuleAnalysisCachePath 环境变量。 对此环境变量的更改仅影响子进程。 值应指定 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 Constructor (Hashtable)。 此哈希表具有与 Get-Module -FullyQualifiedName 相同的格式。

    示例:using module @{ModuleName = 'PSReadLine'; RequiredVersion = '1.1'}

  • 如果有多个版本的模块,PowerShell 将使用与 Import-Module 相同的解析逻辑,而不会返回错误。

针对 Pester 的改进

在 WMF 5.1 中,PowerShell 随附的 Pester 版本已从 3.3.5 更新到 3.4.0。 可以通过在 GitHub 存储库中检查 CHANGELOG 查看版本 3.3.5 到 3.4.0 中的更改。

关键字

Windows PowerShell 5.1 中的新增功能