about_Windows_PowerShell_2.0

主题
    about_Windows_PowerShell_2.0

简短说明
    说明 Windows PowerShell 2.0 提供的新功能。
 

详细说明
    Windows PowerShell 2.0 提供了几项重要的功能,这些功能可扩展其用途、提高其可用性,并允许您
    更轻松全面地控制和管理基于 Windows 的环境。


    Windows PowerShell 2.0 可以向后兼容。为 Windows PowerShell 1.0 设计的 cmdlet、提供
    程序、管理单元、脚本、函数和配置文件无需更改即可在 Windows PowerShell 2.0 中使用。


新增功能
    Windows PowerShell 2.0 提供了以下新功能。


  远程处理
    
      在 Windows PowerShell 2.0 中,可以使用一个 Windows PowerShell 命令在一台或许多台远
      程计算机上运行命令。可以逐个运行命令,也可以创建持续性连接(会话)来运行一系列相关的命令。此
      外,还可以启动与远程计算机的会话,这样,键入的命令将直接在远程计算机上运行。


      Windows PowerShell 的远程处理功能是以 Windows 远程管理 (WinRM) 为基础构建的。WinRM 
      是 WS-Management 协议的 Microsoft 实现,该协议是一个标准的基于 SOAP、与防火墙兼容的通
      信协议。


      远程计算机必须具有 Windows PowerShell 2.0、Microsoft .NET Framework 2.0 和 
      WinRM 服务。所有能够运行 Windows PowerShell 的操作系统都支持远程命令。当前用户必须具有
      在远程计算机上运行命令的权限。有关详细信息,请参阅 about_Remote_Requirements。


      为支持远程处理,添加了 Invoke-Command、Enter-PSSession 和 Exit-PSSession cmdlet,
      以及包含 PSSession 名词的其他 cmdlet。使用这些 cmdlet,可以创建和管理持续性连接。


      几个 cmdlet(包括 Get-Process、Get-Service 和 Get-Eventlog cmdlet)添加了 
      ComputerName 参数。使用此参数,可以获取有关远程计算机的信息。
      这些 cmdlet 使用 .NET Framework 方法获取其数据,因此,它们不依赖于 Windows 
      PowerShell 远程处理。它们不需要任何新程序或配置。有关详细信息,请参阅每个 cmdlet 的帮
      助。


      有关远程命令的详细信息,请参阅 about_Remote 和 about_Remote_FAQ。有关会话的详细信息,
      请参阅 about_PSSessions。


  Windows PowerShell ISE
    
      Windows PowerShell 2.0 提供 Windows PowerShell 集成脚本环境 (ISE),这是一个主机应用程序,
      可用于在彩色编码、基于 Unicode 的图形化环境中运行命令,以及设计、编写、测试和调试脚本。
 

      Windows PowerShell ISE 需要 Microsoft .NET Framework 3.0 或更高版本。


      Windows PowerShell ISE 包括:

      - "命令"窗格,可用于运行交互式命令,就像在 Windows PowerShell 控制台中一样。只需键入
         一个命令,然后按 Enter,"输出"窗格中即会显示输出。

      - "脚本"窗格,用于编写、编辑、调试和运行函数和脚本。

      - 多个选项卡,每个选项卡都有自己的"命令"和"脚本"窗格,用于独立处理一个或多个任务。


      Windows PowerShell ISE 同时面向初级用户和高级用户设计。


  后台作业
    
      后台作业是异步运行的命令。运行后台作业时,命令提示符会立即返回,即使命令仍在运行也是如此。
      可以使用后台作业功能在后台运行复杂命令,这样在该命令运行时,可以在会话中进行其他工作。


      可以在本地或远程计算机上运行后台作业,然后将结果保存在本地或远程计算机上。若要远程运行作
      业,请使用 Invoke-Command cmdlet。
    

      Windows PowerShell 提供一组包含 Job 名词的 cmdlet(作业 cmdlet)。使用这些 cmdlet,
      可以创建、启动、管理和删除后台作业,还可以获取后台作业的结果。若要获取作业 cmdlet 的列表,
      请键入下面的命令:

          get-command *-job

      
      有关后台作业的详细信息,请参阅 about_Jobs。


  脚本调试程序
    
      Windows PowerShell 2.0 提供基于 cmdlet 的脚本和函数调试程序。支持该调试程序的公共 
      API 有完整的文档记录,可用来生成自己的调试程序,也可以自定义或扩展调试程序。


      使用调试程序 cmdlet,可以在行、列、变量和命令上设置断点。这些 cmdlet 可用来管理断点和显
      示调用堆栈。可以创建条件断点和指定断点处的自定义操作,例如运行诊断和日志记录脚本。


      在到达断点时,Windows PowerShell 挂起执行并启动调试程序。调试程序提供一组自定义命令,用
      于单步执行代码。此外,还可以运行标准 Windows PowerShell 命令显示变量的值,也可以使用 cmdlet 
      研究结果。

      
      有关调试的详细信息,请参阅 about_Debuggers。


  Data 节
    
      用于 Windows PowerShell 2.0 的脚本可具有一个或多个 DATA 节,这些节将数据与脚本逻辑隔
      离开来。新增的 DATA 节中的数据限制为 Windows PowerShell 脚本语言的指定子集。


      在 Windows PowerShell 2.0 中,DATA 节用于支持脚本国际化。使用 DATA 节,可以隔离和标
      识将转换为多种用户界面语言的用户信息字符串。


      有关详细信息,请参阅 about_Data_Sections。


  脚本国际化
    
      使用 Windows PowerShell 2.0 脚本国际化功能,可以更好地为世界各地的用户提供服务。通过脚
      本国际化,脚本和函数可以以多种语言向用户显示信息和帮助文本。
 

      脚本国际化功能在执行过程中查询操作系统用户界面区域性 ($PsUICulture),然后导入相应的已翻
      译文本字符串,以便向用户显示这些字符串。使用 Data 节,可以将文本字符串与代码分开存储,
      这样可以方便地进行标识。ConvertFrom-StringData 是一个新增的 cmdlet,它可将文本字符串转换
      为类似于字典的哈希表以使转换过程更加容易。
 

      有关详细信息,请参阅 about_Script_Internationalization。



  WMI Cmdlet
    
      通过增加以下 cmdlet,Windows PowerShell 2.0 的 Windows Management 
      Instrumentation (WMI) 功能进行了改进:

          - Remove-WmiObject
          - Set-WmiInstance
          - Invoke-WmiMethod


      Get-WmiObject cmdlet 中添加了一些新参数。所有 WMI cmdlet 现在都支持以下参数:

          - EnableAllPrivileges
          - Impersonation
          - Authentication
          - Authority


      利用这些新参数,可以更精确地控制 WMI 操作的安全配置,而无需直接处理 .NET Framework 类库
      中的类型。

 
      若要获取 WMI cmdlet 的列表,请键入下面的命令:

          get-help *wmi*

      若要获取每个 cmdlet 的帮助,请键入 get-help,并在后面键入 cmdlet 名称。

    
  Get-WinEvent Cmdlet
    
      Get-WinEvent cmdlet 从本地和远程计算机上的事件查看器日志以及 Windows 事件跟踪 (ETW) 
      事件日志文件中获取事件。它可以从传统事件日志和 Windows Vista 中引入的 Windows 事件日志
      中获取事件。
 

      使用 Get-WinEvent 可以获取表示事件日志、事件日志提供程序和日志中的事件的对象。通过 Get-
      WinEvent 可在一个命令中将不同来源的事件组合起来。它支持 XML Path 语言 (XPath)、XML 和
      哈希表格式的高级查询。


      Get-WinEvent 需要 Windows Vista 或 Windows Server 2008,以及 
      Microsoft .NET Framework 3.5。


  Out-Gridview Cmdlet
    
      Out-GridView cmdlet 将其他命令的结果显示在交互式表中,在该表中,可以对结果进行搜索、排
      序、分组和筛选操作。例如,可以将 Get-Process、Get-WmiObject、Get-WinEvent 或 Get-
      Eventlog 命令的结果发送到 Out-GridView,然后使用表功能检查这些数据。

        help out-gridview -full


  Add-Type Cmdlet
    
      使用 Add-Type cmdlet,可通过其他 .NET Framework 语言的源代码将 .NET Framework 类型
      添加到 Windows PowerShell 中。
 

      Add-Type 编译用于创建类型的源代码,并生成包含新的 .NET Framework 类型的程序集。这样,
      可以在 Windows PowerShell 命令中使用这些 .NET Framework 类型以及 .NET Framework 提
      供的标准对象类型。


      此外,还可以使用 Add-Type 将程序集加载到会话中,以便在 Windows PowerShell 中使用程序
      集中的类型。


      使用 Add-Type,可以开发新的 .NET Framework 类型,可以使用 C# 库中的 .NET Framework 
      类型,还可以访问 Win32 API。

    
      有关详细信息,请参阅 Add-Type。


  事件通知
    
      Windows PowerShell 2.0 引入了事件通知。用户可以注册和订阅事件,如 Windows 
      PowerShell 事件、WMI 事件或 .NET Framework 事件。用户也可以以同步和异步方式侦听、转发
      管理和系统事件以及对这些事件进行操作。


      开发人员可以编写应用程序以使用事件体系结构接收有关状态更改的通知。用户可以编写脚本以
      订阅各种事件以及对内容进行响应。
   

      Windows PowerShell 提供的 cmdlet 可用来创建新事件、获取事件和事件订阅、注册和取消注册
      事件、等待事件以及删除事件。有关这些 cmdlet 的详细信息,请键入下面的命令:

          get-command *-event

   
  模块
    
      使用 Windows PowerShell 模块,可以将 Windows PowerShell 脚本划分和组织为可重用的独
      立自包含单元。模块中的代码在自己的上下文中执行,因此,不会覆盖变量、函数、别名和会话中的其他
      资源,也不会添加到其中或与其发生冲突。

    
      编写、分发、组合、共享和重复使用模块可以生成简单的脚本和复杂的应用程序。


      Windows PowerShell 2.0 提供了一些 cmdlet 用于添加、获取和删除模块,以及导出模块成员。
      有关与模块相关的 cmdlet 的详细信息,请键入下面的命令:

          get-command *-module*

 
  事务
    
      Windows PowerShell 2.0 提供对事务的支持。使用事务,可以撤消整个操作系列。事务仅适用于支
      持事务的操作。事务用于需要原子性、一致性、隔离性和可恢复性的应用程序,如数据库和消息队列。


      支持事务的 cmdlet 和提供程序具有新的 UseTransaction 参数。若要在事务内启动操作,请使用 
      Start-Transaction cmdlet。然后,在使用 cmdlet 执行该操作时,如果希望该命令包含在事务中,
      请使用每个 cmdlet 的 UseTransaction 参数。


      如果事务中的任何命令在任何环节失败,请使用 Rollback-Transaction cmdlet 撤消该事务中的
      所有命令。
      如果所有命令都成功,请使用 Commit-Transaction cmdlet 使命令操作成为永久操作。


      Windows PowerShell 2.0 提供了一些 cmdlet 用于启动、使用、提交和回滚事务。有关这些 
      cmdlet 的信息,请键入下面的命令:

          get-command *transaction*



 对 Windows PowerShell 1.0 的重大更改

     -- HKLM\SOFTWARE\Microsoft\PowerShell\1\PowerShellEngine 中 
        PowerShellVersion 注册表条目的值更改为 2.0。

     -- 添加了新的 cmdlet 和变量。添加的这些内容可能与配置文件和脚本中的变量和函数发生冲突。

     -- -IEQ 运算符对字符执行不区分大小写的比较。

     -- 默认情况下,除 cmdlet 之外,Get-Command cmdlet 还获取函数。

     -- 生成用户界面的本机命令不能通过管道传送给 Out-Host cmdlet。

     -- 新增的 Begin、Process、End 和 Dynamic Param 语言关键字可能会与脚本和函数中使用的类
        似单词发生冲突。将这些单词解释为语言关键字可能产生分析错误。

     -- Cmdlet 名称解析已发生更改。在 Windows PowerShell 1.0 中,如果两个 Windows 
        PowerShell 管理单元导出的 cmdlet 名称相同,则会产生运行时错误。在 Windows 
        PowerShell 2.0 中,键入命令名称时,会运行最后添加到会话中的 cmdlet。若要运行默认情况
        下不运行的命令,请使用生成该命令的管理单元或模块的名称限定 cmdlet 名称。

     -- 如果函数中包含帮助主题,则在函数名称后跟"-?"可获取该函数的帮助主题。

    --  Microsoft .Net Frameword 方法的参数解析已发生更改。
        在 Windows PowerShell 1.0 中,如果调用的重载 .NET 方法具有多个最佳匹配语法,则不会
        报告任何错误。在 Windows PowerShell 2.0 中,会报告多义性错误。

        另外,在 Windows PowerShell 2.0 中,用于选择最佳匹配方法的算法进行了重大改进,以尽量
        减少多义性错误。

     -- 如果要枚举管道中的集合和试图修改管道中的集合,则 Windows PowerShell 会引发异常。
    
        例如,下面的命令适用于 Windows PowerShell 1.0,但在 Windows PowerShel 2.0 中,
        第一次管道迭代后将失败。

            $h = @{Name="Hello"; Value="Test"}
            $h.keys | foreach-object {$h.remove($_)}

        若要避免此错误,请使用 $() 字符为枚举器创建子表达式。例如:

        $($h.keys) | foreach-object {$h.remove($_)}

      有关 Windows PowerShell 2.0 的详细信息,请访问下面的网站:
 
      -- Windows PowerShell 网站
         https://go.microsoft.com/fwlink/?LinkID=106031

      -- Windows PowerShell 团队博客:
         https://go.microsoft.com/fwlink/?LinkId=143696 

另请参阅
    about_Data_Sections
    about_Debuggers
    about_Functions_Advanced
    about_Jobs
    about_Join
    about_PSSessions
    about_Remote
    about_Script_Internationalization
    about_Split