Windows PowerShell 5.0 包含了重要的新功能,扩展了使用范围,提升了可用性,并让你能够更轻松、全面地控制和管理基于 Windows 的环境。
Windows PowerShell 5.0 是向后兼容的。 为 Windows PowerShell 4.0、Windows PowerShell 3.0 和 Windows PowerShell 2.0 设计的指令集、提供者、模块、snap-in、脚本、函数和配置文件,通常可在 Windows PowerShell 5.0 中运行,无需更改。
安装Windows PowerShell
Windows PowerShell 5.0 默认安装在 Windows Server 2016 技术预览版和 Windows 10 上。
要在Windows Server 2012 R2、Windows 8.1 Enterprise或Windows 8.1 Pro上安装Windows PowerShell 5.0,请下载并安装 Windows Management Framework 5.0。 安装 Windows 管理框架 5.0 前,务必阅读下载详情并满足所有系统要求。
在本主题中
- Windows PowerShell 4.0 DSC 更新(KB 3000850
- Windows PowerShell 5.0 的新功能
- Windows PowerShell 4.0 的新功能
- Windows PowerShell 3.0 的新功能
2014年11月Windows PowerShell 4.0更新汇总(KB 3000850)
Windows PowerShell 4.0 中 Windows PowerShell 期望状态配置(DSC)的许多更新和改进可在 2014 年 11 月针对 Windows RT 8.1、Windows 8.1 和 Windows Server 2012 R2 (KB3000850)的更新汇总中提供。 你可以通过运行 Get-Hotfix -Id KB3000850 Windows PowerShell来判断KB3000850是否安装在你的系统上。
PSDesiredStateConfiguration 模块中现有 cmdlet 的更新
- Get-DscResource 更快(尤其是在ISE中)。
- Start-DscConfiguration 新增了一个参数 -UseExisting,可重新应用上一次应用的配置。
- Start-DscConfiguration -Force 已被修复。
- Get-DscLocalConfigurationManager 显示更多关于发动机状态的有用信息。
- Test-DscConfiguration 现在返回计算机名称以及 True 或 False。
- New-DSC校验码 现在支持UNC路径。
PSDesiredStateConfiguration 模块中的新 cmdlet
- Update-DSCConfiguration:执行按需拉取服务器检查。
- Stop-DSC配置:停止已经运行中的配置。
- Remove-DSCConfigurationDocument:允许您在不同阶段(待处理、上一或当前)删除配置文档。
语言增强
- DependsOn 现在支持复合资源。
- DependsOn 现在支持资源实例名称中的数字。
- 将 Evarate 为 empty 的节点表达式不再抛出错误。
- 如果节点表达式值为空,会出现的错误已被修正。
- 调用配置的配置现在可以在 Windows PowerShell 控制台中工作。
拉取模式增强
- 拉取模式现在支持所有ZIP文件。
- AllowModuleOverwrite 现在正常工作了。
韧性改进
- 新的 调试模式 允许你重新加载资源模块。
- 如果发生配置失败,pending.mof 文件不会被删除。
- 当元配置设置损坏时,本地配置管理器(LCM)现在更具弹性。
诊断改进
- 当LCM将定时器设置与你设定的不同时,会显示警告。
- 错误日志文件现在包含 Windows PowerShell 资源的调用栈。
灵活性改进
- LocalConfigurationManager 资源新增了一个属性,称为 ActionAfterReboot。
- ContinueConfiguration(默认值):目标节点重启后自动恢复配置。
- StopConfiguration:节点重启后不要自动恢复配置。
- 一致性运行现在可以比拉取作更频繁地发生,反之亦然。
- 版本控制支持:DSC 现在可以识别在新客户端(随 WMF 5.0 包含)上生成的文档。
- LocalConfigurationManager 资源新增了一个属性,称为 ActionAfterReboot。
错误预防改进
- 模块版本现在在配置应用前被强制执行。
- DebugPreference 现在正确设置,适用于Get、Set或 Test-TargetResource 调用。
凭证处理改进
- 如果同时指定 了证书 和 PSDscAllowPlainTextPassword ,则使用证书。
- 即使是Get-TargetResource的凭证也会被解密。
- 元配置凭据会被加密和解密。
- PSCredentials在嵌入对象中时会被解密。
内置资源改进
Windows PowerShell 5.0 的新功能
- Windows PowerShell 的新功能
- Windows PowerShell 期望状态配置中的新功能
- Windows PowerShell ISE 的新功能
- Windows PowerShell Web 服务中的新功能
- Windows PowerShell 5.0 中显著的漏洞修复
Windows PowerShell 的新功能
从 Windows PowerShell 5.0 开始,你可以使用类、形式语法和语义,这些都类似于其他面向对象编程语言。 为了支持新功能,Windows PowerShell语言中已添加了类、枚举及其他关键词。 有关使用类别的更多信息,请参见 about_Classes。
Windows PowerShell 5.0引入了一种新的结构化信息流,你可以用它在脚本与调用者(或托管环境)之间传输结构化数据。 你现在可以用 Write-Host 向信息流输出。 信息流同样适用于PowerShell。流、作业、调度作业和工作流。 以下功能支持该信息流。
- 一个新的 Write-Information cmdlet,可以让你指定 Windows PowerShell 如何处理命令的信息流数据。 Write-Host 是 Write-Information 的封装程序。 Write-Information 也是支持的工作流程活动。
- 两个新的常用参数 InformationVariable 和 InformationAction,可以让你确定命令中信息流的显示方式。 InformationAction 的有效值为 SilentlyContinue、Stop、Continue、Inquire、Ignore 或 Suspend,默认为 SilentlyContinue。 InformationVariable 指定一个字符串作为变量名,你希望保存命令中的 Write-Host 数据。
- 一个新的偏好变量 InformationPreference 指定了你在 Windows PowerShell 会话中对信息流数据的默认偏好。 默认值为“静默继续”。
- 新增了两个工作流程通用参数,PSInformation 和 InformationAction。
- 使用 Format-Table 命令时,表列现在会自动通过评估流中前300毫秒的数据进行格式化。
与 Microsoft Research合作,新增了一个指令小工具ConvertFrom-String。 ConvertFrom-String 可以让你从文本字符串内容中提取和解析结构化对象。 更多信息请参见ConvertFrom-String。
一个新的 Convert-String cmdlet会根据你在 -Example 参数中提供的示例自动格式化文本。
一个新模块 Microsoft.PowerShell.Archive 包含 cmdlet,允许你将文件和文件夹压缩为归档(也称为 ZIP)文件,从现有 ZIP 文件中解压文件,并用压缩中的新版本文件更新 ZIP 文件。
一个新模块PackageManagement让你可以在互联网上发现并安装软件包。 PackageManagement(前称 OneGet)模块是现有包管理器(也称为包提供者)的管理器或多路复用器,用于将 Windows 包管理与单一的 Windows PowerShell 接口统一起来。
一个新模块 PowerShellGet 允许你在 PowerShell 画廊或通过运行 Register-PSRepository cmdlet 设置的内部模块仓库中查找、安装、发布和更新模块和 DSC 资源。
新增了一个语言关键词 “隐藏”,用于指定成员(属性或方法)默认不在 Get-Member 结果中显示(除非添加 -Force 参数)。 标记为隐藏的属性或方法也不会出现在IntelliSense结果中,除非你处于成员应可见的上下文中;例如,自动变量$This在类方法中应显示隐藏成员。
新项目、移除项目和 Get-ChildItem 都得到了增强,以支持创建和管理 符号链接。 该 New-Item 的 -ItemType 参数接受一个新值,即 SymbolicLink。 现在你可以通过运行 New-Item cmdlet,在一行内创建符号链接。
Get-ChildItem 还新增了一个新的 -Depth 参数,你可以用它和 -Recurse 参数一起限制递归。 例如,Get-ChildItem -Recurse -Depth 2 返回当前文件夹的结果、当前文件夹内的所有子文件夹以及子文件夹内的所有文件夹。
Copy-Item 现在允许你将文件或文件夹从一个 Windows PowerShell 会话复制到另一个 Windows 会话,这意味着你可以将文件复制到连接到远程计算机的会话(包括运行 Nano Server 的计算机,因此没有其他接口)。 要复制文件,请指定 PSSession ID 作为新 -FromSession 和 -ToSession 参数的值,并添加 -Path 和 -Destination 分别指定起始路径和目的地。 例如,Copy-Item -Path c:\myFile.txt -ToSession $s -Destination d:\destinationFolder。
Windows PowerShell 转录已被改进,除了控制台主机(powershell.exe外,还适用于所有托管应用程序,如 Windows PowerShell ISE)。 转录选项(包括启用全系统转录)可以通过启用“ 启用PowerShell转录 组策略”设置进行配置,该设置位于管理模板/Windows组件/Windows PowerShell中。
一项新的详细脚本追踪功能,使您能够对系统上 Windows PowerShell 脚本的使用进行详细跟踪和分析。 启用详细脚本追踪后,Windows PowerShell 会将所有脚本块记录到 Windows 事件追踪(ETW)事件日志,即 Microsoft-Windows-PowerShell/Operational。
从 Windows PowerShell 5.0 开始,新的密码消息语法指令小工具支持使用 IETF 标准格式进行内容加密和解密,用于密码学保护消息,正如 RFC5652 所记录的。 Get-CmsMessage、Protect-CmsMessage 和 Unprotect-CmsMessage cmdlet 已被添加到 Microsoft.PowerShell.Security 模块中。
Microsoft.PowerShell.Utility 模块中的新命令包 Get-Runspace、Debug-Runspace、Get-RunspaceDebug、Enable-RunspaceDebug 和 Disable-RunspaceDebug,允许你在运行空间上设置调试选项,并开始和停止对运行空间进行调试。 对于调试任意运行空间(即不是 Windows PowerShell 控制台或 Windows PowerShell ISE 会话默认运行空间的运行空间),Windows PowerShell 允许你在脚本中设置断点,并且增加了断点,阻止脚本运行,直到你能附加调试器来调试运行空间脚本。 Windows PowerShell 脚本的运行空间调试器已增加了对任意运行空间的嵌套调试支持。
Microsoft.PowerShell.Utility 模块新增了一个新的 Format-Hex cmdlet。 Format-Hex 可以让你以十六进制格式查看文本或二进制数据。
Microsoft.PowerShell.Utility 模块中新增了 Get-Clipboard 和 Set-Clipboard cmdlet;它们简化了内容与 Windows PowerShell 会话之间的传输。 剪贴板 cmdlet 支持图片、音频文件、文件列表和文本。
Microsoft.PowerShell.Management 模块新增了一个名为 Clear-RecycleBin 的指令;该命令子会清空回收站中的一个固定驱动器,该驱动器包括外接驱动器。 默认情况下,你会被提示确认一个 Clear-RecycleBin 命令,因为该命令的 ConfirmImpact 属性设置为 ConfirmImpact.High。
一个新的命令包 New-TemporaryFile 允许你在脚本编写时创建临时文件。 默认情况下,新的临时文件是在 中创建
C:\Users\<user name>\AppData\Local\Temp的。输出文件、添加内容和 Set-Content cmdlet现在有一个新的 -NoNewline 参数,该参数在输出后省略了新行。
New-Guid cmdlet 利用 .NET Framework Guid 类生成 GUID,这在编写脚本或 DSC 资源时非常有用。
由于文件版本信息可能具有误导性,尤其是在文件被打补丁后,FileInfo对象可以使用新的FileVersionRaw和ProductVersionRaw脚本属性。 例如,你可以运行以下命令,显示这些属性的值,powershell.exe,其中 $pid 包含 Windows PowerShell 运行会话的进程 ID:
Get-Process -Id $pid -FileVersionInfo | Format-List *version* -Force新的 Enter-PSHostProcess 和 Exit-PSHostProcess 指令集允许你在 Windows PowerShell 控制台中运行的进程中调试 Windows PowerShell 脚本,这些进程与当前进程不同。 运行 Enter-PSHostProcess 输入或附加到特定的进程 ID,然后运行 Get-Runspace 返回进程内的活跃运行空间。 在完成进程内脚本调试后,运行 Exit-PSHostProcess 以脱离进程。
Microsoft.PowerShell.Utility 模块新增了一个新的 Wait-Debugger cmdlet。 你可以在执行脚本的下一句话之前,先在调试器里 Wait-Debugger 停止脚本。
Windows PowerShell 工作流程调试器现在支持命令或制表表补全,并且可以调试嵌套的工作流函数。 你现在可以按 Ctrl+Break 在运行中的脚本中、本地和远程会话以及工作流程脚本中进入调试器。
Microsoft.PowerShell.Core 模块中新增了一个 Debug-Job cmdlet,用于调试 Windows PowerShell 工作流程、后台和远程会话中运行的作业脚本。
为 Windows PowerShell 作业新增了一个状态 AtBreakpoint。 当作业运行包含固定断点的脚本,且脚本达到断点时,AtBreakpoint 状态就适用。 当作业在调试断点被停止时,你必须通过运行 Debug-Job cmdlet 来调试该作业。
Windows PowerShell 5.0 实现了在同一文件夹中多个版本的 Windows PowerShell 模块支持$PSModulePath。 ModuleSpecification 类中添加了 RequiredVersion 属性,帮助你获得所需的模块版本;该属性与 ModuleVersion 属性互斥。 RequiredVersion 现已作为 Get-Module、Import-Module 和 Remove-Module cmdlet 的 FullyQualifiedName 参数值的一部分支持。
你现在可以通过运行 Test-ModuleManifest cmdlet来进行模块版本验证。
Get-Command 指令小子的结果现在显示一个版本列;CommandInfo类新增了一个版本属性。 Get-Command 显示同一模块多个版本的命令。 Version 属性也是 CmdletInfo 派生类 CmdletInfo 和 ApplicationInfo 的一部分。
Get-Command 新增了一个参数 -ShowCommandInfo,可以以 PSObject 的形式返回 ShowCommand 信息。 这对于在使用 Windows PowerShell ISE 运行 Windows PowerShell 远程处理的 Show-Command 时尤其有用。 -ShowCommandInfo 参数取代了Microsoft.PowerShell.Utility模块中的现有 Get-SerializedCommand 函数,但 Get-SerializedCommand 脚本仍然支持下级脚本。
一个新的 Get-ItemPropertyValue cmdlet 可以让你不用点符号就能得到属性的值。 例如,在较早的 Windows PowerShell 版本中,你可以执行以下命令来获取 PowerShellEngine 注册表键的 Application Base 属性值: (Get-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\PowerShell\3\PowerShellEngine -Name ApplicationBase)。ApplicationBase。 从 Windows PowerShell 5.0 开始,你可以 Get-ItemPropertyValue -Path HKLM:\SOFTWARE\Microsoft\PowerShell\3\PowerShellEngine -Name ApplicationBase。
Windows PowerShell 控制台现在使用语法着色,就像 Windows PowerShell ISE 一样。
一个新的 NetworkSwitch 模块包含 cmdlet,使你能够为 Windows Server 2012 R2 认证的网络交换机应用交换机、虚拟局域网(VLAN)和基本的二层网络交换机端口配置。
FullyQualifiedName 参数已被添加到 Import-Module 和 Remove-Module cmdlet中,以支持存储单个模块的多个版本。
Save-Help、Update-Help、Import-PSSession、Export-PSSession 和 Get-Command 新增了一个参数 FullQualifiedModule,类型为 ModuleSpecification。 添加该参数以完全限定名称指定模块。
$PSVersionTable.PSVersion的价值已更新为5.0。
WMF 5.0(PowerShell 5.0)包含 Pester 模块。 Pester 是一个针对 PowerShell 的单元测试框架。 它提供了几个简单易用的关键词,让你可以为脚本创建测试。
Windows PowerShell 期望状态配置中的新功能
- Windows PowerShell 语言增强功能允许你通过类定义 Windows PowerShell 期望状态配置(DSC)资源。 Import-DscResource 现在是一个真正的动态关键词;Windows PowerShell 解析指定模块的根模块,搜索包含 DscResource 属性的类。 你现在可以使用类来定义 DSC 资源,在 module 文件夹中不需要 MOF 文件或 DSCResource 子文件夹。 一个 Windows PowerShell 模块文件可以包含多个 DSC 资源类。
- 在PSDesiredStateConfiguration模块中的以下cmdlet中新增了一个参数ThrottleLimit。 添加 ThrottleLimit 参数,指定你希望该命令同时工作的目标计算机或设备数量。
- Get-DscConfiguration
- Get-DscConfigurationStatus
- Get-DscLocalConfigurationManager
- Restore-DscConfiguration
- Test-DscConfiguration
- Compare-DscConfiguration
- Publish-DscConfiguration
- Set-DscLocalConfigurationManager
- Start-DscConfiguration
- Update-DscConfiguration
- 通过集中式 DSC 错误报告,丰富的错误信息不仅会记录在事件日志中,还能发送到中央位置以便后续分析。 你可以利用这个中央位置存储环境中任何服务器发生的DSC配置错误。 在元配置中定义报告服务器后,所有错误都会发送到报告服务器,然后存储在数据库中。 无论目标节点是否配置了从拉取服务器拉取配置,你都可以设置此功能。
- Windows PowerShell ISE 的改进简化了 DSC 资源创作。 你现在可以做以下作。
- 在配置或节点块内,在该块内的空行输入Ctrl+Space,列出所有DSC资源。
- 对枚 举 类型的资源属性进行自动补全。
- 基于配置中其他资源实例,自动完成DSC资源的 DependsOn 属性。
- 资源属性值的制表补全改进。
- 用户现在可以通过在节点块中添加 PSDscRunAsCredential 属性,在指定的凭证集下运行资源。 例如,PSDscRunAsCredential = Get-Credential Contoso\DscUser。 此功能对于创建运行 Windows 安装程序和可执行安装程序、访问每个用户注册表蜂箱或执行当前用户上下文外的其他任务的配置非常有用。
- 配置 关键字已 支持32位(基于x86)的配置。
- Windows PowerShell 现在支持自定义的 DSC 配置帮助,通过在生成的配置函数中添加 [CmdletBinding()] 来定义。
- 新的 DscLocalConfigurationManager 属性将配置块指定为元配置,用于配置 DSC 本地配置管理器。 该属性限制配置仅包含配置 DSC 本地配置管理器的项目。 在处理过程中,该配置生成一个 *.meta.mof 文件,然后通过运行 Set-DscLocalConfigurationManager cmdlet 发送到相应的目标节点。
- Windows PowerShell 5.0 现在允许部分配置。 你可以分段向节点发送配置文档。 要让节点接收多个配置文档片段,节点的本地配置管理器必须先设置以指定预期的片段
- 跨计算机同步是Windows PowerShell 5.0中DSC中新增的功能。 利用内置的 WaitFor* 资源(WaitForAll、WaitForAny、WaitForSome),你现在可以在配置运行时指定跨计算机的依赖关系,无需外部编排。 这些资源通过 CIM 连接在 WS-Man 协议上实现节点间同步。 配置可以等待另一台计算机的特定资源状态发生变化。
- Just Enough Administration(JEA)是一项新的委托安全功能,利用DSC和Windows PowerShell受限的跑动空间,帮助企业免受员工有意或无意的数据丢失或泄露。 有关JEA的更多信息,包括在哪里可以下载xJEA DSC资源,请参见 “Just Enough Administration”。
- 以下新指令点已添加到PSDesiredStateConfiguration模块中。
- 新的 Get-DscConfigurationStatus cmdlet 从目标节点获取配置状态的高层信息。 你可以获取最后一个配置的状态,或者所有配置的状态。
- 新的 Compare-DscConfiguration cmdlet 将指定的配置与一个或多个目标节点的实际状态进行比较。
- 新的 Publish-DscConfiguration cmdlet 会将配置 MOF 文件复制到目标节点,但不会应用该配置。 该配置是在下一次一致性处理时应用,或者运行 Update-DscConfiguration cmdlet时。
- 一个新的 Test-DscConfiguration cmdlet可以让你验证结果配置是否符合期望配置,如果配置符合目标配置,则返回True;如果实际配置不匹配,则返回False。
- 新的 Update-DscConfiguration cmdlet 强制处理配置。 如果本地配置管理器处于拉取模式,命令小工具会从拉取服务器获取配置后再应用。
Windows PowerShell ISE 的新功能
- 你现在可以通过运行 Enter-PSSession 在存储文件的电脑上启动远程会话,然后在远程电脑>上运行PSEdit<路径和文件名,从而在本地的Windows PowerShell ISE中编辑远程Windows的PowerShell脚本和文件。 此功能简化了编辑存储在 Windows Server 核心安装选项中的 Windows PowerShell 文件,因为 Windows PowerShell ISE 无法运行。
- Start-Transcript cmdlet 现已在 Windows PowerShell ISE 中得到支持。
- 你现在可以在 Windows PowerShell ISE 中调试远程脚本。
- 一个新的菜单命令“ Break All ”(Ctrl+B)可以同时入侵本地和远程脚本的调试器。
Windows PowerShell Web Services(Management OData IIS 扩展)中的新功能
- 从 Windows PowerShell 5.0 开始,你可以根据某个 OData 端点暴露的功能生成一组 Windows PowerShell cmdlet,方法是运行新 Microsoft.PowerShell.OdataUtils 模块中的 Export-ODataEndpointProxy cmdlet。
Windows PowerShell 5.0 中显著的漏洞修复
- Windows PowerShell 5.0 包含了新的 COM 实现,在处理 COM 对象时能带来显著的性能提升。
- Windows PowerShell会话中的第一个标签页完成实现了显著的性能提升,缩短了近500毫秒的时间。
Windows PowerShell 4.0 的新功能
Windows PowerShell 4.0 是向后兼容的。 为 Windows PowerShell 3.0 和 2.0 设计的指令集、提供者、模块、snap-in、脚本、函数和配置文件,在 Windows PowerShell 4.0 中无需更改即可使用。
Windows PowerShell 4.0 默认安装在 Windows 8.1 和 Windows Server 2012 R2 上。 要在 Windows 7 上安装 Windows PowerShell 4.0,搭配 SP1,或安装 Windows Server 2008 R2,请下载并安装 Windows 管理框架 4.0。 在安装 Windows 管理框架 4.0 之前,务必阅读下载详情并满足所有系统要求。
- Windows PowerShell 的新功能
- Windows PowerShell 集成脚本环境(ISE)中的新功能
- Windows PowerShell 工作流程中的新功能
- Windows PowerShell Web 服务中的新功能
- Windows PowerShell Web Access 的新功能
- Windows PowerShell 4.0 中的显著漏洞修复
Windows PowerShell 4.0 包含以下新功能。
Windows PowerShell 的新功能
- Windows PowerShell 期望状态配置 (DSC)是 Windows PowerShell 4.0 中的一个新管理系统,能够部署和管理软件服务及其运行环境的配置数据。 有关 DSC 的更多信息,请参见 Windows PowerShell 期望状态配置入门。
- Save-Help 现在允许你为安装在远程计算机上的模块保存帮助。 你可以用 Save-Help 从连接互联网的客户端下载模块帮助(该客户端不一定安装了你想要帮助的模块),然后将保存的帮助复制到远程共享文件夹或没有互联网访问的远程电脑。
- Windows PowerShell 调试器已增强,允许调试 Windows PowerShell 工作流以及远程计算机上运行的脚本。 Windows PowerShell 工作流现在可以通过 Windows PowerShell 命令行或 Windows PowerShell ISE 在脚本层面进行调试。 Windows PowerShell 脚本,包括脚本工作流,现在可以在远程会话中调试。 远程调试会话会保留在 Windows PowerShell 远程会话上,这些会话会先断开连接,之后又重新连接。
- Register-ScheduledJob 和 Set-ScheduledJob 的 RunNow 参数消除了使用 Trigger 参数为作业设置即时开始日期和时间的需求。
- Invoke-RestMethod 和 Invoke-WebRequest 现在允许你使用 Headers 参数设置所有头部。 尽管该参数一直存在,但它是导致异常或错误的多个网页 cmdlet 参数之一。
- Get-Module 新增了一个参数 FullyQualifiedName,类型为 ModuleSpecification[]。 Get-Module 的 FullQualifiedName 参数现在允许你用模块的名称、版本,以及可选的 GUID 来指定模块。
- Windows Server 2012 R2 的默认执行策略设置是 远程签名。 在 Windows 8.1 中,默认设置没有变化。
- 从 Windows PowerShell 4.0 开始,支持使用动态方法名进行方法调用。 你可以用变量存储方法名,然后通过调用变量动态调用该方法。
- 当 PSElapsedTimeoutSec 工作流通用参数指定的超时周期结束时,异步工作不会再被删除。
- New-JobTrigger 和 Set-JobTrigger cmdlet 中新增了一个参数 RepeatIndefinitely。 这消除了为重复运行定时作业无限期的RepetitionDuration参数指定TimeSpan.MaxValue值的必要。
- 在 Enable-JobTrigger 和 Disable-JobTrigger cmdlet 中添加了 Passthru 参数。 Passthru参数显示由你的命令创建或修改的任何对象。
- Add-Computer 和 Remove-Computer cmdlet 中用于指定工作组的参数名称现在是一致的。 这两个 cmdlet 现在都使用参数 WorkgroupName。
- 新增了一个通用参数 PipelineVariable。 PipelineVariable 允许你将管道命令(或管道命令的部分)结果保存为变量,可以传递到管道的其余部分。
- 现在支持使用方法语法进行集合过滤。 这意味着你现在可以用简化语法过滤一组对象,类似于 Where() 或 Where-Object,格式化为方法调用。 以下是一个例子:(Get-Process)。其中({$_.名称 -match“powershell”})
- Get-Process cmdlet 新增了一个 switch 参数 IncludeUserName。
- 新增了一个名为 Get-FileHash的命令包,可以返回指定文件的多种格式之一的文件哈希值。
- 在 Windows PowerShell 4.0 中,如果模块在其清单中使用 DefaultCommandPrefix 键,或者用户导入带有 Prefix 参数的模块,模块的 ExportedCommands 属性会显示带有前缀的模块命令。 当你使用模块限定语法 ModuleName\CommandName 运行命令时,命令名必须包含前缀。
- $PSVersionTable.PSVersion的数值已更新为4.0。
-
其中() 作符行为发生变化。
Collection.Where('property -match name')不再支持以该格式"Property -CompareOperator Value"接受字符串表达式。 然而, Where() 作符接受以脚本块格式的字符串表达式;这仍然被支持。
Windows PowerShell 集成脚本环境(ISE)中的新功能
- Windows PowerShell ISE 支持Windows PowerShell工作流调试和远程脚本调试。
- 已为 Windows PowerShell Desired State Configuration 提供程序和配置添加 IntelliSense 支持。
Windows PowerShell 工作流程中的新功能
- 在迭代流水线(如System Center Orchestrator所用的参数)中,新增了 PipelineVariable 通用参数的支持;也就是说,能够从左到右运行命令的管道,而不是通过流式的穿插运行。
- 参数绑定得到了显著增强,使其能够在制表符完成场景之外工作,例如当前运行空间中不存在的命令。
- Windows PowerShell 工作流程已增加了对自定义容器活动的支持。 如果活动参数类型为 Activity、 Activity[] (或是通用的活动集合),且用户提供了脚本块作为参数,Windows PowerShell 工作流程会将脚本块转换为 XAML,就像普通 Windows PowerShell 脚本到工作流编译一样。
- 崩溃后,Windows PowerShell 工作流程会自动重新连接到托管节点。
- 你现在可以用 ThrottleLimit 属性来限制 Foreach -Parallel 活动语句。
- ErrorAction 的公共参数有一个新的有效值 Suspend,专门用于工作流程。
- 如果没有活跃会话、没有进行中的作业或待处理的作业,工作流端点现在会自动关闭。 当自动关闭条件满足时,此功能可节省作为工作流服务器的计算机资源。
Windows PowerShell Web 服务中的新功能
- 当 Windows PowerShell Web Services(PSWS,也称为 Management OData IIS 扩展)中发生错误时,在执行 cmdlet 的同时,调用者会返回更详细的错误信息。 此外,错误代码遵循 Windows Azure REST API的错误代码指南。
- 端点现在可以定义API版本,并强制使用特定的API版本。 每当客户端和服务器之间发生版本不匹配时,错误会同时显示给客户端和服务器。
- 调度模式的管理通过自动生成模式中缺失字段的值,得到了简化。 即使派遣模式不存在,生成作为一个有用的起点。
- PSWS 中的类型处理已被改进,支持使用与默认构造函数不同的类型,其行为类似于 Windows PowerShell 中的 PSTypeConverter 。 这可以让你用PSWS使用复杂类型。
- PSWS现在允许在运行查询时扩展关联实例。 对于较大的二进制内容(如图像、音频或视频),传输成本较高,最好不编码地传输二进制数据。 PSWS使用命名资源流进行无编码传输。 命名资源流是 Edm.Stream 类型实体的一个属性。 每个命名资源流都有独立的 URI,用于 GET 或 UPDATE作。
- OData 动作现在提供了调用非 CRUD(创建、读取、更新和删除)方法的机制。 你可以通过向为该动作定义的 URI 发送 HTTP POST 请求来调用该动作。 动作的参数在POST请求的正文中定义。
- 为了符合Windows Azure的指南,所有URL都应简化。 键 即段 中包含的一个变更允许单个键表示为段。 注意,使用多个键值的引用需要用括号分隔的逗号分隔值,和之前一样。
- 在PSWS版本之前,执行创建、更新或删除作的唯一方式是在顶层资源上调用发布、放置或删除。 本版本新增的包含资源作允许用户在更少直接访问同一资源的情况下实现相同结果,仿佛这些资源被限制在内。
Windows PowerShell Web Access 的新功能
- 你可以在基于网页的 Windows PowerShell Web Access 控制台中断开和重新连接现有会话。 网页版控制台中的 保存 按钮允许你在不删除会话的情况下断开连接,然后在下次重新连接会话。
- 默认参数可在登录页面显示。 要显示默认参数,请在登录页面的 可选连接设置 区域中,在名为 web.config的文件中配置所有设置的数值。你可以用 web.config 文件配置所有可选的连接设置,除了第二组或备用凭据。
- 在 Windows Server 2012 R2 中,你可以远程管理 Windows PowerShell Web Access 的授权规则。 Add-PswaAuthorizationRule 和 Test-PswaAuthorizationRule 这两个 cmdlet 现在包含一个凭证参数,使管理员能够从远程计算机或 Windows PowerShell Web Access 会话中管理授权规则。
- 现在,你可以通过为每个会话使用新的浏览器标签,在一个浏览器会话中同时拥有多个 Windows PowerShell Web Access 会话。 你不再需要在基于网页的 Windows PowerShell 控制台中打开新的浏览器会话来连接新的会话。
Windows PowerShell 4.0 中的显著漏洞修复
- Get-Counter 现在可以在法语版Windows中返回包含撇号字符的计数器。
- 你现在可以在反序列化对象上查看 GetType 方法。
- #Requires 语句现在允许用户在需要时要求管理员访问权限。
- Import-Csv 指令符现在忽略了空白行。
- Windows PowerShell ISE 在运行 Invoke-WebRequest 命令时内存过多的问题已被修复。
- Get-Module 现在会 在 版本 列中显示模块版本。
- Remove-Item -Recurse 现在会如预期般从子文件夹中移除物品。
- Get-Process 输出对象中新增了 UserName 属性。
- Invoke-RestMethod 命令现在返回所有可用结果。
- 添加成员 现在对哈希表生效,即使哈希表尚未被访问。
- Select-Object -扩展 不再失败,如果属性值为空或为空,则不再失败或生成异常。
- Get-Process 现在可以在管道中与其他命令一起使用,这些命令可以从对象获取 ComputerName 属性。
- ConvertTo-Json 和 ConvertFrom-Json 现在可以接受双引号内的术语,其错误信息也可本地化。
- Get-Job 现在会返回所有已完成的排定任务,即使是在新的会话中。
- 在 Windows PowerShell 4.0 中使用 文件系统 提供者挂载和卸载 VHD 的问题已被修复。 Windows PowerShell 现在能够检测到同一会话中挂载的新硬盘。
- 你不再需要明确加载 ScheduledJob 或 Workflow 模块来处理它们的作业类型。
- 在导入定义嵌套工作流程的过程中,性能得到了提升;这个过程现在更快了。
Windows PowerShell 3.0 的新功能
Windows PowerShell 3.0 包含以下新功能。
- Windows PowerShell 工作流程
- Windows PowerShell Web Access
- 新的 Windows PowerShell ISE 功能
- 对 Microsoft .NET Framework 4.0 的支持
- 对Windows预安装环境的支持
- 断开会话
- 稳健的会话连接性
- 可更新的帮助系统
- 增强在线帮助
- CIM积分
- 会话配置文件
- 调度作业与任务调度器集成
- Windows PowerShell 语言增强
- 新核心指令
- 对现有核心指令和提供者的改进
- 远程模块导入与发现
- 增强制表补全
- 模块自动装载
- 模块体验改进
- 简化命令发现
- 改进日志记录、诊断和组策略支持
- 格式化与输出改进
- 增强主机主机体验
- 新 Cmdlet 和托管 API
- 性能改进
- RunA 与共享主机支持
- 特殊字符处理改进
Windows PowerShell 工作流程
Windows PowerShell 工作流程将 Windows Workflow Foundation 的强大功能带入 Windows PowerShell。
你可以用XAML或Windows的PowerShell语言编写工作流程,并像运行命令DLT一样运行它们。
Get-Command cmdlet 会接收工作流命令,而 Get-Help cmdlet 则会获得工作流程的帮助。
工作流是一系列多计算机管理活动,这些活动具有长时间运行、可重复、频繁、可并行、可中断、可挂起和可重启。 工作流可以从有意或意外的中断中恢复,例如网络中断、Windows 重启或停电。
工作流程也具有可移植性;它们可以导出为XAML文件,也可以导入。 你可以编写自定义会话配置,允许委托或下属用户运行工作流程或活动。
以下是 Windows PowerShell 工作流程的优势
- 自动化按顺序进行、长期运行的任务。
- 远程监控长期运行任务。 活动的状态和进展随时可见。
- 多计算机管理。 同时在数百个托管节点上以工作流形式运行任务。 Windows PowerShell 工作流程内置了一个通用管理参数库,如 PSComputerName,支持多计算机管理场景。
- 复杂流程的单一任务执行。 你可以将实现整个端到端场景的相关脚本合并到单一的工作流中。
- 持久性:工作流程会保存(或检查点)在作者定义的特定点,这样你可以从最后一个持久化的任务(或检查点)恢复工作流程,而不必从头开始。
- 鲁棒性。 自动故障恢复。 工作流程能够经受计划内和非计划重启的考验。 你可以暂停工作流执行,然后从最后一个持久点恢复工作流。 工作流作者可以指定特定活动在一个或多个受管理节点发生故障时重执行。
- 能够断开、重新连接并在断开会话中运行。 用户可以与工作流服务器连接或断开,但工作流是连续运行的。 你可以登出客户端电脑或重启客户端电脑,并在不中断工作流程的情况下监控另一台电脑的工作流程执行。
- 计划。 工作流任务可以像任何 Windows PowerShell 命令或脚本一样调度。
- 工作流程和连接限速。 工作流执行和节点连接可以限速,从而实现可扩展性和高可用性场景。
Windows PowerShell Web 访问
Windows PowerShell Web Access 是 Windows Server 2012 的一个功能,允许用户在基于网页的控制台中运行 Windows PowerShell 命令和脚本。 使用基于网页的控制台的设备无需安装 Windows PowerShell、远程管理软件或浏览器插件。 所需的只是一个配置得当的 Windows PowerShell Web Access 网关和一个支持 JavaScript 并接受 Cookie 的客户端设备浏览器。
更多信息请参见 部署Windows PowerShell Web Access。
新的 Windows PowerShell ISE 功能
对于 Windows PowerShell 3.0,Windows PowerShell 集成脚本环境(ISE)具备许多新功能,包括 IntelliSense、Show-Command 窗口、统一控制台窗格、片段、大括号匹配、展开-折叠部分、自动保存、最近项目列表、富复制、块复制以及对 Windows PowerShell 脚本工作流程的全面支持 更多信息请参见 about_Windows_PowerShell_ISE。
对 Microsoft .NET Framework 4 的支持
Windows PowerShell 是基于通用语言运行时 4.0 构建的。 Cmdlet、脚本和工作流作者可以在Windows PowerShell中使用新的Microsoft .NET Framework 4类,具备包括应用兼容性与部署、托管扩展框架、并行计算、网络、Windows通信基础和Windows工作流基础等功能。
对Windows预安装环境的支持
Windows PowerShell 3.0 是 Windows 8 预安装环境(Windows PE)4.0 中的一个可选组件。 Windows PE是一种最小化作系统,启动一台没有作系统的计算机,并为安装Windows做准备。 Windows PE可用于分区和格式化硬盘、复制磁盘镜像到计算机,以及从网络共享发起Windows安装。 Windows PowerShell 3.0 可用于 Windows PE 管理部署、诊断和恢复场景。
断开会话
从 Windows PowerShell 3.0 开始,使用 New-PSSession cmdlet 创建的持久用户管理会话(“PSSessions”)会保存在远程计算机上。 它们不再依赖于创建时的会话。
现在你可以断开会话连接,而不中断会话中正在运行的命令。 你可以关闭会话并关闭电脑。 之后,你可以在同一台电脑上或不同电脑上从不同的会话重新连接该会话。
cmdlet 的 Get-PSSessionComputerName 参数现在会获取所有连接到该计算机的用户会话,即使它们是在不同计算机的另一个会话中启动的。 你可以连接到会话,获取命令结果,开始新命令,然后断开会话。
为支持断开会话功能,新增了 cmdlet,包括 Disconnect-PSSession、 Connect-PSSession和 Receive-PSSession,并且为管理 PSSessions 的 cmdlet 添加了新参数,例如 cmdlet 的 Invoke-CommandInDisconnectedSession 参数。
断开会话功能仅在连接的起始端(“客户端”)和终止端(“服务器”)两端的计算机都运行 Windows PowerShell 3.0 时支持。
稳健的会话连接性
Windows PowerShell 3.0 检测客户端与服务器之间意外的连接丢失,并尝试自动恢复连接并恢复执行。 如果客户端-服务器连接无法在规定时间内恢复,用户会收到通知,会话将被断开连接。 在尝试重新连接时,Windows PowerShell 会持续向用户反馈。
如果断开的会话是通过 InvokeCommand 启动的,Windows PowerShell 会为已断开的会话创建一个作业,以便更容易重新连接和恢复执行。
这些功能提供了更可靠且可恢复的远程访问体验,并允许用户执行需要强大会话的长期任务,如工作流程。
可更新的帮助系统
你现在可以下载模块中指令小子的更新帮助文件。
Update-Help该 cmdlet 识别最新的帮助文件,从互联网下载,解压,验证,并安装到模块的正确语言专用目录中。
要使用更新后的帮助文件,只需输入 Get-Help。 你不需要重启 Windows 或 Windows PowerShell。 要更新$pshome目录中模块的帮助,请在 Windows PowerShell 中选择“以管理员身份运行”。
为了支持没有互联网接入的用户和防火墙后的用户,新的 Save-Help cmdlet 会将帮助文件下载到文件系统目录,比如文件共享。 用户可以使用 Update-Help 该 cmdlet 从文件共享中获取更新的帮助文件。
你可以用 Update-Help cmdlet 更新所有支持的 UI 文化中所有或特定模块的帮助文件。 你甚至可以在 Windows PowerShell 配置文件中添加 Update-Help 命令。
默认情况下,Windows PowerShell 每天最多下载一次模块的帮助文件。
Windows 8 和 Windows Server 2012 模块不包含帮助文件。 要下载最新的帮助文件,请输入 Update-Help。 更多信息请输入 Get-Help (无参数)或参见 about_Updatable_Help。
当计算机上未安装 cmdlet 的帮助文件时,该 Get-Help cmdlet 会显示自动生成的帮助。 自动生成的帮助包含命令语法和使用 Update-Help cmdlet下载帮助文件的说明。
任何模块作者都可以支持其模块的可更新帮助。 你可以在模块中包含帮助文件,并使用可更新帮助文件来更新它们,或者省略帮助文件,使用可更新帮助来安装它们。 有关支持可更新帮助的更多信息,请参见 支持可更新帮助。
增强在线帮助
Windows PowerShell在线帮助对所有用户来说都是宝贵的资源,但对于那些没有或无法安装更新帮助文件的用户尤其重要。
要在线获取任何 Windows PowerShell cmdlet 的帮助,请输入:
Get-Help <cmdlet-name> -Online
Windows PowerShell 会在默认的互联网浏览器中打开在线版本的帮助主题。
Windows PowerShell 3.0 中的 Get-Help 在线 功能现在更强大,因为它即使在未安装 cmdlet 帮助文件的情况下也能正常工作。 Get-Help -Online 功能从 HelpUri 的 cmdlets 属性和高级函数中获得在线帮助主题的 URI。
PS C:\>(Get-Command Get-ScheduledJob).HelpUri
https://go.microsoft.com/fwlink/?LinkID=223923
从 Windows PowerShell 3.0 开始,C# cmdlets 的作者可以通过在 cmdlet 类上创建 HelpUri 属性来填充 HelpUri 属性。 高级函数的作者可以在 CmdletBinding 属性上定义 HelpUri 属性。 HelpUri 属性的价值必须以“http”或“https”开头。
你也可以在基于XML的cmdlet帮助文件的第一个相关链接中包含 HelpUri 值,或者函数中的评论式帮助链接指令。
有关支持在线帮助的更多信息,请参见 “支持在线帮助”。
CIM积分
Windows PowerShell 3.0 支持通用信息模型(CIM),该模型为系统、网络、应用程序和服务提供了管理信息的通用定义,允许异构系统之间交换管理信息。 Windows PowerShell 3.0 支持 CIM,包括基于新建或现有 CIM 类编写 Windows PowerShell 命令、基于 cmdlet 定义 XML 文件的命令,以及对 CIM .NET Framework 的支持。 API、CIM 管理命令和 WMI 2.0 提供者。
会话配置文件
从 Windows PowerShell 3.0 开始,你可以用文件设计自定义会话配置。 新的会话配置文件允许你确定使用该会话配置的会话环境,包括哪些模块、脚本和格式文件被加载到会话中,用户可以使用哪些命令和语言元素,可以运行哪些模块和脚本,以及他们能看到哪些变量。
你可以设计一个会话,用户只能从某个特定模块运行指令符,或者一个会话,让用户拥有完整语言,访问所有模块,并访问执行高级任务的脚本。
在之前的Windows PowerShell版本中,只有能够编写C#程序或复杂启动脚本的人才能在这一层级进行控制。 现在,计算机上管理员组的任何成员都可以通过配置文件自定义会话配置。
若要创建会话配置文件,请使用 New-PSSessionConfigurationFile cmdlet。 要将会话配置文件应用到会话配置中,请使用 Register-PSSessionConfiguration or 'Set-PSSessionConfiguration cmdlets。
更多信息请参见 about_Session_Configuration_Files 和 New-PSSessionConfigurationFile。
调度作业与任务调度器集成
你现在可以在 Windows PowerShell 和任务调度器中调度 Windows PowerShell 后台作业并管理它们。
Windows PowerShell 调度作业是 Windows PowerShell 后台作业和任务调度任务的有用混合体。
就像 Windows PowerShell 后台作业一样,调度作业在后台异步运行。
已完成的调度作业实例可以通过作业指令列(如 Start-Job 和 Get-Job)进行管理。
与任务调度器任务类似,你可以按一次性或循环计划运行定时作业,或响应某个动作或事件。 你可以在任务调度器中查看和管理调度作业,根据需要启用或禁用它们,运行它们或用作模板,并设置作业开始的条件。
此外,定时作业还配有一套定制的指令符(cmdlet)用于管理。 这些 cmdlets 让你可以创建、编辑、管理、禁用和重新启用计划作业,创建计划作业触发器,以及设置计划作业选项。
有关预定工作的更多信息,请参见 about_Scheduled_Jobs。
Windows PowerShell 语言增强
Windows PowerShell 3.0 包含许多旨在简化语言、更易使用并避免常见错误的功能。 改进内容包括属性枚举、标量对象的计数和长度属性、新的重定向作符、$Using范围修饰符、PSItem 自动变量、灵活脚本格式、变量属性、简化属性参数、数值命令名称、Stop-Parsing作符、改进的数组散射、新的位运算符、有序词典、PSCustomObject 铸造以及改进的基于注释的帮助。
新核心指令
Windows PowerShell 安装中新增了 cmdlet,包括用于管理调度作业、断开会话、CIM 集成以及可更新帮助系统(Updatable Help System)的 cmdlet。
- CimCmdlets
- Get-CimAssociatedInstance
- Get-CimClass
- Get-CimInstance
- Get-CimSession
- Invoke-CimMethod
- New-CimInstance
- New-CimSession
- New-CimSessionOption
- Register-CimIndicationEvent
- Remove-CimInstance
- Remove-CimSession
- Set-CimInstance
- Microsoft.PowerShell.Core
- Connect-PSSession
- Disconnect-PSSession
- New-PSSessionConfigurationFile
- New-PSTransportOption
- Receive-PSSession
- Resume-Job
- Save-Help
- Suspend-Job
- Test-PSSessionConfigurationFile
- Update-Help
- Microsoft.PowerShell.Diagnostics
- New-WinEvent
- Microsoft.PowerShell.Management
- Get-ControlPanelItem
- Rename-Computer
- Show-ControlPanelItem
- Microsoft.PowerShell.Utility
- ConvertFrom-Json
- ConvertTo-Json
- Get-TypeData
- Invoke-RestMethod
- Invoke-WebRequest
- Remove-TypeData
- Show-Command
- Unblock-File
- PSSchescheduleedJob
- Add-JobTrigger
- Disable-JobTrigger
- Disable-ScheduledJob
- Enable-JobTrigger
- Enable-ScheduledJob
- Get-JobTrigger
- Get-ScheduledJob
- Get-ScheduledJobOption
- New-JobTrigger
- New-ScheduledJobOption
- Register-ScheduledJob
- Set-JobTrigger
- Set-ScheduledJob
- Set-ScheduledJobOption
- Unregister-ScheduledJob
- PSWorkflow
- New-PSWorkflowExecutionOption
- New-PSWorkflowSession
- PSWorkflowUtility
- Invoke-AsWorkflow
- 伊势
- Get-IseSnippet
- Import-IseSnippet
- New-IseSnippet
对现有核心指令和提供者的改进
Windows PowerShell 3.0 为现有 cmdlet 增加了新功能,包括简化的语法,以及以下 cmdlet 的新参数:Computer cmdlets、CSV cmdlet、Get-ChildItem、Get-Command、Get-Content、Get-History、Measure-Object、Security cmdlets、Select-Object、Select-String、Split-Path、Start-Process、Tee-Object、Test-Connection、Add-Member 和 WMI cmdlet。
Windows PowerShell 提供者也得到了显著改进,包括支持管理安全套接字层(SSL)证书的证书提供者,支持证书、持久网络驱动器以及文件系统驱动器中的替代数据流。
远程模块导入与发现
Windows PowerShell 3.0 扩展了远程计算机上的模块发现、导入和隐式远程处理功能。 模块 cmdlets 在远程计算机上获取模块,并通过 Windows PowerShell 远程处理将模块导入远程或本地计算机。 新的CIM会话支持允许你使用CIM和WMI来管理非Windows计算机,通过导入命令到本地计算机,这些命令在远程计算机上隐式运行。
更多信息请参见 cmdlet 和 cmdlet 的帮助主题Get-ModuleImport-Module。
增强制表补全
Windows PowerShell 控制台中的 Tab 补全现在可以完成 cmdlet、参数、参数值、枚举、.NET Framework 类型、COM 对象、隐藏目录等名称。 制表表补全功能基于新的解析器和抽象语法树,完全重写,以支持更多场景,包括内存解析树和中线制表表补全。
模块自动装载
Get-Command命令小子现在可以接收计算机上所有模块的所有命令和函数,即使模块没有导入当前会话。
当你拿到需要的 cmdlet 时,可以直接使用,无需导入任何模块。 现在,只要你在模块中使用任何 cmdlet,Windows PowerShell 模块就会自动导入。 你不再需要搜索模块并导入它来使用它的指令。
模块的自动导入是通过命令中的 cmdlet 触发的,无论是 Get-Command 对无万用字的 cmdlet 运行,还是为无万用符的 cmdlet 运行 Get-Help 。
你可以用 $PSModuleAutoLoadingPreference 偏好变量启用、禁用和配置模块的自动导入。
更多信息请参见about_Modules、about_Preference_Variables以及 cmdlet 的帮助主题Get-CommandImport-Module。
模块体验改进
Windows PowerShell 3.0为模块带来了高级功能支持,包括以下新功能。
- 针对单个模块(LogPipelineExecutionDetails)的模块日志,以及新的“开启模块日志”组策略设置
- 扩展模块对象,暴露模块清单中的值
- 模块(包括嵌套模块)新增的 ExportedCommands 属性,该属性将所有类型的命令组合在一起
- 改进了对可用(未导入)模块的发现,包括允许在同一命令中使用 Path 和 ListAvailable 参数
- 模块显现中的新 DefaultCommandPrefix 键,避免名称冲突而不更改模块代码。
- 改进的模块需求,包括完整合格的必修模块,包括版本和GUID,以及自动导入所需模块
- 指令小说的作
New-ModuleManifest更安静、更流畅。 - #Requires 的新 模块 参数
- 改进
Import-Module的指令小词,包含 了 MinimumVersion 和 RequiredVersion 参数。
简化命令发现
你不再需要导入所有模块来发现会话可用的命令。 在 Windows PowerShell 3.0 中, Get-Command cmdlet 接收所有已安装模块的所有命令。 而且,如果你使用命令,导出该命令的模块会自动导入到你的会话中。
这个新 Show-Command 指令是专门为初学者设计的。 你可以在窗口里搜索命令。 你可以查看所有命令或按模块筛选,点击按钮导入模块,使用文本框和下拉列表构建有效命令,然后复制或执行命令而无需离开窗口。
改进日志记录、诊断和组策略支持
Windows PowerShell 3.0 改进了命令和模块的日志和追踪支持,支持Windows日志中的事件追踪(ETW)、模块可编辑的 LogPipelineExecutionDetails 属性,以及“开启模块日志”组策略设置。 你现在可以通过显示日志属性,从日志细节中获取参数值。
格式化与输出改进
新的格式和输出改进提高了所有 Windows PowerShell 用户的效率。 改进包括所有流的输出重定向、增强的 Update-Type cmdlet,可动态添加类型且无需 Format.ps1xml 文件,输出中的字环绕,自定义对象的默认格式属性, PSCustomObject 类型,改进 WMI 对象和异构对象的格式化,以及支持发现方法重载。
增强主机主机体验
Windows PowerShell 控制台主机程序在 Windows PowerShell 3.0 中增加了新功能,包括默认的单线程公寓。 文件资源管理器中的新“使用PowerShell运行”选项允许你只需右键点击即可在无限制会话中运行脚本。 新的控制台主机启动逻辑让 Windows PowerShell 启动更快,新字体也让你可以个性化熟悉的控制台窗口体验。
新 Cmdlet 和托管 API
新的 Cmdlet API 和托管 API 包括公共高级语法树(AST)API,以及流水线分页、嵌套管道、运行空间池、标签补全、Windows RT、Obsolete cmdlet 属性以及 FunctionInfo 对象的动词和名词属性的 API。
性能改进
Windows PowerShell 的性能显著提升来自于基于 .NET Framework 4 中动态运行时语言(DLR)构建的新语言解析器,同时还包括运行时脚本编译、引擎可靠性改进和算法的改进 Get-ChildItem ,这些改进提升了其性能,尤其是在搜索网络共享时。
RunA 与共享主机支持
Windows PowerShell 3.0 支持运行程序(RunAs)和共享主机(Shared Host)功能。
RunAs 功能为 Windows PowerShell 工作流程设计,允许用户在会话配置中创建会话,并在共享用户账户的权限下运行。 这使得权限较低的用户能够以管理员权限运行特定命令和脚本,减少了向管理员组添加资历较低用户的需求。
SharedHost 功能允许多个用户在多台计算机上同时连接一个工作流程会话,并监控工作流程的进展。 用户可以在一台计算机上启动工作流程,然后连接到另一台计算机的工作流程会话,而无需断开该会话与原计算机的连接。 用户必须拥有相同的权限并使用相同的会话配置。 更多信息请参见《Windows PowerShell 工作流程入门指南》中的“运行 Windows PowerShell 工作流程”。
特殊字符处理改进
为了提升 Windows PowerShell 3.0 解释和正确处理特殊字符的能力,处理路径中特殊字符的 LiteralPath 参数几乎适用于所有带有 Path 参数的 cmdlet,包括新 Update-Help cmdlet Save-Help 。 解析器还包含特殊逻辑,以改进文件名和路径中反向引号(`)和方括号的处理。