简短说明
介绍了 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 PowerShell 中的新增功能中了解 Windows PowerShell 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 版本的兼容性
目录 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 附带 Pester v3.4.0。 有关此版本的详细信息,请参阅 GitHub 存储库中的 CHANGELOG 。