Windows PowerShell 帮助

  • Windows PowerShell 入门指南

  • Windows PowerShell 用户指南

  • Windows PowerShell About 帮助主题

  • Windows PowerShell Cmdlet 帮助主题

  • Windows PowerShell 提供程序帮助主题

  • Windows PowerShell 集成脚本环境 (ISE) 帮助

  • PowerShell.exe 控制台帮助


Windows PowerShell 入门指南

Windows PowerShell 是专为系统管理员设计的新 Windows 命令行 shell。Windows PowerShell 包括交互式提示和脚本环境，两者既可以独立使用也可以组合使用。

与接受和返回文本的大多数 shell 不同，Windows PowerShell 是在 .NET Framework 公共语言运行时 (CLR) 和 .NET Framework 的基础上构建的，它接受和返回 .NET Framework 对象。环境中的这一根本更改带来了管理和配置 Windows 的全新工具和方法。

Windows PowerShell 引入了 cmdlet（读作“command-let”）的概念，这是内置到 shell 中的一个简单的单一功能命令行工具。可以分别使用每个 cmdlet，但是组合使用这些简单的工具执行复杂任务时才发挥其作用。Windows PowerShell 包括一百多个基本的核心 cmdlet，您可以编写自己的 cmdlet 并与其他用户共享它们。

与许多 shell 一样，Windows PowerShell 为您提供了对计算机上文件系统的访问。此外，使用 Windows PowerShell 提供程序还可以访问其他数据存储，如注册表和数字签名证书存储，就像访问文件系统一样容易。

本入门指南对 Windows PowerShell 进行了以下几方面介绍：语言、cmdlet、提供程序以及对象用法。


Windows PowerShell 简介

大多数 shell（包括 Cmd.exe 以及 SH、KSH、CSH 和 BASH UNIX shell）的运行方式是在新进程中执行命令或实用工具，然后将结果以文本形式显示给用户。经过数年的发展，许多文本处理实用工具（如 sed、AWK 和 PERL）现已发展为支持此交互。

这些 shell 还具有内置到 shell 中并在 shell 进程中运行的命令，例如 KSH 中的 typeset 命令和 Cmd.exe 中的 dir 命令。在大多数 shell 中，由于内置命令很少，因此创建了许多实用工具。

Windows PowerShell 有很大不同。

  • Windows PowerShell 不处理文本。相反，它处理基于 .NET Framework 平台的对象。

  • Windows PowerShell 附带了具有一致界面的大量内置命令。

  • 所有的 shell 命令都使用同一命令分析程序，而不是每个工具使用不同的分析程序。这样便可更轻松地学习如何使用每个命令。

其最好的优点在于，您不必忍痛舍弃自己惯用的工具。仍可以在 Windows PowerShell 中使用传统的 Windows 工具，如 Net、SC 和 Reg.exe。

本节包括以下主题：

  • Windows PowerShell Cmdlet

  • 新脚本语言

  • Windows 命令和实用工具

  • 处理对象

  • 对象管道


Windows PowerShell Cmdlet

cmdlet（读作“command-let”）是 Windows PowerShell 中用于操作对象的单功能命令。可以通过其名称格式识别 cmdlet -- 由短划线 (-) 分隔的动词和名词，例如 Get-Help、Get-Process 和 Start-Service。

在传统的 shell 中，命令是从非常简单（如 attrib.exe）到非常复杂（如 netsh.exe）的可执行程序。

在 Windows PowerShell 中，大多数 cmdlet 都非常简单，它们设计为与其他 cmdlet 组合使用。例如，“get”cmdlet 仅检索数据，“set”cmdlet 仅建立或更改数据，“format”cmdlet 仅设置数据格式，“out”cmdlet 仅将输出定向到指定的目标。

每个 cmdlet 都具有一个帮助文件，可以通过键入以下内容访问它：

get-help <cmdlet-name> -detailed

cmdlet 帮助文件的详细视图包括 cmdlet 说明、命令语法、参数说明和演示 cmdlet 用法的示例。


新脚本语言

由于以下原因，Windows PowerShell 使用它自己的语言，而不是重用现有的语言：

  • Windows PowerShell 需要用于管理 Microsoft .NET Framework 对象的语言。

  • 该语言需要为使用 cmdlet 提供一致的环境。

  • 该语言需要支持复杂的任务，而不会使简单的任务变得更复杂。

  • 该语言需要与在 .NET Framework 编程中使用的高级语言（如 C#）一致。


Windows 命令和实用工具

可以在 Windows PowerShell 中运行 Windows 命令行程序，而且可以在 Windows Powershell 提示符下启动具有图形用户界面的 Windows 程序（如记事本和计算器）。还可以捕获 Windows 程序生成的文本，并在 Windows PowerShell 中使用该文本。

例如，以下命令使用 Windows 的 IPConfig、Net 和 Shutdown 命令。

C:\PS> net localgroup administrators /add domain01\user01
The command completed successfully.

C:\PS> ipconfig
Windows IP Configuration
Ethernet adapter Local Area Connection:
       Connection-specific DNS Suffix  . : domain.corp.fabricam.com
       IP Address. . . . . . . . . . . . : 142.20.152.115
       Subnet Mask . . . . . . . . . . . : 255.255.252.0
       Default Gateway . . . . . . . . . : 172.30.180.1

C:\PS> shutdown -r

您甚至可以使用 Windows PowerShell cmdlet（如 Select-String）处理 Windows 程序返回的文本。

例如，以下命令会使用管道运算符将 IPConfig 命令的结果发送到 Windows PowerShell Select-String cmdlet，后者会搜索字符串中的文本。在此情况下，可以使用 Select-String 在 IpConfig 输出中查找模式“255”。

C:\PS> ipconfig | select-string -pattern 255
Subnet Mask . . . . . . . . . . . : 255.255.252.0

当 Windows 命令或工具带有参数时，如 Shutdown 的“-r”（重新启动）参数，Windows PowerShell 会将参数传递给该工具而不解释它们。

但是，如果该工具使用 Windows PowerShell 保留字或者使用 Windows PowerShell 不熟悉的命令格式，如 Nant 的“-D:debug=false”参数（Windows PowerShell 将此参数解释为两个参数：“-D”和“debug=false”），请用引号将参数括起来，以指示 Windows PowerShell 应该将参数发送给该工具而不进行解释。


处理对象

在 Windows PowerShell 中工作时您使用的是 .NET Framework 对象，但您最初可能没有意识到这一点。随着您经验的增加，对象处理能力变得更明显，而且您发现自己使用的是对象，甚至用对象进行思考。

从技术上讲，.NET Framework 对象是 .NET Framework 类的实例，包含数据以及与该数据关联的操作。但是，可以将对象视为具有属性（与特性类似）和方法（可以对对象执行的操作）的数据实体。

例如，在 Windows PowerShell 中获取服务时，实际上是在获取表示该服务的对象。查看有关服务的信息时，所查看的是其服务对象的属性。此外，启动服务时（即，在将服务的 Status 属性更改为“started”时），所使用的是服务对象的方法。

类型相同的所有对象都具有相同的属性和方法，但是对象的每个实例可能具有不同的属性值。例如，每个服务对象都具有 Name 和 Status 属性。但是，每个服务都可以具有不同的名称和不同的状态。

准备就绪后，了解对象是很容易的。若要确定 cmdlet 正在获取什么类型的对象，请使用管道运算符 (|) 将“get”命令的结果发送到 Get-Member 命令。例如，以下命令会将 Get-Service 命令检索的对象发送到 Get-Member。

get-service | get-member

Get-Member 显示有关服务对象的信息，其中包括对象的类型名称及其属性和方法的列表。

   TypeName: System.ServiceProcess.ServiceController

Name                      MemberType    Definition
----                      ----------    ----------
Name                      AliasProperty Name = ServiceName
add_Disposed              Method        System.Void add_Disposed(EventHandler value)
Close                     Method        System.Void Close()
Continue                  Method        System.Void Continue()
...

若要获取有关对象类的信息，请在 MSDN 中复制并粘贴类型名称，如 System.ServiceProcess.ServiceController。找到类后，可以阅读 MSDN 副主题，以了解基于该类的对象（如 Windows PowerShell 中的对象）的属性和方法。

若要查找特定对象的所有属性的值，请使用管道运算符 (|) 将“get”命令的结果发送到 Format-List 或 Format-Table 命令。将 format cmdlet 的 Property 参数与表示所有的值 (*) 一起使用。例如，若要查找系统上 Schedule 服务的所有属性，请键入：

get-service schedule | format-list -property *

以下显示一个结果示例。

Name                : Schedule
CanPauseAndContinue : True
CanShutdown         : True
CanStop             : True
DisplayName         : Task Scheduler
DependentServices   : {}
MachineName         : .
ServiceName         : Schedule
ServicesDependedOn  : {RpcSs}
ServiceHandle       : SafeServiceHandle
Status              : Running
ServiceType         : Win32ShareProcess
Site                :
Container           :

最初学习 Windows PowerShell 时，无需了解有关对象的任何信息，但要意识到该概念。您将很快能够充分利用对象。


对象管道

使用对象的一个主要优点是，它使得用管道传输命令（即，将一个命令的输出作为输入传递给另一命令）容易得多。在传统的命令行环境中，您必须对文本进行操作，以便将输出从一种格式转换为另一种格式，并删除标题和列标题。

Windows PowerShell 提供了一个基于对象而不是基于文本的新体系结构。接收对象的 cmdlet 可以直接作用于其属性和方法，而无需进行转换或操作。用户可以通过名称引用对象的属性和方法，而不是计算数据在输出中的位置。

在以下示例中，将 IpConfig 命令的结果传递到 Findstr 命令。管道运算符 (|) 将其左侧命令的结果发送到其右侧的命令。在 Windows PowerShell™ 中，无需操作字符串或计算数据偏移量。

PS> ipconfig | findstr "Address"
        IP Address. . . . . . . . . . . . : 172.28.21.5
        IP Address. . . . . . . . . . . . : 172.30.160.225


交互和脚本

本节包含以下主题：

  • 交互式环境

  • 对脚本的支持


交互式环境

与其他 shell 一样，Windows PowerShell 支持完全交互式环境。在提示符下键入命令后，将处理该命令并在 shell 窗口中显示输出。可以将命令输出发送到文件或打印机，也可以使用管道运算符 (|) 将输出发送到其他命令。


对脚本的支持

如果重复运行特定的命令或命令序列，或者如果开发一系列命令来执行复杂的任务，则会希望在文件中保存命令并执行命令文件，而不是在提示符下键入命令。保存命令的文件称为脚本。

Windows PowerShell 除了提供交互式界面外，还完全支持脚本。在 Windows PowerShell 中，脚本文件的文件扩展名为 .ps1。若要运行脚本，请在命令提示符下键入该脚本的名称。文件扩展名是可选的。

例如：

c:\test\testscript.ps1

- 或 -

c:\test\testscript

即使脚本在当前目录中，也必须指定脚本文件的完全限定路径。若要指示当前目录，请键入目录名称或使用点 (.) 表示当前目录。例如：

.\testscript.ps1

虽然脚本在一些企业中非常有用 -- 甚至是必需的，但是它们可以用于传播恶意代码。因此，通过 Windows PowerShell 中的安全策略（称为执行策略）您可以确定脚本是否可以运行，以及它们是否必须包括数字签名。为了消除明显的风险，Windows PowerShell 中的执行策略都不允许通过双击脚本的图标来运行它。有关详细信息，请键入：

get-help about_execution_policies

Windows PowerShell 还包括一种非常丰富的脚本语言，使用该语言可以创建从最简单到非常复杂的脚本。它支持用于循环、条件、流控制和变量赋值的语言结构。

另请参阅

  • about_Scripts
  • about_Execution_Policies


启动 Windows PowerShell

可以从“开始”菜单、任务栏、“搜索”或“运行”框、命令提示符窗口中启动 Windows PowerShell，甚至可以从另一个 Windows PowerShell 窗口中启动它。

可以在一台计算机上启动 Windows PowerShell（或 Windows PowerShell ISE）的多个实例。

如何启动 Windows PowerShell

在 Windows Vista、Windows Server 2008 和更高版本的 Windows 上，若要从“开始”菜单中启动 Windows PowerShell，请依次单击“开始”、“所有程序”、“附件”、“Windows PowerShell”文件夹和“Windows PowerShell”项。

在 Windows XP 和 Windows Server 2003 上，若要从“开始”菜单中启动 Windows PowerShell，请依次单击“开始”、“程序”、“附件”、“Windows PowerShell”文件夹和“Windows PowerShell”项。

如何启动 Windows PowerShell ISE

Windows PowerShell 集成脚本环境 (ISE) 是一种新的主机应用程序，允许您在友好的、语法着色的环境中运行命令并编写、测试和调试脚本。

在 Windows Vista、Windows Server 2008 和更高版本的 Windows 中，若要从“开始”菜单中启动 Windows PowerShell ISE，请依次单击“开始”、“所有程序”、“附件”、“Windows PowerShell”文件夹和“Windows PowerShell ISE”项。

在 Windows XP 和 Windows Server 2003 中，若要从“开始”菜单中启动 Windows PowerShell，请依次单击“开始”、“程序”、“附件”、“Windows PowerShell”文件夹和“Windows PowerShell ISE”项。

如何启动带所有模块的 Windows PowerShell

在 Windows 7 和 Windows Server 2008 R2 中，您可以使用任务启动一个 Windows PowerShell 窗口，该窗口中包含可选模块和管理单元中为您提供的所有命令，其中包括默认情况下未以其他方式添加的命令。该窗口还具有 Administrator 帐户的特权。

有关 Windows PowerShell 模块和管理单元的详细信息，请参阅使用模块和管理单元、如何导入模块和 about_Modules。

若要启动带所有模块的 Windows PowerShell，请使用以下任一过程。

  • 在任务栏中，右键单击“Windows PowerShell”图标，然后单击“导入所有模块”。

依次单击“开始”、“管理工具”和“Windows PowerShell 模块”。

注意：

在 Windows Server 2008 R2 中，Windows PowerShell 图标默认固定在任务栏中。不过，必须启动一次 Windows PowerShell 才能使“导入所有模块”任务出现。

在所有受支持的 Windows 版本中，可以向 Windows PowerShell 会话中添加所有可用的模块。启动 Windows PowerShell 并在 Windows PowerShell 提示符处键入：

get-module -listAvailable | import-module

如何用管理员特权启动 Windows PowerShell

在 Windows 7 和 Windows Server 2008 R2 中，可以使用任务并以 Administrator 帐户的全部特权启动 Windows PowerShell 窗口。通常没有必要这样做，但有少数几个命令需要这些特权。

在 Windows 任务栏中，右键单击“Windows PowerShell”图标，然后单击“以 admin 身份运行 Windows PowerShell”。

若要在所有受支持的 Windows 版本中用管理员特权启动 Windows PowerShell（或 Windows PowerShell ISE），请使用以下过程。

  1. 依次单击“开始”、“程序”、“附件”和“Windows PowerShell”文件夹。

  2. 右键单击“Windows PowerShell”项（或“Windows PowerShell ISE”项），然后单击“以管理员身份运行”。

如何用其他选项启动 Windows PowerShell

Windows PowerShell 有很多允许您启动自定义 Windows PowerShell 会话的选项，其中包括使用特定控制台文件的选项、以特定执行策略运行的选项、排除您的 Windows PowerShell 配置文件的选项、运行特定的命令或脚本的选项或者使用单线程单元的选项等等。

若要查看这些选项，请在命令提示符 (Cmd.exe) 窗口或现有的 Windows PowerShell 窗口中键入：

powershell -?

若要用特定选项启动 Windows PowerShell，请使用该选项的参数。例如，若要用 RemoteSigned 执行策略启动 Windows PowerShell，请键入：

powershell -executionPolicy RemoteSigned


使用 Windows PowerShell

本节介绍使用 Windows PowerShell 的基本知识。首先介绍 Get-Help cmdlet（读作“command-let”），该 cmdlet 显示有关 Windows PowerShell 中的 cmdlet 和概念性主题的信息。然后介绍几个基本的 cmdlet，说明如何使用 cmdlet 参数，以及如何设置 cmdlet 输出的格式以获取生成有用的显示所需的数据。最后说明如何在 Windows PowerShell 中使用别名、如何在 Windows PowerShell 中运行传统的 Windows 应用程序，以及如何管理错误。

本节包括以下主题：

  • 获取帮助：Get-Help

  • 使用 Cmdlet

  • 了解对象：Get-Member

  • 设置命令输出的格式

  • 使用别名

  • 使用 Windows 程序

  • 管理错误


获取帮助：Get-Help

Get-Help cmdlet 是用于了解 Windows PowerShell 的有用工具。通过阅读 cmdlet 的说明、了解相关概念以及研究语言主题，您可以了解如何使用 Windows PowerShell。

感兴趣的第一个主题可能是帮助系统本身。若要显示有关 Windows PowerShell 中的帮助系统的信息，请键入：

get-help

然后，您可能想了解几个基本的 cmdlet，例如 Get-Help、Get-Command、Get-Process、Get-Service 和 Get-Eventlog。

若要显示 cmdlet 的帮助的最简单视图，请键入“get-help”，后跟该 cmdlet 的名称。例如，若要获取 Get-Command cmdlet 的帮助，请键入：

get-help get-command

如果 cmdlet 帮助的格式设置不正确（即，如果它以 XMLNS 标记开头），则可能是系统上的 Windows PowerShell 执行策略阻止系统加载用于为 cmdlet 帮助设置格式的配置文件。有关执行策略的详细信息，请键入：

get-help about_execution_policies

若要显示 cmdlet 的详细帮助，包括参数说明和示例，请使用 Get-Help 的 Detailed 参数。例如，若要获取 Get-Command cmdlet 的详细帮助，请键入：

get-help get-command -detailed

若要显示 cmdlet 的所有可用帮助，包括有关 cmdlet 的技术信息及其参数，请使用 Full 参数。例如，若要获取 Get-Command cmdlet 的完整帮助，请键入：

get-help get-command -full

也可以显示帮助文件的选定部分。若要仅查看示例，请使用 Examples 参数。例如，若要显示 Get-Command cmdlet 的示例，请键入：

get-help get-command -examples

若要仅查看详细的参数说明，请使用 Get-Help 的 Parameter 参数。可以指定参数的名称，或者使用通配符 (*) 指定所有参数。例如，若要查看 Get-Command 的 TotalCount 参数的说明，请键入：

get-help get-command -parameter totalcount

若要查看 Get-Command cmdlet 的所有参数，请键入：

get-help get-command -parameter *

Microsoft TechNet Library 的 Windows PowerShell 主题下还提供了联机 Windows PowerShell 帮助。与在命令提示符下显示的帮助相比，帮助的联机版本通常更便于阅读并且更新频率更快。

在 Windows PowerShell v.2 中，可以使用 Get-Help cmdlet 的 Online 参数显示 cmdlet 帮助主题的联机版本。默认情况下，Online 参数链接到 TechNet Library 帮助主题。

例如，若要打开 Get-Process cmdlet 的帮助主题的联机版本，请键入：

get-help get-process -online

也可以使用调用 Get-Help 的 Windows PowerShell 函数之一。Help 函数每次显示一屏帮助内容。Man 函数显示的帮助与 UNIX 中的手册页类似。若要使用 Help 和 Man 函数显示 Get-Command cmdlet 的帮助，请键入：

man get-command

或

help get-command

请求某个特定的帮助主题时，Get-Help 会显示该主题的内容，但是在使用通配符请求多个主题时，Get-Help 会显示主题列表。例如，若要查看“Get”cmdlet 的帮助主题列表，请键入：

get-help get-*

解释 Windows PowerShell 中的概念的帮助主题以“about_”开头。若要显示有关某个 Windows PowerShell 概念的帮助，请键入“get-help”，后跟该概念的名称。（概念名称必须用英文输入，即使在非英文版的 Windows PowerShell 中也是如此。）

例如，若要获取有关通配符的帮助，请键入：

get-help about_wildcards

若要显示 Windows PowerShell 中所有概念性帮助主题的列表，请键入：

get-help about_*

通过阅读帮助主题并试用示例，您将了解如何使用 Windows PowerShell。

另请参阅

  • Get-Help
  • Get-Command


使用 Cmdlet

cmdlet 是一个内置到 shell 中的简单的单一功能命令行工具。可以就像使用传统的命令和实用工具那样使用 cmdlet。首先在 Windows PowerShell 命令提示符下键入 cmdlet 的名称。Windows PowerShell 命令不区分大小写，因此可以用任意大小写键入。

例如，可以尝试 Get-Date cmdlet：

C:\PS> get-date
Thursday, November 10, 2005 4:43:50 PM

若要列出会话中的 cmdlet，请使用不带任何命令参数的 Get-Command cmdlet。

PS> get-command

CommandType     Name                            Definition
-----------     ----                            ----------
Cmdlet          Add-Content                     Add-Content [-Path] <String[...
Cmdlet          Add-History                     Add-History [[-InputObject] ...
Cmdlet          Add-Member                      Add-Member [-MemberType] <PS...
...
…

默认的 Get-Command 显示有三列：CommandType、Name 和 Definition。列出 cmdlet 时，Definition 列显示 cmdlet 的语法。语法中的省略号 (…) 指示数据被截断。

Get-Command cmdlet 还获取除 cmdlet 以外的命令和命令元素，其中包括 Windows PowerShell 中可用的别名（命令昵称）、函数和可执行文件。

通过使用 Get-Command 的 Name 参数，以下命令列出了在 Windows PowerShell 中可用的可执行文件。

PS> get-command -name *.exe

CommandType Name                   Definition
----------- ----                   ----------
Application 000StTHK.exe           C:\WINDOWS\system32\000StTHK.exe
Application 00THotkey.exe          C:\WINDOWS\system32\00THotkey.exe
Application accwiz.exe             C:\WINDOWS\system32\accwiz.exe
...

列出可执行文件时，Definition 列包含可执行文件的完整路径。

然后，尝试一些其他 cmdlet，例如 Get-Process、Get-Service、Get-EventLog 和 Get-Alias。

熟悉简单的“Get-”cmdlet 后，请尝试 Get-WmiObject。通过此 cmdlet 可以查看和更改远程计算机的组件。例如，以下命令获取有关 Server01 远程计算机上 BIOS 的信息：

get-wmiobject win32_bios -computername server01

如果需要任何 cmdlet 的帮助，请键入：

get-help <cmdlet-name> -detailed

例如：

get-help get-alias -detailed


使用函数

除了运行 cmdlet 外，您还可以在 Windows PowerShell 中运行函数。Windows PowerShell 附带了一些内置函数，而且您可以添加从其他用户那里获得的函数以及编写自己的函数。

关于函数

函数是 Windows PowerShell 中的一类命令。正如运行 cmdlet 一样，键入函数名称即可运行函数。函数可以具有参数，这如同 cmdlet 一样。正如 cmdlet 一样，函数可以将 .NET 对象作为输入，并将 .NET 对象作为输出返回。事实上，函数几乎可以完成 cmdlet 可以执行的所有操作。

函数的最大优点是它们非常容易编写。与用 C# 编写的 cmdlet 不同，函数仅仅是 Windows PowerShell 命令与表达式的命名组合。只要能够在 Windows PowerShell 中键入命令，就会编写函数。

查找函数

函数就是命令，因此，若要查找函数，请使用 Get-Command cmdlet。

例如，若要查找会话中的所有函数，请键入：

get-command -CommandType function

Windows PowerShell 还附带了一个 Function: 驱动器，其中包含您的会话中的所有函数。若要在 Function: 驱动器中导航，可以使用用于在文件系统驱动器中导航的相同方法。

若要进入函数驱动器，请键入：

cd function:

若要显示函数驱动器中的函数，请键入：

dir function:

运行函数

若要运行函数，只需键入函数名称。例如，若要运行 Clear-Host 函数，请键入：

clear-host

在 Windows PowerShell 控制台中，Clear-Host 函数会删除控制台窗口内的所有文本。在其他主机程序中，该函数可能会有不同的行为或者不起作用。

若要使用函数的参数，请键入参数名称，参数名称前面键入连字符，后面键入值，正如键入 cmdlet 的参数一样。

例如，Help 函数与 Get-Help cmdlet 具有相同的参数，该函数每次显示一页帮助主题。若要使用 Help 函数仅获取 Get-Service cmdlet 的帮助主题中的示例，请键入：

help -name get-service -examples

获取函数帮助

函数可以有帮助主题。若要查找某个函数的帮助主题，请使用 Get-Help cmdlet。这是您用来获取 cmdlet 帮助的同一个 cmdlet。

例如，若要获取 Disable-PSRemoting 函数的帮助，请键入：

get-help Disable-PSRemoting

可以使用 Get-Help cmdlet 的所有参数来获取函数帮助。例如，若要仅获取 Disable-PSRemoting 函数的帮助主题中的示例，请键入：

get-help Disable-PSRemoting -example

编写函数

函数是命令与表达式的命名组合。若要编写简单函数，请使用以下格式。

function <name> { <commands> }

只需键入 function 及函数的名称并用大括号 ({ }) 将命令括起来。

例如，如果重复键入某个特定命令，如 get-help get-member -examples，通过编写运行该命令的函数，可以节省时间。以下称为 GMEX 的函数运行该命令。

function GMEX {get-help get-member -examples}

在 Windows PowerShell 提示符处键入该函数（或者在本主题中复制该函数并进行粘贴）并按 Enter 后，您就可以在会话中使用该函数了。若要运行该函数，请键入 GMEX。

这是一个简单函数，但是只需要再有几行代码，您就可以添加参数，让参数成为可选参数或强制参数，添加用户消息并为您的函数添加帮助主题。进一步了解 Windows PowerShell 后，您就可以编写具有 cmdlet 全部功能的高级函数了。

有关编写函数的详细信息，请参阅 about_Functions、about_Comment_Based_Help 和 about_Functions_Advanced。

保存函数

打开 Windows PowerShell 时，您处于 Windows PowerShell 会话中。在关闭 Windows PowerShell 窗口（或者键入 Exit 结束该会话）前，该会话将一直进行。除非您将项保存到磁盘上的文件内或者注册表中，否则在您的会话结束时，您在会话中创建的项会被删除。

若要保存您编写的函数，以使它们在将来的 Windows PowerShell 会话中可用，请创建一个 Windows PowerShell 配置文件并将您的函数保存到该配置文件中。

有关详细信息，请参阅 about_Profiles。

另请参阅

    Using Cmdlet Parameters
  • about_Functions
  • about_Functions_Advanced
  • about_Command_Syntax
  • about_Comment_Based_Help
  • about_Profiles
  • 使用 Cmdlet


使用模块和管理单元

Windows PowerShell 是一个完全可扩展的环境。任何人都可以为 Windows PowerShell 编写命令。您可以使用其他人编写的命令，并且可以与其他人共享您编写的命令。

命令是通过使用模块和管理单元共享的。Windows PowerShell 模块和管理单元是包含 Windows PowerShell 命令和其他项的程序包。Windows PowerShell 中的所有 cmdlet 和提供程序都是在管理单元或模块中分发的，模块还可以包含函数、别名、变量和驱动器。

有些管理单元和模块会自动添加到每个 Windows PowerShell 会话中。如果您收到一个管理单元或模块，您可以安装它并将命令添加到您的 Windows PowerShell 会话中。若要共享您编写的命令，可以创建一个 Windows PowerShell 模块或管理单元。

关于模块

模块是包含可以在 Windows PowerShell 中使用的命令和其他项的程序包。在运行安装程序或者将模块保存到磁盘上后，可以将模块导入到 Windows PowerShell 会话中并使用命令和项。还可以使用模块组织 cmdlet、提供程序、函数、别名以及您创建的其他命令，并将它们与其他人共享。

有关安装和使用模块的信息，请参阅 about_Modules。有关创建模块的信息，请参阅 MSDN 中的“编写 Windows PowerShell 模块”。

关于管理单元

Windows PowerShell 管理单元 (PSSnapin) 是实现 cmdlet 和提供程序的动态链接库 (.dll)。收到一个管理单元时，您需要安装它，然后可以将该管理单元中的 cmdlet 和提供程序添加到您的 Windows PowerShell 会话中。

有关安装和使用管理单元的信息，请参阅 about_PSSnapins。有关如何编写管理单元的信息，请参阅 MSDN 中的“如何编写 Windows PowerShell 管理单元”。


如何导入模块

模块是包含 Windows PowerShell 命令（例如 cmdlet 和函数）和项（例如提供程序、变量、别名和驱动器）的程序包。如果您已经下载、安装或者收到了一个模块，请使用本主题中介绍的过程将该模块导入或添加到 Windows PowerShell 会话中。

导入之前：安装模块

如果收到的模块是包含文件的文件夹形式，则需要将该模块安装到计算机上，然后才能将它导入到 Windows PowerShell 中。通常，安装只不过是将模块复制到驱动器上计算机可以访问的某个特定位置。

大多数模块都已经安装好了。Windows PowerShell 附带了几个预先安装的模块。在 Windows Server 2008 R2 中，Server Manager 中的 Add Features Wizard 会自动安装所选的功能模块。在用于安装模块的安装程序中包含许多其他模块。

有关安装模块的详细信息，请参阅 about_Modules。

如何导入模块

若要使用模块中的命令，请将该模块导入到 Windows PowerShell 会话中。若要将模块从默认模块位置导入到当前会话中，请使用以下命令格式。

import-module <module-name>

例如，以下命令会将 BitsTransfer 模块导入到当前会话中。

import-module BitsTransfer

若要导入默认模块位置以外的模块，请在命令中使用模块文件夹的完全限定路径。例如，若要将 C:\ps-test 目录中的 TestCmdlets 模块添加到会话中，请键入：

import-module c:\ps-test\TestCmdlets

有关将模块添加到会话中的详细信息，请参阅 Import-Module。

另请参阅

  • about_Modules
  • Import-Module


了解对象：Get-Member

Get-Member 是最有用的 cmdlet 之一，它显示有关命令返回的 .NET Framework 对象的信息。该信息包括对象的类型、属性和方法。

若要使用 Get-Member，请使用管道运算符 (|) 将相关命令的结果发送到 Get-Member。例如：

get-service | get-member

此命令显示 Get-Service 实际上返回了一组 System.ServiceProcess.ServiceController 对象，计算机上的每个服务都有一个这样的对象。

   TypeName: System.ServiceProcess.ServiceController

Name                      MemberType    Definition
----                      ----------    ----------
Name                      AliasProperty Name = ServiceName
add_Disposed              Method        System.Void add_Disposed(EventHandler value)
Close                     Method        System.Void Close()
Continue                  Method        System.Void Continue()
CreateObjRef              Method        System.Runtime.Remoting.ObjRef CreateObjRef(Type requestedType)
Dispose                   Method        System.Void Dispose()
Equals                    Method        System.Boolean Equals(Object obj)
ExecuteCommand            Method        System.Void ExecuteCommand(Int32 command)
get_CanPauseAndContinue   Method        System.Boolean get_CanPauseAndContinue()
get_CanShutdown           Method        System.Boolean get_CanShutdown()
get_CanStop               Method        System.Boolean get_CanStop()
get_Container             Method        System.ComponentModel.IContainer get_Container()
get_DependentServices     Method        System.ServiceProcess.ServiceController[] get_DependentServices()
get_DisplayName           Method        System.String get_DisplayName()
get_MachineName           Method        System.String get_MachineName()
get_ServiceHandle         Method        System.Runtime.InteropServices.SafeHandle get_ServiceHandle()
get_ServiceName           Method        System.String get_ServiceName()
get_ServicesDependedOn    Method        System.ServiceProcess.ServiceController[] get_ServicesDependedOn()
get_ServiceType           Method        System.ServiceProcess.ServiceType get_ServiceType()
get_Site                  Method        System.ComponentModel.ISite get_Site()
get_Status                Method        System.ServiceProcess.ServiceControllerStatus get_Status()
GetHashCode               Method        System.Int32 GetHashCode()
GetLifetimeService        Method        System.Object GetLifetimeService()
GetType                   Method        System.Type GetType()
InitializeLifetimeService Method        System.Object InitializeLifetimeService()
Pause                     Method        System.Void Pause()
Refresh                   Method        System.Void Refresh()
remove_Disposed           Method        System.Void remove_Disposed(EventHandler value)
set_DisplayName           Method        System.Void set_DisplayName(String value)
set_MachineName           Method        System.Void set_MachineName(String value)
set_ServiceName           Method        System.Void set_ServiceName(String value)
set_Site                  Method        System.Void set_Site(ISite value)
Start                     Method        System.Void Start(), System.Void Start(String[] args)
Stop                      Method        System.Void Stop()
ToString                  Method        System.String ToString()
WaitForStatus             Method        System.Void WaitForStatus(ServiceControllerStatus desiredStatus), System.Voi...
CanPauseAndContinue       Property      System.Boolean CanPauseAndContinue {get;}
CanShutdown               Property      System.Boolean CanShutdown {get;}
CanStop                   Property      System.Boolean CanStop {get;}
Container                 Property      System.ComponentModel.IContainer Container {get;}
DependentServices         Property      System.ServiceProcess.ServiceController[] DependentServices {get;}
DisplayName               Property      System.String DisplayName {get;set;}
MachineName               Property      System.String MachineName {get;set;}
ServiceHandle             Property      System.Runtime.InteropServices.SafeHandle ServiceHandle {get;}
ServiceName               Property      System.String ServiceName {get;set;}
ServicesDependedOn        Property      System.ServiceProcess.ServiceController[] ServicesDependedOn {get;}
ServiceType               Property      System.ServiceProcess.ServiceType ServiceType {get;}
Site                      Property      System.ComponentModel.ISite Site {get;set;}
Status                    Property      System.ServiceProcess.ServiceControllerStatus Status {get;}

此信息看起来技术性很强，但是它实际上非常实用。

  • 类型名称（如“System.ServiceProcess.ServiceController”）显示 cmdlet 返回什么类型的 .NET 对象。若要获取有关此 .NET 类中的对象的信息，请将该类型名称粘贴到 MSDN 上的搜索文本框中。相关的 MSDN 主题包括有关此类中对象的属性和方法的信息，其中包括 Get-Service 返回的对象。

  • 属性类型表示对象的属性。每个属性的值是有关服务对象的信息。例如，ServiceController 对象具有 CanPauseAndContinue 属性。该属性的 MSDN 说明解释，该属性指示是否可以暂停和恢复服务。

    若要列出特定服务的属性的值，请键入：

    (get-service <service-name>).<property-name>
    例如：

    (get-service alerter).canpauseandcontinue
    若要显示 Alerter 服务的 CanPauseAndContinue 属性的名称和值的列表，请键入：

    get-service alerter | format-list -property name, CanPauseAndContinue
    若要显示 Alerter 服务的所有属性值的列表，请键入：

    get-service alerter | format-list -property *
    若要显示所有服务的 CanPauseAndContinue 属性的名称和值的表，请键入：

    get-service | format-table -property name, CanPauseAndContinue
  • 方法类型表示对象的方法，即可以对对象执行的操作。例如，ServiceController 对象具有 Stop 方法，使用该方法可以停止服务。

    若要调用服务对象的方法，请使用以下格式。（务必包括圆括号）。

    (get-service <service-name>).<method-name>()
For example,
(get-service schedule).stop()

有关 Get-Member 命令的详细信息，请键入：

get-help get-member -detailed


设置命令输出的格式

在传统的 shell 中，每个工具或命令确定其输出的格式。一些工具允许自定义输出，因此它们包括用于控制输出格式的特殊参数。

在 Windows PowerShell 中，只有下列 Format cmdlet 才设置输出格式：

  • Format-List

  • Format-Custom

  • Format-Table

  • Format-Wide

其他 cmdlet 都不设置输出格式。因此，无需了解多个工具的格式设置例程和参数。只需了解 Format cmdlet 及其参数即可。

运行命令时，Windows PowerShell 调用默认的格式化程序，该程序由所显示的数据类型确定。格式化程序确定显示输出的哪些属性以及用列表还是表显示它们。

例如，使用 Get-Service cmdlet 时，默认显示是一个包含三列的表，如下所示：

C:\PS> get-service
Status   Name               DisplayName
------   ----               -----------
Running  AdtAgent           Event Forwarder
Stopped  Alerter            Alerter
Running  ALG                Application Layer Gateway Service

若要更改任何 cmdlet 的输出格式，请使用管道运算符 (|) 将命令输出发送到 Format cmdlet。

例如，以下命令会将 Get-Service 命令的输出发送到 Format-List cmdlet。因此，对于每个服务，服务数据被设置为列表格式。

C:\PS> get-service | format-list
Name                : AdtAgent
DisplayName         : Event Forwarder
Status              : Running
DependentServices   : {}
ServicesDependedOn  : {eventlog, dnscache}
CanPauseAndContinue : False
CanShutdown         : True
CanStop             : True
ServiceType         : Win32OwnProcess

Name                : Alerter
DisplayName         : Alerter
Status              : Stopped
DependentServices   : {}
ServicesDependedOn  : {LanmanWorkstation}
CanPauseAndContinue : False
CanShutdown         : False
CanStop             : False
ServiceType         : Win32ShareProcess

Name                : ALG
DisplayName         : Application Layer Gateway Service
Status              : Running
DependentServices   : {}

在此格式中，不仅数据出现在列表（而不是表）中，而且存在有关每个服务的详细信息。每个服务的数据不是三列，而是有九行数据。Format-List 未检索额外的服务信息。该数据一直在 Get-Service 检索的对象中，但默认的格式化程序 Format-Table 因无法在屏幕上显示三列以上而忽略了它。

除了确定数据出现在列表中还是表中之外，还可以确定显示对象的哪些属性。例如，Get-Service 的默认显示仅显示服务对象的 Status、Name 和 DisplayName 属性。

若要查看对象的所有属性，请使用管道运算符 (|) 将命令输出发送到 Get-Member cmdlet。例如，若要查看服务对象的所有属性，请键入：

get-service | get-member -membertype *property

   TypeName: System.ServiceProcess.ServiceController

Name                MemberType    Definition
----                ----------    ----------
Name                AliasProperty Name = ServiceName
CanPauseAndContinue Property      System.Boolean CanPauseAndContinue {get;}
CanShutdown         Property      System.Boolean CanShutdown {get;}
CanStop             Property      System.Boolean CanStop {get;}
Container           Property      System.ComponentModel.IContainer Container {get;}
DependentServices   Property      System.ServiceProcess.ServiceController[] DependentServices {get;}
DisplayName         Property      System.String DisplayName {get;set;}
MachineName         Property      System.String MachineName {get;set;}
ServiceHandle       Property      System.Runtime.InteropServices.SafeHandle ServiceHandle {get;}
ServiceName         Property      System.String ServiceName {get;set;}
ServicesDependedOn  Property      System.ServiceProcess.ServiceController[] ServicesDependedOn {get;}
ServiceType         Property      System.ServiceProcess.ServiceType ServiceType {get;}
Site                Property      System.ComponentModel.ISite Site {get;set;}
Status              Property      System.ServiceProcess.ServiceControllerStatus Status {get;}

由于所有这些属性都在 Get-Service 为每个服务检索的对象中，因此可以显示其中任一属性或所有属性。使用 Format cmdlet 的 Property 参数可以选择要显示的属性以及属性的显示顺序。例如，以下命令使用 Format-Table 命令仅显示服务的 Name、ServiceType 和 CanShutDown 属性。

get-service | format-table name, Servicetype, Canshutdown

这仅仅是可以对 Windows PowerShell 显示所执行操作的开始。有关更多详细信息，请使用以下命令来阅读有关 Format cmdlet 的帮助：

get-help format-list
get-help format-table
get-help format-wide
get-help format-custom


使用别名

键入 Cmdlet 名称很麻烦。为了最大限度地减少键入内容，并使习惯于其他 shell 的用户更容易使用 Windows PowerShell，Windows PowerShell 支持别名（即命令的替代名称）这一概念。可以为 cmdlet 名称、函数名称或可执行文件的名称创建别名，然后在任何命令中键入别名而不是名称。

Windows PowerShell 包括许多内置的别名，而且您可以创建自己的别名。您创建的别名仅在当前会话内有效。若要创建持久性别名，请将别名添加到 Windows PowerShell 配置文件。

若要查找会话中的所有别名，请键入：

get-alias

若要查找 cmdlet 的别名，请键入：

get-alias | where-object {$_.definition -eq "<cmdlet-name>"}

例如：

get-alias | where-object {$_.definition -eq "set-location"}

Windows PowerShell 中的别名由 Windows PowerShell Alias 提供程序支持，该提供程序是一个 .NET Framework 程序集，通过它可以查看驱动器（与 Windows 中的文件系统驱动器看上去非常类似）中的别名。用于别名的驱动器是 Alias:。

若要转到 Alias 驱动器，请键入：

set-location alias:

若要查看别名，即 Alias: 驱动器中的子项，请键入

get-childitem

若要从另一驱动器查看 Alias: 驱动器中的子项，请在命令中包括该驱动器名称。例如：

get-childitem alias:

创建别名

若要在 Windows PowerShell 中为 cmdlet 和命令创建别名，请使用 Set-Alias cmdlet。例如，若要为 Get-Help cmdlet 创建别名“gh”，请键入：

set-alias gh get-help

也可以为命令（例如，用于启动程序的命令）创建别名。例如，若要为 Notepad 创建别名“np”，请键入：

set-alias np c:\windows\notepad.exe

（在您的系统上，Notepad 的路径可能是不同的。）

删除别名

若要删除别名，请使用 Remove-Item cmdlet 从 Alias: 驱动器中删除别名。例如，若要删除“ls”别名，请键入

remove-item alias:ls

使用函数创建替代名称

可以为 cmdlet、函数或可执行文件创建别名，但不能为带参数的命令创建别名。但是，可以创建其行为与别名非常类似的函数。

例如，若要在运行 Windows XP 的计算机上使用记事本打开 Boot.ini 文件，请键入：

notepad c:\boot.ini

不能为“notepad c:\boot.ini”创建别名，但是可以创建函数。以下命令会创建 bootini 函数。

function bootini {notepad c:\boot.ini}

此函数的行为与别名类似。如果在 Windows PowerShell 提示符下键入 bootini，Boot.ini 就会在记事本中打开。


使用 Windows 程序

在 Windows PowerShell 中，可以运行 Windows 命令行程序和启动 Windows 图形程序。如果程序生成文本输出，则可以捕获该文本，并在新 shell 中使用它，就像在任何其他 shell 中一样。

若要在 Windows PowerShell 中运行程序（如记事本），该程序的可执行文件必须位于 Path 环境变量所含的目录中，因为 Path 环境变量的值确定 Windows PowerShell 查找应用程序、实用工具和脚本的位置。（Cmdlet 不必位于 Path 目录中。）

若要查看 Path 环境变量中的路径，请键入：

PS> $env:path

若要将目录添加到 Path 环境变量，请键入：

PS> $env:path += ";newdirectory"

例如，若要将 WordPad.exe 文件的目录添加到 Path 变量，请键入：

PS> $env:path += ";C:\Program Files\Windows NT\Accessories"

与 set 命令一样，此赋值语句仅会更改当前 Windows PowerShell 会话的 Path 值。若要使该更改成为永久性更改，请将赋值语句添加到 Windows PowerShell 配置文件中。有关详细信息，请参阅“Windows PowerShell 配置文件”主题。


管理错误

使用 Windows PowerShell 时偶尔会出现错误，例如尝试将位置设置为不存在的目录或者在没有所需特权的情况下尝试删除文件时。

在 Windows PowerShell 中，有以下两种类型的错误：

  • 终止错误：终止命令执行的错误。

  • 非终止错误：不终止命令执行的错误。

例如，如果要删除目录中的所有 .TMP 文件，则当其中一个文件无法删除时，您可能不希望该操作停止。通常，您希望删除可以删除的所有文件，然后再回来处理无法删除的文件。

无法删除文件时出现的错误称为非终止错误。出现非终止性错误时，Windows PowerShell 会继续运行，而不管该错误，然后显示该错误以及输出。

更严重的错误将停止命令处理。这些错误称为终止错误。终止性错误会停止命令的处理。例如，如果提交的数据无效或者您不具有执行命令所需的权限，Windows PowerShell 就会生成终止错误。


在 Windows PowerShell 中导航

Windows PowerShell™ 最强大的功能之一是，它允许您使用在文件系统中进行导航时所用的熟悉方法在许多不同的数据存储中进行导航。

除了熟悉的文件系统驱动器（如 C: 和 D:）之外，Windows PowerShell 还包括表示 HKEY_LOCAL_MACHINE (HKLM:) 和 HKEY_CURRENT_USER (HKCU:) 注册表配置单元、计算机上的数字签名证书存储区 (Cert:) 以及当前会话中函数 (Function:) 等的驱动器。这些驱动器称为 Windows PowerShell 驱动器。

Windows PowerShell™ 附带有 Windows PowerShell 提供程序支持的几个有用驱动器。若要查看 Windows PowerShell 驱动器的列表，请键入：

get-psdrive

本节包含以下主题：

  • 在文件系统中导航

  • 在注册表中导航

  • 在证书存储区中导航

  • 在其他驱动器中导航

  • 关于 Windows PowerShell 驱动器

  • 驱动器和提供程序


在文件系统中导航

启动 Windows PowerShell™ 时，您可能很想键入熟悉的 cd、dir 或 ls。可以这样做！cd 是 Set-Location cmdlet（将当前位置更改为指定路径的 cmdlet）的别名。dir 和 ls 是 Get-Childitem cmdlet（获取某个位置中的子项的 cmdlet）的别名。

若要在文件系统驱动器中导航，请使用 Set-Location (cd) 和 Get-Childitem（dir、ls）cmdlet。在 Windows PowerShell 中，驱动器由后跟冒号 (:) 的驱动器名称表示，如 C:，父项与子项用反斜杠 (\) 或正斜杠 (/) 隔开，如 C:\Windows\System32。

有几项功能可以使在 Windows PowerShell 中导航更容易：

  • 有表示当前目录 (.) 和目录内容 (*) 的符号。

  • 有表示主目录的内置变量 $home 和表示 Windows PowerShell 安装路径的内置变量 $pshome。

与在其他 shell 中一样，可以更改位置，创建、删除、移动和复制目录及文件，以及更改其属性。甚至可以将 Tab 补齐功能用于路径名。有关详细信息，请参阅 Item cmdlet（Get-Item、Get-Childitem、New-Item、Remove-Item、Set-Item、Move-Item 和 Copy-Item）的帮助。


在注册表中导航

可以使用与在文件系统驱动器中用来导航的相同方法在 Windows 注册表中进行导航。在 Windows PowerShell 中，HKEY_LOCAL_MACHINE 配置单元映射到 Windows PowerShell HKLM: 驱动器，而 HKEY_CURRENT_USER 配置单元映射到 Windows PowerShell HKCU: 驱动器。

例如：

PS C:\> cd hklm:
PS HKLM:\> dir
PS HKLM:\> dir
   Hive: Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE
SKC  VC Name                           Property
---  -- ----                           --------
  4   0 HARDWARE                       {}
  1   0 SAM                            {}
Get-ChildItem : Requested registry access is not allowed.
At line:1 char:3
+ dir <<<<
 39   2 SOFTWARE                       {flash, (default)}
  8   0 SYSTEM                         {}
PS HKLM:\> cd system\currentcontrolset\control
PS HKLM:\system\currentcontrolset\control> dir

在导航时，您将注意到 dir (Get-Childitem) 的输出在注册表驱动器中与在文件系统中是不同的。由于注册表具有不同的驱动器，因此 Windows PowerShell 会显示数据的不同视图。在这种情况下，知道存在多少子项和项是很重要的，因此除了子项和项的名称外，输出还包括子项计数 (SKC) 和值项计数 (VC)。

PS> cd "CurrentControlSet\Control\Session Manager"
PS> dir
    Hive: Registry::HKEY_LOCAL_MACHINE\system\CurrentControlSet\Control\Session
Manager

SKC  VC ChildName                      Property
---  -- ---------                      --------
  0   1 AppCompatibility               {AppCompatCache}
 15   0 AppPatches                     {}
  0   7 DOS Devices                    {AUX, MAILSLOT, NUL, PIPE, PRN, UNC, f...

到达注册表条目之前，不会在导航中遇到很多的差异。注册表项中的条目被认为是它们所在项的属性。因此，可以使用 Get-ItemProperty cmdlet 来检索它们。

例如，如果要查看 Windows PowerShell 执行策略的值，可以使用 Get-ExecutionPolicy cmdlet 或者导航到在 HKLM:\Software\Microsoft\PowerShell\1\ShellIds\Microsoft.PowerShell 中存储该值的 ExecutionPolicy 注册表条目。

PS C:\> cd hklm:
PS HKLM:\> cd software\microsoft\powershell\1\ShellIds\Microsoft.PowerShell
PS HKLM:\software\microsoft\powershell\1\ShellIds\Microsoft.PowerShell> dir
PS HKLM:\software\microsoft\powershell\1\ShellIds\Microsoft.PowerShell> get-itemproperty -path . -name executionpolicy

PSPath          : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\software\microsoft\powershell\1\ShellIds\Micro
                  soft.PowerShell
PSParentPath    : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\software\microsoft\powershell\1\ShellIds
PSChildName     : Microsoft.PowerShell
PSDrive         : HKLM
PSProvider      : Microsoft.PowerShell.Core\Registry
ExecutionPolicy : RemoteSigned


在证书存储区中导航

可以在计算机上的数字签名证书存储区中导航。证书存储区映射到 Windows PowerShell Cert: 驱动器。下面的示例演示如何使用 Set-Location (cd) 和 Get-Childitem（dir、ls）在 Cert: 驱动器中导航。

PS C:\> cd cert:
PS cert:\> dir
Location   : CurrentUser
StoreNames : {TrustedPeople, _NMSTR, Trust, REQUEST...}

Location   : LocalMachine
StoreNames : {_NMSTR, Trust, REQUEST, TrustedPeople...}

PS cert:\> cd currentuser
PS cert:\currentuser> dir

Name : TrustedPeople
Name : _NMSTR
Name : Trust
Name : REQUEST
Name : AuthRoot
Name : ACRS
Name : My
Name : addressbook
Name : Disallowed
Name : CA
Name : UserDS
Name : Root
Name : TrustedPublisher

PS cert:\currentuser> cd authroot
PS cert:\currentuser\authroot> dir
    Directory: Microsoft.PowerShell.Security\Certificate::currentuser\authroot
Thumbprint                                Subject
----------                                -------
F88015D3F98479E1DA553D24FD42BA3F43886AEF  O=C&W HKT SecureNet CA SGC Root, C=hk
F44095C238AC73FC4F77BF8F98DF70F8F091BC52  CN=Class 3TS Primary CA, O=Certplus, C=FR
EF2DACCBEABB682D32CE4ABD6CB90025236C07BC  O="Colegio Nacional de Correduria Publica Mexicana, A.C.", CN="Autoridad C...
...
PS cert:\currentuser\authroot> get-childitem F88015D3F98479E1DA553D24FD42BA3F43886AEF
    Directory: Microsoft.PowerShell.Security\Certificate::currentuser\authroot
Thumbprint                                Subject
----------                                -------
F88015D3F98479E1DA553D24FD42BA3F43886AEF  O=C&W HKT SecureNet CA SGC Root, C=hk

PS cert:\currentuser\authroot> get-childitem F88015D3F98479E1DA553D24FD42BA3F43886AEF | format-list -property *

PSPath             : Microsoft.PowerShell.Security\Certificate::currentuser\authroot\F88015D3F98479E1DA553D24FD42BA3F43
                     886AEF
PSParentPath       : Microsoft.PowerShell.Security\Certificate::currentuser\authroot
PSChildName        : F88015D3F98479E1DA553D24FD42BA3F43886AEF
PSDrive            : cert
PSProvider         : Microsoft.PowerShell.Security\Certificate
PSIsContainer      : False
Archived           : False
Extensions         : {}
FriendlyName       : CW HKT SecureNet CA SGC Root
IssuerName         : System.Security.Cryptography.X509Certificates.X500DistinguishedName
NotAfter           : 10/16/2009 2:59:00 AM
NotBefore          : 6/30/1999 3:00:00 AM
HasPrivateKey      : False
PrivateKey         :
PublicKey          : System.Security.Cryptography.X509Certificates.PublicKey
RawData            : {48, 130, 2, 235...}
SerialNumber       : 00
SubjectName        : System.Security.Cryptography.X509Certificates.X500DistinguishedName
SignatureAlgorithm : System.Security.Cryptography.Oid
Thumbprint         : F88015D3F98479E1DA553D24FD42BA3F43886AEF
Version            : 1
Handle             : 1577256
Issuer             : O=C&W HKT SecureNet CA SGC Root, C=hk
Subject            : O=C&W HKT SecureNet CA SGC Root, C=hk


在其他驱动器中导航

除了文件系统、注册表和证书驱动器外，Windows PowerShell 还附带有几个其他有用的驱动器，其中包括别名 (Alias:)、环境提供程序 (Env:)、函数 (Function:) 和变量 (Variable:) 驱动器。使用相同的基本方法可以在这些驱动器中导航。


关于 Windows PowerShell 驱动器

Windows PowerShell 中扩展导航功能背后的概念是 Windows PowerShell 驱动器。

可以在 Windows PowerShell 提供的任何数据存储中创建 Windows PowerShell 驱动器，而且它们可以具有任何有效名称，例如 C: 或“My Drive”后跟冒号 (:)。可以使用在文件系统驱动器中所用的相同方法在这些驱动器中导航。但是，Windows PowerShell 驱动器仅在 Windows PowerShell 中是可见的。无法在 Windows 资源管理器或 Cmd.exe 中查看或访问它们。

Windows PowerShell 附带有 Windows PowerShell 提供程序支持的数个有用驱动器。若要查看 Windows PowerShell 驱动器的列表，请键入：

get-psdrive

也可以使用 New-PsDrive cmdlet 创建自己的 Windows PowerShell 驱动器。例如，若要在 My Documents 根目录下创建一个名为“MyDocs:”的新驱动器，请键入：

new-psdrive -name MyDocs -psprovider FileSystem -root "$home\My Documents"

现在，可以像使用任何其他驱动器那样使用 MyDocs: 驱动器。可以将您的位置转到该驱动器，枚举其内容以及更改其属性。


驱动器和提供程序

Windows PowerShell 提供程序使 Windows PowerShell 中的驱动器可用于您的会话，这些提供程序是 .NET Framework 程序集，它们使专用数据存储中的数据在 Windows PowerShell 中可用，以便您可以轻松地查看和管理这些数据。有关 Windows PowerShell 提供程序的信息，请键入：

get-help about_providers

若要查看 Windows PowerShell 提供程序的列表，请键入：

get-psprovider

有关提供程序帮助文件的列表，请键入：

get-help -category provider

有关特定提供程序的信息，请键入：

get-help <provider-name>

例如，

get-help registry


自定义 Windows PowerShell

本节介绍可以自定义 Windows PowerShell 以最大限度地满足您的需要的几种方法。

本节包含以下主题：

  • 检查执行策略

  • Windows PowerShell 配置文件


检查执行策略

脚本是一种功能非常强大的工具，但它可能被滥用于恶意目的。为保护用户数据和操作系统的完整性，Windows PowerShell 包括了若干安全功能，其中之一是执行策略。

Windows PowerShell 执行策略决定是否允许脚本运行，如果它们可以运行，则决定它们是否必须经过数字签名。它还确定是否可以加载配置文件。

默认的执行策略 Restricted 是最安全的执行策略。它不允许任何脚本运行，而且不允许加载任何配置文件，其中包括 Windows PowerShell 配置文件。您仍然能够以交互方式使用 Windows PowerShell。

但是，如果要运行脚本或加载配置文件，则可以更改系统上的执行策略。有关信息和说明，请键入：

get-help about_execution_policies

若要查找系统上的执行策略，请键入：

get-executionpolicy

若要更改系统上的执行策略，请使用 Set-ExecutionPolicy cmdlet。例如，若要将执行策略更改为 RemoteSigned，请键入：

set-executionpolicy remotesigned

Windows PowerShell 执行策略保存在 Windows 注册表中，即使您卸载并重新安装 Windows PowerShell 也保留执行策略。

另请参阅

  • about_Execution_Policies
  • about_Signing
  • Get-ExecutionPolicy
  • Set-ExecutionPolicy


Windows PowerShell 配置文件

添加别名、函数和变量时，实际上仅是在将它们添加到当前的 Windows PowerShell 会话中。如果退出会话或者关闭 Windows PowerShell，则更改将丢失。

若要保留这些更改，可以创建 Windows PowerShell 配置文件，然后将别名、函数和变量添加到配置文件。每次启动 Windows PowerShell 时，都会加载该配置文件。

若要加载配置文件，Windows PowerShell 执行策略必须允许您加载配置文件。如果它不允许，则加载配置文件的尝试将失败，而且 Windows PowerShell 显示一条错误消息。

了解配置文件

在 Windows PowerShell 中可以有四个不同的配置文件。配置文件按加载顺序列出。较特定的配置文件优先于较不特定的配置文件（如果它们适用）。

  • %windir%\system32\WindowsPowerShell\v1.0\profile.ps1

    此配置文件适用于所有用户和所有 shell。

  • %windir%\system32\WindowsPowerShell\v1.0\ Microsoft.PowerShell_profile.ps1

    此配置文件适用于所有用户，但仅适用于 Microsoft.PowerShell shell。

  • %UserProfile%\My Documents\WindowsPowerShell\profile.ps1

    此配置文件仅适用于当前用户，但会影响所有 shell。

  • %UserProfile%\My Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1

    此配置文件仅适用于当前用户和 Microsoft.PowerShell shell。

创建配置文件

在创建或者导入变量、别名或函数，或者添加 Windows PowerShell 管理单元时，这些元素只是添加到当前会话中。如果退出该会话或者关闭窗口，这些元素将丢失。

若要保存经常使用的变量、别名、函数和命令并使它们可以在每个 Windows PowerShell 会话中使用，请将它们添加到 Windows PowerShell 配置文件中。

还可以创建、共享和分发配置文件，以便在较大的企业中强制实施 Windows PowerShell 的统一视图。

Windows PowerShell 配置文件不是自动创建的。若要创建配置文件，请在指定位置中创建具有指定名称的文本文件。通常，将使用特定于用户、特定于 shell 的配置文件，这种配置文件称为 Windows PowerShell 用户配置文件。此配置文件的位置存储在 $profile 变量中。

若要显示 Windows PowerShell 配置文件的路径，请键入：

$profile

若要确定是否已经在系统上创建了 Windows PowerShell 配置文件，请键入：

test-path $profile

如果存在配置文件，则响应为 True：否则响应为 False。

若要创建 Windows PowerShell 配置文件，请键入：

new-item -path $profile -itemtype file -force

若要在记事本中打开配置文件，请键入：

notepad $profile

若要创建其他配置文件之一，如适用于所有用户和所有 shell 的配置文件，请键入：

new-item -path $env:windir\System32\WindowsPowerShell\v1.0\profile.ps1 -itemtype file -force

仅当配置文件的路径和文件名与 $profile 变量中存储的路径和文件名完全一致时，配置文件才有效。因此，如果在记事本中创建一个配置文件并保存它，或者将一个配置文件复制到您的系统中，则一定要用 $profile 变量中指定的文件名将该文件保存到在此变量中指定的路径下。

如果在记事本中创建配置文件，请将文件名用引号括起来，以保留 PS1 文件扩展名。例如：

"Microsoft.PowerShell_profile.ps1"

如果没有引号，则记事本会将 .txt 文件扩展名追加到文件，而 Windows PowerShell 将无法识别它。

使用配置文件存储日常使用的别名、函数和变量。一个非常有用的函数会在您最喜爱的文本编辑器中打开用户配置文件。例如，以下命令会创建一个名为 pro 的函数，该函数用于在记事本中打开用户配置文件。

function pro { notepad $profile }

有了设计良好的配置文件，就可以更轻松地使用 Windows PowerShell 和管理系统。


Windows PowerShell ISE 简介

启动 Windows PowerShell ISE

  1. 在 Windows Vista、Windows Server 2008 和更高版本的 Windows 中，在“开始”菜单中，依次单击“开始”、“所有程序”、“附件”、“Windows PowerShell”文件夹和“Windows PowerShell ISE”项。

  2. 在 Windows XP 和 Windows Server 2003 中，若要启动 Windows PowerShell，请在“开始”菜单中依次单击“开始”、“程序”、“附件”、“Windows PowerShell”文件夹和“Windows PowerShell ISE”项。

  3. 在 Windows PowerShell 控制台、Cmd.exe 或“运行”框中，键入“powershell_ise.exe”。

在 Windows PowerShell ISE 中获取帮助

  • 在 Windows PowerShell ISE 的“帮助”菜单中，单击“Windows PowerShell 帮助”，或者按 F1。

    打开的文件介绍 Windows PowerShell ISE 和 Windows PowerShell，还包括 Get-Help cmdlet 提供的所有帮助。


Windows PowerShell 用户指南

Windows PowerShell 是一种命令行 shell 和脚本环境，使命令行用户和脚本编写者可以利用 .NET Framework 的强大功能。它引入了许多非常有用的新概念，从而进一步扩展了您在 Windows 命令提示符和 Windows Script Host 环境中获得的知识和创建的脚本。

目标受众

《Windows PowerShell 用户指南》主要面向之前没有 Windows PowerShell 背景知识的 IT 专业人员、程序员和高级用户。虽然具备脚本和 Windows Management Instrumentation (WMI) 方面的背景知识会有所帮助，但是理解本文档并不假定或要求您具备此方面知识。


Windows PowerShell 基础知识

图形用户界面使用了大多数计算机用户所熟知的一些基本概念。用户可以凭借对这些界面的熟悉来完成任务。操作系统为用户呈现了可浏览的图形化的项目表示形式，通常包括下拉菜单（用于访问特定功能），以及上下文菜单（用于访问特定于上下文的功能）。

命令行界面 (CLI)（例如 Windows PowerShell）必须使用不同的方式来公开信息，因为它没有可方便用户的菜单或图形系统。只有在知道命令的名称后，才可对其进行使用。尽管可以键入相当于 GUI 环境中的功能的复杂命令，但前提是您必须熟悉常用的命令和命令参数。

大多数 CLI 都不提供可帮助用户了解该接口的模式。由于 CLI 是最早的操作系统 shell，因此许多命令名称和参数名称都是随意选择的。通常，选择名称的原则是简洁扼要而非清楚明了。尽管大多数 CLI 中都集成了帮助系统和命令设计标准，但是它们通常都是为了与最早的命令兼容而设计的，因此命令集仍然保持着几十年前确定的形式。

而 Windows PowerShell 设计原则是可以利用用户在 CLI 方面的以往知识。在本章中，我们将介绍一些可用于快速了解 Windows PowerShell 的基本工具和概念。其中包括：

  • 使用 Get-Command

  • 使用 Cmd.exe 和 UNIX 命令

  • 使用外部命令

  • 使用 Tab 补齐功能

  • 使用 Get-Help


关于 Windows PowerShell

通过解决长期存在的问题并添加一些新的功能，Windows PowerShell 旨在改进命令行和脚本环境。

可发现特性

您可以轻松发现 Windows PowerShell 的功能。例如，若要查找用于查看和更改 Windows 服务的 cmdlet 列表，请键入：

get-command *-service

在发现可完成任务的 cmdlet 之后，可以使用 Get-Help cmdlet 了解有关该 cmdlet 的详细信息。例如，若要显示有关 Get-Service cmdlet 的帮助，请键入：

get-help get-service

若要充分理解该 cmdlet 的输出，可通过管道将其输出传递给 Get-Member cmdlet。例如，以下命令将通过 Get-Service cmdlet 显示有关该对象输出的成员的信息。

get-service | get-member

一致性

管理系统可能是一项复杂的任务，而具有统一接口的工具将有助于控制其固有的复杂性。然而，无论是命令行工具还是可编写脚本的 COM 对象，在一致性方面都乏善可陈。

Windows PowerShell 的一致性是其主要优点中的一项。例如，如果您学会了如何使用 Sort-Object cmdlet，则可利用相关知识对任何 cmdlet 的输出进行排序。而无需了解每个 cmdlet 的不同的排序例程。

此外，cmdlet 开发人员也不必为其 cmdlet 设计排序功能。Windows PowerShell 为他们提供了框架，而该框架可提供基本的功能，并强制他们在接口的许多方面保持一致。该框架虽然消除了通常会留给开发人员的某些选项，但作为回报，开发强健、易于使用的 cmdlet 的工作将更加简单。

交互式脚本环境

Windows PowerShell 将交互式环境和脚本环境组合在一起，从而允许您访问命令行工具和 COM 对象，同时还可利用 .NET Framework 类库 (FCL) 的强大功能。

此环境对 Windows 命令提示符进行了改进，后者提供了带有多种命令行工具的交互式环境。此外，还对 Windows Script Host (WSH) 脚本进行了改进，后者允许您使用多种命令行工具和 COM 自动对象，但未提供交互式环境。

通过将对所有这些功能的访问组合在一起，Windows PowerShell 扩展了交互用户和脚本编写者的能力，从而更易于进行系统管理。

面向对象

尽管您可以通过以文本方式键入命令与 Windows PowerShell 进行交互，但 Windows PowerShell 是基于对象的，而不是基于文本的。命令的输出即为对象。可以将输出对象发送给另一条命令以作为其输入。因此，Windows PowerShell 为曾使用过其他 shell 的人员提供了熟悉的界面，同时引入了新的、功能强大的命令行范例。通过允许发送对象（而不是文本），它扩展了在命令之间发送数据的概念。

易于过渡到脚本

使用 Windows PowerShell，您可以很方便地从以交互方式键入命令过渡到创建和运行脚本。您可以在 Windows PowerShell 命令提示符下键入命令以找到可执行任务的命令。随后，可将这些命令保存到脚本或历史记录中，然后将其复制到文件中以用作脚本。


理解重要的 Windows PowerShell 概念

Windows PowerShell 在设计上集成了源自众多不同环境的概念。尽管使用过特定 shell 或编程环境的人可能会熟悉其中几个概念，但很少有人了解所有这些概念。查看这些概念可帮助您概括了解本 shell。

命令不是基于文本的

与传统的命令行界面命令不同，Windows PowerShell cmdlet 旨在可处理对象 -- 结构化的信息，而不只是显示在屏幕上的字符串。命令输出始终提供需要使用的额外信息。我们将在本文档中深入讨论此主题。

如果您过去曾使用文本处理工具来处理命令行数据，则会发现，在 Windows PowerShell 中尝试使用这些工具时，其行为会有所不同。在大多数情况下，您不需要使用文本处理工具来提取特定信息。通过使用标准的 Windows PowerShell 对象操纵命令，可直接访问任何数据部分。

命令系列是可扩展的

许多接口（例如 Cmd.exe）均不能提供直接扩展内置命令集的方法。您可以创建在 Cmd.exe 中运行的外部命令行工具，但这些外部工具不能提供服务（例如帮助集成），而且 Cmd.exe 不能自动识别它们是有效的命令。

Windows PowerShell 中的本机二进制命令（也称为 cmdlet，读作 command-let）可以通过您创建并使用管理单元添加到 Windows PowerShell 中的 cmdlet 进行补充。与任何其他接口中的二进制工具相同，Windows PowerShell 管理单元已经过编译。您可以使用它们将 Windows PowerShell 提供程序以及新的 cmdlet 添加到 shell 中。

由于 Windows PowerShell 内部命令的特殊性质，我们将它们称为 cmdlet。

注意：

Windows PowerShell 可以运行除 cmdlet 以外的其他命令。《Windows PowerShell 用户指南》中将不会详细讨论这些命令，但了解这些命令类型类别会很有帮助。Windows PowerShell 支持与 UNIX shell 脚本和 Cmd.exe 批处理文件类似但文件扩展名为 .ps1 的脚本。Windows PowerShell 还允许您创建可直接用于界面或脚本中的内部函数。

Windows PowerShell 处理控制台输入和显示

键入命令时，Windows PowerShell 始终会直接处理命令行输入。Windows PowerShell 还可以设置屏幕上显示的输出格式。此功能十分重要，因为它可以减少处理每个 cmdlet 所需的工作，并确保您在使用任何一种 cmdlet 时都能始终以相同方式进行操作。这样可以简化工具开发人员和用户的工作，我们不妨以命令行帮助为例。

对于请求和显示帮助，传统的命令行工具都有它们自己的方案。一些命令行工具使用 /? 来触发帮助显示；而其他一些命令行工具则使用 -?、/H 甚至 //。其中一些工具会在 GUI 窗口中显示帮助，而不以控制台显示。某些复杂工具（例如应用程序更新程序）会先将内部文件解包，然后才显示其帮助。如果使用的参数不正确，则该工具可能会忽略键入的内容，并自动开始执行任务。

在 Windows PowerShell 中输入命令时，Windows PowerShell 将自动分析并预处理所输入的全部内容。如果在 Windows PowerShell cmdlet 中使用 -? 参数，则始终表示“显示此命令的帮助”。Cmdlet 开发人员无需分析该命令；他们只需提供帮助文本。

即使是在 Windows PowerShell 中运行传统命令行工具，您也可以使用 Windows PowerShell 的帮助功能，了解这一点十分重要。Windows PowerShell 将对参数进行处理并将结果传递给外部工具。

注意：

如果在 Windows PowerShell 中运行图形应用程序，将会打开该应用程序的窗口。只有在处理您提供的命令行输入或返回到控制台窗口的应用程序输出时，Windows PowerShell 才会进行干预；它不会影响该应用程序的内部工作方式。

Windows PowerShell 使用某些 C# 语法

由于 Windows PowerShell 基于 .NET Framework，因此 Windows PowerShell 的语法功能和关键字与 C# 编程语言中所使用的语法功能和关键字十分类似。如果您对 C# 语言感兴趣，通过了解 Windows PowerShell 将便于您轻松学习该语言。

如果您不是 C# 程序员，这一相似性则无关紧要。不过，如果您已熟悉 C#，则这些相似性可以让您更轻松地了解 Windows PowerShell。


了解 Windows PowerShell 名称

使用大多数命令行界面时，了解命令名称及命令参数需要花费大量的时间。问题在于可用模式很少，因此只能通过记住常用的每种命令和每个参数来了解这些命令行界面。

使用新命令或参数时，您通常无法使用已知的名称，而必须查找和了解新的名称。考虑到界面是如何从一个小工具集经过不断添加的新增功能发展而来，就很容易了解为何其结构会是非标准的。尤其是使用命令名称时，这一点可能是必然的，因为每种命令都是单独的工具。不过，也可以通过更好的方式来处理命令名称。

大多数命令都是为管理操作系统或应用程序的元素（例如，服务或进程）构建的。这些命令具有各种名称，它们可能属于或不属于一个系列。例如，在 Windows 系统上可以使用 net start 和 net stop 命令来启动和停止服务。此外，还有一个名为 sc 的更通用的 Windows 服务控制工具，这一完全不同的名称与 net 服务命令的命名模式不一致。对于进程管理，Windows 使用 tasklist 命令来列出进程，并使用 taskkill 命令来终止进程。

用于接受参数的命令具有不一致的参数规范。不能使用 net start 命令来启动远程计算机上的服务。sc 命令将启动远程计算机上的服务，但是，若要指定远程计算机，则必须在其名称前添加双反斜杠作为前缀。例如，若要在名为 DC01 的远程计算机上启动后台打印程序服务，您可以键入 sc \\DC01 start spooler。若要列出在 DC01 上运行的任务，需要使用 /S（代表“system”）参数，并提供如下所示的不带反斜杠的名称 DC01：tasklist /S DC01。

尽管服务与进程之间有很大的技术差别，但它们都是计算机上具有定义完整的生命周期的可管理元素示例。您可能需要启动或停止服务或进程，或获得所有当前正在运行的服务或进程的列表。换而言之，尽管服务和进程并不相同，但从概念上来看，对服务或进程执行的操作通常是相同的。此外，从概念上来看，通过指定参数来自定义操作时所做的选择也可能十分类似。

Windows PowerShell 利用这些相似性来减少要了解和使用 cmdlet 所需知道的不同名称数。

Cmdlet 使用“动词-名词”名称以减少命令记忆量

Windows PowerShell 使用“动词-名词”命名系统，其中的每个 cmdlet 名称均由标准动词、连字符和特定名词组成。Windows PowerShell 动词并非一定为英语动词，但其表示 Windows PowerShell 中的特定操作。名词与所有语言中的名词十分类似，它们描述在系统管理中起重要作用的特定对象类型。我们将提供几个动词和名词的示例，以便于向您演示这些由两部分组成的名称是如何减少您了解命令所需的记忆量。

名词所受的限制较少，但它们应始终描述命令的操作对象。Windows PowerShell 具有 Get-Process、Stop-Process、Get-Service 和 Stop-Service 等命令。

如果仅有两个名词和两个动词，则一致性并不会极大地简化您了解这些命令的过程。但是，假定是由 10 个动词和 10 个名词组成的一组标准命令名称，则您只需记住 20 个单词，而使用这些单词可以构成 100 个不同的命令名称。

通常，您只需通过命令的名称即可识别其用途，而对新命令应使用什么样的名称，这通常也是显而易见的。例如，计算机关闭命令可能为 Stop-Computer。用于列出网络上的所有计算机的命令可能为 Get-Computer。用于获取系统日期的命令为 Get-Date。

在 Get-Command 中使用 -Verb 参数可以列出所有包含特定动词的命令（我们将在下一节中详细介绍 Get-Command）。例如，若要查看所有使用动词 Get 的 cmdlet，请键入：

PS> Get-Command -Verb Get
CommandType     Name                            Definition
-----------     ----                            ----------
Cmdlet          Get-Acl                         Get-Acl [[-Path] <String[]>]...
Cmdlet          Get-Alias                       Get-Alias [[-Name] <String[]...
Cmdlet          Get-AuthenticodeSignature       Get-AuthenticodeSignature [-...
Cmdlet          Get-ChildItem                   Get-ChildItem [[-Path] <Stri...
...

-Noun 参数用处更大，因为使用该参数可以查看影响同一对象类型的一系列命令。例如，若要显示可用于管理服务的命令，请键入以下命令：

PS> Get-Command -Noun Service
CommandType     Name                            Definition
-----------     ----                            ----------
Cmdlet          Get-Service                     Get-Service [[-Name] <String...
Cmdlet          New-Service                     New-Service [-Name] <String>...
Cmdlet          Restart-Service                 Restart-Service [-Name] <Str...
Cmdlet          Resume-Service                  Resume-Service [-Name] <Stri...
Cmdlet          Set-Service                     Set-Service [-Name] <String>...
Cmdlet          Start-Service                   Start-Service [-Name] <Strin...
Cmdlet          Stop-Service                    Stop-Service [-Name] <String...
Cmdlet          Suspend-Service                 Suspend-Service [-Name] <Str...
...

如果命令具有“动词-名词”命名方案，并不意味着该命令一定为 cmdlet。有关具有“动词-名词”名称但不是 cmdlet 的命令，一个示例就是本机 Windows PowerShell 命令 Clear-Host，该命令用于清除控制台窗口。Clear-Host 命令实际上是一个内部函数，如果对其运行 Get-Command 您将会发现这一点：

PS> Get-Command -Name Clear-Host

CommandType     Name                            Definition
-----------     ----                            ----------
Function        Clear-Host                      $spaceType = [System.Managem...

Cmdlet 使用标准参数

正如上文所述，传统命令行界面中所使用的命令通常不具有一致的参数名称。有时，参数甚至没有名称。在这种情况下，这些参数通常为可迅速键入的单个字符或缩写单词，但其不易于新用户理解。

与大多数其他传统命令行界面不同，Windows PowerShell 直接处理参数，并利用对参数的这种直接访问以及开发人员的指导来实现参数名称的标准化。尽管这不保证每个 cmdlet 都始终遵从命名标准，但其鼓励这样做。

注意：

使用参数时，参数名称前始终具有“-”符号，以便 Windows PowerShell 能够清楚地将其识别为参数。在 Get-Command -Name Clear-Host 示例中，参数的名称为 Name，但输入时应为 -Name。

下面介绍了标准参数名称和用法的一些常见特征。

帮助参数 (?)

对任何 cmdlet 指定 -? 参数时，将不执行该 cmdlet。而 Windows PowerShell 将显示该 cmdlet 的帮助。

通用参数

Windows PowerShell 的一些参数称为通用参数。由于这些参数是由 Windows PowerShell 引擎进行控制，因此每次 cmdlet 实现这些参数时，它们的行为方式将始终相同。通用参数包括 WhatIf、Confirm、Verbose、Debug、Warn、ErrorAction、ErrorVariable、OutVariable 和 OutBuffer。

建议参数

Windows PowerShell 核心 cmdlet 对类似参数使用标准名称。尽管参数名称的使用不是强制的，但存在明确的用法指南以鼓励标准化。

例如，该指南建议在对引用计算机的参数进行命名时采用 ComputerName 之类的名称，而不采用 Server、Host、System、Node 或其他常见的备选单词。这些重要的建议参数名称包括 Force、Exclude、Include、PassThru、Path 和 CaseSensitive。


获取摘要命令信息

Windows PowerShell Get-Command cmdlet 检索所有可用命令的名称。在 Windows PowerShell 提示符下键入 Get-Command 时，则会显示类似于以下内容的输出：

PS> Get-Command
CommandType     Name                            Definition
-----------     ----                            ----------
Cmdlet          Add-Content                     Add-Content [-Path] <String[...
Cmdlet          Add-History                     Add-History [[-InputObject] ...
Cmdlet          Add-Member                      Add-Member [-MemberType] <PS...
...

此输出与 Cmd.exe 的帮助输出十分相似：表格格式的内部命令摘要。如上所示，在 Get-Command 命令输出的摘要中，所显示的每个命令的 CommandType 都是 Cmdlet。Cmdlet 是 Windows PowerShell 的固有命令类型，该类型大致对应于 Cmd.exe 的 dir 和 cd 命令以及 UNIX shell（例如 BASH）中的内置命令。

在 Get-Command 命令的输出中，所有定义都以省略号 (...) 结尾以指示 PowerShell 无法在可用空间内显示所有内容。在显示输出时，Windows PowerShell 会将输出格式设置为文本，然后对其进行排列，以使数据整齐地显示在窗口中。我们稍后将在有关格式化程序的一节中对此进行介绍。

Get-Command cmdlet 有一个 Syntax 参数，使用该参数，您可以仅检索每个 cmdlet 的语法。输入 Get-Command -Syntax 命令可以显示完整的输出：

PS> Get-Command -Syntax
Add-Content [-Path] <String[]> [-Value] <Object[]> [-PassThru] [-Filter <String>] [-Include <String[]>] [-Exclude <String[]>] [-Force] [Credential <PSCredential>] [-Verbose] [-Debug] [-ErrorAction <ActionPreference>] [-ErrorVariable <String>] [-OutVariable <String>] [-OutBuffer <Int32>] [-WhatIf] [-Confirm] [-Encoding <FileSystemCmdletProviderEncoding>]

Add-History [[-InputObject] <PSObject[]>] [-Passthru] [-Verbose] [-Debug] [-ErrorAction <ActionPreference>] [-ErrorVariable <String>] [-OutVariable <String>][-OutBuffer <Int32>]...

显示可用命令类型

Get-Command 命令不会列出 Windows PowerShell 中的所有可用命令。实际上，Get-Command 命令仅列出当前 shell 中的 cmdlet。Windows PowerShell 实际还支持其他几种类型的命令。虽然在《Windows PowerShell 用户指南》中没有进行详细介绍，但别名、函数和脚本也是 Windows PowerShell 命令。作为可执行文件或具有已注册文件类型处理程序的外部文件，也被归类于命令。

通过输入以下命令，您可以返回所有可调用项的列表：

PS> Get-Command *

由于此列表包括搜索路径中的外部文件，因此它可能包含数千个项目。实际上，仅查看精简的命令集更为有用。若要查找其他类型的本机命令，可以使用 Get-Command cmdlet 的 CommandType 参数。尽管我们尚未介绍其他这些命令类型，但如果知道某类命令的 CommandType 名称，您仍然可以显示这些命令类型。

注意：

尽管上文中尚未介绍这一点，但您应了解在 Windows PowerShell 命令参数中是使用星号 (*) 来进行通配符匹配。* 表示“匹配一个或多个任意字符”。可以键入 Get-Command a* 来查找以字母“a”开头的所有命令。与 Cmd.exe 中的通配符匹配不同，Windows PowerShell 的通配符还将匹配句点。

若要显示特殊命令类别的别名（即用作标准命令名称的替代名称的昵称），请输入以下命令：

PS> Get-Command -CommandType Alias

若要显示所有 Windows PowerShell 函数，请输入以下命令：

PS> Get-Command -CommandType Function

若要显示 Windows PowerShell 搜索路径中的外部脚本，请输入以下命令：

PS> Get-Command -CommandType ExternalScript


获取详细帮助信息

Windows PowerShell 包括介绍 Windows PowerShell 概念和 Windows PowerShell 语言的详细帮助主题。另外还包括每个 cmdlet 和提供程序的帮助主题，以及很多函数和脚本的帮助主题。

您可以在命令提示符下显示这些帮助主题，也可以在 Microsoft TechNet Library 中查看这些主题的最近更新版本。承载 Windows PowerShell 的很多程序（例如 Windows PowerShell 集成脚本环境）提供了其他一些帮助功能，例如上下文相关帮助和已编译的帮助文件 (.chm)。

获取 Cmdlet 帮助

若要获取有关 Windows PowerShell cmdlet 的帮助，请使用 Get-Help cmdlet。例如，若要获取 Get-ChildItem cmdlet 的帮助，请键入：

get-help get-childitem

或

get-childitem -?

您甚至还可以获取有关 Get-Help cmdlet 的帮助。例如：

get-help get-help

若要在会话中获取所有 cmdlet 帮助主题的列表，请键入：

get-help -category cmdlet

若要每次显示每个帮助主题的一页，请使用 help 函数或其别名 man。例如，若要显示 Get-ChildItem cmdlet 的帮助，请键入

man get-childitem

或

help get-childitem

若要显示有关 cmdlet、函数或脚本的详细信息，包括其参数说明和使用示例，请使用 Get-Help cmdlet 的 Detailed 参数。例如，若要获取有关 Get-ChildItem cmdlet 的详细信息，请键入：

get-help get-childitem -detailed

若要显示帮助主题中的所有内容，请使用 Get-Help cmdlet 的 Full 参数。例如，若要显示 Get-ChildItem cmdlet 的帮助主题的所有内容，请键入：

get-help get-childitem -full

若要获取有关 cmdlet 的参数的详细帮助，请使用 Get-Help cmdlet 的 Parameter 参数。例如，若要获取 Get-ChildItem cmdlet 的所有参数的详细帮助，请键入：

get-help get-childitem -parameter *

若要仅显示帮助主题中的示例，请使用 Get-Help 的 Example 参数。例如，若要仅显示 Get-ChildItem cmdlet 的帮助主题中的示例，请键入：

get-help get-childitem -examples

有关如何为您编写的 cmdlet 编写帮助主题的信息，请参阅 MSDN 中的“如何编写 Cmdlet 帮助”这一主题。

获取概念性帮助

Get-Help cmdlet 还显示有关 Windows PowerShell 中的概念性主题的信息，包括有关 Windows PowerShell 语言的主题。概念性帮助主题以“about_”前缀开头，例如 about_line_editing。（概念性主题的名称必须用英文输入，即使在非英文版的 Windows PowerShell 上也是如此。）

若要显示概念性主题的列表，请键入：

get-help about_*

若要显示特定的帮助主题，请键入主题名称，例如：

get-help about_command_syntax

Get-Help 的各个参数（例如 Detailed、Parameter 和 Examples）对概念性帮助主题的显示没有影响。

获取有关提供程序的帮助

Get-Help cmdlet 显示有关 Windows PowerShell 提供程序的信息。若要获取提供程序的帮助，请键入“Get-Help”，并在后面键入提供程序名称。例如，若要获取 Registry 提供程序的帮助，请键入：

get-help registry

若要在会话中获取所有提供程序帮助主题的列表，请键入

get-help -category provider

Get-Help 的各个参数（例如 Detailed、Parameter 和 Examples）对提供程序帮助主题的显示没有影响。

获取有关脚本和函数的帮助

Windows PowerShell 中的很多脚本和函数具有相应的帮助主题。使用 Get-Help cmdlet 可以显示脚本和函数的帮助主题。

若要显示函数的帮助，请键入“get-help”，并在后面键入函数名称。例如，若要获取 Disable-PSRemoting 函数的帮助，请键入：

get-help disable-psremoting

若要显示脚本的帮助，请键入脚本文件的完全限定路径。如果脚本位于 Path 环境变量中所列的路径中，则可在命令中省略路径。

例如，如果在您的 C:\PS-Test 目录下有一个名为“TestScript.ps1”的脚本，若要显示该脚本的帮助主题，请键入：

get-help c:\ps-test\TestScript.ps1

用于显示 cmdlet 帮助的参数（例如 Detailed、 Full、Examples 和 Parameter）也适用于脚本帮助和函数帮助。但是，在通过键入“get-help *”来显示所有帮助时，不会显示函数和脚本的帮助。

有关如何编写函数和脚本的帮助主题的信息，请参阅 about_Functions、about_Scripts 和 about_Comment_Based_Help。

获取联机帮助

如果连接到 Internet，则获取帮助的最佳方式之一是联机查看帮助主题。由于联机主题易于更新，因此它们很可能提供最新的内容。

若要获取联机帮助，请尝试使用 Get-Help cmdlet 的 Online 参数。Get-Help cmdlet 的 Online 参数仅适用于 cmdlet 帮助、函数帮助和脚本帮助。不能将 Online 参数用于概念性 (About) 主题或提供程序帮助主题。此外，由于此功能是可选的，因此它并非适用于每个 cmdlet、函数或脚本帮助主题。

但是，Windows PowerShell 随附的所有帮助主题都可在 Microsoft TechNet Library 的 Windows PowerShell 部分中联机查看，包括提供程序帮助和概念性 (About) 帮助主题。

若要使用 Get-Help cmdlet 的 Online 参数，请使用以下命令格式。

get-help <command-name> -online

例如，若要获取有关 Get-ChildItem cmdlet 的帮助主题的联机版本，请键入：

get-help get-childitem -online

如果提供了帮助主题的联机版本，则它将在默认浏览器中打开。

如果支持帮助主题的联机帮助，则还可以查看帮助主题的 Internet 地址 (URL)。Internet 地址显示在帮助主题的“相关链接”部分中。

例如，若要查看 Add-Computer cmdlet 的联机版本的 URL，请键入：

get-help add-computer

主题的“相关链接”部分的第一行如下所示。

联机版本：http://go.microsoft.com/fwlink/?LinkID=135194

有关如何为帮助主题提供联机支持的信息，请参阅 about_Comment_Based_Help，另外也可参阅 MSDN (Microsoft Developer Network) Library 中的“如何编写 Cmdlet 帮助” (http://go.microsoft.com/fwlink/?LinkID=123415)。

另请参阅

  • about_Functions
  • about_Scripts
  • about_Comment_Based_Help
  • Get-Help


使用熟悉的命令名称

使用称为别名的机制，Windows PowerShell 允许用户通过替代名称来引用命令。使用别名，具有其他 shell 经验的用户可以在 Windows PowerShell 中重用其已知的通用命令名称来执行类似操作。尽管我们不会详细介绍 Windows PowerShell 别名，但在 Windows PowerShell 入门阶段您仍然可以使用这些别名。

别名将所键入的命令名称与另一个命令相关联。例如，Windows PowerShell 有一个名为 Clear-Host 的内部函数，用于清除输出窗口。如果在命令提示符下键入 cls 或 clear 命令，Windows PowerShell 就会将此命令解释为 Clear-Host 函数的别名并运行 Clear-Host 函数。

此功能有助于用户了解 Windows PowerShell。首先，大多数 Cmd.exe 和 UNIX 用户都有其已按名称记忆的大型命令清单，尽管 Windows PowerShell 的等价命令可能不会产生完全相同的结果，但它们在形式上的相似性足以让用户无需先记住 Windows PowerShell 名称即可直接使用这些命令来完成工作。其次，对于已经熟悉其他 shell 的用户而言，了解新 shell 的主要困难在于“手指记忆”所导致的错误。假定您已使用 Cmd.exe 多年，在您看到满屏输出并希望将其清除时，您会条件反射地键入 cls 命令，然后按 Enter 键。但在 Windows PowerShell 中没有 Clear-Host 函数的别名，因而您只会看到错误消息“'cls' is not recognized as a cmdlet, function, operable program, or script file.”，并且仍不知道要清除输出应执行什么操作。

下面是可在 Windows PowerShell 内使用的通用 Cmd.exe 和 UNIX 命令的简短列表：

cat | dir | mount | rm
cd | echo | move | rmdir
chdir | erase | popd | sleep
clear | h | ps | sort
cls | history | pushd | tee
copy | kill | pwd | type
del | lp | r | write
diff | ls | ren |

如果您发现自己会条件反射地使用这些命令之一，而又希望知道本机 Windows PowerShell 命令的真实名称，则可以使用 Get-Alias 命令：

PS> Get-Alias cls

CommandType     Name                            Definition
-----------     ----                            ----------
Alias           cls                             Clear-Host

为了使示例更容易理解，《Windows PowerShell 用户指南》中通常避免使用别名。但是，如果要处理来自其他来源的任意 Windows PowerShell 代码段，或希望定义自己的别名，则尽早了解有关别名的详细信息仍然十分有用。本节中的其余内容将介绍标准别名以及如何定义您自己的别名。

解释标准别名

上述别名是专为实现与其他界面的名称兼容性而设计的，Windows PowerShell 中的内置别名与其不同，它们通常是为了简短易用而设计的。这些简短的名称便于快速键入，但如果您不了解其含义，则无法解读它们。

通过提供一组基于常用动词和名词的速记名称的标准别名，Windows PowerShell 试图在清晰性与简短性之间取得平衡。这样，在一组常用 cmdlet 的核心别名中，您只需知道速记名称即可解读这些命令。例如，在标准别名中，动词 Get 缩写为 g，动词 Set 缩写为 s，名词 Item 缩写为 i，名词 Location 缩写为 l，而名词 Command 缩写为 cm。

以下简短示例说明了这一工作机制。Get-Item 的标准别名是通过将表示 Get 的 g 与表示 Item 的 i 组合而来的：gi。Set-Item 的标准别名是通过将表示 Set 的 s 与表示 Item 的 i 组合而来的：si。Get-Location 的标准别名是通过将表示 Get 的 g 与表示 Location 的 l 组合而来的：gl。Set-Location 的标准别名是通过将表示 Set 的 s 与表示 Location 的 l 组合而来的：sl。Get-Command 的标准别名是通过将表示 Get 的 g 与表示 Command 的 cm 组合而来的：gcm。不存在 Set-Command cmdlet，但如果存在，我们可以很容易猜测出其标准别名是通过将表示 Set 的 s 与表示 Command 的 cm 组合而来的：scm。此外，如果熟悉 Windows PowerShell 别名的用户遇到 scm，他们也可以猜测到该别名是指 Set-Command。

创建新别名

可以使用 Set-Alias cmdlet 创建自己的别名。例如，以下语句将创建在“解释标准别名”中介绍的标准 cmdlet 别名：

Set-Alias -Name gi -Value Get-Item
Set-Alias -Name si -Value Set-Item
Set-Alias -Name gl -Value Get-Location
Set-Alias -Name sl -Value Set-Location
Set-Alias -Name gcm -Value Get-Command

在内部，Windows PowerShell 在启动期间使用此类命令，但这些别名是不可更改的。如果尝试实际执行这些命令之一，您将获得一条错误消息，表明无法修改该别名。例如：

PS> Set-Alias -Name gi -Value Get-Item

Set-Alias : Alias is not writeable because alias gi is read-only or constant and cannot be written to.

At line:1 char:10

+ Set-Alias <<<< -Name gi -Value Get-Item


使用 Tab 扩展

命令行 shell 通常提供了用于自动完成长文件或命令的名称的功能，以便提高输入命令的速度并提供相应提示。Windows PowerShell 允许通过按 Tab 键来填写文件名和 cmdlet 名称。

注意：

Tab 扩展是由内部函数 TabExpansion 控制的。由于可以修改或覆盖此函数，因而此处将介绍默认 Windows PowerShell 配置的行为指南。

若要根据可用选项来自动填写文件名或路径，请键入部分名称，然后按 Tab 键。Windows PowerShell 会自动将该名称扩展为其找到的第一个匹配项。重复按 Tab 键将逐一显示所有可用选项。

cmdlet 名称的 Tab 扩展略有不同。若要对 cmdlet 名称使用 Tab 扩展，请完整键入名称的第一部分（动词）及其后面的连字符。可以填入名称的更多部分以进行部分匹配。例如，如果键入 get-co 然后按 Tab 键，Windows PowerShell 会将其自动扩展为 Get-Command cmdlet（注意，其字母大小写也将更改为标准形式）。如果再次按 Tab 键，Windows PowerShell 将使用仅有的另一个匹配 cmdlet 名称 Get-Content 替换上一名称。

可以在同一行上重复使用 Tab 扩展。例如，可以通过输入以下命令来对 Get-Content cmdlet 的名称使用 Tab 扩展：

PS> Get-Con<Tab>

按 Tab 键时，该命令将扩展为：

PS> Get-Content

您随后可以部分指定智能安装程序日志文件的路径，然后再次使用 Tab 扩展：

PS> Get-Content c:\windows\acts<Tab>

按 Tab 键时，该命令将扩展为：

PS> Get-Content C:\windows\actsetup.log
注意：

Tab 扩展的局限之处在于 Tab 始终被解释为尝试完成单词。如果将命令示例复制并粘贴到 Windows PowerShell 控制台中，请确保该示例不包含 tab；如果包含，则结果将是难以预见的，并且几乎肯定不会是您预期的结果。


对象管道

管道的作用与一系列相连接的管道段相似。沿管道移动的项目将通过其中的每一段。若要在 Windows PowerShell 中创建管道，可以使用管道运算符“|”将命令连接在一起。每个命令的输出用作下一命令的输入。

管道无疑是命令行界面中所使用的最有价值的概念。如果适当使用管道，它们不仅可以减少输入复杂命令所需的工作量，而且便于您查看命令中的工作流。有关管道的一个有用特征是：由于管道对每个项单独进行操作，因此无论管道中存在零个、一个还是多个项，您都无需根据这一点来修改管道。此外，管道中的每个命令（称为管道元素）通常将其输出中的项目逐个传递给管道中的下一命令。这样通常会减少复杂命令的资源需求，并允许您立即开始获取输出。

在本章中，我们将介绍 Windows PowerShell 管道与大多数常见 shell 中的管道的不同之处，然后为您演示一些可用于帮助控制管道输出以及查看管道运行方式的基本工具。


了解 Windows PowerShell 管道

实际上，在 Windows PowerShell 中到处都会用到管道。尽管在屏幕上会看到文本，但 Windows PowerShell 并不通过管道在命令之间传递文本。它实际上通过管道传递对象。

用于管道的表示法与其他 shell 中所使用的表示法十分类似，因此，乍一看可能不会明显察觉到 Windows PowerShell 引入了新功能。例如，如果使用 Out-Host cmdlet 来强制逐页显示其他命令的输出，则该输出的外观将与屏幕上显示的正常文本一样，分为多页显示：

PS> Get-ChildItem -Path C:\WINDOWS\System32 | Out-Host -Paging

    Directory: Microsoft.Windows PowerShell.Core\FileSystem::C:\WINDOWS\system32

Mode                LastWriteTime     Length Name
----                -------------     ------ ----
-a---        2005-10-22  11:04 PM        315 $winnt$.inf
-a---        2004-08-04   8:00 AM      68608 access.cpl
-a---        2004-08-04   8:00 AM      64512 acctres.dll
-a---        2004-08-04   8:00 AM     183808 accwiz.exe
-a---        2004-08-04   8:00 AM      61952 acelpdec.ax
-a---        2004-08-04   8:00 AM     129536 acledit.dll
-a---        2004-08-04   8:00 AM     114688 aclui.dll
-a---        2004-08-04   8:00 AM     194048 activeds.dll
-a---        2004-08-04   8:00 AM     111104 activeds.tlb
-a---        2004-08-04   8:00 AM       4096 actmovie.exe
-a---        2004-08-04   8:00 AM     101888 actxprxy.dll
-a---        2003-02-21   6:50 PM     143150 admgmt.msc
-a---        2006-01-25   3:35 PM      53760 admparse.dll
<SPACE> next page; <CR> next line; Q quit
...

无论何时希望缓慢显示冗长的输出，Out-Host -Paging 命令都是一个非常有用的管道元素。在操作占用大量 CPU 资源时，此命令尤其有用。由于在准备显示完整页面时处理工作将转到 Out-Host cmdlet，因此管道中的前一个 cmdlet 将暂停操作，直至下一页输出可以显示为止。如果使用 Windows 任务管理器来监视 Windows PowerShell 的 CPU 和内存使用率，您将会看到这一情况。

运行以下命令：Get-ChildItem C:\Windows -Recurse。将 CPU 和内存使用率与以下命令相比较：Get-ChildItem C:\Windows -Recurse | Out-Host -Paging。您将在屏幕上看到文本，但这是由于需要在控制台窗口中以文本形式表示对象。这只是 Windows PowerShell 内部实际发生的情况的一种表现形式。我们以 Get-Location cmdlet 为例。如果当前位置是 C 驱动器的根目录，此时键入 Get-Location 将会显示以下输出：

PS> Get-Location

Path
----
C:\

如果 Windows PowerShell 通过管道传递文本，则发出 Get-Location | Out-Host 等命令会将一组字符按其在屏幕上的显示顺序从 Get-Location 传递到 Out-Host。换而言之，如果要忽略标题信息，Out-Host 会首先接收字符 'C'，再接收字符 ':'，然后接收字符 '\'。Out-Host cmdlet 无法确定与 Get-Location cmdlet 输出的字符相关联的含义。

Windows PowerShell 使用对象而不是使用文本来实现管道中的命令通信。从用户的角度来看，对象将相关信息打包为一种便于将信息作为一个单元进行操作的形式，并提取所需的特定项目。

Get-Location 命令不返回包含当前路径的文本。它返回一个称为 PathInfo 对象的信息包，其中包含当前路径以及其他一些信息。Out-Host cmdlet 随后会将此 PathInfo 对象发送到屏幕，然后由 Windows PowerShell 决定要显示的信息以及如何基于其格式规则来显示该信息。

实际上，作为设置数据在屏幕上的显示格式的过程的一部分，仅在该过程结束时才添加 Get-Location cmdlet 输出的标题信息。屏幕上所显示的内容为信息摘要，而不是输出对象的完整表现形式。

假定 Windows PowerShell 命令输出的信息多于我们在控制台窗口中看到的显示内容，如何才能检索不可见的元素？如何查看额外的数据？此外，如果希望采用非 Windows PowerShell 常用格式的其他格式来查看数据，该怎么办？

本章的其余部分将为您介绍如何发现特定 Windows PowerShell 对象的结构、如何选择特定项目并设置其格式以便于显示，以及如何将此信息发送到备选输出位置（例如，文件和打印机）。


查看对象结构 (Get-Member)

由于在 Windows PowerShell 中对象的作用十分重要，因此存在多个专为处理任意对象类型而设计的本机命令。其中最重要的一个命令是 Get-Member 命令。

用于分析命令所返回对象的最简单的一种方法是通过管道将该命令的输出传递给 Get-Member cmdlet。Get-Member cmdlet 将显示对象类型的正式名称及其成员的完整列表。有时，所返回的元素数可能十分巨大。例如，进程对象可能有超过 100 个成员。

若要查看 Process 对象的所有成员并将输出分页显示，以便能够查看完整的该对象，请键入：

PS> Get-Process | Get-Member | Out-Host -Paging

此命令的输出将与以下所示类似：

   TypeName: System.Diagnostics.Process

Name                           MemberType     Definition
----                           ----------     ----------
Handles                        AliasProperty  Handles = Handlecount
Name                           AliasProperty  Name = ProcessName
NPM                            AliasProperty  NPM = NonpagedSystemMemorySize
PM                             AliasProperty  PM = PagedMemorySize
VM                             AliasProperty  VM = VirtualMemorySize
WS                             AliasProperty  WS = WorkingSet
add_Disposed                   Method         System.Void add_Disposed(Event...
...

通过筛选要查看的元素，您可以更好地使用这一长信息列表。使用 Get-Member 命令，您可以仅列出作为属性的成员。存在多种形式的属性。如果将 Get-Member MemberType 参数设置为值 Properties，则该 cmdlet 将显示任一类型的属性。所得到的列表仍然很长，但更易于管理：

PS> Get-Process | Get-Member -MemberType Properties

   TypeName: System.Diagnostics.Process

Name                       MemberType     Definition
----                       ----------     ----------
Handles                    AliasProperty  Handles = Handlecount
Name                       AliasProperty  Name = ProcessName
...
ExitCode                   Property       System.Int32 ExitCode {get;}
...
Handle                     Property       System.IntPtr Handle {get;}
...
CPU                        ScriptProperty System.Object CPU {get=$this.Total...
...
Path                       ScriptProperty System.Object Path {get=$this.Main...
...
注意：

MemberType 允许使用以下值：AliasProperty、CodeProperty、Property、NoteProperty、ScriptProperty、Properties、PropertySet、Method、CodeMethod、ScriptMethod、Methods、ParameterizedProperty、MemberSet 和 All。

进程有超过 60 个属性。对于所有常见的对象，Windows PowerShell 通常仅显示其部分属性，这是因为显示其所有属性会生成难以管理的大量信息。

注意：

Windows PowerShell 通过使用其名称以 .format.ps1xml 结尾的 XML 文件中所存储的信息来确定如何显示对象类型。进程对象（即 .NET System.Diagnostics.Process 对象）的格式设置数据存储在 PowerShellCore.format.ps1xml 中。

如果需要查看 Windows PowerShell 默认情况下所显示属性之外的其他属性，则您需要自己设置输出数据的格式。可以使用格式 cmdlet 来执行此操作。


使用格式命令更改输出视图

Windows PowerShell 提供了一组 cmdlet，使用这些 cmdlet 您可以控制要为特定对象显示的属性。这些 cmdlet 的名称均以动词 Format 开头。它们允许您选择一个或多个要显示的属性。

Format cmdlet 包括 Format-Wide、Format-List、Format-Table 和 Format-Custom。本用户指南中将仅介绍 Format-Wide、Format-List 和 Format-Table cmdlet。

每个格式 cmdlet 都具有默认属性；如果未指定要显示的特定属性，则会使用这些默认属性。每个 cmdlet 都使用同一参数名称 Property 来指定要显示的属性。由于 Format-Wide 仅显示单个属性，因此其 Property 参数仅获取单个值，但 Format-List 和 Format-Table 的属性参数将接受一系列属性名称。

如果对两个正在运行的 Windows PowerShell 实例使用 Get-Process -Name powershell 命令，所得到的输出将类似于以下内容：

Handles  NPM(K)    PM(K)      WS(K) VM(M)   CPU(s)     Id ProcessName
-------  ------    -----      ----- -----   ------     -- -----------
    995       9    30308      27996   152     2.73   2760 powershell
    331       9    23284      29084   143     1.06   3448 powershell

本节的其余部分将探讨如何使用 Format cmdlet 来更改此命令的输出显示方式。

使用 Format-Wide 显示单项输出

默认情况下，Format-Wide cmdlet 仅显示对象的默认属性。与每个对象相关联的信息将显示在单独一列中：

PS> Get-Process -Name powershell | Format-Wide

powershell                              powershell

也可以指定非默认属性：

PS> Get-Process -Name powershell | Format-Wide -Property Id

2760                                    3448

使用 Column 控制 Format-Wide 显示

使用 Format-Wide cmdlet，每次只能显示一个属性。这样对于显示每行仅显示一个元素的简单列表十分有用。若要获取简单列表，请键入以下命令来将 Column 参数的值设置为 1：

Get-Command Format-Wide -Property Name -Column 1

使用 Format-List 显示列表视图

Format-List cmdlet 以列表的形式显示对象，并在单独行上标记和显示每个属性：

PS> Get-Process -Name powershell | Format-List

Id      : 2760
Handles : 1242
CPU     : 3.03125
Name    : powershell

Id      : 3448
Handles : 328
CPU     : 1.0625
Name    : powershell

可以根据需要指定任意数量的属性：

PS> Get-Process -Name powershell | Format-List -Property ProcessName,FileVersion
,StartTime,Id

ProcessName : powershell
FileVersion : 1.0.9567.1
StartTime   : 2006-05-24 13:42:00
Id          : 2760

ProcessName : powershell
FileVersion : 1.0.9567.1
StartTime   : 2006-05-24 13:54:28
Id          : 3448

使用 Format-List 和通配符来获取详细信息

Format-List cmdlet 允许您将通配符用作其 Property 参数的值。这样可以显示详细信息。通常，对象所包含的信息多于您需要的信息，因此，默认情况下 Windows PowerShell 将不会显示所有属性值。若要显示对象的所有属性，请使用 Format-List -Property * 命令。以下命令将为单个进程生成超过 60 行输出：

Get-Process -Name powershell | Format-List -Property *

虽然 Format-List 命令对于显示详细信息十分有用，但如果希望获得包含多个项的输出概览，则较简单的表格格式视图通常会更有用。

使用 Format-Table 显示表格格式输出

如果使用 Format-Table cmdlet（未指定任何属性名称）来设置 Get-Process 命令的输出格式，所获得的输出将与不执行任何格式设置的情况完全相同。这是因为与大多数 Windows PowerShell 对象一样，进程通常是以表格格式显示的。

PS> Get-Process -Name powershell | Format-Table

Handles  NPM(K)    PM(K)      WS(K) VM(M)   CPU(s)     Id ProcessName
-------  ------    -----      ----- -----   ------     -- -----------
   1488       9    31568      29460   152     3.53   2760 powershell
    332       9    23140        632   141     1.06   3448 powershell

改进 Format-Table 输出 (AutoSize)

尽管表格格式的视图适用于显示大量可比较信息，但其可能难以判断显示区域是否过窄而无法容纳数据。例如，如果试图显示进程路径、ID、名称和公司，则会导致进程路径和公司列的输出被截断：

PS> Get-Process -Name powershell | Format-Table -Property Path,Name,Id,Company

Path                Name                                 Id Company
----                ----                                 -- -------
C:\Program Files... powershell                         2836 Microsoft Corpor...

如果在运行 Format-Table 命令时指定了 AutoSize 参数，则 Windows PowerShell 将基于要显示的实际数据来计算列宽。这样会使 Path 列可读，但 Company 列仍处于截断状态：

PS> Get-Process -Name powershell | Format-Table -Property Path,Name,Id,Company -
AutoSize

Path                                                    Name         Id Company
----                                                    ----         -- -------
C:\Program Files\Windows PowerShell\v1.0\powershell.exe powershell 2836 Micr...

Format-Table cmdlet 仍然可能会截断数据，但截断只会发生在屏幕的末尾部分。除最后一个显示的属性外，会将其他属性指定为其最长数据元素所需的宽度以进行正常显示。如果在 Property 值列表中将 Path 和 Company 交换位置，您将发现公司名称是可见的，但路径被截断：

PS> Get-Process -Name powershell | Format-Table -Property Company,Name,Id,Path -
AutoSize

Company               Name         Id Path
-------               ----         -- ----
Microsoft Corporation powershell 2836 C:\Program Files\Windows PowerShell\v1...

Format-Table 命令假定离属性列表开头越近的属性的重要性越高。因此，它会试图完全显示最靠近开头的属性。如果 Format-Table 命令无法显示所有属性，则会从显示中删除部分列并发出相应警告。如果将 Name 作为列表中的最后一个属性，则会看到此行为：

PS> Get-Process -Name powershell | Format-Table -Property Company,Path,Id,Name -
AutoSize

WARNING: column "Name" does not fit into the display and was removed.

Company               Path                                                    I
                                                                              d
-------               ----                                                    -
Microsoft Corporation C:\Program Files\Windows PowerShell\v1.0\powershell.exe 6

在以上输出中，ID 列被截断以便能容纳在列表中，并且堆叠了列标题。自动调整各列大小，并不一定总会实现您需要的效果。

让 Format-Table 输出在列中换行 (Wrap)

通过使用 Wrap 参数，可以强行使冗长的 Format-Table 数据在其显示列中换行。单独使用 Wrap 参数不一定能实现您的预期效果，这是因为如果不同时指定 AutoSize 则会使用默认设置：

PS> Get-Process -Name powershell | Format-Table -Wrap -Property Name,Id,Company,
Path

Name                                 Id Company             Path
----                                 -- -------             ----
powershell                         2836 Microsoft Corporati C:\Program Files\Wi
                                        on                  ndows PowerShell\v1
                                                            .0\powershell.exe

单独使用 Wrap 参数的一个优点在于它不会极大地降低处理速度。如果在执行大型目录系统的递归文件列表时使用 AutoSize，则在显示第一个输出项之前可能需要花费很长时间并占用大量内存。

如果不考虑系统负载，则将 AutoSize 与 Wrap 参数一起使用会取得不错的效果。与指定 AutoSize 而不指定 Wrap 参数时的情况一样，始终会为初始列分配它们在一行内显示项所需的宽度。唯一的不同之处在于：如有必要，最后一列将进行换行：

PS> Get-Process -Name powershell | Format-Table -Wrap -AutoSize -Property Name,I
d,Company,Path

Name         Id Company               Path
----         -- -------               ----
powershell 2836 Microsoft Corporation C:\Program Files\Windows PowerShell\v1.0\
                                      powershell.exe

如果先指定最宽的列，则可能无法显示某些列，因此，最安全的做法是先指定最小的数据元素。在下面的示例中，我们先指定最宽的路径元素，在这种情况下，即使通过换行也仍然无法显示最后的 Name 列：

 PS> Get-Process -Name powershell | Format-Table -Wrap -AutoSize -Property Path,I
d,Company,Name

WARNING: column "Name" does not fit into the display and was removed.

Path                                                      Id Company
----                                                      -- -------
C:\Program Files\Windows PowerShell\v1.0\powershell.exe 2836 Microsoft Corporat
                                                             ion

组织表输出 (-GroupBy)

用于表格格式输出控制的另一个有用参数是 GroupBy。越长的表格格式列表可能越难以进行比较。GroupBy 参数可以基于属性值对输出进行分组。例如，我们可以按公司对进程进行分组，从而忽略属性列表中的公司值来更轻松地进行检查：

PS> Get-Process -Name powershell | Format-Table -Wrap -AutoSize -Property Name,I
d,Path -GroupBy Company

   Company: Microsoft Corporation

Name         Id Path
----         -- ----
powershell 1956 C:\Program Files\Windows PowerShell\v1.0\powershell.exe
powershell 2656 C:\Program Files\Windows PowerShell\v1.0\powershell.exe


使用 Out-* Cmdlet 重定向数据

Windows PowerShell 为您提供了多个用于直接控制数据输出的 cmdlet。这些 cmdlet 具有两个重要的共同特征。

第一，它们通常都将数据转换为某种文本形式。这是因为它们要将数据输出到需要接受文本输入的系统组件。这意味着它们需要以文本形式表示对象。因此，文本格式将与 Windows PowerShell 控制台窗口中所显示的格式相同。

第二，这些 cmdlet 都使用 Windows PowerShell 动词 Out，这是因为它们要将信息从 Windows PowerShell 中发送到其他位置。Out-Host cmdlet 也不例外：主机窗口显示位于 Windows PowerShell 之外。这一特征十分重要，因为从 Windows PowerShell 发出数据时，实际上将删除该数据。如果试图创建将数据分页发送到主机窗口的管道，然后尝试将其格式设置为列表，则会看到此类情况，如下所示：

PS> Get-Process | Out-Host -Paging | Format-List

您可能希望该命令以列表格式来显示进程信息页面。实际上，它将显示默认的表格格式列表：

Handles  NPM(K)    PM(K)      WS(K) VM(M)   CPU(s)     Id ProcessName
-------  ------    -----      ----- -----   ------     -- -----------
    101       5     1076       3316    32     0.05   2888 alg
...
    618      18    39348      51108   143   211.20    740 explorer
    257       8     9752      16828    79     3.02   2560 explorer
...
<SPACE> next page; <CR> next line; Q quit
...

Out-Host cmdlet 将数据直接发送到控制台，因此 Format-List 命令决不会收到任何要进行格式设置的内容。

若要构建此命令的结构，正确方式是将 Out-Host cmdlet 放在管道末尾，如下所示。这样将导致先在列表中设置进程数据的格式，然后再进行分页和显示。

PS> Get-Process | Format-List | Out-Host -Paging

Id      : 2888
Handles : 101
CPU     : 0.046875
Name    : alg
...

Id      : 740
Handles : 612
CPU     : 211.703125
Name    : explorer

Id      : 2560
Handles : 257
CPU     : 3.015625
Name    : explorer
...
<SPACE> next page; <CR> next line; Q quit
...

此方式适用于所有的 Out cmdlet。Out cmdlet 应始终出现在管道末尾。

注意：

所有的 Out cmdlet 都以文本形式呈现输出，并使用控制台窗口的有效格式设置（包含行长度限制）进行显示。

对控制台输出进行分页 (Out-Host)

默认情况下，Windows PowerShell 会将数据发送到主机窗口，这与 Out-Host cmdlet 的作用完全相同。正如前面所讨论的，Out-Host cmdlet 的主要用途是对数据进行分页。例如，以下命令使用 Out-Host 对 Get-Command cmdlet 的输出进行分页：

PS> Get-Command | Out-Host -Paging

也可以使用 more 函数来对数据进行分页。在 Windows PowerShell 中，more 是一个调用 Out-Host -Paging 的函数。以下命令演示了如何使用 more 函数对 Get-Command 的输出进行分页：

PS> Get-Command | more

如果将一个或多个文件名用作 more 函数的参数，则该函数将读取指定的文件并将其内容分页发送到主机：

PS> more c:\boot.ini
[boot loader]
timeout=5
default=multi(0)disk(0)rdisk(0)partition(1)\WINDOWS
[operating systems]
...

放弃输出 (Out-Null)

Out-Null cmdlet 的作用是立即放弃其收到的任何输入。如果希望放弃作为运行命令的副产品而获得的不需要的数据，则此命令十分有用。键入以下命令后，将不会返回任何输出：

PS> Get-Command | Out-Null

Out-Null cmdlet 不会放弃错误输出。例如，如果输入以下命令，将显示一条消息，通知您 Windows PowerShell 无法识别“Is-NotACommand”：

PS> Get-Command Is-NotACommand | Out-Null
Get-Command : 'Is-NotACommand' is not recognized as a cmdlet, function, operabl
e program, or script file.
At line:1 char:12
+ Get-Command  <<<< Is-NotACommand | Out-Null

打印数据 (Out-Printer)

可以使用 Out-Printer cmdlet 打印数据。如果未提供打印机名称，则 Out-Printer cmdlet 将使用默认打印机。通过指定打印机的显示名称，您可以使用任何基于 Windows 的打印机。无需指定任何种类的打印机端口映射，甚至无需指定真实的物理打印机。例如，如果安装了 Microsoft Office 文档图像工具，可以通过键入以下命令将数据发送到图像文件：

PS> Get-Command Get-Command | Out-Printer -Name "Microsoft Office Document Image Writer"

保存数据 (Out-File)

可以使用 Out-File cmdlet 将输出发送到文件而不是控制台窗口。以下命令行会将一个进程列表发送到文件 C:\temp\processlist.txt：

PS> Get-Process | Out-File -FilePath C:\temp\processlist.txt

如果习惯于传统的输出重定向，则使用 Out-File cmdlet 的结果可能与您的预期结果不同。若要了解此命令的行为，必须了解运行 Out-File cmdlet 的上下文。

默认情况下，Out-File cmdlet 将创建 Unicode 文件。从长远的角度来看，这是最佳的默认值，但这意味着预期使用 ASCII 文件的工具将无法正确处理该默认输出格式。可以使用 Encoding 参数将默认输出格式更改为 ASCII：

PS> Get-Process | Out-File -FilePath C:\temp\processlist.txt -Encoding ASCII

Out-file 将文件内容的格式设置为类似于控制台输出的格式。这样将导致在大多数情况下输出将像在控制台窗口中一样发生截断。例如，如果运行以下命令：

PS> Get-Command | Out-File -FilePath c:\temp\output.txt

输出将与以下所示类似：

CommandType     Name                            Definition
-----------     ----                            ----------
Cmdlet          Add-Content                     Add-Content [-Path] <String[...
Cmdlet          Add-History                     Add-History [[-InputObject] ...
...

若要获得不强行进行换行以匹配屏幕宽度的输出，可以使用 Width 参数来指定行宽。由于 Width 是 32 位整数参数，因此其最大值为 2147483647。键入以下命令可以将行宽设置为此最大值：

Get-Command | Out-File -FilePath c:\temp\output.txt -Width 2147483647

如果希望按照控制台上所显示的格式保存输出，则 Out-File cmdlet 最有用。若要更好地控制输出格式，您需要使用更高级的工具。我们将在下一章介绍这些工具，并提供有关对象操作的一些详细信息。


Windows PowerShell 导航

文件夹是 Windows 资源管理器界面、Cmd.exe 和 UNIX 工具（例如 BASH）中令人熟悉的组织功能。文件夹（通常称为目录）是用于组织文件和其他目录的有用概念。UNIX 系列操作系统扩展了这一概念，它们将所有可能的项目都视为文件；特定的硬件和网络连接将作为文件显示在特定文件夹中。此方法无法确保内容是否可由特定应用程序读取或使用，但这样可以更轻松地查找特定项目。用于对文件和文件夹进行枚举或搜索的工具也使用这些设备。此外，还可以使用表示特定项目的文件路径来定位到该项目。

同样，Windows PowerShell 基础结构支持将诸如标准 Microsoft Windows 磁盘驱动器或 UNIX 文件系统之类的可进行导航的几乎所有项目都公开为 Windows PowerShell 驱动器。Windows PowerShell 驱动器不一定表示真实的本地驱动器或网络驱动器。本章主要讨论文件系统的导航，但这些概念也适用于与文件系统无关的 Windows PowerShell 驱动器。


管理当前位置

在 Windows 资源管理器中导航文件夹系统时，通常具有特定的工作位置，即当前打开的文件夹。通过单击当前文件夹中的项目，可以轻松地对其进行操作。对于 Cmd.exe 之类的命令行界面，当您位于某特定文件所在的同一文件夹中时，可以通过指定相对简短的名称来对其进行访问，而无需指定该文件的完整路径。当前目录也称为工作目录。

Windows PowerShell 使用名词 Location 来引用工作目录，并实现一系列 cmdlet 来对您的位置进行检查和操作。

获取当前位置 (Get-Location)

若要确定当前目录位置的路径，请输入 Get-Location 命令：

PS> Get-Location
Path
----
C:\Documents and Settings\PowerUser
注意：

Get-Location cmdlet 与 BASH shell 中的 pwd 命令类似。Set-Location cmdlet 与 Cmd.exe 中的 cd 命令类似。

设置当前位置 (Set-Location)

Get-Location 命令与 Set-Location 命令结合使用。使用 Set-Location 命令可以指定当前目录位置。

PS> Set-Location -Path C:\Windows

输入命令之后，您将会发现没有收到有关命令效果的任何直接反馈。大多数执行操作的 Windows PowerShell 命令会产生少量输出或没有输出，因为输出并不总是有用的。若要验证在输入 Set-Location 命令时是否已成功进行了目录更改，请在输入 Set-Location 命令时包括 -PassThru 参数：

PS> Set-Location -Path C:\Windows -PassThru
Path
----
C:\WINDOWS

在 Windows PowerShell 中，-PassThru 参数可以在很多 Set 命令中使用，以便在没有默认输出的情况下返回有关结果的信息。

可以采用与大多数 UNIX 和 Windows 命令 shell 中所用的相同方式来指定当前位置的相对路径。在标准的相对路径表示法中，单句点 (.) 表示当前文件夹，双句点 (..) 表示当前位置的父目录。

例如，如果您在 C:\Windows 文件夹中，则单句点 (.) 表示 C:\Windows，而双句点 (..) 表示 C:。通过键入以下命令可以从当前位置切换到 C: 驱动器根目录：

PS> Set-Location -Path .. -PassThru

Path

----

C:\

此方法同样适用于不属于文件系统驱动器的 Windows PowerShell 驱动器（例如 HKLM:）。通过键入以下命令可以将您的位置设置为注册表中的 HKLM\Software 项：

 PS> Set-Location -Path HKLM:\SOFTWARE -PassThru

Path
----
HKLM:\SOFTWARE

然后，可以使用相对路径来将目录位置更改为父目录，即 Windows PowerShell HKLM: 驱动器的根目录：

PS> Set-Location -Path .. -PassThru

Path
----
HKLM:\

可以键入 Set-Location 或使用 Set-Location 的任何内置 Windows PowerShell 别名（cd、chdir、sl）。例如：

cd -Path C:\Windows

chdir -Path .. -PassThru

sl -Path HKLM:\SOFTWARE -PassThru

保存和撤回最近的位置（Push-Location 和 Pop-Location）

更改位置时，有必要对曾经处于的位置进行跟踪，并且能够返回以前的位置。Windows PowerShell 中的 Push-Location cmdlet 可以创建您曾经处于的目录路径的有序历史记录（“堆栈”），您可以使用补充的 Pop-Location cmdlet 来逐步退回目录路径的历史记录。

例如，Windows PowerShell 通常从用户的主目录启动。

 PS> Get-Location

Path
----
C:\Documents and Settings\PowerUser
注意：

在许多编程设置（包括 .NET Framework）中，术语堆栈具有特殊的含义。与物料的物理堆栈相似，最后一个放入堆栈的项目将是您可以从该堆栈中取出的第一个项目。如果用通俗语言来表示向堆栈中添加项目，即称为将项目“压入”堆栈。如果用通俗语言来表示从堆栈中取出项目，即称为将项目“弹出”堆栈。

若要将当前位置压入堆栈，然后转到 Local Settings 文件夹，请键入：

 PS> Push-Location -Path "Local Settings"

然后可以通过键入以下命令，将 Local Settings 位置压入堆栈，并转到 Temp 文件夹：

PS> Push-Location -Path Temp

可以通过输入 Get-Location 命令来验证是否已经更改了目录：

PS> Get-Location

Path
----
C:\Documents and Settings\PowerUser\Local Settings\Temp

然后，可以通过输入 Pop-Location 命令来弹出到最近访问过的目录，并通过输入 Get-Location 命令来验证该更改：

PS> Pop-Location
PS> Get-Location

Path
----
C:\Documents and Settings\me\Local Settings

与 Set-Location cmdlet 相同，在输入 Pop-Location cmdlet 时可以包括 -PassThru 参数以显示所输入的目录：

PS> Pop-Location -PassThru

Path
----
C:\Documents and Settings\PowerUser

还可以使用位置 cmdlet 来处理网络路径。如果有一个名为 FS01 的服务器，该服务器有一个名为 Public 的共享区，则可以通过键入以下命令来更改位置：

Set-Location \\FS01\Public

或

Push-Location \\FS01\Public

可以使用 Push-Location 和 Set-Location 命令将位置更改为任何可用的驱动器。例如，如果有一个本地 CD-ROM 驱动器，其驱动器号为 D，并且包含数据 CD，则可以通过输入 Set-Location D: 命令将位置更改为 CD 驱动器。

如果该驱动器为空，您将获得以下错误消息：

PS> Set-Location D:
Set-Location : Cannot find path 'D:\' because it does not exist.

使用命令行界面时，用 Windows 资源管理器来检查可用物理驱动器并不太方便。而且，Windows 资源管理器不会为您显示所有 Windows PowerShell 驱动器。Windows PowerShell 提供了一组用于操作 Windows PowerShell 驱动器的命令，稍后我们将介绍这些命令。


管理 Windows PowerShell 驱动器

在 Windows PowerShell 中，Windows PowerShell 驱动器是一种数据存储位置，您可以像访问文件系统驱动器一样对其进行访问。Windows PowerShell 提供程序会为您创建一些驱动器，例如文件系统驱动器（包括 C: 和 D:）、注册表驱动器（HKCU: 和 HKLM:）和证书驱动器 (Cert:)，您也可以创建自己的 Windows PowerShell 驱动器。这些驱动器十分有用，但它们仅在 Windows PowerShell 中可用。无法使用其他 Windows 工具（例如，Windows 资源管理器或 Cmd.exe）来访问这些驱动器。

Windows PowerShell 使用名词 PSDrive 来表示用于 Windows PowerShell 驱动器的命令。若要获得 Windows PowerShell 会话中的 Windows PowerShell 驱动器列表，请使用 Get-PSDrive cmdlet。

PS> Get-PSDrive

Name       Provider      Root                                   CurrentLocation
----       --------      ----                                   ---------------
A          FileSystem    A:\
Alias      Alias
C          FileSystem    C:\                                 ...And Settings\me
cert       Certificate   \
D          FileSystem    D:\
Env        Environment
Function   Function
HKCU       Registry      HKEY_CURRENT_USER
HKLM       Registry      HKEY_LOCAL_MACHINE
Variable   Variable

虽然根据您系统中驱动器的不同，此处所显示的驱动器会有所不同，但该列表的外观与上面显示的 Get-PSDrive 命令的输出类似。

文件系统驱动器是 Windows PowerShell 驱动器的子集。可以按 Provider 列中的 FileSystem 条目来标识文件系统驱动器。（Windows PowerShell 中的文件系统驱动器由 Windows PowerShell FileSystem 提供程序支持。）

若要查看 Get-PSDrive cmdlet 的语法，请键入带 Syntax 参数的 Get-Command 命令：

PS> Get-Command -Name Get-PSDrive -Syntax
Get-PSDrive [[-Name] <String[]>] [-Scope <String>] [-PSProvider <String[]>] [-V
erbose] [-Debug] [-ErrorAction <ActionPreference>] [-ErrorVariable <String>] [-
OutVariable <String>] [-OutBuffer <Int32>]

PSProvider 参数允许您仅显示由某个特定驱动程序支持的 Windows PowerShell 驱动器。例如，若要仅显示由 Windows PowerShell FileSystem 提供程序支持的 Windows PowerShell 驱动器，请键入带 PSProvider 参数和 FileSystem 值的 Get-PSDrive 命令：

PS> Get-PSDrive -PSProvider FileSystem

Name       Provider      Root                                   CurrentLocation
----       --------      ----                                   ---------------
A          FileSystem    A:\
C          FileSystem    C:\                           ...nd Settings\PowerUser
D          FileSystem    D:\

若要查看表示注册表配置单元的 Windows PowerShell 驱动器，请使用 PSProvider 参数，以便仅显示由 Windows PowerShell Registry 提供程序支持的 Windows PowerShell 驱动器：

PS> Get-PSDrive -PSProvider Registry

Name Provider Root CurrentLocation

---- -------- ---- ---------------

HKCU Registry HKEY_CURRENT_USER

HKLM Registry HKEY_LOCAL_MACHINE

还可以将标准的位置 cmdlet 用于 Windows PowerShell 驱动器：

PS> Set-Location HKLM:\SOFTWARE

PS> Push-Location .\Microsoft

PS> Get-Location

Path

----

HKLM:\SOFTWARE\Microsoft

添加新的 Windows PowerShell 驱动器 (New-PSDrive)

通过使用 New-PSDrive 命令，您可以添加自己的 Windows PowerShell 驱动器。若要获取 New-PSDrive 命令的语法，请输入带 Syntax 参数的 Get-Command 命令：

PS> Get-Command -Name New-PSDrive -Syntax
New-PSDrive [-Name] <String> [-PSProvider] <String> [-Root] <String> [-Descript
ion <String>] [-Scope <String>] [-Credential <PSCredential>] [-Verbose] [-Debug
] [-ErrorAction <ActionPreference>] [-ErrorVariable <String>] [-OutVariable <St
ring>] [-OutBuffer <Int32>] [-WhatIf] [-Confirm]

若要创建新的 Windows PowerShell 驱动器，您必须提供三个参数：

  • 驱动器的名称（可以使用任何有效的 Windows PowerShell 名称）

  • PSProvider（使用“FileSystem”表示文件系统位置，使用“Registry”表示注册表位置）

  • 根目录，即新驱动器的根目录路径

例如，可以创建一个名为“Office”的驱动器，该驱动器映射到计算机上包含 Microsoft Office 应用程序的文件夹，例如 C:\Program Files\Microsoft Office\OFFICE11。若要创建该驱动器，请键入以下命令：

PS> New-PSDrive -Name Office -PSProvider FileSystem -Root "C:\Program Files\Micr
osoft Office\OFFICE11"

Name       Provider      Root                                   CurrentLocation
----       --------      ----                                   ---------------
Office     FileSystem    C:\Program Files\Microsoft Offic...
注意：

通常，路径不区分大小写。

引用新的 Windows PowerShell 驱动器的方式与引用所有 Windows PowerShell 驱动器的方式一样，即使用其名称，后跟冒号 (:)。

Windows PowerShell 驱动器可以简化很多任务。例如，Windows 注册表中某些最重要的注册表项具有很长的路径，从而难以对其进行访问和记忆。关键的配置信息驻留在 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion 下。若要查看和更改 CurrentVersion 注册表项中的项目，您可以通过键入以下命令来创建一个根目录位于该注册表项中的 Windows PowerShell 驱动器：

PS> New-PSDrive -Name cvkey -PSProvider Registry -Root HKLM\Software\Microsoft\W

indows\CurrentVersion

Name Provider Root CurrentLocation

---- -------- ---- ---------------

cvkey Registry HKLM\Software\Microsoft\Windows\...

然后，您可以将位置更改为 cvkey: 驱动器，如同更改为任何其他驱动器一样：

PS> cd cvkey:

或者：

PS> Set-Location cvkey: -PassThru

Path

----

cvkey:\

New-PsDrive cmdlet 会将新驱动器仅添加到当前 Windows PowerShell 会话中。如果关闭 Windows PowerShell 窗口，则新驱动器将丢失。若要保存 Windows PowerShell 驱动器，请使用 Export-Console cmdlet 导出当前的 Windows PowerShell 会话，然后使用 PowerShell.exe PSConsoleFile 参数将其导入。或者，将新驱动器添加到您的 Windows PowerShell 配置文件中。

删除 Windows PowerShell 驱动器 (Remove-PSDrive)

通过使用 Remove-PSDrive cmdlet，可以从 Windows PowerShell 中删除驱动器。Remove-PSDrive cmdlet 使用起来很方便；若要删除特定的 Windows PowerShell 驱动器，您只需提供该 Windows PowerShell 驱动器名称。

例如，如果已经添加了 Office: Windows PowerShell 驱动器，如 New-PSDrive 主题中所示，可以通过键入以下命令来删除该驱动器：

PS> Remove-PSDrive -Name Office

若要删除 cvkey: Windows PowerShell 驱动器，亦如 New-PSDrive 主题中所示，请使用以下命令：

PS> Remove-PSDrive -Name cvkey

删除 Windows PowerShell 驱动器十分容易，但当您位于该驱动器中时，则无法将其删除。例如：

PS> cd office:
PS Office:\> remove-psdrive -name office
Remove-PSDrive : Cannot remove drive 'Office' because it is in use.
At line:1 char:15
+ remove-psdrive  <<<< -name office

在 Windows PowerShell 外部添加和删除驱动器

Windows PowerShell 会检测在 Windows 中添加或删除的文件系统驱动器，包括映射的网络驱动器、附加的 USB 驱动器，以及通过使用 net use 命令或 Windows Script Host (WSH) 脚本中的 WScript.Network MapNetworkDrive 和 RemoveNetworkDrive 方法删除的驱动器。


处理文件、文件夹和注册表项

Windows PowerShell 使用名词 Item 来表示在 Windows PowerShell 驱动器中找到的项。在处理 Windows PowerShell FileSystem 提供程序时，Item 可以是文件、文件夹或 Windows PowerShell 驱动器。在大多数管理设置中，列出并处理这些项是一项重要的基本任务，因此我们应对这些任务进行详细的讨论。

枚举文件、文件夹和注册表项 (Get-ChildItem)

由于从特定位置获取项集合是很常见的任务，因此 Get-ChildItem cmdlet 被设计为专门用于返回在容器（例如文件夹）中找到的所有项。

若要返回文件夹 C:\Windows 中直接包含的所有文件和文件夹，请键入：

PS> Get-ChildItem -Path C:\Windows
    Directory: Microsoft.Windows PowerShell.Core\FileSystem::C:\Windows
Mode                LastWriteTime     Length Name
----                -------------     ------ ----
-a---        2006-05-16   8:10 AM          0 0.log
-a---        2005-11-29   3:16 PM         97 acc1.txt
-a---        2005-10-23  11:21 PM       3848 actsetup.log
...

在 Cmd.exe 中输入 dir 命令或者在 UNIX 命令 shell 中输入 ls 命令时，所列出的内容与该列表类似。

可以使用 Get-ChildItem cmdlet 的参数来执行非常复杂的列表操作。我们将看到以下几种情况。可以通过键入以下命令来查看 Get-ChildItem cmdlet 的语法：

PS> Get-Command -Name Get-ChildItem -Syntax

可以将这些参数进行混合和匹配以获得较高程度的自定义输出。

列出所有包含的项 (-Recurse)

若要查看 Windows 文件夹内部的项及其子文件夹中包含的所有项，请使用 Get-ChildItem 的 Recurse 参数。列表操作将显示 Windows 文件夹中的所有内容及其子文件夹中的所有项。例如：

PS> Get-ChildItem -Path C:\WINDOWS -Recurse

    Directory: Microsoft.Windows PowerShell.Core\FileSystem::C:\WINDOWS
    Directory: Microsoft.Windows PowerShell.Core\FileSystem::C:\WINDOWS\AppPatch
Mode                LastWriteTime     Length Name
----                -------------     ------ ----
-a---        2004-08-04   8:00 AM    1852416 AcGenral.dll
...

按名称筛选项 (-Name)

若要仅显示项名称，请使用 Get-Childitem 的 Name 参数：

PS> Get-ChildItem -Path C:\WINDOWS -Name
addins
AppPatch
assembly
...

强制列出隐藏项 (-Force)

通常，在 Windows 资源管理器或 Cmd.exe 中不可见的项均不会显示在 Get-ChildItem 命令的输出中。若要显示隐藏项，请使用 Get-ChildItem 的 Force 参数。例如：

Get-ChildItem -Path C:\Windows -Force

由于可强制改写 Get-ChildItem 命令的正常行为，因此此参数命名为 Force。Force 参数使用广泛，它可强制执行 cmdlet 非正常执行的操作，但该参数不执行危及系统安全的任何操作。

将项名称与通配符匹配

The Get-ChildItem 命令接受要列出的项的路径中的通配符。

由于通配符匹配是通过 Windows PowerShell 引擎处理的，因此接受通配符的所有 cmdlet 都可使用相同的表示法，并具有相同的匹配行为。Windows PowerShell 通配符表示法包括：

  • 星号 (*) 与零或更多出现的字符匹配。

  • 问号 (?)仅与一个字符匹配。

  • 左方括号 ([) 字符和右方括号 (]) 字符可括住一组要进行匹配的字符。

此处为如何应用通配符规范的一些示例。

若要查找 Windows 目录中具有 .log 后缀且基名称只有五个字符的所有文件，请输入以下命令：

PS> Get-ChildItem -Path C:\Windows\?????.log
    Directory: Microsoft.Windows PowerShell.Core\FileSystem::C:\Windows
Mode                LastWriteTime     Length Name
----                -------------     ------ ----
...
-a---        2006-05-11   6:31 PM     204276 ocgen.log
-a---        2006-05-11   6:31 PM      22365 ocmsn.log
...
-a---        2005-11-11   4:55 AM         64 setup.log
-a---        2005-12-15   2:24 PM      17719 VxSDM.log
...

若要查找 Windows 目录中以字母 x 开头的所有文件，请键入：

 Get-ChildItem -Path C:\Windows\x*

若要查找文件名以 x 或 z 开头的所有文件，请键入：

Get-ChildItem -Path C:\Windows\[xz]*

排除项 (-Exclude)

通过使用 Get-ChildItem 的 Exclude 参数可以排除特定的项。即，在单语句中执行复杂的筛选操作。

例如，假设您要在 System32 文件夹中查找 Windows 时间服务 DLL，但您只记得 DLL 名称是以“W”开头并且其中有数字“32”。

类似于 w*32*.dll 的表达式可找到符合该条件的所有 DLL，但该表达式还会返回名称中包含“95”或“16”的与 Windows 95 和 16 位 Windows 兼容的 DLL。您可以使用模式为 *[9516]* 的 Exclude 参数忽略名称中具有其中任一数字的文件：

PS> Get-ChildItem -Path C:\WINDOWS\System32\w*32*.dll -Exclude *[9516]*

Directory: Microsoft.PowerShell.Core\FileSystem::C:\WINDOWS\System32

Mode LastWriteTime Length Name

---- ------------- ------ ----

-a--- 2004-08-04 8:00 AM 174592 w32time.dll

-a--- 2004-08-04 8:00 AM 22016 w32topl.dll

-a--- 2004-08-04 8:00 AM 101888 win32spl.dll

-a--- 2004-08-04 8:00 AM 172032 wldap32.dll

-a--- 2004-08-04 8:00 AM 264192 wow32.dll

-a--- 2004-08-04 8:00 AM 82944 ws2_32.dll

-a--- 2004-08-04 8:00 AM 42496 wsnmp32.dll

-a--- 2004-08-04 8:00 AM 22528 wsock32.dll

-a--- 2004-08-04 8:00 AM 18432 wtsapi32.dll

混合使用 Get-ChildItem 参数

可以在同一命令中使用 Get-ChildItem cmdlet 的多个参数。在混合使用参数之前，请确保您了解通配符匹配。例如，以下命令将不会返回任何结果：

PS> Get-ChildItem -Path C:\Windows\*.dll -Recurse -Exclude [a-y]*.dll

即使 Windows 文件夹中包含两个以字母“z”开头 DLL，也不会返回任何结果。

不返回任何结果是由于我们将通配符指定为该路径的一部分。即使该命令是递归的，但 Get-ChildItem cmdlet 仍将这些项限制为 Windows 文件夹中名称以“.dll”结尾的项。

若要为名称与特定模式相匹配的文件指定递归搜索，请使用 -Include 参数。

PS> Get-ChildItem -Path C:\Windows -Include *.dll -Recurse -Exclude [a-y]*.dll

    Directory: Microsoft.Windows PowerShell.Core\FileSystem::C:\Windows\System32\Setup

Mode                LastWriteTime     Length Name
----                -------------     ------ ----
-a---        2004-08-04   8:00 AM       8261 zoneoc.dll

    Directory: Microsoft.Windows PowerShell.Core\FileSystem::C:\Windows\System32

Mode                LastWriteTime     Length Name
----                -------------     ------ ----
-a---        2004-08-04   8:00 AM     337920 zipfldr.dll


直接对项进行操作

在 Windows PowerShell 驱动器中看到的元素（例如文件系统驱动器中的文件和文件夹）和 Windows PowerShell 注册表驱动器中的注册表项在 Windows PowerShell 中均称为项。用于处理这些项的 cmdlet 的名称中具有名词 Item。

Get-Command -Noun Item 命令的输出表明存在九个 Windows PowerShell 项 cmdlet。

PS> Get-Command -Noun Item

CommandType     Name                            Definition
-----------     ----                            ----------
Cmdlet          Clear-Item                      Clear-Item [-Path] <String[]...
Cmdlet          Copy-Item                       Copy-Item [-Path] <String[]>...
Cmdlet          Get-Item                        Get-Item [-Path] <String[]> ...
Cmdlet          Invoke-Item                     Invoke-Item [-Path] <String[...
Cmdlet          Move-Item                       Move-Item [-Path] <String[]>...
Cmdlet          New-Item                        New-Item [-Path] <String[]> ...
Cmdlet          Remove-Item                     Remove-Item [-Path] <String[...
Cmdlet          Rename-Item                     Rename-Item [-Path] <String>...
Cmdlet          Set-Item                        Set-Item [-Path] <String[]> ...

创建新项 (New-Item)

若要在文件系统中创建新项，请使用 New-Item cmdlet。请在该命令中包含指向该项的路径的 Path 参数，以及值为“file”或“directory”的 ItemType 参数。

例如，若要在 C:\Temp 目录中创建名为“New.Directory”的新目录，请键入：

PS> New-Item -Path c:\temp\New.Directory -ItemType Directory

    Directory: Microsoft.Windows PowerShell.Core\FileSystem::C:\temp

Mode                LastWriteTime     Length Name
----                -------------     ------ ----
d----        2006-05-18  11:29 AM            New.Directory

若要创建文件，请将 ItemType 参数的值更改为“file”。例如，若要在 New.Directory 目录中创建名为“file1.txt”的文件，请键入：

PS> New-Item -Path C:\temp\New.Directory\file1.txt -ItemType file

    Directory: Microsoft.Windows PowerShell.Core\FileSystem::C:\temp\New.Directory

Mode                LastWriteTime     Length Name
----                -------------     ------ ----
-a---        2006-05-18  11:44 AM          0 file1

可以使用相同的技术创建新的注册表项。实际上，由于 Windows 注册表中只有项类型属于项，因此创建注册表项更加容易。（注册表条目是项属性。）例如，若要在 CurrentVersion 子项中创建名为“_Test”的项，请键入：

PS> New-Item -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\_Test

   Hive: Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Micros
oft\Windows\CurrentVersion

SKC  VC Name                           Property
---  -- ----                           --------
  0   0 _Test                          {}

键入注册表路径时，请务必在 Windows PowerShell 驱动器名称中包含冒号 (:)，例如 HKLM: 和 HKCU:。如果没有冒号，则 Windows PowerShell 将无法识别路径中的驱动器名称。

为什么注册表值不属于项

使用 Get-ChildItem cmdlet 查找注册表项中的项时，您将始终无法看到实际的注册表条目或其值。

例如，注册表项 HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run 通常包含几个表示在系统启动时运行的应用程序的注册表条目。

但是，在使用 Get-ChildItem 查找该项中的子项时，则所能看到的只是该项的 OptionalComponents 子项：

PS> Get-ChildItem HKLM:\Software\Microsoft\Windows\CurrentVersion\Run
   Hive: Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\Software\Micros
oft\Windows\CurrentVersion\Run
SKC  VC Name                           Property
---  -- ----                           --------
  3   0 OptionalComponents             {}

尽管可以很容易地将注册表条目当作项，但却无法将路径指定给注册表条目以确保其唯一性。路径表示法无法将名为 Run 的注册表子项与 Run 子项中的 (Default) 注册表条目区分开。此外，由于注册表条目的名称可以包含反斜杠字符 (\)，如果注册表条目是项，则无法使用路径表示法将名为 Windows\CurrentVersion\Run 的注册表条目与位于该路径中的子项区分开。

重命名现有项 (Rename-Item)

若要更改文件名或文件夹的名称，请使用 Rename-Item cmdlet。以下命令会将 file1.txt 文件的名称更改为 fileOne.txt。

PS> Rename-Item -Path C:\temp\New.Directory\file1.txt fileOne.txt

Rename-Item cmdlet 可更改文件名或文件夹的名称，但无法移动项。以下命令失败的原因是，该命令试图将 New.Directory 目录中的文件移动至 Temp 目录。

PS> Rename-Item -Path C:\temp\New.Directory\fileOne.txt c:\temp\fileOne.txt
Rename-Item : Cannot rename because the target specified is not a path.
At line:1 char:12
+ Rename-Item  <<<< -Path C:\temp\New.Directory\fileOne c:\temp\fileOne.txt

移动项 (Move-Item)

若要移动文件或文件夹，请使用 Move-Item cmdlet。

例如，以下命令可以将 New.Directory 目录从 C:\temp 目录移动至 C: 驱动器的根目录中。若要验证某个项是否已移动，请在 Move-Item cmdlet 中包含 PassThru 参数。如果没有 Passthru 参数，Move-Item cmdlet 不会显示任何结果。

PS> Move-Item -Path C:\temp\New.Directory -Destination C:\ -PassThru

    Directory: Microsoft.Windows PowerShell.Core\FileSystem::C:\

Mode                LastWriteTime     Length Name
----                -------------     ------ ----
d----        2006-05-18  12:14 PM            New.Directory

复制项 (Copy-Item)

如果您熟悉其他 shell 中的复制操作，则可能会发现 Windows PowerShell 中的 Copy-Item cmdlet 的行为有些不同。在将某个项从一个位置复制到另一位置时，默认情况下，Copy-Item 不会复制其内容。

例如，如果将 New.Directory 目录从 C: 驱动器复制到 C:\temp 目录，则可以成功执行该命令，但却不会复制 New.Directory 目录中的文件。

PS> Copy-Item -Path C:\New.Directory -Destination C:\temp

如果显示 C:\temp\New.Directory 中的内容，则将发现该目录中不包含任何文件：

PS> Get-ChildItem -Path C:\temp\New.Directory
PS>

为什么 Copy-Item cmdlet 不会将内容复制到新的位置？

Copy-Item cmdlet 已设计为通用命令，它不适用于复制文件和文件夹。另外，甚至在复制文件和文件夹时，您也只能复制容器，而不能复制容器中的项。

若要复制文件夹中的所有内容，请在命令中包含 Copy-Item cmdlet 的 Recurse 参数。如果已复制的目录没有内容，则可以添加 Force 参数，而该参数将允许覆盖空文件夹。

PS> Copy-Item -Path C:\New.Directory -Destination C:\temp -Recurse -Force -Passthru
    Directory: Microsoft.Windows PowerShell.Core\FileSystem::C:\temp

Mode                LastWriteTime     Length Name
----                -------------     ------ ----
d----        2006-05-18   1:53 PM            New.Directory

    Directory: Microsoft.Windows PowerShell.Core\FileSystem::C:\temp\New.Directory

Mode                LastWriteTime     Length Name
----                -------------     ------ ----
-a---        2006-05-18  11:44 AM          0 file1

删除项 (Remove-Item)

若要删除文件和文件夹，请使用 Remove-Item cmdlet。Windows PowerShell cmdlet（例如 Remove-Item）可以进行无法撤消的重大更改，当您输入命令时，它通常会提示您进行确认。例如，如果尝试删除 New.Directory 文件夹，则系统将提示您确认该命令，因为该文件夹中包含文件：

PS> Remove-Item C:\New.Directory

Confirm
The item at C:\temp\New.Directory has children and the -recurse parameter was not
specified. If you continue, all children will be removed with the item. Are you
 sure you want to continue?
[Y] Yes  [A] Yes to All  [N] No  [L] No to All  [S] Suspend  [?] Help
(default is "Y"):

由于是为默认响应，因此若要删除文件夹及其文件，请按 Enter 键。若要不进行确认即删除文件夹，请使用 -Recurse 参数。

PS> Remove-Item C:\temp\New.Directory -Recurse

执行项 (Invoke-Item)

Windows PowerShell 使用 Invoke-Item cmdlet 来对文件或文件夹执行默认操作。此默认操作是由注册表中默认应用程序的处理程序确定的，其效果与在 Windows 资源管理器中双击该项的效果相同。

例如，假设您运行以下命令：

PS> Invoke-Item C:\WINDOWS

将出现位于 C:\Windows 中的资源管理器窗口，其效果与双击 C:\Windows 文件夹相同。

如果在 Windows Vista 之前的系统中调用 Boot.ini 文件：

PS> Invoke-Item C:\boot.ini

如果 .ini 文件类型与 Notepad 相关联，则 boot.ini 文件将在 Notepad 中打开。


处理对象

我们已经讨论了 Windows PowerShell 如何使用对象在 cmdlet 之间传输数据，并通过使用 Get-Member 和 Format cmdlet 查看对象的特定属性对查看有关对象的详细信息的几种方法进行了说明。

对象的作用是让您能够访问许多复杂的数据，并且这些数据已经关联。通过某些简单的技术，就可以进一步操作对象以进行更多工作。在本章中，我们将讨论可对其进行操作的某些特定对象的类型和操作方法。


获取 WMI 对象 (Get-WmiObject)

获取 WMI 对象 (Get-WmiObject)

Windows Management Instrumentation (WMI) 是 Windows 系统管理的核心技术，因为它可以按统一的方式公开各种类型的信息。由于 WMI 具有如此强大的功能，因此用于访问 WMI 对象的 Windows PowerShell cmdlet Get-WmiObject 为实际工作中最有用的命令之一。我们将讨论如何使用 Get-WmiObject 来访问 WMI 对象，然后讨论如何使用 WMI 对象来执行特定操作。

列出 WMI 类

大多数 WMI 用户遇到的第一个问题是：希望了解利用 WMI 可以执行哪些操作。WMI 类可以描述可管理的资源。系统中存在几百个 WMI 类，其中某些类包含几十个属性。

Get-WmiObject 可以通过使 WMI 可发现来解决此问题。您可以通过键入以下命令来获取本地计算机中可用的 WMI 类列表：

PS> Get-WmiObject -List

__SecurityRelatedClass                  __NTLMUser9X
__PARAMETERS                            __SystemSecurity
__NotifyStatus                          __ExtendedStatus
Win32_PrivilegesStatus                  Win32_TSNetworkAdapterSettingError
Win32_TSRemoteControlSettingError       Win32_TSEnvironmentSettingError
...

通过使用 ComputerName 参数，然后指定计算机名称或 IP 地址，可以从远程计算机中检索相同的信息：

PS> Get-WmiObject -List -ComputerName 192.168.1.29

__SystemClass                           __NAMESPACE
__Provider                              __Win32Provider
__ProviderRegistration                  __ObjectProviderRegistration
...

根据该计算机所运行的特定操作系统和由已安装的应用程序所添加的特定 WMI 扩展的不同，远程计算机返回的类列表也各不相同。

注意：

在使用 Get-WmiObject 连接到远程计算机时，该远程计算机必须运行 WMI，并且，在默认配置下，您使用的帐户必须是该远程计算机上本地管理员组的成员。远程系统不需要安装 Windows PowerShell。从而，您可以对未运行 Windows PowerShell 但可使用 WMI 的操作系统进行管理。

甚至可在连接到本地系统时包括 ComputerName。可以将本地计算机的名称、其 IP 地址（或环回地址 127.0.0.1）或 WMI 样式“.”用作计算机名称。如果名为 Admin01（其 IP 地址为 192.168.1.90）的计算机上运行的是 Windows PowerShell，则以下命令将返回该计算机的 WMI 类列表：

Get-WmiObject -List
Get-WmiObject -List -ComputerName .
Get-WmiObject -List -ComputerName Admin01
Get-WmiObject -List -ComputerName 192.168.1.90
Get-WmiObject -List -ComputerName 127.0.0.1
Get-WmiObject -List -ComputerName localhost

默认情况下，Get-WmiObject 使用 root/cimv2 命名空间。如果要指定另一个 WMI 命名空间，请使用 Namespace 参数并指定相应的命名空间路径：

PS> Get-WmiObject -List -ComputerName 192.168.1.29 -Namespace root

__SystemClass                           __NAMESPACE
__Provider                              __Win32Provider
...

显示 WMI 类详细信息

如果您已经知道 WMI 类的名称，则可立即使用该类来获取信息。例如，Win32_OperatingSystem 是常用于检索计算机相关信息的 WMI 类之一。

PS> Get-WmiObject -Class Win32_OperatingSystem -Namespace root/cimv2 -ComputerName .

SystemDirectory : C:\WINDOWS\system32
Organization    : Global Network Solutions
BuildNumber     : 2600
RegisteredUser  : Oliver W. Jones
SerialNumber    : 12345-678-9012345-67890
Version         : 5.1.2600

尽管我们已给出所有参数，但也可采用更简洁的方式来表示命令。连接到本地系统时，ComputerName 参数不是必需的。介绍该参数的目的是为了对最常见的情况予以说明，并帮助您熟悉此参数。Namespace 默认为 root/cimv2，而且也可以省略。最后，大多数 cmdlet 都允许省略一些通用参数名称。在使用 Get-WmiObject 时，如果没有为第一个参数指定名称，则 Windows PowerShell 会将其视为 Class 参数。这意味着可能已通过键入以下命令发出上一命令：

Get-WmiObject Win32_OperatingSystem

Win32_OperatingSystem 类所具有的属性数量远远超过此处所显示的属性数量。可以使用 Get-Member 来查看所有属性。就像其他对象属性一样，WMI 类的属性也将自动可用：

PS> Get-WmiObject -Class Win32_OperatingSystem -Namespace root/cimv2 -ComputerName . | Get-Member -MemberType Property

   TypeName: System.Management.ManagementObject#root\cimv2\Win32_OperatingSyste
m

Name                                      MemberType Definition
----                                      ---------- ----------
__CLASS                                   Property   System.String __CLASS {...
...
BootDevice                                Property   System.String BootDevic...
BuildNumber                               Property   System.String BuildNumb...
...

使用 Format Cmdlet 显示非默认的属性

如果需要包含在 Win32_OperatingSystem 类中且默认情况下不显示的信息，可通过使用 Format cmdlet 来显示这些信息。例如，如果希望显示可用的内存数据，请键入：

PS> Get-WmiObject -Class Win32_OperatingSystem -Namespace root/cimv2 -ComputerName . | Format-Table -Property TotalVirtualMemorySize,TotalVisibleMemorySize,FreePhysicalMemory,FreeVirtualMemory,FreeSpaceInPagingFiles

TotalVirtualMemorySize TotalVisibleMem FreePhysicalMem FreeVirtualMemo FreeSpaceInPagi
                              ory              ry         ngFiles
--------------- --------------- --------------- --------------- ---------------
        2097024          785904          305808         2056724         1558232
注意：

通配符可与 Format-Table 中的属性名称一起使用，因此最后的管道元素可精简为 Format-Table -Property TotalV*,Free*

如果通过键入以下命令将内存数据的格式设置为列表，则将大大提高该内存数据的可读性：

PS> Get-WmiObject -Class Win32_OperatingSystem -Namespace root/cimv2 -ComputerName . | Format-List TotalVirtualMemorySize,TotalVisibleMemorySize,FreePhysicalMemory,FreeVirtualMemory,FreeSpaceInPagingFiles

TotalVirtualMemorySize : 2097024
TotalVisibleMemorySize : 785904
FreePhysicalMemory     : 301876
FreeVirtualMemory      : 2056724
FreeSpaceInPagingFiles : 1556644


创建 .NET 和 COM 对象 (New-Object)

某些软件组件具有 .NET Framework 和 COM 接口，因此可执行许多系统管理任务。Windows PowerShell 允许您使用这些组件，因此，您可以使用 cmdlet 执行这些任务，而不会受到任何限制。在最初版本的 Windows PowerShell 中，多数 cmdlet 不适用于远程计算机。我们将演示如何在直接使用 Windows PowerShell 中的 .NET Framework System.Diagnostics.EventLog 类来管理事件日志时消除此限制。

使用 New-Object 访问事件日志

.NET Framework 类库包含可用于管理事件日志的名为 System.Diagnostics.EventLog 的类。可以使用具有 TypeName 参数的 New-Object cmdlet 来创建 .NET Framework 类的新实例。例如，以下命令可创建事件日志引用：

PS> New-Object -TypeName System.Diagnostics.EventLog

  Max(K) Retain OverflowAction        Entries Name
  ------ ------ --------------        ------- ----

尽管该命令已创建 EventLog 类实例，但该实例并不包含任何数据。这是由于未指定特定的事件日志。如何可获取实际事件日志？

将构造函数与 New-Object 结合使用

若要引用特定的事件日志，则需要指定该日志的名称。New-Object 具有 ArgumentList 参数。对象的特殊启动方法可使用作为值传递到此参数的参数。由于该方法用于构造对象，因此称为构造函数。例如，若要获取对 Application 日志的引用，请将字符串‘Application’指定为参数：

PS> New-Object -TypeName System.Diagnostics.EventLog -ArgumentList Application

Max(K) Retain OverflowAction        Entries Name
------ ------ --------------        ------- ----
16,384      7 OverwriteOlder          2,160 Application
注意：

由于大多数 .NET Framework 核心类包含在 System 命名空间中，因此如果 Windows PowerShell 找不到指定的类型名称的匹配项，则将自动尝试查找在 System 命名空间中指定的类。这意味着，您可以指定 Diagnostics.EventLog 而不是 System.Diagnostics.EventLog。

在变量中存储对象

您可能希望存储对对象的引用，以便在当前 shell 中使用它。尽管通过 Windows PowerShell 可对管道执行许多操作，但是，为了减少需要使用的变量数，有时将对象的引用存储在变量中可更方便地对这些对象进行操作。

Windows PowerShell 允许您创建其本质为对象的变量。任何有效的 Windows PowerShell 命令的输出均可存储在变量中。变量名称始终以 $ 开头。若要在名为 $AppLog 的变量中存储对应用程序日志的引用，请键入变量名称、后跟等号，然后键入用于创建应用程序日志对象的命令：

PS> $AppLog = New-Object -TypeName System.Diagnostics.EventLog -ArgumentList Application

随后，如果键入 $AppLog，则可看到 $AppLog 变量中包含该应用程序日志：

PS> $AppLog

  Max(K) Retain OverflowAction        Entries Name
  ------ ------ --------------        ------- ----
  16,384      7 OverwriteOlder          2,160 Application

使用 New-Object 访问远程事件日志

前一节中使用的命令主要适用于本地计算机，但 Get-EventLog cmdlet 也可实现相同的功能。若要访问远程计算机上的应用程序日志，则必须将日志名称以及计算机名称（或 IP 地址）作为参数进行提供。

PS> $RemoteAppLog = New-Object -TypeName System.Diagnostics.EventLog Application,192.168.1.81
PS> $RemoteAppLog

  Max(K) Retain OverflowAction        Entries Name
  ------ ------ --------------        ------- ----
     512      7 OverwriteOlder            262 Application

既然我们已将事件日志的引用存储在 $RemoteAppLog 变量中，那么还可对其执行哪些任务？

使用对象方法清除事件日志

对象中经常具有可调用以执行任务的方法。可以使用 Get-Member 来显示与对象关联的方法。以下命令和选定的输出显示了 EventLog 类的其中一些方法：

PS> $RemoteAppLog | Get-Member -MemberType Method

   TypeName: System.Diagnostics.EventLog

Name                      MemberType Definition
----                      ---------- ----------
...
Clear                     Method     System.Void Clear()
Close                     Method     System.Void Close()
...
GetType                   Method     System.Type GetType()
...
ModifyOverflowPolicy      Method     System.Void ModifyOverflowPolicy(Overfl...
RegisterDisplayName       Method     System.Void RegisterDisplayName(String ...
...
ToString                  Method     System.String ToString()
WriteEntry                Method     System.Void WriteEntry(String message),...
WriteEvent                Method     System.Void WriteEvent(EventInstance in...

使用 Clear() 方法可清除事件日志。在调用方法时，方法名称必须后跟圆括号，即使该方法不需要参数也是这样。这样，Windows PowerShell 可以将方法与可能同名的属性区分开来。键入以下命令可调用 Clear 方法：

PS> $RemoteAppLog.Clear()

键入以下命令可显示日志。此时，您将看到事件日志已清除，并且该日志中有 0 个而不是 262 个条目：

PS> $RemoteAppLog

  Max(K) Retain OverflowAction        Entries Name
  ------ ------ --------------        ------- ----
     512      7 OverwriteOlder              0 Application

使用 New-Object 创建 COM 对象

可以使用 New-Object 处理组件对象模型 (COM) 组件。组件的范围非常广泛，从 Windows Script Host (WSH) 中包含的各种库到 ActiveX 应用程序，例如大多数系统中所安装的 Internet Explorer。

New-Object 使用 .NET Framework 运行时可调用包装来创建 COM 对象，因此它具有的限制与在调用 COM 对象时 .NET Framework 具有的限制相同。若要创建 COM 对象，则需要利用要使用的 COM 类的编程标识符或 ProgId 来指定 ComObject 参数。在本用户指南中，将不对 COM 使用限制和确定系统中有哪些 ProgId 可用进行详尽的讨论，但环境中的大多数已知对象（例如 WSH）可以在 Windows PowerShell 中使用。

可以通过指定这些 ProgId 来创建 WSH 对象：WScript.Shell、WScript.Network、Scripting.Dictionary 和 Scripting.FileSystemObject。以下命令可以创建这些对象：

New-Object -ComObject WScript.Shell
New-Object -ComObject WScript.Network
New-Object -ComObject Scripting.Dictionary
New-Object -ComObject Scripting.FileSystemObject

尽管这些类的大多数功能可在 Windows PowerShell 中以其他方式获得，但使用 WSH 类来执行某些任务（例如创建快捷方式）则更简单易行。

使用 WScript.Shell 创建桌面快捷方式

使用 COM 对象可快速执行的一个任务是创建快捷方式。假设您要在链接到 Windows PowerShell 主文件夹的桌面上创建快捷方式。首先需要创建对 WScript.Shell 的引用，后者将存储在名为 $WshShell 的变量中：

$WshShell = New-Object -ComObject WScript.Shell

Get-Member 适用于 COM 对象，因此可键入以下命令来浏览对象成员：

PS> $WshShell | Get-Member

   TypeName: System.__ComObject#{41904400-be18-11d3-a28b-00104bd35090}

Name                     MemberType            Definition
----                     ----------            ----------
AppActivate              Method                bool AppActivate (Variant, Va...
CreateShortcut           Method                IDispatch CreateShortcut (str...
...

Get-Member 具有可选的 InputObject 参数，您可以使用该参数而无需使用管道向 Get-Member 提供输入。如果改用 Get-Member -InputObject $WshShell 命令，则将得到上面所示的输出。如果使用 InputObject，则它会将其参数视为单个项。这意味着，如果一个变量中有若干个对象，Get-Member 就会将这些对象视为对象数组。例如：

PS> $a = 1,2,"three"
PS> Get-Member -InputObject $a
TypeName: System.Object[]
Name               MemberType    Definition
----               ----------    ----------
Count              AliasProperty Count = Length
...

WScript.Shell CreateShortcut 方法可接受单个参数，该参数是指向要创建的快捷方式文件的路径。我们可以键入指向桌面的完整路径，但还有另一种更简单的方法。桌面通常是由当前用户的主文件夹中名为“桌面”的文件夹表示。Windows PowerShell 具有包含指向此文件夹的路径的变量 $Home。可以使用此变量来指定指向主文件夹的路径，然后，键入以下命令来添加“桌面”文件夹的名称以及要创建的快捷方式的名称：

$lnk = $WshShell.CreateShortcut("$Home\Desktop\PSHome.lnk")

在双引号中使用类似于变量名称的数据时，Windows PowerShell 将尝试替换匹配的值。如果使用单引号，则 Windows PowerShell 将不进行变量值替换。例如，尝试键入以下命令：

PS> "$Home\Desktop\PSHome.lnk"
C:\Documents and Settings\aka\Desktop\PSHome.lnk
PS> '$Home\Desktop\PSHome.lnk'
$Home\Desktop\PSHome.lnk

现在，我们有一个名为 $lnk 的变量，该变量中包含新的快捷方式引用。若要查看其成员，则可通过管道将其传递给 Get-Member。以下输出显示了需要用于完成快捷方式创建的成员：

PS> $lnk | Get-Member

TypeName: System.__ComObject#{f935dc23-1cf0-11d0-adb9-00c04fd58a0b}

Name MemberType Definition

---- ---------- ----------

...

Save Method void Save ()

...

TargetPath Property string TargetPath () {get} {set}

...

需要指定 TargetPath（Windows PowerShell 的应用程序文件夹），然后通过调用 Save 方法来保存快捷方式 $lnk。Windows PowerShell 应用程序文件夹路径存储在变量 $PSHome 中，因此可键入以下命令来实现此操作：

$lnk.TargetPath = $PSHome

$lnk.Save()

使用 Windows PowerShell 中的 Internet Explorer

使用 COM 可以自动启动许多应用程序，其中包括 Microsoft Office 系列应用程序和 Internet Explorer。Internet Explorer 演示了在处理基于 COM 的应用程序时涉及的一些典型技巧和问题。

通过指定 Internet Explorer ProgId (InternetExplorer.Application) 可以创建 Internet Explorer 实例：

$ie = New-Object -ComObject InternetExplorer.Application

此命令可启动 Internet Explorer，但该应用程序将不可见。如果键入 Get-Process，则可看到名为 iexplore 的进程正在运行。事实上，即使退出 Windows PowerShell，该进程仍将继续运行。必须重新启动计算机或使用类似于任务管理器之类的工具才可结束 iexplore 进程。

注意：

作为单独进程启动的 COM 对象通常称为 ActiveX 可执行文件，在它们启动时可能会显示用户界面窗口，但也可能不显示。如果创建了窗口，但该窗口不可见，例如 Internet Explorer，则焦点通常会移至 Windows 桌面，而您必须使该窗口可见才可与其进行交互。

如果键入 $ie | Get-Member，则可查看 Internet Explorer 的属性和方法。若要查看 Internet Explorer 窗口，请通过键入以下命令将 Visible 属性设置为 $true：

$ie.Visible = $true

随后，可以使用 Navigate 方法导航至特定的 Web 地址：

$ie.Navigate("http://www.microsoft.com/technet/scriptcenter/default.mspx")

使用 Internet Explorer 对象模型的其他成员，可以从网页中检索文本内容。以下命令将显示当前网页正文中的 HTML 文本：

$ie.Document.Body.InnerText

若要在 PowerShell 中关闭 Internet Explorer，请调用其 Quit() 方法：

$ie.Quit()

这将强制关闭 Internet Explorer。$ie 变量将不再包含有效引用，即使该引用仍为 COM 对象也是如此。若要尝试使用该引用，则将收到自动化错误：

PS> $ie | Get-Member
Get-Member : Exception retrieving the string representation for property "Appli
cation" : "The object invoked has disconnected from its clients. (Exception fro
m HRESULT: 0x80010108 (RPC_E_DISCONNECTED))"
At line:1 char:16
+ $ie | Get-Member <<<<

您可以使用诸如 $ie = $null 之类的命令来删除剩余的引用，也可通过键入以下命令完全删除该变量：

Remove-Variable ie
注意：

在删除对某一项的引用时，对于如何确定是退出还是继续运行 ActiveX 可执行文件没有通用标准。退出或继续运行应用程序取决于以下几种情况：该应用程序是否可见、已编辑的文档是否在其中运行，以及 Windows PowerShell 是否仍在运行。鉴于此原因，您应该对要在 Windows PowerShell 中使用的每个 ActiveX 可执行文件测试其终止行为。

获取有关 .NET Framework 包装的 COM 对象的警告

在某些情况下，COM 对象可能具有关联的 .NET Framework 运行时可调用包装（即 RCW），而这将由 New-Object 使用。由于 RCW 的行为可能与标准 COM 对象的行为有所不同，因此 New-Object 的 Strict 参数将发出有关 RCW 访问的警告。如果指定 Strict 参数，然后创建使用 RCW 的 COM 对象，则将收到一条警告消息：

PS> $xl = New-Object -ComObject Excel.Application -Strict
New-Object : The object written to the pipeline is an instance of the type "Mic
rosoft.Office.Interop.Excel.ApplicationClass" from the component's primary inte
rop assembly. If this type exposes different members than the IDispatch members
, scripts written to work with this object might not work if the primary intero
p assembly is not installed.
At line:1 char:17
+ $xl = New-Object  <<<< -ComObject Excel.Application -Strict

尽管已创建对象，但仍将警告您它不是标准的 COM 对象。


使用静态类和方法

并不是所有的 .NET Framework 类都可以使用 New-Object 来创建。例如，如果尝试使用 New-Object 创建 System.Environment 或 System.Math 对象，则将收到以下错误消息：

PS> New-Object System.Environment
New-Object : Constructor not found. Cannot find an appropriate constructor for
type System.Environment.
At line:1 char:11
+ New-Object  <<<< System.Environment
PS> New-Object System.Math
New-Object : Constructor not found. Cannot find an appropriate constructor for
type System.Math.
At line:1 char:11
+ New-Object  <<<< System.Math

之所以出现这些错误是因为无法从这些类中创建新的对象。这些类是不能更改状态的方法和属性的引用库。您无法创建这些类，只能使用他们。由于不能创建、销毁或更改这些类和方法，因此将这些类和方法称为静态类。为了清楚了解此部分内容，我们将提供使用静态类的示例。

使用 System.Environment 获取环境数据

通常，在 Windows PowerShell 中处理对象的第一步是使用 Get-Member 查找该对象包含的成员。使用静态类，过程可能稍有差异，这是因为实际类不是对象。

引用 System.Environment 静态类

通过使用方括号括住类名称，可以引用静态类。例如，可以通过在方括号中键入名称来引用 System.Environment。从而，就可显示一些泛型类型的信息：

PS> [System.Environment]

IsPublic IsSerial Name                                     BaseType
-------- -------- ----                                     --------
True     False    Environment                              System.Object
注意：

如上所述，在使用 New-Object 时，Windows PowerShell 将自动加上“System.”以便于键入名称。在使用位于方括号中的类型名称时也是如此，因此可以将 [System.Environment] 指定为 [Environment]。

System.Environment 类包含有关当前进程的工作环境的常规信息，在 Windows PowerShell 中工作时，工作环境为 powershell.exe。

如果尝试通过键入 [System.Environment] | Get-Member 来查看此类的详细信息，则对象类型将报告为 System.RuntimeType，而不是 System.Environment：

PS> [System.Environment] | Get-Member

   TypeName: System.RuntimeType

若要使用 Get-Member 查看静态成员，请指定 Static 参数：

PS> [System.Environment] | Get-Member -Static

   TypeName: System.Environment

Name                       MemberType Definition
----                       ---------- ----------
Equals                     Method     static System.Boolean Equals(Object ob...
Exit                       Method     static System.Void Exit(Int32 exitCode)
...
CommandLine                Property   static System.String CommandLine {get;}
CurrentDirectory           Property   static System.String CurrentDirectory ...
ExitCode                   Property   static System.Int32 ExitCode {get;set;}
HasShutdownStarted         Property   static System.Boolean HasShutdownStart...
MachineName                Property   static System.String MachineName {get;}
NewLine                    Property   static System.String NewLine {get;}
OSVersion                  Property   static System.OperatingSystem OSVersio...
ProcessorCount             Property   static System.Int32 ProcessorCount {get;}
StackTrace                 Property   static System.String StackTrace {get;}
SystemDirectory            Property   static System.String SystemDirectory {...
TickCount                  Property   static System.Int32 TickCount {get;}
UserDomainName             Property   static System.String UserDomainName {g...
UserInteractive            Property   static System.Boolean UserInteractive ...
UserName                   Property   static System.String UserName {get;}
Version                    Property   static System.Version Version {get;}
WorkingSet                 Property   static System.Int64 WorkingSet {get;}
TickCount                               ExitCode

现在，可以从 System.Environment 中选择要查看的属性。

显示 System.Environment 的静态属性

System.Environment 的属性也是静态的，因此必须采用与标准属性的指定方式不同的方式进行指定。我们使用 :: 来指示 Windows PowerShell 我们希望使用静态方法或属性。若要查看用于启动 Windows PowerShell 的命令，则可通过键入以下命令来检查 CommandLine 属性：

PS> [System.Environment]::Commandline
"C:\Program Files\Windows PowerShell\v1.0\powershell.exe"

若要检查操作系统版本，则可通过键入以下命令显示 OSVersion 属性：

PS> [System.Environment]::OSVersion

           Platform ServicePack         Version             VersionString
           -------- -----------         -------             -------------
            Win32NT Service Pack 2      5.1.2600.131072     Microsoft Window...

通过显示 HasShutdownStarted 属性，可以检查计算机是否正在关闭：

PS> [System.Environment]::HasShutdownStarted
False

使用 System.Math 进行数学运算

对于进行某些数学运算，System.Math 静态类非常有用。System.Math 的重要成员绝大部分为方法，使用 Get-Member 可以显示这些方法。

注意：

System.Math 中有几种方法同名，但通过它们使用的参数类型可进行区分。

键入以下命令可列出 System.Math 类的方法。

PS> [System.Math] | Get-Member -Static -MemberType Methods

   TypeName: System.Math

Name            MemberType Definition
----            ---------- ----------
Abs             Method     static System.Single Abs(Single value), static Sy...
Acos            Method     static System.Double Acos(Double d)
Asin            Method     static System.Double Asin(Double d)
Atan            Method     static System.Double Atan(Double d)
Atan2           Method     static System.Double Atan2(Double y, Double x)
BigMul          Method     static System.Int64 BigMul(Int32 a, Int32 b)
Ceiling         Method     static System.Double Ceiling(Double a), static Sy...
Cos             Method     static System.Double Cos(Double d)
Cosh            Method     static System.Double Cosh(Double value)
DivRem          Method     static System.Int32 DivRem(Int32 a, Int32 b, Int3...
Equals          Method     static System.Boolean Equals(Object objA, Object ...
Exp             Method     static System.Double Exp(Double d)
Floor           Method     static System.Double Floor(Double d), static Syst...
IEEERemainder   Method     static System.Double IEEERemainder(Double x, Doub...
Log             Method     static System.Double Log(Double d), static System...
Log10           Method     static System.Double Log10(Double d)
Max             Method     static System.SByte Max(SByte val1, SByte val2), ...
Min             Method     static System.SByte Min(SByte val1, SByte val2), ...
Pow             Method     static System.Double Pow(Double x, Double y)
ReferenceEquals Method     static System.Boolean ReferenceEquals(Object objA...
Round           Method     static System.Double Round(Double a), static Syst...
Sign            Method     static System.Int32 Sign(SByte value), static Sys...
Sin             Method     static System.Double Sin(Double a)
Sinh            Method     static System.Double Sinh(Double value)
Sqrt            Method     static System.Double Sqrt(Double d)
Tan             Method     static System.Double Tan(Double a)
Tanh            Method     static System.Double Tanh(Double value)
Truncate        Method     static System.Decimal Truncate(Decimal d), static...

这将显示几种数学方法。此处的命令列表演示了一些常用方法的工作原理：

PS> [System.Math]::Sqrt(9)
3
PS> [System.Math]::Pow(2,3)
8
PS> [System.Math]::Floor(3.3)
3
PS> [System.Math]::Floor(-3.3)
-4
PS> [System.Math]::Ceiling(3.3)
4
PS> [System.Math]::Ceiling(-3.3)
-3
PS> [System.Math]::Max(2,7)
7
PS> [System.Math]::Min(2,7)
2
PS> [System.Math]::Truncate(9.3)
9
PS> [System.Math]::Truncate(-9.3)
-9


从管道中删除对象 (Where-Object)

在 Windows PowerShell 中，与所需的对象数量相比，通常生成的对象数量以及要传递给管道的对象数量要多得多。可以使用 Format cmdlet 来指定要显示的特定对象的属性，但这并不能帮您解决从显示中删除整个对象的问题。您可能希望在管道结束之前筛选对象，因此只能在最初生成的对象子集上执行操作。

利用 Windows PowerShell 中所含的 Where-Object cmdlet，可以测试管道中的所有对象，并仅将符合特定测试条件的对象通过管道进行传递。没有通过测试的对象将从管道中删除。可以将测试条件设置为 Where-Object FilterScript 参数的值。

使用 Where-Object 执行简单测试

FilterScript 的值为计算结果为 true 或 false 的脚本块（由大括号 {} 括起来的一个或多个 Windows PowerShell 命令）。这些脚本块非常简单，但创建这些脚本块则需要了解 Windows PowerShell 的另一概念，即，比较运算符。比较运算符可比较该运算符两侧的项。比较运算符以“-”字符开头，后跟名称。基本的比较运算符几乎对所有类型的对象适用。更高级的比较运算符只适用于文本或数组。

注意：

默认情况下，在处理文本时，Windows PowerShell 比较运算符不区分大小写。

出于分析方面的考虑，<、> 和 = 等符号不能用作比较运算符。因此，比较运算符改由字母组成。基本的比较运算符如下表所示：

比较运算符 | 含义 | 示例（返回 True）
-eq | 等于 | 1 -eq 1
-ne | 不等于 | 1 -ne 2
-lt | 小于 | 1 -lt 2
-le | 小于或等于 | 1 -le 2
-gt | 大于 | 2 -gt 1
-ge | 大于或等于 | 2 -ge 1
-like | 类似（用于文本的通配符比较） | "file.doc" -like "f*.do?"
-notlike | 不类似（用于文本的通配符比较） | "file.doc" -notlike "p*.doc"
-contains | 包含 | 1,2,3 -contains 1
-notcontains | 不包含 | 1,2,3 -notcontains 4

Where-Object 脚本块使用特殊的变量“$_”来引用管道中的当前对象。此处的示例将演示该变量的工作原理。如果存在一个数字列表，而您只想返回小于 3 的数字，则可通过键入以下命令来使用 Where-Object 筛选数字：

PS> 1,2,3,4 | Where-Object -FilterScript {$_ -lt 3}
1
2

根据对象属性进行筛选

由于 $_ 引用当前的管道对象，因此可访问其属性以进行测试。

作为示例，我们可以查看 WMI 中的 Win32_SystemDriver 类。特定系统中可能存在几百个系统驱动程序，而您可能只对某一组特定的系统驱动程序感兴趣，例如。当前正在运行的那些系统驱动程序。如果使用 Get-Member 查看 Win32_SystemDriver 成员 (Get-WmiObject -Class Win32_SystemDriver | Get-Member -MemberType Property)，则将看到的相关属性是 State，并且在驱动程序运行时，它的值为“Running”。键入以下命令可以只选择正在运行的系统驱动程序以进行筛选操作：

Get-WmiObject -Class Win32_SystemDriver | Where-Object -FilterScript {$_.State -eq "Running"}

这仍会生成一个很长的列表。您可能还希望通过测试 StartMode 值来进行筛选，以便只选择设置为自动启动的驱动程序：

PS> Get-WmiObject -Class Win32_SystemDriver | Where-Object -FilterScript {$_.State -eq "Running"} | Where-Object -FilterScript {$_.StartMode -eq "Auto"}

DisplayName : RAS Asynchronous Media Driver
Name        : AsyncMac
State       : Running
Status      : OK
Started     : True

DisplayName : Audio Stub Driver
Name        : audstub
State       : Running
Status      : OK
Started     : True

由于我们知道哪些驱动程序正在运行，因此这样将产生许多我们不再需要的信息。实际上，此时我们可能需要的信息仅仅是名称和显示名称。以下命令只包括这两个属性，从而得到更简单的输出：

PS> Get-WmiObject -Class Win32_SystemDriver | Where-Object -FilterScript {$_.State -eq "Running"} | Where-Object -FilterScript {$_.StartMode -eq "Manual"} | Format-Table -Property Name,DisplayName

Name                                    DisplayName
----                                    -----------
AsyncMac                                RAS Asynchronous Media Driver
Fdc                                     Floppy Disk Controller Driver
Flpydisk                                Floppy Disk Driver
Gpc                                     Generic Packet Classifier
IpNat                                   IP Network Address Translator
mouhid                                  Mouse HID Driver
MRxDAV                                  WebDav Client Redirector
mssmbios                                Microsoft System Management BIOS Driver

上述命令中存在两个 Where-Object 元素，而它们可通过使用 -and 逻辑运算符以单个 Where-Object 元素的形式表示出来，如下所示：

Get-WmiObject -Class Win32_SystemDriver | Where-Object -FilterScript { ($_.State -eq "Running") -and ($_.StartMode -eq "Manual") } | Format-Table -Property Name,DisplayName

标准的逻辑运算符如下表所示：

逻辑运算符 | 含义 | 示例（返回 True）
-and | 逻辑与；两边都为 True 时值为 True | (1 -eq 1) -and (2 -eq 2)
-or | 逻辑或；其中一边为 True 时值为 True | (1 -eq 1) -or (1 -eq 2)
-not | 逻辑非；对 True 和 False 取反 | -not (1 -eq 2)
! | 逻辑非；对 True 和 False 取反 | !(1 -eq 2)


对多个对象重复执行一项任务 (ForEach-Object)

ForEach-Object cmdlet 可对当前管道对象使用脚本块和 $_ 描述符，让您能够对该管道中的每个对象运行命令。这可用于执行某些复杂的任务。

对于以下情况这将非常有用：对数据进行操作以提高数据的实用性。例如，WMI 中的 Win32_LogicalDisk 类可用于返回每个本地磁盘的可用空间信息。数据是以字节形式返回的，因而可读性非常差：

PS> Get-WmiObject -Class Win32_LogicalDisk

DeviceID     : C:
DriveType    : 3
ProviderName :
FreeSpace    : 50665070592
Size         : 203912880128
VolumeName   : Local Disk

将每个值两次与 1024 相除，从而将 FreeSpace 值转换为兆字节。首次相除之后，数据是以千字节形式表示的，第二次相除之后，数据就以兆字节形式表示了。通过键入以下命令可在 ForEach-Object 脚本块中实现该转换：

Get-WmiObject -Class Win32_LogicalDisk | ForEach-Object -Process {($_.FreeSpace)/1024.0/1024.0}
48318.01171875

但是，现在输出的数据没有任何关联的标签。由于此类 WMI 属性是只读的，因此无法直接转换 FreeSpace。如果键入以下命令：

Get-WmiObject -Class Win32_LogicalDisk | ForEach-Object -Process {$_.FreeSpace = ($_.FreeSpace)/1024.0/1024.0}

则将收到错误消息：

"FreeSpace" is a ReadOnly property.
At line:1 char:70
+ Get-WmiObject -Class Win32_LogicalDisk | ForEach-Object -Process {$_.F <<<< r
eeSpace = ($_.FreeSpace)/1024.0/1024.0}

您可以使用一些高级技巧来重新组织数据，但更简便的方法是使用 Select-Object 创建新对象。


选择对象的各个部分 (Select-Object)

可以使用 Select-Object cmdlet 创建新的自定义 Windows PowerShell 对象，这些对象包含的属性是从用于创建它们的对象中选择的。键入以下命令可创建新对象，该对象仅包含 Win32_LogicalDisk WMI 类的 Name 和 FreeSpace 属性：

PS> Get-WmiObject -Class Win32_LogicalDisk | Select-Object -Property Name,FreeSpace

Name                                    FreeSpace
----                                    ---------
C:                                      50664845312

在发出该命令后，您将无法查看数据的类型，但如果在执行 Select-Object 命令后通过管道将结果传递给 Get-Member，则可发现已经存在一个新的对象类型 PSCustomObject：

PS> Get-WmiObject -Class Win32_LogicalDisk | Select-Object -Property Name,FreeSpace| Get-Member

   TypeName: System.Management.Automation.PSCustomObject

Name        MemberType   Definition
----        ----------   ----------
Equals      Method       System.Boolean Equals(Object obj)
GetHashCode Method       System.Int32 GetHashCode()
GetType     Method       System.Type GetType()
ToString    Method       System.String ToString()
FreeSpace   NoteProperty  FreeSpace=...
Name        NoteProperty System.String Name=C:

Select-Object 具有很多用途。其中之一就是复制可随后进行修改的数据。现在，我们可以解决上一节中遇到的问题了。我们可以更新最新创建的对象中的 FreeSpace 的值，而且输出将包括描述性标签：

Get-WmiObject -Class Win32_LogicalDisk | Select-Object -Property Name,FreeSpace | ForEach-Object -Process {$_.FreeSpace = ($_.FreeSpace)/1024.0/1024.0; $_}
Name                                                                  FreeSpace
----                                                                  ---------
C:                                                                48317.7265625


对对象进行排序

可以使用 Sort-Object cmdlet 来组织显示的数据，从而更轻松地对这些数据进行扫描。Sort-Object 可获取排序所依据的一个或多个属性的名称，并返回按这些属性的值排序的数据。

以 Win32_SystemDriver 实例列表的问题为例。如果希望先按 State 排序，然后再按 Name 排序，则可通过键入以下命令来实现：

Get-WmiObject -Class Win32_SystemDriver | Sort-Object -Property State,Name | Format-Table -Property Name,State,Started,DisplayName -AutoSize -Wrap

尽管这会生成很长的数据显示，但还是可看出具有相同状态的项组合在一起：

Name           State   Started DisplayName
----           -----   ------- -----------
ACPI           Running    True Microsoft ACPI Driver
AFD            Running    True AFD
AmdK7          Running    True AMD K7 Processor Driver
AsyncMac       Running    True RAS Asynchronous Media Driver
...
Abiosdsk       Stopped   False Abiosdsk
ACPIEC         Stopped   False ACPIEC
aec            Stopped   False Microsoft Kernel Acoustic Echo Canceller
...

还可通过指定 Descending 参数以倒序顺序对对象进行排序。这将颠倒排序的顺序，因此将按倒序的字母顺序排序名称，按降序的顺序排序数字。

PS> Get-WmiObject -Class Win32_SystemDriver | Sort-Object -Property State,Name -Descending | Format-Table -Property Name,State,Started,DisplayName -AutoSize -Wrap

Name           State   Started DisplayName
----           -----   ------- -----------
WS2IFSL        Stopped   False Windows Socket 2.0 Non-IFS Service Provider Supp
                               ort Environment
wceusbsh       Stopped   False Windows CE USB Serial Host Driver...
...
wdmaud         Running    True Microsoft WINMM WDM Audio Compatibility Driver
Wanarp         Running    True Remote Access IP ARP Driver
...


使用变量存储对象

Windows PowerShell 可以使用对象。利用 Windows PowerShell，您可创建变量（本质上命名为对象）以保留输出以备后用。如果您已习惯于在其他 shell 中处理变量，请谨记，Windows PowerShell 变量是对象，而非文本。

变量始终可通过首字符 $ 指定，并且在变量名称中可以包含所有的字母数字字符或下划线。

创建变量

通过键入有效的变量名称可以创建变量：

PS> $loc
PS>

由于 $loc 没有值，因此将不会返回任何结果。您可以创建变量，并可同时向其赋值。Windows PowerShell 只能创建目前尚不存在的变量，否则，它会将指定的值赋予已存在的变量。若要在变量 $loc 中存储当前位置，请键入：

$loc = Get-Location

由于输出已发送到 $loc，因此在键入此命令后将不会显示任何输出。在 Windows PowerShell 中，显示的输出实际上是附加功能，因为未定向的数据始终会发送到屏幕上。键入 $loc 将显示当前位置：

PS> $loc

Path
----
C:\temp

可以使用 Get-Member 来显示有关变量内容的信息。通过管道将 $loc 传递给 Get-Member，输出会表明它是 PathInfo 对象，这类似于 Get-Location 的输出：

PS> $loc | Get-Member -MemberType Property

   TypeName: System.Management.Automation.PathInfo

Name         MemberType Definition
----         ---------- ----------
Drive        Property   System.Management.Automation.PSDriveInfo Drive {get;}
Path         Property   System.String Path {get;}
Provider     Property   System.Management.Automation.ProviderInfo Provider {...
ProviderPath Property   System.String ProviderPath {get;}

对变量进行操作

Windows PowerShell 提供了几条用于对变量进行操作的命令。通过键入以下命令可以查看极具可读性的完整列表：

Get-Command -Noun Variable | Format-Table -Property Name,Definition -AutoSize -Wrap

除了当前 Windows PowerShell 会话中创建的变量之外，还存在几个系统定义的变量。可以使用 Remove-Variable cmdlet 清除所有不受 Windows PowerShell 控制的变量。键入以下命令可清除所有变量：

Remove-Variable -Name * -Force -ErrorAction SilentlyContinue

这将生成确认提示，如下所示：

Confirm
Are you sure you want to perform this action?
Performing operation "Remove Variable" on Target "Name: Error".
[Y] Yes  [A] Yes to All  [N] No  [L] No to All  [S] Suspend  [?] Help
(default is "Y"):A

随后，如果运行 Get-Variable cmdlet，则将看到剩余的 Windows PowerShell 变量。由于还存在 Windows PowerShell 变量驱动器，因此也可通过键入以下命令来显示所有的 Windows PowerShell 变量：

Get-ChildItem variable:

使用 Cmd.exe 变量

尽管 Windows PowerShell 不是 Cmd.exe，但它也运行于命令 shell 环境中，并且可以在 Windows 的任意环境中使用相同的可用变量。这些变量是通过名为 env: 的驱动器公开的。键入以下命令可查看这些变量：

Get-ChildItem env:

虽然标准变量 cmdlet 不适用于 env: 变量，但仍可通过指定 env: 前缀来使用这些变量。例如，若要查看操作系统的根目录，则可通过键入以下命令来使用 Windows PowerShell 中的命令 shell %SystemRoot% 变量：

PS> $env:SystemRoot
C:\WINDOWS

也可创建和修改 Windows PowerShell 中的环境变量。从 Windows PowerShell 访问的环境变量符合 Windows 之外的环境变量标准规则。


使用 Windows PowerShell 执行管理任务

Windows PowerShell 的基本目标是使您能够以交互方式或通过脚本更好、更容易地对系统进行管理控制。本章综述了在用 Windows PowerShell 管理 Windows 系统时出现的很多特定问题的解决方案。虽然我们尚未在《Windows PowerShell 用户指南》中介绍脚本或函数，但随后可以在脚本中或作为函数使用这些解决方案。在提供的示例中，函数将作为解决问题的解决方案的一部分。

在整个解决方案说明中，您将看到使用特定 cmdlet、常规 Get-WmiObject cmdlet、甚至还有作为 Windows 和 .NET Framework 基础结构组成部分的外部工具的解决方案的混合体。使用外部工具是 Windows PowerShell 的长期设计意图的一部分。甚至随着系统不断发展，用户将继续遇到可用工具集无法完成所有任务的情况。Windows PowerShell 不鼓励仅仅依赖 cmdlet 实现，而是尝试支持将来自所有可能的替代方案的解决方案集成在一起。


使用进程 Cmdlet 管理进程

可以使用 Windows PowerShell 中的进程 cmdlet 来管理 Windows PowerShell 中的本地和远程进程。

获取进程 (Get-Process)

若要获取在本地计算机上运行的进程，请运行 Get-Process（不带参数）。

可以通过指定进程名称或进程 ID 来获取特定进程。以下命令可获取 Idle 进程：

PS> Get-Process -id 0
Handles  NPM(K)    PM(K)      WS(K) VM(M)   CPU(s)     Id ProcessName
-------  ------    -----      ----- -----   ------     -- -----------
      0       0        0         16     0               0 Idle

虽然在某些情况下 cmdlet 不返回任何数据是正常的，但按其 ProcessId 指定进程时，如果 Get-Process 找不到匹配项，它将生成错误，因为它的常见用途是检索已知的正在运行的进程。如果不存在具有该 ID 的进程，则很可能是 ID 不正确，或者感兴趣的进程已经退出：

PS> Get-Process -Id 99
Get-Process : No process with process ID 99 was found.
At line:1 char:12
+ Get-Process  <<<< -Id 99

可以使用 Get-Process cmdlet 的 Name 参数基于进程名称指定进程的子集。Name 参数的取值可以是逗号分隔的列表中的多个名称，它支持使用通配符，因而您可以键入名称模式。

例如，以下命令将获取名称以“ex”开头的进程。

PS> Get-Process -Name ex*
Handles  NPM(K)    PM(K)      WS(K) VM(M)   CPU(s)     Id ProcessName
-------  ------    -----      ----- -----   ------     -- -----------
    234       7     5572      12484   134     2.98   1684 EXCEL
    555      15    34500      12384   134   105.25    728 explorer

由于 .NET System.Diagnostics.Process 类是 Windows PowerShell 进程的基础，因此它遵从 System.Diagnostics.Process 使用的某些约定。其中一个约定是，可执行文件的进程名称永远不包括可执行文件名末尾的“.exe”。

Get-Process 还接受 Name 参数的多个值。

PS> Get-Process -Name exp*,power*
Handles  NPM(K)    PM(K)      WS(K) VM(M)   CPU(s)     Id ProcessName
-------  ------    -----      ----- -----   ------     -- -----------
    540      15    35172      48148   141    88.44    408 explorer
    605       9    30668      29800   155     7.11   3052 powershell

可以使用 Get-Process 的 ComputerName 参数获取远程计算机上的进程。例如，以下命令可获取本地计算机（以“localhost”表示）和两台远程计算机上的 PowerShell 进程。

PS> Get-Process -Name PowerShell -ComputerName localhost, Server01, Server02
Handles  NPM(K)    PM(K)      WS(K) VM(M)   CPU(s)     Id ProcessName
-------  ------    -----      ----- -----   ------     -- -----------
    258       8    29772      38636   130            3700 powershell
    398      24    75988      76800   572            5816 powershell
    605       9    30668      29800   155     7.11   3052 powershell

计算机名称在此显示中不明显，但它们存储在 Get-Process 返回的进程对象的 MachineName 属性中。以下命令使用 Format-Table cmdlet 来显示进程对象的进程 ID、ProcessName 和 MachineName (ComputerName) 属性。

PS> Get-Process -Name PowerShell -ComputerName localhost, Server01, Server01 | Format-Table -Property ID, ProcessName, MachineName
  Id ProcessName MachineName
  -- ----------- -----------
3700 powershell  Server01
3052 powershell  Server02
5816 powershell  localhost

下面这个更为复杂的命令会将 MachineName 属性添加到标准 Get-Process 显示中。倒引号 (`) (ASCII 96) 为 Windows PowerShell 继续符。

get-process powershell -computername localhost, Server01, Server02 | format-table -property Handles, `
                    @{Label="NPM(K)";Expression={[int]($_.NPM/1024)}}, `
                    @{Label="PM(K)";Expression={[int]($_.PM/1024)}}, `
                    @{Label="WS(K)";Expression={[int]($_.WS/1024)}}, `
                    @{Label="VM(M)";Expression={[int]($_.VM/1MB)}}, `
                    @{Label="CPU(s)";Expression={if ($_.CPU -ne $()`
                    {$_.CPU.ToString("N")}}}, `
                    Id, ProcessName, MachineName -auto

Handles  NPM(K)  PM(K) WS(K) VM(M) CPU(s)  Id ProcessName  MachineName
-------  ------  ----- ----- ----- ------  -- -----------  -----------
    258       8  29772 38636   130         3700 powershell Server01
    398      24  75988 76800   572         5816 powershell localhost
    605       9  30668 29800   155 7.11    3052 powershell Server02

停止进程 (Stop-Process)

Windows PowerShell 可让您灵活地列出进程，但如何停止进程呢？

Stop-Process cmdlet 使用 Name 或 Id 来指定希望停止的进程。是否能够停止进程取决于您的权限。某些进程不能停止。例如，如果试图停止空闲进程，则将获得错误：

PS> Stop-Process -Name Idle
Stop-Process : Process 'Idle (0)' cannot be stopped due to the following error:
 Access is denied
At line:1 char:13
+ Stop-Process  <<<< -Name Idle

还可以使用 Confirm 参数强行进行提示。如果指定进程名称时使用通配符，则此参数特别有用，因为您可能意外匹配一些不想停止的进程：

PS> Stop-Process -Name t*,e* -Confirm
Confirm
Are you sure you want to perform this action?
Performing operation "Stop-Process" on Target "explorer (408)".
[Y] Yes  [A] Yes to All  [N] No  [L] No to All  [S] Suspend  [?] Help
(default is "Y"):n
Confirm
Are you sure you want to perform this action?
Performing operation "Stop-Process" on Target "taskmgr (4072)".
[Y] Yes  [A] Yes to All  [N] No  [L] No to All  [S] Suspend  [?] Help
(default is "Y"):n

通过使用某些对象筛选 cmdlet，可以进行复杂的进程操作。由于进程对象有 Responding 属性，当进程不再响应时该属性将为 True，因此可以用以下命令停止所有无响应的应用程序：

Get-Process | Where-Object -FilterScript {$_.Responding -eq $false} | Stop-Process

您可以在其他情况下使用相同的方法。例如，假设当用户启动另一个应用程序时辅助的通知区域应用程序自动运行。您可能发现这在终端服务会话中无法正常进行，但仍想使它在物理计算机控制台上运行的会话中持续进行。连接到物理计算机桌面的会话的会话 ID 始终是 0，因此通过使用 Where-Object 和进程 SessionId，可以停止其他会话中的所有进程实例：

Get-Process -Name BadApp | Where-Object -FilterScript {$_.SessionId -neq 0} | Stop-Process

Stop-Process cmdlet 没有 ComputerName 参数。因此，若要在远程计算机上运行停止进程命令，需要使用 Invoke-Command cmdlet。例如，若要停止 Server01 远程计算机上的 PowerShell 进程，请键入：

Invoke-Command -ComputerName Server01 {Stop-Process Powershell}

停止所有其他 Windows PowerShell 会话

可能偶尔需要能够停止除了当前会话以外所有正在运行的 Windows PowerShell 会话。如果会话正在使用太多资源，或者不可访问（它可能正在远程运行，或者在另一个桌面会话中），则可能无法直接停止它。但是，如果试图停止所有正在运行的会话，则可能终止当前会话。

每个 Windows PowerShell 会话都有环境变量 PID，其中包含 Windows PowerShell 进程的 ID。可以对照每个会话的 ID 检查 $PID 并仅终止具有不同 ID 的 Windows PowerShell 会话。以下管道命令执行此操作，并返回已终止会话的列表（由于使用了 PassThru 参数）：

PS> Get-Process -Name powershell | Where-Object -FilterScript {$_.Id -ne $PID} | Stop-Process -
PassThru
Handles  NPM(K)    PM(K)      WS(K) VM(M)   CPU(s)     Id ProcessName
-------  ------    -----      ----- -----   ------     -- -----------
    334       9    23348      29136   143     1.03    388 powershell
    304       9    23152      29040   143     1.03    632 powershell
    302       9    20916      26804   143     1.03   1116 powershell
    335       9    25656      31412   143     1.09   3452 powershell
    303       9    23156      29044   143     1.05   3608 powershell
    287       9    21044      26928   143     1.02   3672 powershell

启动、调试和等待进程

Windows PowerShell 还附带了一些 cmdlet，用于启动（或重新启动）、调试进程以及在运行命令之前等待进程完成。有关这些 cmdlet 的信息，请参阅每个 cmdlet 的 cmdlet 帮助主题。

另请参阅

  • Get-Process
  • Stop-Process
  • Start-Process
  • Wait-Process
  • Debug-Process
  • Invoke-Command


管理服务

共有八个核心服务 cmdlet，它们是为众多的服务任务设计的。我们的讨论内容将只限于列出和更改服务运行状态，但您可以使用 Get-Help *-Service 获取服务 cmdlet 的列表，还可使用 Get-Help <Cmdlet 名称>（例如 Get-Help New-Service）查找有关每个服务 cmdlet 的信息。

获取服务

可以使用 Get-Service cmdlet 获取本地或远程计算机上的服务。与 Get-Process 相同，使用 Get-Service 命令（不带参数）可以返回所有服务。可以按名称筛选，甚至使用星号通配符：

PS> Get-Service -Name se*
Status   Name               DisplayName
------   ----               -----------
Running  seclogon           Secondary Logon
Running  SENS               System Event Notification
Stopped  ServiceLayer       ServiceLayer

由于服务的真实名称是什么并非始终是很明显的，因此您可能发现需要按显示名查找服务。可以按具体名称、使用通配符或使用显示名列表来执行该操作：

PS> Get-Service -DisplayName se*
Status   Name               DisplayName
------   ----               -----------
Running  lanmanserver       Server
Running  SamSs              Security Accounts Manager
Running  seclogon           Secondary Logon
Stopped  ServiceLayer       ServiceLayer
Running  wscsvc             Security Center
PS> Get-Service -DisplayName ServiceLayer,Server
Status   Name               DisplayName
------   ----               -----------
Running  lanmanserver       Server
Stopped  ServiceLayer       ServiceLayer

可以使用 Get-Service cmdlet 的 ComputerName 参数获取远程计算机上的服务。ComputerName 参数接受多个值和通配符，因此您可使用单个命令获取多台计算机上的服务。例如，以下命令可以获取 Server01 远程计算机上的服务。

Get-Service -ComputerName Server01

获取所需服务和依赖服务

Get-Service cmdlet 有两个参数在服务管理中非常有用。DependentServices 参数可获取依赖于某个服务的服务。RequiredServices 参数可获取此服务所依赖的服务。

这些参数只能显示 Get-Service 返回的 System.ServiceProcess.ServiceController 对象的 DependentServices 和 ServicesDependedOn（别名=RequiredServices）属性的值，但它们简化了命令，使获取此信息变得简单得多。

以下命令会获取 LanmanWorkstation 服务所需的服务。

PS> Get-Service -Name LanmanWorkstation -RequiredServices
Status   Name               DisplayName
------   ----               -----------
Running  MRxSmb20           SMB 2.0 MiniRedirector
Running  bowser             Bowser
Running  MRxSmb10           SMB 1.x MiniRedirector
Running  NSI                Network Store Interface Service

以下命令会获取需要 LanmanWorkstation 服务的服务。

PS> Get-Service -Name LanmanWorkstation -DependentServices
Status   Name               DisplayName
------   ----               -----------
Running  SessionEnv         Terminal Services Configuration
Running  Netlogon           Netlogon
Stopped  Browser            Computer Browser
Running  BITS               Background Intelligent Transfer Ser...

您甚至可以获取具有依赖关系的所有服务。以下命令会执行此操作，然后使用 Format-Table cmdlet 显示计算机上的服务的 Status、Name、RequiredServices 和 DependentServices 属性。

Get-Service -Name * | where {$_.RequiredServices -or $_.DependentServices} | Format-Table -Property Status, Name, RequiredServices, DependentServices -auto

停止、启动、挂起和重新启动服务

这些服务 cmdlet 都有相同的常规形式。这些服务可以按照公用名或显示名称指定，其取值可以是列表和通配符。若要停止后台打印程序，请使用：

Stop-Service -Name spooler

若要在后台打印程序停止之后启动它，请使用：

Start-Service -Name spooler

若要挂起后台打印程序，请使用：

Suspend-Service -Name spooler

Restart-Service cmdlet 的工作方式与其他服务 cmdlet 相同，但我们将介绍它的一些更复杂的示例。在最简单的使用中，可以指定服务的名称：

PS> Restart-Service -Name spooler
WARNING: Waiting for service 'Print Spooler (Spooler)' to finish starting...
WARNING: Waiting for service 'Print Spooler (Spooler)' to finish starting...
PS>

您将注意到，系统会显示有关后台打印程序正在启动的重复警告消息。在执行需要占用一定时间的服务操作时，Windows PowerShell 将通知您它仍在尝试执行该任务。

如果要重新启动多个服务，可以先获得服务列表，并对它们进行筛选，然后执行重新启动：

PS> Get-Service | Where-Object -FilterScript {$_.CanStop} | Restart-Service
WARNING: Waiting for service 'Computer Browser (Browser)' to finish stopping...
WARNING: Waiting for service 'Computer Browser (Browser)' to finish stopping...
Restart-Service : Cannot stop service 'Logical Disk Manager (dmserver)' because
 it has dependent services. It can only be stopped if the Force flag is set.
At line:1 char:57
+ Get-Service | Where-Object -FilterScript {$_.CanStop} | Restart-Service <<<<
WARNING: Waiting for service 'Print Spooler (Spooler)' to finish starting...
WARNING: Waiting for service 'Print Spooler (Spooler)' to finish starting...

这些服务 cmdlet 没有 ComputerName 参数，但可以使用 Invoke-Command cmdlet 在远程计算机上运行它们。例如，以下命令可在 Server01 远程计算机上重新启动后台打印程序服务。

Invoke-Command -ComputerName Server01 {Restart-Service Spooler}

设置服务属性

Set-Service cmdlet 更改本地计算机或远程计算机上的服务的属性。由于服务状态是一个属性，因此可以使用此 cmdlet 来启动、停止和挂起服务。Set-Service cmdlet 还具有 StartupType 参数，可用于更改服务启动类型。

若要在 Windows Vista 以及 Windows 的更高版本上使用 Set-Service，请使用“以管理员身份运行”选项打开 Windows PowerShell。

有关详细信息，请参阅 Set-Service

另请参阅

  • Get-Service
  • Set-Service
  • Restart-Service
  • Suspend-Service


收集有关计算机的信息

Get-WmiObject 是用于执行常规系统管理任务的最重要的 cmdlet。所有关键的子系统设置都是通过 WMI 公开的。此外，WMI 将数据视为有一个或多个项目的集合中的对象。由于 Windows PowerShell 还能处理对象，并且它的管道允许您以相同方式对待单个或多个对象，因此，通用 WMI 访问可让您用非常少的工作量执行一些高级任务。

以下示例演示如何通过对任意计算机使用 Get-WmiObject 来收集特定信息。我们使用表示本地计算机的点值 (.) 来指定 ComputerName 参数。您可以指定与可以通过 WMI 访问的任何计算机关联的名称或 IP 地址。若要检索有关本地计算机的信息，可以省略 -ComputerName.

列出桌面设置

我们首先介绍用于收集本地计算机的桌面相关信息的命令。

Get-WmiObject -Class Win32_Desktop -ComputerName .

此命令将返回所有桌面的信息，无论它们是否正在使用。

注意：

某些 WMI 类返回的信息可能非常详细，并且通常包含有关 WMI 类的元数据。由于这些元数据属性的名称大多数都以双下划线开头，因此可以使用 Select-Object 筛选这些属性。请使用 [a-z]* 作为 Property 值仅指定以字母字符开头的属性。例如：

Get-WmiObject -Class Win32_Desktop -ComputerName . | Select-Object -Property [a-z]*

若要筛选元数据，请使用管道运算符 (|) 将 Get-WmiObject 命令的结果发送到 Select-Object -Property [a-z]*。

列出 BIOS 信息

WMI Win32_BIOS 类可以返回有关本地计算机系统 BIOS 的相当精简和完整的信息：

Get-WmiObject -Class Win32_BIOS -ComputerName .

列出处理器信息

可以使用 WMI 的 Win32_Processor 类检索常规处理器信息，但还可能需要筛选这些信息：

Get-WmiObject -Class Win32_Processor -ComputerName . | Select-Object -Property [a-z]*

若要获取处理器系列的一般说明字符串，只需返回 Win32_ComputerSystem SystemType 属性：

PS> Get-WmiObject -Class Win32_ComputerSystem -ComputerName . | Select-Object -Property SystemType
SystemType
----------
X86-based PC

列出计算机制造商和型号

还可从 Win32_ComputerSystem 获取计算机型号信息。标准的显示输出不需要进行任何筛选，即可提供 OEM 数据：

PS> Get-WmiObject -Class Win32_ComputerSystem
Domain              : WORKGROUP
Manufacturer        : Compaq Presario 06
Model               : DA243A-ABA 6415cl NA910
Name                : MyPC
PrimaryOwnerName    : Jane Doe
TotalPhysicalMemory : 804765696

像这样的命令输出（直接从某些硬件返回信息）实际上只是您拥有的数据。某些信息未被硬件制造商正确配置，因此可能不可用。

列出已安装的修补程序

可以使用 Win32_QuickFixEngineering 列出已安装的所有修补程序：

Get-WmiObject -Class Win32_QuickFixEngineering -ComputerName .

该类返回修补程序的列表，如下所示：

Description         : Update for Windows XP (KB910437)
FixComments         : Update
HotFixID            : KB910437
Install Date        :
InstalledBy         : Administrator
InstalledOn         : 12/16/2005
Name                :
ServicePackInEffect : SP3
Status              :

若要得到更简洁的输出，可能需要排除某些属性。虽然可以使用 Get-WmiObject Property 参数只选择 HotFixID，但这样做实际上将返回更多信息，因为默认情况下将显示所有元数据：

PS> Get-WmiObject -Class Win32_QuickFixEngineering -ComputerName . -Property HotFixId
HotFixID         : KB910437
__GENUS          : 2
__CLASS          : Win32_QuickFixEngineering
__SUPERCLASS     :
__DYNASTY        :
__RELPATH        :
__PROPERTY_COUNT : 1
__DERIVATION     : {}
__SERVER         :
__NAMESPACE      :
__PATH           :

由于 Get-WmiObject 中的 Property 参数限制从 WMI 类实例返回的属性，而不限制返回到 Windows PowerShell 的对象，因此还会返回其他数据。若要减少输出，请使用 Select-Object：

PS> Get-WmiObject -Class Win32_QuickFixEngineering -ComputerName . -Property Hot
FixId | Select-Object -Property HotFixId
HotFixId
--------
KB910437

列出操作系统版本信息

Win32_OperatingSystem 类属性包括版本和 Service Pack 信息。可以只明确选择这些属性，以便从 Win32_OperatingSystem 获取版本信息摘要：

Get-WmiObject -Class Win32_OperatingSystem -ComputerName . | Select-Object -Property BuildNumber,BuildType,OSType,ServicePackMajorVersion,ServicePackMinorVersion

还可以在 Select-Object Property 参数中使用通配符。因为所有以 Build 或 ServicePack 开头的属性在这里都是重要的，所以可以将该命令缩短为以下形式：

PS> Get-WmiObject -Class Win32_OperatingSystem -ComputerName . | Select-Object -Property Build*,OSType,ServicePack*

BuildNumber             : 2600
BuildType               : Uniprocessor Free
OSType                  : 18
ServicePackMajorVersion : 2
ServicePackMinorVersion : 0

列出本地用户和所有者

通过选择 Win32_OperatingSystem 属性可以查找本地常规用户信息，包括许可用户数、当前用户数和所有者名称。可以显式选择要显示的属性，如下所示：

Get-WmiObject -Class Win32_OperatingSystem -ComputerName . | Select-Object -Property NumberOfLicensedUsers,NumberOfUsers,RegisteredUser

使用通配符的更简洁版本是：

Get-WmiObject -Class Win32_OperatingSystem -ComputerName . | Select-Object -Property *user*

获得可用磁盘空间

若要查看本地驱动器的磁盘空间和可用空间，可以使用 WMI Win32_LogicalDisk 类。这需要只显示 DriveType 为 3（这是 WMI 为固定硬盘分配的值）的实例。

Get-WmiObject -Class Win32_LogicalDisk -Filter "DriveType=3" -ComputerName .

DeviceID     : C:
DriveType    : 3
ProviderName :
FreeSpace    : 65541357568
Size         : 203912880128
VolumeName   : Local Disk

DeviceID     : Q:
DriveType    : 3
ProviderName :
FreeSpace    : 44298250240
Size         : 122934034432
VolumeName   : New Volume

PS> Get-WmiObject -Class Win32_LogicalDisk -Filter "DriveType=3" -ComputerName . | Measure-Object -Property FreeSpace,Size -Sum

Get-WmiObject -Class Win32_LogicalDisk -Filter "DriveType=3" -ComputerName . | Measure-Object -Property FreeSpace,Size -Sum | Select-Object -Property Property,Sum

获得登录会话信息

通过 WMI Win32_LogonSession 类可以获得与用户关联的登录会话的常规信息：

Get-WmiObject -Class Win32_LogonSession -ComputerName .

获得登录到计算机的用户

使用 Win32_ComputerSystem 可以显示登录到特定计算机系统的用户。此命令只返回登录到系统桌面的用户：

Get-WmiObject -Class Win32_ComputerSystem -Property UserName -ComputerName .

从计算机获得本地时间

使用 WMI Win32_LocalTime 类可以在特定计算机上检索当前本地时间。因为默认情况下此类显示所有元数据，所以可能需要使用 Select-Object 对这些数据进行筛选：

PS> Get-WmiObject -Class Win32_LocalTime -ComputerName . | Select-Object -Property [a-z]*

Day          : 15
DayOfWeek    : 4
Hour         : 12
Milliseconds :
Minute       : 11
Month        : 6
Quarter      : 2
Second       : 52
WeekInMonth  : 3
Year         : 2006

显示服务状态

若要查看特定计算机上所有服务的状态，可以像前面提到的那样在本地使用 Get-Service cmdlet。对于远程系统，可以使用 WMI Win32_Service 类。如果还使用 Select-Object 来筛选 Status、Name 和 DisplayName 的结果，则输出格式将与 Get-Service 的输出几乎相同。

Get-WmiObject -Class Win32_Service -ComputerName . | Select-Object -Property Status,Name,DisplayName

若要允许完整显示名称非常长的临时服务的名称，可能需要使用带有 AutoSize 和 Wrap 参数的 Format-Table 命令，以优化列宽并允许长名称换行而不被截断：

Get-WmiObject -Class Win32_Service -ComputerName . | Format-Table -Property Status,Name,DisplayName -AutoSize -Wrap


处理软件安装

设计为使用 Windows Installer 的应用程序可以通过 WMI 的 Win32_Product 类访问，但是并不是目前使用的所有应用程序都使用 Windows Installer。由于 Windows Installer 为处理可安装的应用程序提供了范围最广的各种标准技术，因此我们将集中讨论这些应用程序。使用替代安装例程的应用程序通常不受 Windows Installer 管理。处理这些应用程序的具体技术将取决于安装程序软件和应用程序开发人员的决定。

注意：

对于通过将应用程序文件复制到计算机的方式进行安装的应用程序来说，通常无法使用此处讨论的技术对它们进行管理。可以使用在“处理文件和文件夹”一节中讨论的技术，将这些应用程序作为文件和文件夹进行管理。

列出 Windows Installer 应用程序

若要列出在本地或远程系统上使用 Windows Installer 安装的应用程序，请使用以下简单 WMI 查询：

PS> Get-WmiObject -Class Win32_Product -ComputerName .
IdentifyingNumber : {7131646D-CD3C-40F4-97B9-CD9E4E6262EF}
Name              : Microsoft .NET Framework 2.0
Vendor            : Microsoft Corporation
Version           : 2.0.50727
Caption           : Microsoft .NET Framework 2.0

若要在显示器上显示 Win32_Product 对象的所有属性，请使用格式设置 cmdlet（例如 Format-List cmdlet）的 Properties 参数，其值为 *（所有）。

PS> Get-WmiObject -Class Win32_Product -ComputerName . | Where-Object -FilterScript {$_.Name -eq "Microsoft .NET Framework 2.0"} | Format-List -Property *
Name              : Microsoft .NET Framework 2.0
Version           : 2.0.50727
InstallState      : 5
Caption           : Microsoft .NET Framework 2.0
Description       : Microsoft .NET Framework 2.0
IdentifyingNumber : {7131646D-CD3C-40F4-97B9-CD9E4E6262EF}
InstallDate       : 20060506
InstallDate2      : 20060506000000.000000-000
InstallLocation   :
PackageCache      : C:\WINDOWS\Installer\619ab2.msi
SKUNumber         :
Vendor            : Microsoft Corporation

也可以使用 Get-WmiObject Filter 参数只选择 Microsoft .NET Framework 2.0。由于在此命令中使用的筛选器是 WMI 筛选器，因此它使用 WMI 查询语言 (WQL) 语法，而不是 Windows PowerShell 语法。那么相应命令就变为：

Get-WmiObject -Class Win32_Product -ComputerName . -Filter "Name='Microsoft .NET Framework 2.0'"| Format-List -Property *

请注意，WQL 查询常用的字符（例如空格或等号）在 Windows PowerShell 中有特殊含义。因此，谨慎的做法是始终将 Filter 参数的值放在一对引号内。还可以使用 Windows PowerShell 转义字符，即倒引号 (`)，但它可能不会提高可读性。以下命令等效于前面的命令，并返回相同结果，但却使用倒引号将特殊字符转义，而不是将整个筛选器字符串放在引号内。

Get-WmiObject -Class Win32_Product -ComputerName . -Filter Name`=`'Microsoft` .NET` Framework` 2.0`' | Format-List -Property *

若要只列出您希望查看的属性，请使用格式设置 cmdlet 的 Property 参数来列出所需的属性。

Get-WmiObject -Class Win32_Product -ComputerName . | Format-List -Property Name,InstallDate,InstallLocation,PackageCache,Vendor,Version,IdentifyingNumber
...
Name              : HighMAT Extension to Microsoft Windows XP CD Writing Wizard
InstallDate       : 20051022
InstallLocation   : C:\Program Files\HighMAT CD Writing Wizard\
PackageCache      : C:\WINDOWS\Installer\113b54.msi
Vendor            : Microsoft Corporation
Version           : 1.1.1905.1
IdentifyingNumber : {FCE65C4E-B0E8-4FBD-AD16-EDCBE6CD591F}
...

最后，若要只查找已安装应用程序的名称，一个简单的 Format-Wide 语句即可简化输出：

Get-WmiObject -Class Win32_Product -ComputerName .  | Format-Wide -Column 1

尽管现在已有几种方式来查看使用 Windows Installer 完成安装的应用程序，但我们尚未考虑其他应用程序。由于大多数标准应用程序会向 Windows 注册它们的卸载程序，因此可以在 Windows 注册表中查找这些程序，以便在本地处理它们。

列出所有可卸载的应用程序

尽管不能保证找到系统中的所有应用程序，但可以找到在“添加或删除程序”对话框中列出的所有程序。“添加或删除程序”将在以下注册表项中查找这些应用程序：

HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Uninstall。

还可以检查此注册表项以查找应用程序。若要使查看 Uninstall 项更容易，可以将 Windows PowerShell 驱动器映射到此注册表位置：

PS>

Name       Provider      Root                                   CurrentLocation
----       --------      ----                                   ---------------
Uninstall  Registry      HKEY_LOCAL_MACHINE\SOFTWARE\Micr...
注意：

HKLM: 驱动器映射到 HKEY_LOCAL_MACHINE 的根，因此我们在 Uninstall 项的路径中使用了该驱动器。如果不使用 HKLM:，则可使用 HKLM 或 HKEY_LOCAL_MACHINE 指定注册表路径。使用现有注册表驱动器的优点是我们可以使用 Tab 补齐功能来填充项名称，所以不需要键入它们。

现在，我们有了一个名为“Uninstall”的驱动器，可以用它来快速和方便地查找应用程序的安装信息。通过统计 Uninstall: Windows PowerShell 驱动器中的注册表项数，可以查找已安装的应用程序个数：

PS> (Get-ChildItem -Path Uninstall:).Count
459

可以从 Get-ChildItem 开始使用多种技术进一步搜索此应用程序列表。若要获取应用程序的列表并将它们保存在 $UninstallableApplications 变量中，请使用以下命令：

$UninstallableApplications = Get-ChildItem -Path Uninstall:
注意：

在此处使用长变量名称是为了清晰起见。在实际使用中，不必使用长名称。可以使用 Tab 补齐功能自动填写变量名称，另外还可以使用 1–2 个字符的名称加快速度。如果正在开发希望重用的代码，则较长的说明性名称最有用。

若要显示 Uninstall 下的注册表项中的注册表条目的值，请使用注册表项的 GetValue 方法。该方法的值是注册表条目的名称。

例如，若要在 Uninstall 项中查找应用程序的显示名称，请使用以下命令：

PS> Get-ChildItem -Path Uninstall: | ForEach-Object -Process { $_.GetValue("DisplayName") }

无法保证这些值是唯一的。在以下示例中，两个已安装项都显示为“Windows Media Encoder 9 Series”：

PS> Get-ChildItem -Path Uninstall: | Where-Object -FilterScript { $_.GetValue("DisplayName") -eq "Windows Media Encoder 9 Series"}

   Hive: Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Micros
oft\Windows\CurrentVersion\Uninstall

SKC  VC Name                           Property
---  -- ----                           --------
  0   3 Windows Media Encoder 9        {DisplayName, DisplayIcon, UninstallS...
  0  24 {E38C00D0-A68B-4318-A8A6-F7... {AuthorizedCDFPrefix, Comments, Conta...

安装应用程序

可以使用 Win32_Product 类在远程或本地安装 Windows Installer 程序包。远程安装时，应使用通用命名约定 (UNC) 网络路径指定 .msi 程序包的路径，这是因为 WMI 子系统无法识别 Windows PowerShell 路径。例如，若要将位于网络共享 \\AppServ\dsp 中的 NewPackage.msi 程序包安装到远程计算机 PC01 上，请在 Windows PowerShell 提示符下键入以下命令：

(Get-WMIObject -ComputerName PC01 -List | Where-Object -FilterScript {$_.Name -eq "Win32_Product"}).Install(\\AppSrv\dsp\NewPackage.msi)

不使用 Windows Installer 技术的应用程序可能有特定于应用程序的方法来进行自动部署。若要确定是否有自动部署的方法，请查看应用程序的文档，或向应用程序供应商的支持体系咨询。在某些情况下，即使应用程序供应商没有专门将应用程序设计为自动安装，该安装程序软件制造商仍然可能有某些自动化的技术。

删除应用程序

使用 Windows PowerShell 删除 Windows Installer 程序包的方式与安装程序包的方式大致相同。下面是基于程序包名称选择要卸载的程序包的示例；在某些情况下，用 IdentifyingNumber 进行筛选可能更容易：

(Get-WmiObject -Class Win32_Product -Filter "Name='ILMerge'" -ComputerName . ).Uninstall()

删除其他应用程序并不那么简单，甚至在本地这样做时也如此。可以通过提取 UninstallString 属性来查找这些应用程序的命令行卸载字符串。此方法对 Windows Installer 应用程序和出现在 Uninstall 项下面的旧程序有效：

Get-ChildItem -Path Uninstall: | ForEach-Object -Process { $_.GetValue("UninstallString") }

如果需要，可以按显示名筛选输出：

Get-ChildItem -Path Uninstall: | Where-Object -FilterScript { $_.GetValue("DisplayName") -like "Win*"} | ForEach-Object -Process { $_.GetValue("UninstallString") }

但是，如果不进行某些修改，这些字符串可能无法在 Windows PowerShell 提示符下直接使用。

升级 Windows Installer 应用程序

若要升级应用程序，需要知道应用程序的名称，以及应用程序升级程序包的路径。有了这些信息，就可以使用单个 Windows PowerShell 命令升级应用程序：

(Get-WmiObject -Class Win32_Product -ComputerName . -Filter "Name='OldAppName'").Upgrade(\\AppSrv\dsp\OldAppUpgrade.msi)


更改计算机状态

若要在 Windows PowerShell 中重置计算机，请使用标准命令行工具或 WMI 类。虽然您只使用 Windows PowerShell 来运行特定工具，但通过了解如何在 Windows PowerShell 中更改计算机的电源状态，可以阐明有关在 Windows PowerShell 中使用外部工具的一些重要详细信息。

锁定计算机

使用标准可用工具直接锁定计算机的唯一方法是调用 user32.dll 中的 LockWorkstation() 函数：

rundll32.exe user32.dll,LockWorkStation

此命令将立即锁定工作站。此命令使用 rundll32.exe（运行 Windows DLL 并保存它们的库以备重复使用）来运行 Windows 管理函数库 user32.dll。

在 Windows XP 等操作系统上，当您在启用了“快速用户切换”的情况下锁定工作站时，计算机将显示用户登录屏幕，而不是启动当前用户的屏幕保护程序。

若要关闭终端服务器上的特定会话，请使用 tsshutdn.exe 命令行工具。

注销当前会话

可以使用几种不同方法在本地系统上注销会话。最简单的方法是使用远程桌面/终端服务命令行工具 logoff.exe（若要获取详细信息，请在 Windows PowerShell 命令提示符下键入 logoff /?）。若要注销当前的活动会话，请键入不带参数的 logoff。

也可以使用 shutdown.exe 工具及其注销选项：

shutdown.exe -l

第三种方法是使用 WMI。Win32_OperatingSystem 类具有 Win32Shutdown 方法。调用带有 0 标志的方法可启动注销：

(Get-WmiObject -Class Win32_OperatingSystem -ComputerName .).Win32Shutdown(0)

若要了解详细信息和查找 Win32Shutdown 方法的其他功能，请参阅 MSDN 中的“Win32_OperatingSystem 类的 Win32Shutdown 方法”。

关闭或重新启动计算机

关闭和重新启动计算机通常是相同类型的任务。用于关闭计算机的工具通常也可以重新启动计算机，反之亦然。有两种简单的方法可以从 Windows PowerShell 重新启动计算机。使用带适当参数的 Tsshutdn.exe 或 Shutdown.exe。可通过 tsshutdn.exe /? 或 shutdown.exe /? 获取详细的用法信息。

也可以直接从 Windows PowerShell 中使用 Win32_OperatingSystem 执行关闭和重新启动操作。

若要关闭计算机，请使用带有 1 标志的 Win32Shutdown method 方法。

(Get-WmiObject -Class Win32_OperatingSystem -ComputerName .).Win32Shutdown(1)

若要重新启动操作系统，请使用带有 2 标志的 Win32Shutdown 方法。

(Get-WmiObject -Class Win32_OperatingSystem -ComputerName .).Win32Shutdown(2)


处理打印机

在 Windows PowerShell 中，可以使用 WMI 和来自 WSH 的 WScript.Network COM 对象来管理打印机。我们将同时使用这两种工具演示特定的任务。

列出打印机连接

列出安装在计算机上的打印机的最简单方法是使用 WMI Win32_Printer 类：

Get-WmiObject -Class Win32_Printer -ComputerName

也可以使用 WScript.Network COM 对象（通常用在 WSH 脚本中）列出打印机：

(New-Object -ComObject WScript.Network).EnumPrinterConnections()

由于此命令返回端口名称和打印机设备名称的简单字符串集合，不含任何特别标签，因此不太容易解释。

添加网络打印机

若要添加新的网络打印机，请使用 WScript.Network：

(New-Object -ComObject WScript.Network).AddWindowsPrinterConnection("\\Printserver01\Xerox5")

设置默认打印机

若要使用 WMI 设置默认打印机，请在 Win32_Printer 集合中找到所需打印机，然后调用 SetDefaultPrinter 方法：

(Get-WmiObject -ComputerName . -Class Win32_Printer -Filter "Name='HP LaserJet 5Si'").SetDefaultPrinter()

WScript.Network 的使用略为简单一些，因为它具有 SetDefaultPrinter 方法，您只需将打印机名称指定为参数即可：

(New-Object -ComObject WScript.Network).SetDefaultPrinter('HP LaserJet 5Si')

删除打印机连接

若要删除打印机连接，请使用 WScript.Network RemovePrinterConnection 方法：

(New-Object -ComObject WScript.Network).RemovePrinterConnection("\\Printserver01\Xerox5")


执行网络任务

由于 TCP/IP 是最常用的网络协议，因此大多数低级网络协议管理任务都涉及 TCP/IP。在本节中，我们将使用 Windows PowerShell 和 WMI 来完成这些任务。

列出计算机的 IP 地址

若要获取本地计算机上正在使用的所有 IP 地址，请使用以下命令：

Get-WmiObject -Class Win32_NetworkAdapterConfiguration -Filter IPEnabled=TRUE -ComputerName . | Format-Table -Property IPAddress

此命令的输出与大多数属性列表不同，因为值将括在大括号中：

IPAddress

---------

{192.168.1.80}

{192.168.148.1}

{192.168.171.1}

{0.0.0.0}

若要了解为什么出现大括号，请使用 Get-Member cmdlet 检查 IPAddress 属性：

PS> Get-WmiObject -Class Win32_NetworkAdapterConfiguration -Filter IPEnabled=TRUE -ComputerName . | Get-Member -Name IPAddress

TypeName: System.Management.ManagementObject#root\cimv2\Win32_NetworkAdapter

Configuration

Name MemberType Definition

---- ---------- ----------

IPAddress Property System.String[] IPAddress {get;}

每个网络适配器的 IPAddress 属性实际上是一个数组。定义中的大括号指示 IPAddress 不是一个 System.String 值，而是 System.String 值的数组。

列出 IP 配置数据

若要显示每个网络适配器的详细 IP 配置数据，请使用以下命令：

Get-WmiObject -Class Win32_NetworkAdapterConfiguration -Filter IPEnabled=TRUE -ComputerName .

网络适配器配置对象的默认显示是非常精简的一组可用信息。若要进行深入检查和故障排除，请使用 Select-Object 或格式设置 cmdlet（例如 Format-List）指定要显示的属性。

如果对 IPX 或 WINS 属性不感兴趣（很可能是在使用现代 TCP/IP 网络的情况下），可以使用 Select-Object 的 ExcludeProperty 参数将名称以“WINS”或“IPX”开头的属性隐藏起来：

Get-WmiObject -Class Win32_NetworkAdapterConfiguration -Filter IPEnabled=TRUE -ComputerName . | Select-Object -Property [a-z]* -ExcludeProperty IPX*,WINS*

此命令会返回有关 DHCP、DNS、路由和其他次要 IP 配置属性的详细信息。

对计算机执行 Ping 操作

可以使用 Win32_PingStatus 对计算机执行简单的 ping 操作。以下命令将执行 ping 操作，但会返回冗长的输出：

Get-WmiObject -Class Win32_PingStatus -Filter "Address='127.0.0.1'" -ComputerName .

摘要信息的更有用形式是显示 Address、ResponseTime 和 StatusCode 属性，正如以下命令所生成的输出一样：Format-Table 的 Autosize 参数可以调整表列的大小，以使它们在 Windows PowerShell 中正确显示。

PS> Get-WmiObject -Class Win32_PingStatus -Filter "Address='127.0.0.1'" -ComputerName . | Format-Table -Property Address,ResponseTime,StatusCode -Autosize

Address   ResponseTime StatusCode
-------   ------------ ----------
127.0.0.1            0          0
A status code of 0 indicates a successful ping.

可以使用数组通过单个命令对多台计算机执行 ping 操作。由于存在多个地址，请使用 ForEach-Object 单独对每个地址执行 ping 操作：

"127.0.0.1","localhost","research.microsoft.com" | ForEach-Object -Process {Get-WmiObject -Class Win32_PingStatus -Filter ("Address='" + $_ + "'") -ComputerName .} | Select-Object -Property Address,ResponseTime,StatusCode

可以使用同一命令格式对子网上的所有计算机执行 ping 操作，例如使用网络号 192.168.1.0 和标准 C 类子网掩码 (255.255.255.0) 的专用网络。只有 192.168.1.1 到 192.168.1.254 范围内的地址才是合法的本地地址（0 始终是为网络号保留的，255 是子网广播地址）。

在 Windows PowerShell 中，若要表示从 1 到 254 的数字的数组，可使用语句 1..254. 通过生成该数组并将值添加到 ping 语句中的部分地址，来对整个子网执行 Ping 操作：

1..254| ForEach-Object -Process {Get-WmiObject -Class Win32_PingStatus -Filter ("Address='192.168.1." + $_ + "'") -ComputerName .} | Select-Object -Property Address,ResponseTime,StatusCode

请注意，这种生成地址范围的方法也可以在别处使用。可以使用此方法生成一组完整地址：

$ips = 1..254 | ForEach-Object -Process {"192.168.1." + $_}

检索网络适配器属性

在本用户指南前面已经提到，可以使用 Win32_NetworkAdapterConfiguration 检索常规配置属性。虽然不是严格的 TCP/IP 信息，但是诸如 MAC 地址和适配器类型的网络适配器信息对于了解计算机的当前状况是很有用的。若要获取此信息的摘要，请使用以下命令：

Get-WmiObject -Class Win32_NetworkAdapter -ComputerName .

为网络适配器指定 DNS 域

若要指定用于自动名称解析的 DNS 域，请使用 Win32_NetworkAdapterConfiguration SetDNSDomain 方法。由于您单独为每个网络适配器配置指定 DNS 域，所以需要使用 ForEach-Object 语句为每个适配器指定域：

Get-WmiObject -Class Win32_NetworkAdapterConfiguration -Filter IPEnabled=true -ComputerName . | ForEach-Object -Process { $_. SetDNSDomain("fabrikam.com") }

必须使用筛选语句“IPEnabled=true”，因为即使在仅使用 TCP/IP 的网络上，计算机上的几个网络适配器配置也不是真正的 TCP/IP 适配器；它们是支持用于所有适配器的 RAS、PPTP、QoS 和其他服务的常规软件元素，因此没有它们自己的地址。

可以使用 Where-Object cmdlet 来筛选命令，而不是使用 Get-WmiObject 筛选器。

Get-WmiObject -Class Win32_NetworkAdapterConfiguration -ComputerName . | Where-Object -FilterScript {$_.IPEnabled} | ForEach-Object -Process {$_.SetDNSDomain("fabrikam.com")}

执行 DHCP 配置任务

修改 DHCP 详细信息涉及使用一组网络适配器，就像 DNS 配置一样。有几个可以使用 WMI 执行的不同操作，我们将介绍其中的几个常见操作。

确定启用 DHCP 的适配器

若要查找计算机上启用 DHCP 的适配器，请使用以下命令：

Get-WmiObject -Class Win32_NetworkAdapterConfiguration -Filter "DHCPEnabled=true" -ComputerName .

若要排除有 IP 配置问题的适配器，可以仅检索启用 IP 的适配器：

Get-WmiObject -Class Win32_NetworkAdapterConfiguration -Filter "IPEnabled=true and DHCPEnabled=true" -ComputerName .

检索 DHCP 属性

由于适配器的 DHCP 相关属性通常以“DHCP”开头，因此可以使用 Format-Table 的 Property 参数仅显示这些属性：

Get-WmiObject -Class Win32_NetworkAdapterConfiguration -Filter "DHCPEnabled=true" -ComputerName . | Format-Table -Property DHCP*

在每个适配器上启用 DHCP

若要在所有适配器上启用 DHCP，请使用以下命令：

Get-WmiObject -Class Win32_NetworkAdapterConfiguration -Filter IPEnabled=true -ComputerName . | ForEach-Object -Process {$_.EnableDHCP()}

可以使用 Filter 语句“IPEnabled=true and DHCPEnabled=false”，以避免在已经启用 DHCP 的位置上启用它，但是省略此步骤不会导致错误。

对特定适配器解除和续订 DHCP 租约

Win32_NetworkAdapterConfiguration 类具有 ReleaseDHCPLease 和 RenewDHCPLease 方法。它们的使用方式是相同的。通常，如果仅需要为特定子网上的某个适配器解除或续订地址，则需要使用这些方法。筛选子网上适配器的最简单方法是，仅选择使用该子网网关的适配器配置。例如，以下命令会解除本地计算机上从 192.168.1.254 获取 DHCP 租约的适配器的所有 DHCP 租约：

Get-WmiObject -Class Win32_NetworkAdapterConfiguration -Filter "IPEnabled=true and DHCPEnabled=true" -ComputerName . | Where-Object -FilterScript {$_.DHCPServer -contains "192.168.1.254"} | ForEach-Object -Process {$_.ReleaseDHCPLease()}

要续订 DHCP 租约，唯一的更改是使用 RenewDHCPLease 方法，而不是 ReleaseDHCPLease 方法：

Get-WmiObject -Class Win32_NetworkAdapterConfiguration -Filter "IPEnabled=true and DHCPEnabled=true" -ComputerName . | Where-Object -FilterScript {$_.DHCPServer -contains "192.168.1.254"} | ForEach-Object -Process {$_.ReleaseDHCPLease()}
注意：

在远程计算机上使用这些方法时，如果是通过解除或续订租约的适配器连接到远程计算机的，请注意您可能会失去对远程计算机的访问。

对所有适配器解除和续订 DHCP 租约

使用 Win32_NetworkAdapterConfiguration 的 ReleaseDHCPLeaseAll 和 RenewDHCPLeaseAll 方法，可以对所有适配器执行全局 DHCP 地址解除或续订。但是，该命令必须适用于 WMI 类，而不是特定的适配器，因为全局解除和续订租约是对类执行的，而不是对特定适配器执行的。

通过列出所有 WMI 类，然后按名称仅选择所需类，可以获取对 WMI 类而不是类实例的引用。例如，以下命令会返回 Win32_NetworkAdapterConfiguration 类：

Get-WmiObject -List | Where-Object -FilterScript {$_.Name -eq "Win32_NetworkAdapterConfiguration"}

可以将整个命令视为类，然后对它调用 ReleaseDHCPAdapterLease 方法。在以下命令中，括住 Get-WmiObject 和 Where-Object 管道元素的括号指示 Windows PowerShell 首先计算它们：

( Get-WmiObject -List | Where-Object -FilterScript {$_.Name -eq "Win32_NetworkAdapterConfiguration"} ).ReleaseDHCPLeaseAll()

可以使用相同的命令格式调用 RenewDHCPLeaseAll 方法：

( Get-WmiObject -List | Where-Object -FilterScript {$_.Name -eq "Win32_NetworkAdapterConfiguration"} ).RenewDHCPLeaseAll()

创建网络共享

若要创建网络共享，请使用 Win32_Share Create 方法：

(Get-WmiObject -List -ComputerName . | Where-Object -FilterScript {$_.Name -eq "Win32_Share"}).Create("C:\temp","TempShare",0,25,"test share of the temp folder")

也可以在 Windows PowerShell 中使用 net share 创建共享：

net share tempshare=c:\temp /users:25 /remark:"test share of the temp folder"

删除网络共享

可以使用 Win32_Share 删除网络共享，但是该过程与创建共享稍有不同，因为需要检索要删除的特定共享，而不是 Win32_Share 类。以下语句会删除共享“TempShare”：

 (Get-WmiObject -Class Win32_Share -ComputerName . -Filter "Name='TempShare'").Delete()

也可以使用 Net share 删除它：

PS> net share tempshare /delete
tempshare was deleted successfully.

连接 Windows 可访问的网络驱动器

New-PSDrive cmdlet 可以创建 Windows PowerShell 驱动器，但通过这种方式创建的驱动器仅对 Windows PowerShell 可用。若要创建新的网络驱动器，可以使用 WScript.Network COM 对象。以下命令将共享 \\FPS01\users 映射到本地驱动器 B：

(New-Object -ComObject WScript.Network).MapNetworkDrive("B:", "\\FPS01\users")

也可以使用 net use 命令做到这一点：

net use B: \\FPS01\users

使用 WScript.Network 或 net use 映射的驱动器将立即对 Windows PowerShell 可用。


处理文件和文件夹

在 Windows PowerShell 驱动器中导航和操作这些驱动器上的项目，与操作 Windows 物理磁盘驱动器上的文件和文件夹类似。本部分将讨论如何处理特定的文件和文件夹操作任务。

列出文件夹中的所有文件和文件夹

可以使用 Get-ChildItem 获取文件夹中直接包含的所有项。添加可选的 Force 参数可以显示隐藏项或系统项。例如，以下命令显示 Windows PowerShell 驱动器 C（与 Windows 物理驱动器 C 相同）的直接内容：

Get-ChildItem -Force C:\

该命令仅列出直接包含的项，与使用 Cmd.exe 的 DIR 命令或 UNIX shell 中的 ls 非常类似。为了显示包含的项，还需要指定 -Recurse 参数。（这可能需要极长的时间才能完成。）列出 C 驱动器上的所有内容：

Get-ChildItem -Force C:\ -Recurse

Get-ChildItem 可以通过其 Path、Filter、Include 和 Exclude 参数对项进行筛选，但是这些参数通常仅基于名称。使用 Where-Object，可以基于项的其他属性执行复杂的筛选。

以下命令查找 Program Files 文件夹中上次修改日期晚于 2005 年 10 月 1 日并且既不小于 1 MB 也不大于 10 MB 的所有可执行文件：

Get-ChildItem -Path $env:ProgramFiles -Recurse -Include *.exe | Where-Object -FilterScript {($_.LastWriteTime -gt "2005-10-01") -and ($_.Length -ge 1m) -and ($_.Length -le 10m)}

复制文件和文件夹

复制是使用 Copy-Item 进行的。以下命令将 C:\boot.ini 备份到 C:\boot.bak：

Copy-Item -Path c:\boot.ini -Destination c:\boot.bak

如果目标文件已经存在，则复制尝试将会失败。若要覆盖预先存在的目标，请使用 Force 参数：

Copy-Item -Path c:\boot.ini -Destination c:\boot.bak -Force

甚至在目标为只读时，此命令也有效。

复制文件夹的方法与此相同。以下命令以递归方式将文件夹 C:\temp\test1 复制到新文件夹 c:\temp\DeleteMe：

Copy-Item C:\temp\test1 -Recurse c:\temp\DeleteMe

也可以复制所选项。以下命令将 c:\data 中任何位置所包含的所有 .txt 文件复制到 c:\temp\text：

Copy-Item -Filter *.txt -Path c:\data -Recurse -Destination c:\temp\text

仍然可以使用其他工具执行文件系统复制。XCOPY、ROBOCOPY 和 COM 对象（如 Scripting.FileSystemObject,）均可以在 Windows PowerShell 中使用。例如，可以使用 Windows Script Host Scripting.FileSystem COM 类将 C:\boot.ini 备份到 C:\boot.bak：

(New-Object -ComObject Scripting.FileSystemObject).CopyFile("c:\boot.ini", "c:\boot.bak")

创建文件和文件夹

在所有 Windows PowerShell 提供程序中，创建新项的方法都是相同的。如果 Windows PowerShell 提供程序具有多种类型的项（例如，FileSystem Windows PowerShell 提供程序区分目录和文件），则需要指定项类型。

以下命令创建新文件夹 C:\temp\New Folder：

New-Item -Path 'C:\temp\New Folder' -ItemType "directory"

以下命令创建新的空文件 C:\temp\New Folder\file.txt：

New-Item -Path 'C:\temp\New Folder\file.txt' -ItemType "file"

删除文件夹中的所有文件和文件夹

可以使用 Remove-Item 删除包含的项，但是如果该项包含任何其他内容，则会提示您确认删除。例如，如果尝试删除包含其他项的文件夹 C:\temp\DeleteMe，Windows PowerShell 会在删除该文件夹之前提示您进行确认：

Remove-Item C:\temp\DeleteMe

Confirm
The item at C:\temp\DeleteMe has children and the -recurse parameter was not
specified. If you continue, all children will be removed with the item. Are you
sure you want to continue?
[Y] Yes  [A] Yes to All  [N] No  [L] No to All  [S] Suspend  [?] Help
(default is "Y"):

如果不想得到有关每个包含的项的提示，请指定 Recurse 参数：

Remove-Item C:\temp\DeleteMe -Recurse

将本地文件夹映射为 Windows 可访问驱动器

也可以使用 subst 命令映射本地文件夹。以下命令创建位于本地 Program Files 目录中的本地驱动器 P:：

subst p: $env:programfiles

就像网络驱动器一样，使用 subst 在 Windows PowerShell 中映射的驱动器立即对 Windows PowerShell shell 可见。

将文本文件读入数组

文本数据的更常见存储格式之一是，存储在将不同行视为不同数据元素的文件中。可以使用 Get-Content cmdlet 一次性读取整个文件，如下所示：

PS> Get-Content -Path C:\boot.ini
[boot loader]
timeout=5
default=multi(0)disk(0)rdisk(0)partition(1)\WINDOWS
[operating systems]
multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft Windows XP Professional"
 /noexecute=AlwaysOff /fastdetect
multi(0)disk(0)rdisk(0)partition(1)\WINDOWS=" Microsoft Windows XP Professional
with Data Execution Prevention" /noexecute=optin /fastdetect

Get-Content 已将从文件中读取的数据视为一个数组，文件内容的每一行上有一个元素。可以通过检查所返回内容的 Length 对此进行确认：

PS> (Get-Content -Path C:\boot.ini).Length
6

对于直接从 Windows PowerShell 获取信息列表，此命令是最有用的。例如，可能将计算机名称或 IP 地址的列表存储在文件 C:\temp\domainMembers.txt 中，文件的每行上有一个名称。可以使用 Get-Content 检索文件内容，并将其放置在变量 $Computers 中：

$Computers = Get-Content -Path C:\temp\DomainMembers.txt

$Computers 现在是其每个元素中都包含计算机名称的数组。


处理注册表项

由于注册表项是 Windows PowerShell 驱动器上的项，因此处理它们的方式与处理文件和文件夹非常类似。一个关键差异是，基于注册表的 Windows PowerShell 驱动器上的每个项都是一个容器，就像文件系统驱动器上的文件夹一样。但是，注册表条目及其关联值是项的属性，而不是不同的项。

列出注册表项的所有子项

使用 Get-ChildItem 可以显示注册表项直接包含的所有项。添加可选的 Force 参数可以显示隐藏项或系统项。例如，此命令显示直接在 Windows PowerShell 驱动器 HKCU:（它对应于 HKEY_CURRENT_USER 注册表配置单元）中的项：

PS> Get-ChildItem -Path hkcu:\

   Hive: Microsoft.PowerShell.Core\Registry::HKEY_CURRENT_USER

SKC  VC Name                           Property
---  -- ----                           --------
  2   0 AppEvents                      {}
  7  33 Console                        {ColorTable00, ColorTable01, ColorTab...
 25   1 Control Panel                  {Opened}
  0   5 Environment                    {APR_ICONV_PATH, INCLUDE, LIB, TEMP...}
  1   7 Identities                     {Last Username, Last User ...
  4   0 Keyboard Layout                {}
...

这些是在注册表编辑器 (Regedit.exe) 中 HKEY_CURRENT_USER 下可见的顶级项。

也可以通过指定注册表提供程序的名称后跟“::”来指定此注册表路径。注册表提供程序的全名为 Microsoft.PowerShell.Core\Registry，但是它只需简写为 Registry 即可。下列任一命令将列出直接位于 HKCU 下的内容：

Get-ChildItem -Path Registry::HKEY_CURRENT_USER
Get-ChildItem -Path Microsoft.PowerShell.Core\Registry::HKEY_CURRENT_USER
Get-ChildItem -Path Registry::HKCU
Get-ChildItem -Path Microsoft.PowerShell.Core\Registry::HKCU
Get-ChildItem HKCU:

这些命令仅列出直接包含的项，与使用 Cmd.exe 的 DIR 命令或 UNIX shell 中的 ls 非常类似。若要显示包含的项，需要指定 Recurse 参数。若要列出 HKCU 中的所有注册表项，请使用以下命令（此操作可能需要极长的时间。）：

Get-ChildItem -Path hkcu:\ -Recurse

Get-ChildItem 可以通过其 Path、Filter、Include 和 Exclude 参数执行复杂的筛选功能，但是这些参数通常仅基于名称。使用 Where-Object cmdlet 可以基于项的其他属性执行复杂的筛选。以下命令查找 HKCU:\Software 中具有不超过一个子项且正好具有四个值的所有项：

Get-ChildItem -Path HKCU:\Software -Recurse | Where-Object -FilterScript {($_.SubKeyCount -le 1) -and ($_.ValueCount -eq 4) }

复制项

复制是使用 Copy-Item 进行的。以下命令将 HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion 及其所有属性复制到 HKCU:\，从而创建一个名为“CurrentVersion”的新项：

Copy-Item -Path 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion' -Destination hkcu:

如果在注册表编辑器中或使用 Get-ChildItem 检查此新项，您将注意到新位置中没有所包含子项的副本。为了复制容器的所有内容，需要指定 Recurse 参数。若要使前面的复制命令是递归的，请使用以下命令：

Copy-Item -Path 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion' -Destination hkcu: -Recurse

仍可以使用已经可用的其他工具执行文件系统复制。任何注册表编辑工具（包括 reg.exe、regini.exe 和 regedit.exe）和支持注册表编辑的 COM 对象（如 WScript.Shell 和 WMI 的 StdRegProv 类）都可以从 Windows PowerShell 内使用。

创建项

在注册表中创建新项比在文件系统中创建新项简单。由于所有的注册表项都是容器，因此无需指定项类型；只需提供显式路径即可，例如：

New-Item -Path hkcu:\software\_DeleteMe

也可以使用基于提供程序的路径指定项：

New-Item -Path Registry::HKCU\_DeleteMe

删除项

在本质上，删除项对于所有提供程序都是相同的。以下命令将以无提示方式删除项：

Remove-Item -Path hkcu:\Software\_DeleteMe
Remove-Item -Path 'hkcu:\key with spaces in the name'

删除特定项下的所有项

可以使用 Remove-Item 删除包含的项，但是如果该项包含任何其他内容，则会提示您确认删除。例如，如果尝试删除所创建的 HKCU:\CurrentVersion 子项，则会看到以下内容：

Remove-Item -Path hkcu:\CurrentVersion

Confirm
The item at HKCU:\CurrentVersion\AdminDebug has children and the -recurse
parameter was not specified. If you continue, all children will be removed with
 the item. Are you sure you want to continue?
[Y] Yes  [A] Yes to All  [N] No  [L] No to All  [S] Suspend  [?] Help
(default is "Y"):

若要删除包含的项而不出现提示，请指定 -Recurse 参数：

Remove-Item -Path HKCU:\CurrentVersion -Recurse

若要删除 HKCU:\CurrentVersion 中的所有项但不删除 HKCU:\CurrentVersion 本身，则可以改用：

Remove-Item -Path HKCU:\CurrentVersion\* -Recurse


处理注册表条目

因为注册表条目是项的属性（因而无法直接浏览），所以在处理它们时需要采用稍微不同的方法。

列出注册表条目

可以使用许多不同的方法检查注册表条目。最简单的方法是获取与项关联的属性名称。例如，若要查看注册表项 HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion 中条目的名称，请使用 Get-Item。注册表项具有一个通用名称为“Property”的属性，该属性是项中注册表条目的列表。以下命令会选择 Property 属性，并扩展项以便在列表中显示它们：

PS> Get-Item -Path Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion | Select-Object -ExpandProperty Property
DevicePath
MediaPathUnexpanded
ProgramFilesDir
CommonFilesDir
ProductId

若要以可读性更强的形式查看注册表条目，请使用 Get-ItemProperty：

PS> Get-ItemProperty -Path Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion

PSPath              : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SO
                      FTWARE\Microsoft\Windows\CurrentVersion
PSParentPath        : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SO
                      FTWARE\Microsoft\Windows
PSChildName         : CurrentVersion
PSDrive             : HKLM
PSProvider          : Microsoft.PowerShell.Core\Registry
DevicePath          : C:\WINDOWS\inf
MediaPathUnexpanded : C:\WINDOWS\Media
ProgramFilesDir     : C:\Program Files
CommonFilesDir      : C:\Program Files\Common Files
ProductId           : 76487-338-1167776-22465
WallPaperDir        : C:\WINDOWS\Web\Wallpaper
MediaPath           : C:\WINDOWS\Media
ProgramFilesPath    : C:\Program Files
PF_AccessoriesName  : Accessories
(default)           :

项的 Windows PowerShell 相关属性均以“PS”为前缀，例如 PSPath、PSParentPath、PSChildName 和 PSProvider。

可以使用“.”符号来表示当前位置。可以使用 Set-Location 首先转到 CurrentVersion 注册表容器：

Set-Location -Path Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion

或者，可以将内置 HKLM PSDrive 与 Set-Location 一起使用：

Set-Location -Path hklm:\SOFTWARE\Microsoft\Windows\CurrentVersion

然后，可以使用“.”符号表示当前位置以列出属性，而不指定完整路径：

PS> Get-ItemProperty -Path .
...
DevicePath          : C:\WINDOWS\inf
MediaPathUnexpanded : C:\WINDOWS\Media
ProgramFilesDir     : C:\Program Files
...

路径扩展的工作方式与其在文件系统中相同，因此可以使用 Get-ItemProperty -Path ..\Help 从此位置获取 HKLM:\SOFTWARE\Microsoft\Windows\Help 的 ItemProperty 列表。

获取单个注册表条目

如果要检索注册表项中的特定条目，可以使用以下几种可能的方法之一。下面的示例在 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion 中查找 DevicePath 的值。

在使用 Get-ItemProperty 时，使用 Path 参数指定项的名称，并使用 Name 参数指定 DevicePath 条目的名称。

PS> Get-ItemProperty -Path HKLM:\Software\Microsoft\Windows\CurrentVersion -Name DevicePath

PSPath       : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\Software\
               Microsoft\Windows\CurrentVersion
PSParentPath : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\Software\
               Microsoft\Windows
PSChildName  : CurrentVersion
PSDrive      : HKLM
PSProvider   : Microsoft.PowerShell.Core\Registry
DevicePath   : C:\WINDOWS\inf

此命令返回标准的 Windows PowerShell 属性以及 DevicePath 属性。

注意：

虽然 Get-ItemProperty 具有 Filter、Include 和 Exclude 参数，但是无法使用它们按属性名称进行筛选。这些参数引用注册表项（它们是项路径），而不是引用注册表条目（它们是项属性）。

另一种方法是使用 Reg.exe 命令行工具。若要获取 reg.exe 的帮助，请在命令提示符下键入 reg.exe /?。若要查找 DevicePath 条目，请使用 reg.exe，如以下命令所示：

PS> reg query HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion /v DevicePath

! REG.EXE VERSION 3.0

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion
    DevicePath  REG_EXPAND_SZ   %SystemRoot%\inf

也可以使用 WshShell COM 对象查找一些注册表条目，但此方法不适用于大型二进制数据或包括“\”等字符的注册表条目名称。使用 \ 分隔符将属性名称追加到项路径：

PS> (New-Object -ComObject WScript.Shell).RegRead("HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\DevicePath")
%SystemRoot%\inf

创建新的注册表条目

若要将名为“PowerShellPath”的新条目添加到 CurrentVersion 项，请将 New-ItemProperty 与项的路径、条目名称以及条目的值一起使用。在下面的示例中，我们将采用 Windows PowerShell 变量 $PSHome 的值，该变量存储 Windows PowerShell 安装目录的路径。

使用以下命令可以将新条目添加到项，而且该命令还返回有关新条目的信息：

PS> New-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion -Name PowerShellPath -PropertyType String -Value $PSHome

PSPath         : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SOFTWAR
                 E\Microsoft\Windows\CurrentVersion
PSParentPath   : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SOFTWAR
                 E\Microsoft\Windows
PSChildName    : CurrentVersion
PSDrive        : HKLM
PSProvider     : Microsoft.PowerShell.Core\Registry
PowerShellPath : C:\Program Files\Windows PowerShell\v1.0

PropertyType 必须是下表中 Microsoft.Win32.RegistryValueKind 枚举成员的名称：

PropertyType 值 | 含义
Binary | 二进制数据
DWord | 一个有效的 UInt32 数字
ExpandString | 一个可以包含动态扩展的环境变量的字符串
MultiString | 多行字符串
String | 任何字符串值
QWord | 8 字节二进制数据
注意：

通过指定 Path 参数的值数组，可以将注册表条目添加到多个位置：

New-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion, HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion -Name PowerShellPath -PropertyType String -Value $PSHome

通过将 Force 参数添加到任何 New-ItemProperty 命令，也可以覆盖预先存在的注册表条目值。

重命名注册表条目

若要将 PowerShellPath 条目重命名为“PSHome”，请使用 Rename-ItemProperty：

Rename-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion -Name PowerShellPath -NewName PSHome

若要显示重命名后的值，请将 PassThru 参数添加到该命令中。

Rename-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion -Name PowerShellPath -NewName PSHome -passthru

删除注册表条目

若要同时删除 PSHome 和 PowerShellPath 注册表条目，请使用 Remove-ItemProperty：

Remove-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion -Name PSHome
Remove-ItemProperty -Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion -Name PowerShellPath


运行远程命令

可以使用一个 Windows PowerShell 命令在一台或成百上千台计算机上运行命令。Windows PowerShell 使用包括 WMI、RPC 和 WS-Management 在内的各种技术来支持远程计算。

远程处理（无需进行配置）

许多 Windows PowerShell cmdlet 都有一个 ComputerName 参数，该参数允许您在一台或多台远程计算机上收集数据并更改设置。这些 cmdlet 使用各种各样的通信技术，其中许多不需要进行任何专门配置就可以在 Windows PowerShell 支持的所有 Windows 操作系统上工作。

其中包括以下 cmdlet：

  • Restart-Computer

  • Test-Connection

  • Clear-EventLog

  • Get-EventLog

  • Get-HotFix

  • Get-Process

  • Get-Service

  • Set-Service

  • Get-HotFix

  • Get-WmiObject

通常，无需专门配置就支持远程处理的 cmdlet 有一个 ComputerName 参数，但没有 Session 参数。若要查找会话中的这些 cmdlet，请键入：

get-command | where { $_.parameters.keys -contains "ComputerName" -and $_.parameters.keys -notcontains "Session"}

Windows PowerShell 远程处理

Windows PowerShell 远程处理使用 WS-Management 协议，允许您在一台或多台远程计算机上运行任何 Windows PowerShell 命令。通过 Windows PowerShell 远程处理，您可以建立持续性连接，开始 1:1 交互式会话并在多台计算机上运行脚本。

若要使用 Windows PowerShell 远程处理，必须针对远程管理对远程计算机进行配置。有关详细信息（包括说明），请参阅 about_Remote_Requirements。

配置了 Windows PowerShell 远程处理后，有多种远程处理策略可供您使用。本文档的其余部分仅列出了一小部分远程处理策略。有关详细信息，请参阅 about_Remote 和 about_Remote_FAQ。

开始交互式会话

若要与一台远程计算机开始交互式会话，请使用 Enter-PSSession cmdlet。例如，若要与远程计算机 Server01 开始交互式会话，请键入：

enter-pssession Server01

命令提示符更改以显示您已连接到的计算机的名称。之后，您在提示符下键入的所有命令都在远程计算机上运行，结果显示在本地计算机上。

若要终止交互式会话，请键入：

exit-pssession

有关 Enter-PSSession 和 Exit-PSSession cmdlet 的详细信息，请参阅 Enter-PSSession 和 Exit-PSSession。

运行远程命令

若要在一台或多台远程计算机上运行任何命令，请使用 Invoke-Command cmdlet。例如，若要在远程计算机 Server01 和 Server02 上运行 Get-UICulture 命令，请键入：

invoke-command -computername Server01, Server02 {get-UICulture}

输出将返回到您的计算机。

LCID    Name     DisplayName               PSComputerName
----    ----     -----------               --------------
1033    en-US    English (United States)   server01.corp.fabrikam.com
1033    en-US    English (United States)   server02.corp.fabrikam.com

有关 Invoke-Command cmdlet 的详细信息，请参阅 Invoke-Command。

运行脚本

若要在一台或多台远程计算机上运行脚本，请使用 Invoke-Command cmdlet 的 FilePath 参数。脚本必须在本地计算机中或者可由本地计算机访问。结果将返回到本地计算机。

例如，以下命令会在远程计算机 Server01 和 Server02 上运行 DiskCollect.ps1 脚本。

invoke-command -computername Server01, Server02 -filepath c:\Scripts\DiskCollect.ps1

有关 Invoke-Command cmdlet 的详细信息，请参阅 Invoke-Command。

建立持续性连接

若要运行共享数据的一系列相关命令，请在远程计算机上创建一个会话，然后使用 Invoke-Command cmdlet 在您创建的会话中运行命令。若要创建远程会话，请使用 New-PSSession cmdlet。

例如，以下命令在计算机 Server01 上创建一个远程会话，在计算机 Server02 上创建另一个远程会话。而且将会话对象保存在 $s 变量中。

$s = new-pssession -computername Server01, Server02

现在已经建立了会话，您可以在其中运行任何命令。并且由于会话是持续性的，您可以收集一个命令中的数据，将其用在随后的命令中。

例如，以下命令在变量 $s 中的会话内运行 Get-Hotfix 命令，并将结果保存在 $h 变量中。在 $s 中的每个会话内都会创建变量 $h，但本地会话中没有该变量。

invoke-command -session $s {$h = get-hotfix}

现在，可以将变量 $h 中的数据用在随后的命令中，如下面的命令。结果将显示在本地计算机上。

invoke-command -session $s {$h | where {$_.installedby -ne "NTAUTHORITY\SYSTEM"

高级远程处理

此处的内容只是 Windows PowerShell 远程管理的入门。通过使用随 Windows PowerShell 一起安装的 cmdlet，您可以在本地终端和远程终端上建立和配置远程会话，创建自定义会话和受限会话，允许用户从远程会话中导入实际上在该远程会话中隐式运行的命令，以及配置远程会话的安全性等。

为了方便远程配置，Windows PowerShell 中包含了一个 WS-Management 提供程序。通过该提供程序创建的 WSMAN: 驱动器，您可以在本地计算机和远程计算机上的配置设置层次结构中导航。有关该 WS-Management 提供程序的详细信息，请参阅 WSMan Provider和 about_WS-Management_Cmdlets，或者在 Windows PowerShell 控制台中键入“get-help wsman”。

有关详细信息，请参阅 about_Remote_FAQ、New-PSSessionConfiguration 和 Import-PSSession。有关远程处理错误的帮助，请参阅 about_Remote_Troubleshooting。

另请参阅

    New-PSSessionConfiguration
  • about_Remote
  • about_Remote_FAQ
  • about_Remote_Requirements
  • about_Remote_Troubleshooting
  • about_PSSessions
  • about_WS-Management_Cmdlets
  • Invoke-Command
  • Import-PSSession
  • New-PSSession
  • WSMan Provider


Windows PowerShell ISE 简介

启动 Windows PowerShell ISE

  1. 执行下列操作之一：

    • 单击“开始”，指向“所有程序”，指向“Windows PowerShell V2”，然后单击“Windows PowerShell ISE”。

    • 在 Windows PowerShell 控制台 Cmd.exe 或“运行”框中，键入 powershell_ise.exe。

在 Windows PowerShell ISE 中获取帮助

  • 在“帮助”菜单上，单击“Windows PowerShell 帮助”。也可以按 F1。打开的文件介绍 Windows PowerShell ISE 和 Windows PowerShell，包括 Get-Help cmdlet 提供的所有帮助。


附录 1 - 兼容性别名

Windows PowerShell 具有几个转换别名，允许 UNIX 和 Cmd 用户在 Windows PowerShell 中使用熟悉的命令名称。下表列出了最常用的别名以及别名背后的 Windows PowerShell 命令和标准的 Windows PowerShell 别名（如果存在）。

使用 Get-Alias cmdlet 可以从 Windows PowerShell 中查找任何别名所指向的 Windows PowerShell 命令。例如，键入 get-alias cls。

CommandType     Name                            Definition
-----------     ----                            ----------
Alias           cls                             Clear-Host

CMD 命令 | UNIX 命令 | PS 命令 | PS 别名
dir | ls | Get-ChildItem | gci
cls | clear | Clear-Host（函数） | 不可用
del, erase, rmdir | rm | Remove-Item | ri
copy | cp | Copy-Item | ci
move | mv | Move-Item | mi
rename | mv | Rename-Item | rni
type | cat | Get-Content | gc
cd | cd | Set-Location | sl
md | mkdir | New-Item | ni
不可用 | pushd | Push-Location | 不可用
不可用 | popd | Pop-Location | 不可用


附录 2 - 创建自定义的 PowerShell 快捷方式

以下过程说明如何为具有若干个自定义便利选项的 Windows PowerShell 创建快捷方式。

  1. 创建指向 Powershell.exe 的快捷方式。

  2. 右键单击该快捷方式，然后单击“属性”。

  3. 单击“选项”选项卡。

  4. 在“编辑选项”部分，选中“快速编辑”复选框。

    利用此设置，您可以通过拖动鼠标左键在 Windows PowerShell 控制台窗口中选择文本，然后通过按 Enter 或单击鼠标右键将文本复制到剪贴板。

  5. 在“编辑选项”部分，选中“插入模式”复选框。利用此设置，您可以在控制台窗口中单击鼠标右键自动从剪贴板中粘贴文本。

  6. 在“命令记录”部分，在“缓冲区大小”框中键入或选择一个介于 1 和 999 之间的数字。这样可以设置将保存在控制台缓冲区中的键入命令的数量。

  7. 在“命令记录”部分，选中“丢弃旧的副本”复选框，以便从控制台缓冲区中清除重复的命令。

  8. 单击“布局”选项卡。

  9. 在“屏幕缓冲区”部分，在“高度”框中键入一个介于 1 和 9999 之间的数字。高度表示已缓冲的输出行数。这是在控制台窗口中滚动时为查看而保留的最大行数。如果此数字小于“窗口大小”部分显示的高度，则窗口大小高度将自动减至该值。

  10. 在“窗口大小”部分，键入一个表示宽度的介于 1 和 9999 之间的数字。这表示跨控制台窗口显示的字符数。默认宽度是 80，Windows PowerShell 的输出格式是根据此宽度设计的。

  11. 如果希望在打开控制台时将其放置在桌面上的特定位置，请在“窗口位置”部分清除“由系统定位窗口”复选框，然后在“窗口位置”部分更改“左”和“上”框中的值。

  12. 单击“确定”。


Windows PowerShell About 帮助主题

本节包含 Windows PowerShell 中的概念性（“about”）帮助主题。

主题 | 说明
about_Aliases | 介绍 cmdlet 和命令在 Windows PowerShell 中的替代名称。
about_Arithmetic_Operators | 介绍 Windows PowerShell 中用于执行算术运算的运算符。
about_Arrays | 介绍数组；数组是一种用于存储数据元素的紧凑型数据结构。
about_Assignment_Operators | 介绍用于为变量赋值的运算符。
about_Automatic_Variables | 介绍用于存储 Windows PowerShell 状态信息的自动变量。
about_Break | 说明如何使用 Break 语句；此语句可立即退出 Foreach、For、While、Do 和 Switch 语句。
about_Command_Precedence | 说明 Windows PowerShell 如何查找命令。
about_Command_Syntax | 说明 Windows PowerShell 中的命令格式。
about_Comment_Based_Help | 说明如何为函数和脚本编写基于注释的帮助主题。
about_Commonparameters | 介绍可用于任何 cmdlet 的参数。
about_Comparison_Operators | 介绍 Windows PowerShell 中用于比较值的运算符。
about_Continue | 介绍 Continue 语句；此语句可立即返回到程序循环的顶部。
about_Core_Commands | 列出专门用于 Windows PowerShell 提供程序的 cmdlet。
about_Data_Sections | 介绍脚本的 Data 节；此节用于隔离数据与代码逻辑。
about_Debuggers | 介绍 Windows PowerShell 脚本调试程序；此调试程序是用于调试脚本和函数的一组 cmdlet。
about_Do | 介绍 Do 语句；此语句会根据 While 或 Until 条件将某一脚本块运行一次或多次。
about_Environment_Variables | 说明如何在 Windows PowerShell 中访问 Windows 环境变量。
about_Escape_Characters | 介绍 Windows PowerShell 中的转义字符 (`) 并说明其作用。
about_Eventlogs | 介绍事件查看器中的 Windows PowerShell 事件日志。
about_Execution_Policies | 介绍 Windows PowerShell 执行策略，并说明如何对它们进行管理。
about_For | 介绍 Windows PowerShell 中的 For 循环。
about_Foreach | 介绍 ForEach 语句；此语句会对集合中的每一项执行操作。
about_Format.ps1xml | 介绍用于定义对象在控制台中的默认显示方式的 Format.ps1xml 文件。
about_Functions | 说明如何在 Windows PowerShell 中创建和使用函数。
about_Functions_Advanced | 介绍高级函数；这些函数的行为类似于 cmdlet。
about_Functions_Advanced_Methods | 说明如何在高级函数中使用可用于 cmdlet 的方法和属性。
about_Functions_Advanced_Parameters | 说明如何为高级函数声明参数。
about_Functions_Cmdletbindingattribute | 介绍 CmdletBinding 属性；此属性标识工作方式类似于 cmdlet 的函数。
about_Hash_Tables | 说明如何在 Windows PowerShell 中创建和使用哈希表，以及如何对哈希表中的数据排序。
about_History | 说明如何获取和运行命令历史记录中的命令。
about_If | 介绍用于设定操作条件的 If 语句。
about_Jobs | 介绍 Windows PowerShell 后台作业。
about_Job_Details | 提供有关后台作业的详细信息。
about_Join | 介绍可将多个字符串合并为一个字符串的 Join 运算符。
about_Language_Keywords | 介绍 Windows PowerShell 脚本语言中的关键字。
about_Line_Editing | 介绍 Windows PowerShell 控制台的编辑功能。
about_Locations | 说明如何在 Windows PowerShell 中使用工作位置。
about_Logical_Operators | 介绍 Windows PowerShell 中用于连接语句的运算符。
about_Methods | 说明如何在 Windows PowerShell 中使用方法对对象执行操作。
about_Modules | 说明如何安装、导入和使用 Windows PowerShell 模块。
about_Objects | 说明如何在 Windows PowerShell 中使用对象。
about_Operators | 这是一个介绍 Windows PowerShell 中的运算符的概述主题，其中包含有关每种运算符类型的主题。
about_Parameters | 说明如何在 Windows PowerShell 中使用 cmdlet 参数。
about_Parsing | 说明 Windows PowerShell 如何分析命令。
about_Path_Syntax | 介绍 Windows PowerShell 中的完整和相对路径名称格式。
about_Pipelines | 说明如何在 Windows PowerShell 中将命令合并到管道中。
about_Preference_Variables | 介绍用于自定义 Windows PowerShell 的首选项变量。
about_Profiles | 说明如何创建和使用 Windows PowerShell 配置文件。
about_Prompts | 说明如何创建和使用 Windows PowerShell 配置文件。
about_Properties | 说明如何在 Windows PowerShell 中使用对象属性。
about_Providers | 介绍 Windows PowerShell 提供程序，并说明如何使用它们公开的数据。
about_PSSessions | 介绍 Windows PowerShell 会话 (PSSession)，并说明如何使用它们运行远程命令。
about_PSSession_Details | 提供有关 Windows PowerShell 会话的详细信息。
about_Pssnapins | 介绍 Windows PowerShell 管理单元，并说明如何使用它们扩展 Windows PowerShell。
about_Quoting_Rules | 说明单引号和双引号在 Windows PowerShell（包括 here-string）中的使用规则。
about_Redirection | 说明如何将输出重定向到变量和文本文件，并对重定向运算符进行了介绍。
about_Ref | 说明如何创建和使用引用变量类型。
about_Regular_Expressions | 说明如何在 Windows PowerShell 中使用正则表达式。
about_Remote | 介绍如何在 Windows PowerShell 中运行远程命令。
about_Remote_FAQ | 有关在 Windows PowerShell 中运行远程命令的问题和解答。
about_Remote_Jobs | 说明如何在远程计算机上运行后台作业
about_Remote_Output | 对远程命令的输出进行解释和格式设置。
about_Remote_Requirements | 在 Windows PowerShell 中运行远程命令的系统要求和配置要求。
about_Remote_Troubleshooting | 有关在 Windows PowerShell 中执行远程操作的疑难解答。
about_Requires | 介绍 Requires 语句；此语句不需要管理单元和版本信息即可阻止脚本运行。
about_Reserved_Words | 列出 Windows PowerShell 中的保留字。
about_Return | 退出当前作用域（可能是函数、脚本或脚本块）。
about_Scopes | 说明如何在 Windows PowerShell 中设置和更改函数与变量的作用域。
about_Script_Blocks | 说明如何使用脚本块将表达式、语句和命令合并为一个代码块。
about_Script_Internationalization | 介绍有助于脚本以选定的 Windows 语言来显示用户消息的功能。
about_Scripts | 说明如何在 Windows PowerShell 中编写和运行脚本。
about_Session_Configurations | 介绍用于确定可远程连接到计算机的用户及其可运行的命令的会话配置。
about_Signing | 介绍 Windows PowerShell 执行策略，并说明如何对它们进行管理，以及如何对脚本进行签名以使其符合执行策略。
about_Special_Characters | 介绍 Windows PowerShell 中的特殊字符。
about_Split | 介绍可将字符串拆分为多个子字符串的 Split 运算符。
about_Switch | 说明如何使用 switch 语句替换多个 If 语句。
about_Throw | 介绍可产生终止错误的 Throw 关键字。
about_Transactions | 说明如何管理 Windows PowerShell 中的事务处理操作。
about_Trap | 介绍用于处理终止错误的 Trap 关键字。
about_Try_Catch_Finally | 脚本中的错误处理是使用 Try、Catch 和 Finally 脚本块实现的。
about_Types.ps1xml | 介绍 Types.ps1xml 文件；此文件可用于扩展 Windows PowerShell 中所用对象的 .NET 类型。
about_Type_Operators | 介绍可用于 .NET 类型的运算符。
about_Variables | 这是一个概述主题，其中介绍了 Windows PowerShell 中的变量类型。
about_While | 介绍 Windows PowerShell 中的 While 循环。
about_Wildcards | 说明如何在 Windows PowerShell 中使用通配符 (*)。
about_Windows_PowerShell_2.0 | 介绍 Windows PowerShell 2.0 中引入的功能。
about_Windows_PowerShell_ISE | 介绍 Windows PowerShell 集成脚本环境。
about_WMI_Cmdlets | 提供有关 Windows Management Instrumentation (WMI) 和 Windows PowerShell 的背景信息。
about_WS-Management_Cmdlets | 概述作为在 Windows PowerShell 中使用 WS-Management cmdlet 的后台的 Web Services for Management (WS-Management)。

另请参阅

  • Windows PowerShell Cmdlet 帮助主题
  • Windows PowerShell 提供程序帮助主题
  • PowerShell.exe 控制台帮助
  • Windows PowerShell SDK


about_Aliases

主题
    about_aliases

简短说明
    说明如何在 Windows PowerShell 中使用 cmdlet 和命令的替代名称。

详细说明
    别名是 cmdlet 或命令元素（如函数、脚本、文件或可执行文件）的替代名称或昵称。可以在任何
    Windows PowerShell 命令中使用别名代替命令名称。

    要创建别名，请使用 New-Alias cmdlet。例如，下面的命令为 Get-AuthenticodeSignature
    cmdlet 创建别名"gas"：

        new-alias -name gas -valueGet-AuthenticodeSignature

    为 cmdlet 名称创建别名后，可使用别名代替 cmdlet 名称。例如，若要获取 SqlScript.ps1 文
    件的 Authenticode 签名，请键入：

        get-authenticodesignature sqlscript.ps1

    或键入：

        gas sqlscript.ps1

    如果创建"word"作为 Microsoft Office Word 的别名，则可以键入"word"替代下面的内容：

        "c:\program files\Microsoft Office\office11\winword.exe"

内置别名
    Windows PowerShell 包含一组内置别名，其中包括用于 Set-Location cmdlet 的"cd"和
    "chdir"，以及用于 Get-ChildItem cmdlet 的"ls"和"dir"。

    要获取计算机上的所有别名（包括内置别名），请键入：

        get-alias

别名 CMDLET
    Windows PowerShell 包含以下用于处理别名的 cmdlet：

        - Get-Alias. 获取当前会话中的所有别名。
        - New-Alias. 创建新别名。
        - Set-Alias. 创建或更改别名。
        - Export-Alias. 将一个或多个别名导出到文件中。
        - Import-Alias. 将别名文件导入到 Windows PowerShell 中。

    有关 cmdlet 的详细信息，请键入：

    get-help <cmdlet-name> -detailed

    例如，键入：

    get-help export-alias -detailed

创建别名
    要创建新别名，请使用 New-Alias cmdlet。例如，若要为 Get-Help 创建别名"gh"，请键入：

    new-alias -name gh -valueget-help

    可以在命令中像使用完整 cmdlet 名称一样使用别名，并且可以一起使用别名和参数。

    例如，若要获取 Get-WmiObject cmdlet 的详细帮助，请键入：

    get-help get-wmiobject -detailed

    或键入：

    gh get-wmiobject -detailed

保存别名
    您创建的别名只保存在当前会话中。要在另一个会话中使用这些别名，请将它们添加到 Windows
    PowerShell 配置文件中。或者使用 Export-Alias cmdlet 将别名保存到文件中。

    有关详细信息，请键入：

        get-help about_profile

获取别名
    要获取当前会话中的所有别名（包括内置别名、Windows PowerShell 配置文件中的别名，以及在当
    前会话中创建的别名），请键入：

    get-alias

    要获取特定别名，请使用 Get-Alias cmdlet 的 Name 参数。
    例如，若要获取以"p"开头的别名，请键入：

    get-alias -name p*

    要获取特定项的别名，请使用 Definition 参数。
    例如，若要获取 Get-ChildItem cmdlet 的别名，请键入：

    get-alias -definitionGet-ChildItem

带有参数的命令的备用名称
    可以将别名分配给 cmdlet、脚本、函数或可执行文件。但是，不能将别名分配给命令
    及其参数。例如，可以将别名分配给 Get-EventLog cmdlet，但不能将别名分配
    给"get-eventlog -logname system"命令。

    但是，可以创建包括命令的函数。要创建函数，请键入"function"一词，并在后面键入函数的名称。
    键入命令，并用大括号 ({}) 将其括起。

    例如，下面的命令创建 syslog 函数。下面的函数表示"get-eventlog -logname system"命令：

    function syslog {get-eventlog -logname system}

    现在，就可键入"syslog"代替该命令。此外，还可以为 syslog 函数创建别名。

    有关函数的详细信息，请键入：

    get-help about_functions

别名对象
     Windows PowerShell 别名由作为 System.Management.Automation.AliasInfo 类的实例
     的对象来表示。有关此类型的对象的详细信息，请参阅 Microsoft Developer Network (MSDN)
     库中的"AliasInfo 类"，地址为 http://go.microsoft.com/fwlink/?LinkId=143644。

     要查看别名对象的属性和方法，请获取别名。然后，将这些别名通过管道传递给 Get-Member
     cmdlet。例如：

    get-alias | get-member

     要查看特定别名（如"dir"别名）的属性的值，请获取别名。然后，将该别名通过管道传递给
     Format-List cmdlet。例如，下面的命令获取"dir"别名。接下来，该命令将别名通过管道传递
     给 Format-List cmdlet。然后，该命令使用 Format-List 的 Property 参数以及通配符 (*)
     来显示"dir"别名的所有属性。下面的命令执行这些任务：

    get-alias -name dir | format-list -property *

WINDOWS POWERSHELL ALIAS 提供程序
    Windows PowerShell 包含 Alias 提供程序。使用 Alias 提供程序，可以像在文件系统驱动器
    中一样查看 Windows PowerShell 中的别名。

    Alias 提供程序公开 Alias: 驱动器。要进入 Alias: 驱动器，请键入：

    set-location alias:

    要查看该驱动器的内容，请键入：

    get-childitem

    要从其他 Windows PowerShell 驱动器查看该驱动器的内容，请将该驱动器名称放在路径的开头。
    包括冒号 (:)。例如：

    get-childitem -path alias:

    要获取有关特定别名的信息，请键入驱动器名称和别名名称。或者键入名称模式。
    例如，若要获取以"p"开头的所有别名，请键入：

    get-childitem -path alias:p*

    有关 Windows PowerShell Alias 提供程序的详细信息，请键入：

    get-help alias-psprovider

另请参阅

    new-alias
    get-alias
    set-alias
    export-alias
    import-alias
    get-psprovider
    get-psdrive
    about_functions
    about_profiles
    about_providers


about_Arithmetic_Operators

主题
    about_Arithmetic_Operators

简短说明
    说明在 Windows PowerShell 中执行算术运算的运算符。

详细说明

    算术运算符计算数字值。可以使用一个或多个算术运算符对值进行加、减、乘和除运算，
    还可以计算除法运算中的余数（模）。

    此外，加法运算符 (+) 和乘法运算符 (*) 还可对字符串、数组和哈希表进行运算。加法运算符将输入连
    接起来。乘法运算符返回输入的多个副本。甚至可以在一个算术语句中混合使用对象类型。
    用于计算语句的方法由表达式最左边的对象的类型确定。

    Windows PowerShell 支持以下算术运算符：

    运算符	说明					示例
    --------  	-----------                             -------
    +         	将整数相加；连接字符串、数组和哈希表。	6+2  "file" + "name"

    -         	用一个值减去另一个值。			6-2 (get-date).date - 1

    -         	对数字取负。				-6+2
                                                          -4

    *         	将整数相乘；按指定次数复制字符串和数组。6*2 "w" * 3

    /         	将两个值相除。				6/2

    %         	返回除法运算的余数。			7%2

    运算符优先级
    Windows PowerShell 按照以下顺序处理算术运算符：

        圆括号 ()
        - （对负数）
        *, /, %
        +，- （对减法）

    Windows PowerShell 根据优先级规则从左到右处理表达式。以下示例演示优先级规则的效果：

        C:\PS> 3+6/3*4
        11

        C:\PS> 10+4/2
        12

        C:\PS> (10+4)/2
        7

        C:\PS> (3+3)/ (1+1)
        3

    Windows PowerShell 计算表达式的顺序可能与您使用过的其他编程和脚本语言不同。下面的示例演示一
    条复杂赋值语句。

        C:\PS> $a = 0
        C:\PS> $b = 1,2
        C:\PS> $c = -1,-2

        C:\PS> $b[$a] = $c[$a++]

        C:\PS> $b
        1
        -1

    在此示例中，表达式 $a++ 在 $c[$a++] 之前进行计算。计算 $a++ 会更改 $a 的值。$b[$a] 中的
    变量 $a 等于 1（而不是 0），因此该语句对 $b[1]（而不是 $b[0]）赋值。

    对非数字类型进行加法和乘法运算
    可以对数字、字符串、数组和哈希表进行加法运算。也可以对数字、
    字符串和数组进行乘法运算。但是，不能对哈希表进行乘法运算。

    在对字符串、数组或哈希表进行加法运算时，会将元素连接起来。
    在连接集合（如数组或哈希表）时，会创建包含两个集合中的对象的新对象。
    如果试图连接具有相同键的哈希表，则运算会失败。

    例如，下面的命令创建两个数组，然后将这两个数组相加：

    C:\PS> $a = 1,2,3
    C:\PS> $b = "A","B,"C"
    C:\PS> $a + $b
    1
    2
    3
    A
    B
    C

    此外，还可以对不同类型的对象执行算术运算。Windows PowerShell 执行的运算由运算中最左边的对象
    的 Microsoft .NET Framework 类型确定。Windows PowerShell 会尝试将运算中的所有对象都转换为
    第一个对象的 .NET Framework 类型。如果转换对象成功，则执行适用于第一个对象的 .NET Framework
    类型的运算。如果在转换任何对象时失败，则运算失败。

    下面的示例演示在包含不同对象类型的运算中使用加法和乘法运算符：

        C:\PS> "file" + 16
        file16

        C:\PS> $array = 1,2,3
        C:\PS> $array + 16
        1
        2
        3
        16

    C:\PS> $array + "file"
        1
        2
        3
        file

        C:\PS> "file" * 3
        filefilefile

    因为用于计算语句的方法由最左边的对象确定，所以 Windows PowerShell 中的加法和乘法不是严格可
    交换的。例如，(a + b) 并不总是等于 (b + a)，而 (a * b) 也不总是等于 (b * a)。

    以下示例演示这一原则：

        C:\PS> "file" + 2
        file2

        C:\PS> 2 + "file"
        无法将值“file”转移为类型“System.Int32”。错误：
        “输入字符串格式不正确。”
        位于行：1 字符：4
        + 2 + <<<< "file"

        C:\PS> "file" * 3
        filefilefile

        C:\PS> 3 * "file"
        无法将值“file”转移为类型“System.Int32”。错误：
        “输入字符串格式不正确。”
        位于行：1 字符：4
        + 3 * <<<< "file"

    哈希表的情况稍有不同。可以对哈希表进行加法运算。也可以将哈希表与数组相加。
    但是，不能将任何其他类型与哈希表相加。

    下面的示例演示如何将哈希表相加以及如何与其他对象相加：

        C:\PS> $hash1 = @{a=1; b=2; c=3}
        C:\PS> $hash2 = @{c1="Server01"; c2="Server02"}
        C:\PS> $hash1 + $hash2

        Name                           Value
        ----                           -----
        c2                             Server02 1
        b                              2
        c1                             Server01 3

        C:\PS> $hash1 + 2
        You can add another hash table only to a hash table.
        At line:1 char:9
        + $hash1 + <<<< 2

        C:\PS> 2 + $hash1
        Cannot convert "System.Collections.Hashtable" to "System.Int32".
        At line:1 char:4
        + 2 + <<<< $hash1

    下面的示例演示可以将哈希表与数组相加。整个哈希表作为单个对象添加到数组中。

        C:\PS> $array = 1,2,3
        C:\PS> $array + $hash1
        1
        2
        3

        Name                           Value
        ----                           -----
        a                              1
        b                              2
        c                              3

        C:\PS> $sum = $array + $hash1
        C:\PS> $sum.count
        4

        C:\PS> $sum[3]
        Name                           Value
        ----                           -----
        a                              1
        b                              2
        c                              3

        PS C:\ps-test> $sum + $hash2
        1
        2
        3

        Name                           Value
        ----                           -----
        a                              1
        b                              2
        c                              3
        c2                             Server02

    下面的示例演示不能对包含相同键的哈希表进行加法运算：

        C:\PS> $hash1 = @{a=1; b=2; c=3}
        C:\PS> $hash2 = @{c="red"}
        C:\PS> $hash1 + $hash2
        Bad argument to operator '+': Item has already been added.Key
        in dictionary: 'c'  Key being added: 'c'.
        At line:1 char:9
        + $hash1 + <<<< $hash2

    尽管加法运算符十分有用，在向哈希表和数组添加元素时，请使用赋值运算符。有关详细信息，请参阅
    about_assignment_operators。以下示例使用 += 赋值运算符将项添加到数组：

        C:\PS> $array
        1
        2
        3

        C:\PS> $array + "file"
        1
        2
        3
        file

        C:\PS> $array
        1
        2
        3

        C:\PS> $array += "file"
        C:\PS> $array
        1
        2
        3
        file

        C:\PS> $hash1

        Name                           Value
        ----                           -----
        a                              1
        b                              2
        c                              3

        C:\PS> $hash1 += @{e = 5}
        C:\PS> $hash1

        Name                           Value
        ----                           -----
        a                              1
        b                              2
        e                              5
        c                              3

    Windows PowerShell 自动选择最适于表示结果而不丢失精度的 .NET Framework 数值类型。例如：

        C:\PS> 2 + 3.1
        5.1
        C:\PS> (2).GetType().FullName
        System.Int32
        C:\PS> (2 + 3.1).GetType().FullName
        System.Double

    如果运算结果超出类型的表示范围，则扩大结果的类型以容纳结果，如下面的示例所示：

        C:\PS> (512MB).GetType().FullName
        System.Int32
        C:\PS> (512MB * 512MB).GetType().FullName
        System.Double

    结果的类型不一定与其中某个操作数相同。在下面的示例中，负值不能转换为无符号整数，而无符号整数太
    大，不能转换为 Int32：

        C:\PS> ([int32]::minvalue + [uint32]::maxvalue).gettype().fullname
        System.Int64

    在此示例中，Int64 可以容纳这两个类型。

    System.Decimal 类型是一个例外。如果任意一个操作数是 Decimal 类型，则结果将是 Decimal 类
    型。如果结果超出 Decimal 类型的表示范围，将不会转换为 Double。而会生成错误。

        C:\PS> [Decimal]::maxvalue
        79228162514264337593543950335
        C:\PS> [Decimal]::maxvalue + 1
        Value was either too large or too small for a Decimal.
        At line:1 char:22
        + [Decimal]::maxvalue + <<<< 1

    算术运算符和变量
    此外，还可以将算术运算符用于变量。运算符对变量的值执行运算。
    下面的示例演示将算术运算符用于变量：

        C:\PS> $intA = 6
        C:\PS> $intB = 4
        C:\PS> $intA + $intB

        10

        C:\PS> $a = "Windows "
        C:\PS> $b = "PowerShell "
        C:\PS> $c = 2
    C:\PS> $a + $b + $c

        Windows PowerShell 2

    算术运算符和命令
    在表达式中，算术运算符通常用于数字、字符串和数组。不过，
    算术运算符也可以用于命令返回的对象以及这些对象的属性。

    下面的示例演示如何通过 Windows PowerShell 命令在表达式中使用算术运算符：

    C:\PS> get-date
    Wednesday, January 02, 2008 1:28:42 PM

    C:\PS> $day = new-timespan -day 1
    C:\PS> get-date + $day
    Thursday, January 03, 2008 1:34:52 PM

    C:\PS> get-process | where {($_.ws * 2) -gt 50mb}
    Handles	 NPM(K)	   PM(K)      WS(K) VM(M)   CPU(s)     IdProcessName
    -------  ------    -----      ----- -----   ------     -- -----------
      1896      39    50968      30620   264 1,572.55   1104 explorer
      12802      78   188468      81032   753 3,676.39   5676 OUTLOOK
        660       9    36168      26956   143    12.20    988 powershell
        561      14     6592      28144   110 1,010.09    496 services
       3476      80    34664      26092   234 ...45.69    876 svchost
        967      30    58804      59496   416   930.97   2508 WINWORD

示例
    下面的示例演示如何在 Windows PowerShell 中使用算术运算符：

    C:\PS> 1 + 1
    2

    C:\PS> 1 - 1
    0

    C:\PS> -(6 + 3)
    -9

    C:\PS> 6 * 2
    12

    C:\PS> 7 / 2
    3.5

    C:\PS> 7 % 2
    1

    C:\PS> w * 3
    www

    C:\PS> 3 * "w"
    Cannot convert value "w" to type "System.Int32".Error: "Input string
    was not in a correct format."
    At line:1 char:4
    + 3 * <<<< "w"

    PS C:\ps-test> "Windows" + " " + "PowerShell"
    Windows PowerShell

    PS C:\ps-test> $a = "Windows" + " " + "PowerShell"
    PS C:\ps-test> $a
    Windows PowerShell

    C:\PS> $a[0]
    W

    C:\PS> $a = "TestFiles.txt"
    C:\PS> $b = "C:\Logs\"
    C:\PS> $b + $a
    C:\Logs\TestFiles.txt

    C:\PS> $a = 1,2,3
    C:\PS> $a + 4
    1
    2
    3
    4

    C:\PS> $servers = @{0 = "LocalHost"; 1 = "Server01"; 2 = "Server02"}
    C:\PS> $servers + @{3 = "Server03"}
    Name Value
    ---- -----
    3 Server03
    2 Server02
    1 Server01
    0 LocalHost

    C:\PS> $servers
    Name Value
    ---- -----
    2 Server02
    1 Server01
    0 LocalHost

    C:\PS> $servers += @{3 = "Server03"} #Use assignment operator
    C:\PS> $servers
    Name Value
    ---- -----
    3 Server03
    2 Server02
    1 Server01
    0 LocalHost

另请参阅
    about_arrays
    about_assignment_operators
    about_comparison_operators
    about_hash_tables
    about_operators
    about_variables
    Get-Date
    New-TimeSpan


about_Arrays

主题
    about_Arrays

简短说明
    描述用于存储数据元素的紧凑型数据结构

详细说明
    数组是一种数据结构，用于存储由相同类型的数据元素组成的集合。Windows PowerShell 支持的数
    据元素包括 string、int（32 位整数）、long（64 位整数）、bool（布尔）、byte 和其
    他 Microsoft .NET Framework 对象类型。

创建和初始化数组
    若要创建和初始化数组，请将多个值赋予变量。
    存储在数组中的值以逗号分隔，并以赋值运算符 (=) 与变量名称分开。

    例如，若要创建名为 $A 并且包含七个数字 (int) 值 22、5、10、8、12、9 和 80 的数组，请键入：

        $A = 22,5,10,8,12,9,80

    还可以使用范围运算符 (..) 创建并初始化数组。例如，若要创建并初始化名为"$B"并且包含值 5 到
    8 的数组，请键入：

        $B = 5..8

    结果是，$B 包含四个值：5、6、7 和 8。

    如果没有指定数据类型，Windows PowerShell 将以对象数组（类型：object[]）的形式创建每个数组。
    若要确定数组的数据类型，请使用 GetType() 方法。例如，若要确定 $a 数组的数据类型，请键入：

        $a.gettype()

    若要创建强类型数组（即只能包含特定类型的值的数组），请将变量转换为某个数组类型，例如，
    string[]、long[] 或 int32[]。若要转换数组，请将数组类型括在方括号内，放置在变量名称的前面。
    例如，若要创建名为 $ia 的 32 位整数数组，并且其中包含四个整数（1500、2230、3350 和 4000），
    请键入：

        [int32[]]$ia = 1500,2230,3350,4000

    结果是，$ia 数组只能包含整数。

    可以创建转换为在 Microsoft .NET Framework 中任何受支持类型的数组。例如，由 Get-Process 检索以表示
    进程的对象的类型为 System.Diagnostics.Process。若要创建进程对象的强类型数组，请输入下
    面的命令：

        [Diagnostics.Process[]]$zz = Get-Process

    可以使用 cmdlet、函数或语句的输出填充数组。例如，下面的语句创建包含以字母"co"开头并在当
    前计算机上运行的进程的数组：

        $LocalProcesses = get-process co*

    如果该语句只获取了一个进程，则 $LocalProcesses 变量不是数组。若要确保命令创建数组，请使
    用数组子表达式运算符 @，如下面的示例所示：

        $LocalProcesses = @(get-process co*)

    即使该命令返回一个进程，$LocalProcesses 变量也是数组。即使该数组只有一个成员，也可以像其
    他任何数组一样进行处理。例如，可以向其中添加其他对象。有关详细信息，请参阅
    about_Operators。

  读取数组
    可以使用数组的变量名称（如 $A 或 $a）来引用数组。Windows PowerShell 不区分大小写。

    若要显示数组中的所有元素，请键入数组名称。例如：

    $a

    可以使用索引来引用数组中的元素，其开始位置是 0。请将索引号放在方括号中。例如，若要显示 $a
    数组的第一个元素，请键入：

        $a[0]

    若要显示 $a 数组的第三个元素，请键入：

        $a[2]

    负数则从数组的末尾计数。例如，"-1"是指数组的最后一个元素。若要显示数组的最后 3 个元素，请
    键入：

        $a[-3..-1]

    但是，使用该表示法时请小心。

        $a[0..-2]

    此命令不引用数组中除最后一个以外的所有元素。
    它引用数组中第一个、最后一个和倒数第二个元素。

    可以使用范围运算符来显示数组中所有值的子集。例如，若要显示在索引位置 1 到 3 的数据元素，请
    键入：

        $a[1..3]

    可以使用加号运算符 (+) 将范围与数组元素的列表组合在一起。例如，若要显示在索引位置 0、2 和 4
    到 6 的元素，请键入：

        $a[0,2+4..6]

    若要确定数组中有多少项，请将范围与数组的长度属性组合在一起。例如，若要显示从索引位置 2 到数
    组末尾的元素，请键入：

        $a[2..($a.length-1)]

    长度设置为 -1，因为索引从位置 0 开始。因此，在有三个元素的数组 (1,2,3) 中，第三个元素的索引
    是 2，该索引比数组长度小一。

    还可以使用循环结构（如 Foreach、For 和 While 循环）来引用数组中的元素。例如，若要使用
    Foreach 循环显示 $a 数组中的元素，请键入：

        foreach ($element in $a) {$element}

    Foreach 循环将遍历数组，并返回数组中的每个值，直至到达数组的末尾。

    如果在检验数组元素的同时需要递增计数器，则可以使用 For 循环。例如，若要使用 For 循环在数组
    中每隔一个值返回一次值，请键入：

        for ($i = 0; $i -le ($a.length - 1); $i += 2) {$a[$i]}

    可以使用 While 循环显示数组元素，直到所定义的条件不再为 true。例如，若要在数组索引小于 4 时
    显示 $a 数组中的元素，请键入：

        $i=0
        while($i -lt 4) {$a[$i]; $i++}

    若要了解数组的属性和方法（如 Length 属性和 SetValue 方法），请使用 Get-Member cmdlet 的
    InputObject 参数。将数组通过管道传递给 Get-Member 时，它将显示有关数组中的对象的信息。
    使用 InputObject 参数时，它将显示有关数组的信息。

    若要查找 $a 数组的属性和方法，请键入：

    get-member -inputobject $a

  操作数组
    可以更改数组中的元素、向数组添加元素以及将两个数组中的值组合成第三个数组。

    若要更改数组中特定元素的值，请指定数组名称和要更改的元素的索引，然后使用赋值运算符 (=) 指定
    元素的新值。例如，若要将 $a 数组中第二项的值（索引位置 1）更改为 10，请键入：

        $a[1] = 10

    还可以使用数组的 SetValue 方法更改值。下面的示例将 $a 数组的第二个值（索引位置 1）更改为 500：

        $a.SetValue(500,1)

    通过使用 += 运算符，可以将元素追加到现有数组的末尾。此运算符将增加现有值。
    将该运算符用于数组元素时，它会使元素的值增加。将该运算符用于数组本身
    时，它会追加值。例如，若要将值为 200 的元素追加到 $a 数组的末尾，请键入：

        $a += 200

    从数组中删除元素很不容易，但可以新建一个数组，使之只包含从现有数组中选择出来的元素。例如，
    若要使用 $a 数组中除索引位置 2 的值以外的所有元素创建 $t 数组，请键入：

        $t = $a[0,1 + 3..($a.length - 1)]

    若要将两个数组组合成一个数组，请使用加号运算符 (+)。下面的示例创建两个数组，然后组合这两个
    数组，最后显示所得到的组合数组。

        $x = 1,3
        $y = 5,9
        $z = $x + $y

    结果是，$z 数组包含 1、3、5 和 9。

    若要删除数组，请使用 Remove-Item cmdlet 删除包含该数组的变量。下面的命令指定 Variable:
    驱动器中的元素"a"。

        remove-item variable:a

    （有关 Variable: 驱动器的详细信息，请键入“get-help variable-psprovider”。）

另请参阅
    about_Assignment_Operators
    about_Hash_Tables
    about_Operators
    about_For
    about_Foreach
    about_While


about_Assignment_Operators

主题
    about_assignment_operators

简短说明
    说明如何使用运算符向变量赋值。

详细说明
    赋值运算符可向一个变量赋予一个或多个值。赋值运算符可以在赋值之前对值执行数值运算。

    Windows PowerShell 支持以下赋值运算符。

    运算符    说明
    -------   -----------
    =         将变量的值设置为指定值。

    +=        使变量的值增加指定值，或将指定值追加到现有值。

    -=        使变量的值减少指定值。

    *=        将变量的值与指定值相乘，或将指定值追加到现有值。

    /=        将变量的值除以指定值。

    %=        将变量的值除以指定值，然后将余数（模）赋予变量。

    ++        使变量、可赋值属性或数组元素的值增加 1。

    --        使变量、可赋值属性或数组元素的值减少 1。

  语法
    赋值运算符的语法如下：

        <assignable-expression> <assignment-operator> <value>

    可赋值表达式包括变量和属性。值可以是单个值、值数组，也可以是命令、表达式或语句。

    递增和递减运算符是一元运算符。都有前缀和后缀形式。

        <assignable-expression><operator>
        <operator><assignable-expression>

    可赋值表达式必须是数字，或者可转换为数字。

  赋值
    变量是存储值的命名内存空间。使用赋值运算符 (=) 可以将值存储在变量中。新值可以替换变量的现
    有值，也可以将新值追加到现有值。

    基本赋值运算符是等号 (=)(ASCII 61)。例如，下面的语句将值 Windows PowerShell 赋予
    $MyShell 变量：

        $MyShell = "Windows PowerShell"

    在 Windows PowerShell 中向变量赋值时，如果该变量尚不存在，则会创建该变量。例如，下面两
    条赋值语句中的第一条创建 $a 变量并将值 6 赋予 $a。第二条赋值语句将值 12 赋予 $a。第一条
    语句创建一个新变量。第二条语句只更改该变量的值：

        $a = 6
        $a = 12

    Windows PowerShell 中的变量没有特定数据类型，除非进行转换。如果变量仅包含一个对象，则变
    量采用该对象的数据类型。如果变量包含对象集合，则变量为 System.Object 数据类型。因此，可以
    向该集合赋予任何类型的对象。下面的示例演示可以向变量添加进程对象、服务对象、字符串和整数，
    而不会生成错误：

        $a = get-process
        $a += get-service
        $a += "string"
        $a += 12

    因为赋值运算符 (=) 的优先级低于管道运算符 (|)，所以在将命令管道的结果赋予变量时不需要圆括
    号。例如，下面的命令对计算机上的服务进行排序，然后将排序后的服务赋予 $a 变量：

        $a = get-service | sort name

    还可以将语句创建的值赋予变量，如下面的示例所示：

        $a = if ($b -lt 0) { 0 } else { $b }

    此示例在 $b 的值小于 0 时将 0 赋予 $a 变量。如果 $b 的值不小于零，
    则将 $b 的值赋予 $a。

  赋值运算符 (=)
    赋值运算符 (=) 可以为变量赋值。如果变量已有值，则赋值运算符 (=) 替换该值而不会发出警告。

    下面的语句将整数值 6 赋予 $a 变量：

        $a = 6

    要将字符串值赋予变量，请将字符串值括在引号中，如下所示：

        $a = "baseball"

    要将数组（多个值）赋予变量，请使用逗号分隔值，如下所示：

        $a = "apple", "orange", "lemon", "grape"

    要将哈希表赋予变量，请使用 Windows PowerShell 中的标准哈希表表示法。键入一个 at 符号
    (@)，在其后键入使用分号 (;) 分隔、括在大括号 ({ }) 内的键/值对。例如，若要将哈希表赋予
    $a 变量，请键入：

        $a = @{one=1; two=2; three=3}

    要将十六进制值赋予变量，请在值前面加上"0x"。Windows PowerShell 会将十六进制值 (0x10)
    转换为十进制值（本例中为 16），然后将该值赋予 $a 变量。例如，若要将值 0x10 赋予变量 $a，
    请键入：

        $a = 0x10

    要将指数值赋予变量，请键入根数字、字母"e"和一个表示 10 的倍数的数字。例如，若要将
    3.1415 的 1,000 次幂值赋予 $a 变量，请键入：

        $a = 3.1415e3

    Windows PowerShell 还可以将千字节 (KB)、兆字节 (MB) 和千兆字节 (GB) 转换为字节。例
    如，如要将值 10 千字节赋予 $a 变量，请键入：

        $a = 10kb

  加法赋值运算符 (+=)
    加法赋值运算符 (+=) 可增加变量的值或将指定值追加到现有值。具体操作取决于变量是数字还是字符
    串类型，以及变量是包含单个值（标量）还是多个值（集合）。

    += 运算符组合了两个运算。首先执行加法，然后赋值。因此，以下语句是等效的：

        $a += 2
        $a = ($a + 2)

    如果变量包含单个数字值，则 += 运算符使现有值增加该运算符右侧的数量。然后，该运算符将得到的
    值赋予变量。下面的示例演示如何使用 += 运算符增加变量的值：

        C:\PS> $a = 4
        C:\PS> $a += 2
        C:\PS> $a
        6

    如果变量的值是字符串，则将该运算符右侧的值追加到该字符串，如下所示：

        C:\PS> $a = "Windows"
        C:\PS> $a +- " PowerShell"
        C:\PS> $a
        Windows PowerShell

    如果变量的值是数组，则 += 运算符将其右侧的值追加到数组。除非通过转换显式指定数组的类型，
    否则可以将任何类型的值追加到数组，如下所示：

        C:\PS> $a = 1,2,3
        C:\PS> $a += 2
        C:\PS> $a
        1
        2
        3
        2
        C:\PS> $a += "String"
        C:\PS> $a
        1
        2
        3
        2
        String

    如果变量的值是哈希表，则 += 运算符将其右侧的值追加到该哈希表。不过，因为只能向哈希表添加另
    一个哈希表，所以所有其他赋值都会失败。

    例如，下面的命令将哈希表赋予 $a 变量。
    然后，该命令使用 += 运算符将另一个哈希表追加到现有哈希表，实际上是将一个新键/值对添加到现
    有哈希表。此命令成功，输出如下所示：

        C:\PS> $a = @{a = 1; b = 2; c = 3}
        C:\PS> $a += @{mode = "write"}
        C:\PS> $a
        Name                           Value
        ----                           -----
        a                              1
        b                              2
        mode                           write
        c                              3

    下面的命令试图将一个整数 (1) 追加到 $a 变量中的哈希表。此命令将失败：

        C:\PS> $a = @{a = 1; b = 2; c = 3}
        C:\PS> $a += 1
        You can add another hash table only to a hash table.
        At line:1 char:6
        + $a += <<<< 1

  减法赋值运算符 (-=)
    减法赋值运算符 (-=) 使变量的值减少在该运算符右侧指定的值。
    此运算符不能用于字符串变量，也不能用于从集合中删除元素。

    -= 运算符组合了两个运算。首先执行减法，然后赋值。因此，以下语句是等效的：

        $a -= 2
        $a = ($a - 2)

    下面的示例演示如何使用 -= 运算符减少变量的值：

        C:\PS> $a = 8
        C:\PS> $a -= 2
        C:\PS> $a
        6

    还可以使用 -= 赋值运算符减少数值数组的成员的值。为此，请指定要更改的数组元素的索引。在下面
    的示例中，数组中第三个元素（元素 2）的值减少 1：

        C:\PS> $a = 1,2,3
        C:\PS> $a[2] -= 1.
        C:\PS> $a
        1
        2
        2

    不能使用 -= 运算符删除变量的值。要删除赋予变量的所有值，请使用 Clear-Item 或 Clear-
    Variable cmdlet 将值 $null 或 "" 赋予变量。

        $a = $null

    要从数组中删除特定值，请使用数组表示法将值 $null 赋予该特定项。例如，下面的语句从数组中删
    除第二个值（索引位置 1）：

        C:\PS> $a = 1,2,3
        C:\PS> $a
        1
        2
        3

        C:\PS> $a[1] = $null
        C:\PS> $a
        1
        3

    要删除变量，请使用 Remove-Variable cmdlet。在变量已显式转换为特定数据类型，而您需要非
    类型化变量时，可以使用此方法。下面的命令删除 $a 变量：

        remove-variable a

  乘法赋值运算符 (*=) 乘法赋值运算符 (*=) 对数字值执行乘法或追加指定数目的变量字符串值副本。

    如果变量包含单个数字值，则将该值与运算符右侧的值相乘。例如，下面的示例演示如何使用 *= 运算
    符对变量的值执行乘法：

        C:\PS> $a = 3
        C:\PS> $a *= 4
        C:\PS> $a
        12

    在此示例中，*= 运算符组合了两个运算。首先执行乘法，然后赋值。因此，以下语句是等效的：

        $a *= 2
        $a = ($a * 2)

    如果变量包含字符串值，则 Windows PowerShell 将指定数目的字符串追加到该值，如下所示：

        C:\PS> $a = "file"
        C:\PS> $a *= 4
        C:\PS> $a
        filefilefilefile

    要对数组的元素执行乘法，请使用索引标识要执行乘法的元素。例如，下面的命令使数组中第一个元素
    （索引位置 0）乘以 2：

        $a[0] *= 2

  除法赋值运算符 (/=)
    除法赋值运算符 (/=) 使数字值除以在运算符右侧指定的值。该运算符不能用于处理字符串变量。

    /= 运算符组合了两个运算。首先执行除法，然后赋值。因此，以下两个语句是等效的：

        $a /= 2
        $a = ($a / 2)

    例如，下面的命令使用 /= 运算符对变量的值执行除法：

        C:\PS> $a = 8
        C:\PS> $a /=2
        C:\PS> $a
        4

    要对数组的元素执行除法，请使用索引标识要更改的元素。例如，下面的命令将数组中第二个元素
    （索引位置 1）除以 2：

        $a[1] /= 2

  模赋值运算符 (%=)
    模赋值运算符 (%=) 使变量的值除以运算符右侧的值。然后，%= 运算符将余数（称为"模"）赋予变
    量。仅当变量包含单个数字值时，才能使用此运算符。如果变量包含字符串变量或数组，则不能使用此运
    算符。

    %= 运算符组合了两个运算。首先，执行除法运算并确定余数，然后将余数赋予变量。因此，以下语句
    是等效的：

        $a %= 2
        $a = ($a % 2)

    下面的示例演示如何使用 %= 运算符保存商的模：

        C:\PS> $a = 7
        C:\PS> $a %= 4
        C:\PS> $a
        3

  递增和递减运算符

    递增运算符 (++) 使变量的值增加 1。在简单语句中使用递增运算符时，不返回任何值。
    要查看结果，请显示变量的值，如下所示：

        C:\PS> $a = 7
        C:\PS> ++$a
        C:\PS> $a
        8

    要强制返回值，请将变量和运算符括在圆括号内，如下所示：

        C:\PS> $a = 7
        C:\PS> (++$a)
        8

    递增运算符可以放在变量之前（前缀）或之后（后缀）。该运算符的前缀形式在变量的值
    用于语句之前使变量递增，如下所示：

        C:\PS> $a = 7
        C:\PS> $c = ++$a
        C:\PS> $a
        8
        C:\PS> $c
        8

    该运算符的后缀形式在变量的值用于语句之后使变量递增。在下面的示例中，$c 和 $a 变量具有不同
    的值，因为是在 $a 更改之前向 $c 赋值：

        C:\PS> $a = 7
        C:\PS> $c = $a++
        C:\PS> $a
        8
        C:\PS> $c
        7

    递减运算符 (--) 使变量的值减少 1。与递增运算符一样，在简单语句中使用递减运算符时，不返回
    任何值。使用圆括号可返回值，如下所示：

        C:\PS> $a = 7
        C:\PS> --$a
        C:\PS> $a
        6
        C:\PS> (--$a)
        5

    该运算符的前缀形式在变量的值用于语句之前使变量递减，如下所示：

        C:\PS> $a = 7
        C:\PS> $c = --$a
        C:\PS> $a
        6
        C:\PS> $c
        6

    该运算符的后缀形式在变量的值用于语句之后使变量递减。在下面的示例中，$d 和 $a 变量具有不同
    的值，因为是在 $a 更改之前向 $d 赋值：

        C:\PS> $a = 7
        C:\PS> $d = $a--
        C:\PS> $a
        6
        C:\PS> $d
        7

  MICROSOFT .NET FRAMEWORK 类型
    默认情况下，当变量只有一个值时，由赋予变量的值确定变量的数据类型。例如，下面的命令创建一个
    整数 (System.Int32) 类型的变量：

        $a = 6

    要确定变量的 .NET Framework 类型，请使用 GetType 方法及其 FullName 属性，如下所示。
    请务必在 GetType 方法名称之后包括圆括号，即使该方法调用没有任何参数：

        C:\PS> $a = 6
        C:\PS> $a.gettype().fullname
        System.Int32

    要创建包含字符串的变量，请将字符串值赋予变量。要指示值为字符串，请将值括在引号中，如下所示：

        C:\PS> $a = "6"
        C:\PS> $a.gettype().fullname
        System.String

    如果赋予变量的第一个值是字符串，则 Windows PowerShell 将所有运算都视为字符串运算，并将
    新值转换为字符串。下面的示例即是这种情况：

        C:\PS> $a = "file"
        C:\PS> $a += 3
        C:\PS> $a
        file3

    如果第一个值是整数，则 Windows PowerShell 将所有运算都视为整数运算，并将新值转换为整
    数。下面的示例即是这种情况：

        C:\PS> $a = 6
        C:\PS> $a += "3"
        C:\PS> $a
        9

    通过将类型名称放在变量名称或第一个所赋值前面的方括号中，可以将新的标量变量转换为任何 .NET
    Framework 类型。在转换变量时，可以确定该变量所能存储的数据的类型。同时，还可以确定填充变
    量时的变量行为方式。

    例如，以下命令将变量转换为字符串类型：

        C:\PS> [string]$a = 27
        C:\PS> $a += 3
        C:\PS> $a
        273

    下面的示例转换第一个值，而不是转换变量：

        $a = [string]27

    将变量转换为特定类型时，通常的约定是转换变量而不是值。但是，
    如果现有变量的值不能转换为新数据类型，则不能重新转换该变量的数据类型。
    要更改数据类型，必须替换该变量的值，如下所示：

        C:\PS> $a = "string"
        C:\PS> [int]$a
        Cannot convert value "string" to type "System.Int32".Error: "Input
        string was not in a correct format."
        At line:1 char:8
        + [int]$a <<<<

        C:\PS> [int]$a =3

    此外，将数据类型放在变量名称的前面会锁定变量的类型，除非通过指定
    另一个数据类型显式覆盖该类型。如果试图赋予与现有类型不兼容的值，
    并且未显式覆盖该类型，则 Windows PowerShell 将显示错误，如下面的示例所示：

        C:\PS> $a = 3
        C:\PS> $a = "string"

        C:\PS> [int]$a = 3
        C:\PS> $a = "string"
        Cannot convert value "string" to type "System.Int32".Error: "Input
        string was not in a correct format."
        At line:1 char:3
        + $a <<<< = "string"

        C:\PS> [string]$a = "string"

    在 Windows PowerShell 中，通过数组包含多个项的变量的数据类型的处理方式与包含单个项的变
    量的数据类型不同。除非明确向数组变量指定数据类型，否则其数据类型始终是 System.Object []。
    此数据类型是特定于数组的。

    有时，可以通过指定另一个类型来覆盖默认类型。例如，下面的命令将变量转换为 string []
    数组类型：

        [string []] $a = "one", "two", "three"

    Windows PowerShell 变量可以是任何 .NET Framework 数据类型。此外，可以赋予在当前进程
    中可用的任何完全限定的 .NET Framework 数据类型。例如，下面的命令指定 System.DateTime
    数据类型：

        [system.datetime]$a = "5/31/2005"

    这会将符合 System.DateTime 数据类型的值赋予变量。$a 变量的值如下所示：

        Tuesday, May 31, 2005 12:00:00 AM

  为多个变量赋值
    在 Windows PowerShell 中，可以使用单个命令对多个变量赋值。所赋值的第一个元素将赋予第一
    个变量，第二个元素赋予第二个变量，第三个元素赋予第三个变量，依此类推。例如，下面的命令将值
    1 赋予 $a 变量，将值 2 赋予 $b 变量，并将值 3 赋予 $c 变量：

        C:\PS> $a, $b, $c = 1, 2, 3

    如果所赋值包含的元素个数超过变量数，则将所有剩余的值都赋予最后一个变量。
    例如，下面的命令包含三个变量和五个值：

        $a, $b, $c = 1, 2, 3, 4, 5

    因此，Windows PowerShell 将值 1 赋予 $a 变量并将值 2 赋予 $b 变量，而将值 3、4 和 5
    赋予 $c 变量。要将 $c 变量中的值赋予另外三个变量，请使用下面的格式：

        $d, $e, $f = $c

    此命令将值 3 赋予 $d 变量，将值 4 赋予 $e 变量，并将值 5 赋予 $f 变量。

    通过串联变量，还可以将单个值赋予多个变量。例如，以下命令将值"three"赋予所有四个变量：

        $a = $b = $c = $d = "three"

  与变量相关的 CMDLET
    除了使用赋值运算来设置变量值以外，还可以使用 Set-Variable cmdlet。例如，下面的命令使用
    Set-Variable 将包含 1、2、3 的数组赋予 $a 变量。

        Set-Variable -name a -value 1, 2, 3

另请参阅
    about_Arrays
    about_Hash_Tables
    about_Variables
    Clear-Variable
    Remove-Variable
    Set-Variable


about_Automatic_Variables

主题
    about_Automatic_Variables

简短说明
    说明存储 Windows PowerShell 状态信息的变量。
    这些变量由 Windows PowerShell 创建并维护。

详细说明
    下面是 Windows PowerShell 中的自动变量的列表：

    $$
       包含会话所收到的最后一行中的最后一个令牌。

    $?
       包含最后一个操作的执行状态。如果最后一个操作成功，则包含 TRUE，失败则包含 FALSE。

    $^
       包含会话所收到的最后一行中的第一个令牌。

    $_
       包含管道对象中的当前对象。在对管道中的每个对象或所选对象执行操作的命令中，可以使用此变量。

    $Args
       包含由未声明参数和/或传递给函数、脚本或脚本块的参数值组成的数组。
       在创建函数时可以声明参数，方法是使用 param 关键字或在函数名称后添加以圆括号括起、逗号
       分隔的参数列表。

    $ConsoleFileName
       包含在会话中最近使用的控制台文件 (.psc1) 的路径。在通过 PSConsoleFile 参数启动
       Windows PowerShell 或使用 Export-Console cmdlet 将管理单元名称导出到控制台文件
       时，将填充此变量。

       在使用不带参数的 Export-Console cmdlet 时，它自动更新在会话中最近使用的控制台文件。
       可以使用此自动变量确定要更新的文件。

    $Error
       包含错误对象的数组，这些对象表示最近的一些错误。最近的错误是该数组中的第一个错误对象
       ($Error[0])。

    $Event
       包含一个 PSEventArgs 对象，该对象表示一个正在被处理的事件。
       此变量只在事件注册命令（例如 Register-ObjectEvent）的 Action 块内填充。
       此变量的值是 Get-Event cmdlet 返回的同一个对象。
       因此，可以在 Action 脚本块中使用 $Event 变量的属性（例如
       $Event.TimeGenerated）。

    $EventSubscriber
       包含一个 PSEventSubscriber 对象，该对象表示正在被处理的事件的事件订阅者。
       此变量只在事件注册命令的 Action 块内填充。此变量的值
       是 Get-EventSubscriber cmdlet 返回的同一个对象。

    $ExecutionContext
       包含一个 EngineIntrinsics 对象，该对象表示 Windows PowerShell 主机的执行上下文。
       可以使用此变量来查找可用于 cmdlet 的执行对象。

    $False
       包含 FALSE。可以使用此变量在命令和脚本中表示 FALSE，而不是使用字符串"false"。如果
       该字符串转换为非空字符串或非零整数，则可将该字符串解释为 TRUE。

    $ForEach
       包含 ForEach-Object 循环的枚举数。可以对 $ForEach 变量的值使用枚举数的属性和方法。
       此变量仅在运行 For 循环时存在，循环完成即会删除。

    $Home
       包含用户的主目录的完整路径。此变量等效于 %homedrive%%homepath% 环境变量。

    $Host
       包含一个对象，该对象表示 Windows PowerShell 的当前主机应用程序。可以使用此变量在命
       令中表示当前主机，或者显示或更改主机的属性，如 $Host.version、$Host.CurrentCulture
       或 $host.ui.rawui.setbackgroundcolor("Red")。

    $Input
       一个枚举数，它包含传递给函数的输入。$Input 变量区分大小写，只能用于函数和脚本块。（脚
       本块本质上是未命名的函数。）在函数的 Process 块中，$Input 变量包含当前位于管道中的对
       象。在 Process 块完成后，$Input 的值为 NULL。如果函数没有 Process 块，则 $Input
       的值可用于 End 块，它包含函数的所有输入。

    $LastExitCode
       包含运行的最后一个基于 Windows 的程序的退出代码。

    $Matches
       $Matches 变量与 -match 和 -not match 运算符一起使用。
       将标量输入提交给 -match 或 -notmatch 运算符时，如果检测到匹配，则会返回一个布尔值，
       并使用由所有匹配字符串值组成的哈希表填充 $Matches 自动变量。有关 -match 运算符的详细
       信息，请参阅 about_comparison_operators。

    $MyInvocation
       包含一个对象，该对象具有有关当前命令（如脚本、函数或脚本块）的信息。可以使用该对象中的
       信息（如脚本的路径和文件名 ($myinvocation.mycommand.path) 或函数的名称
       ($myinvocation.mycommand.name)）来标识当前命令。对于查找正在运行的脚本的名称，这非常有用。

    $NestedPromptLevel
       包含当前提示级别。值 0 指示原始提示级别。该值在进入嵌套级别时递增，在退出嵌套级别时递减。

       例如，在使用 $Host.EnterNestedPrompt 方法时，Windows PowerShell 会出现嵌套命令
       提示符。在 Windows PowerShell 调试程序中到达断点时，Windows PowerShell 也会出现嵌
       套命令提示符。

       在进入嵌套提示时，Windows PowerShell 暂停当前命令，保存执行上下文，并递增
       $NestedPromptLevel 变量的值。要创建更多嵌套命令提示符（最多 128 级）或返回到原始命
       令提示符，请完成命令，或键入"exit"。

       $NestedPromptLevel 变量有助于跟踪提示级别。可以创建包含此值的备用 Windows
       PowerShell 命令提示符，以使此值始终可见。

    $NULL
       包含 NULL 或空值。可以在命令和脚本中使用此变量表示 NULL，而不是使用字符串"NULL"。
       如果该字符串转换为非空字符串或非零整数，则可将该字符串解释为 TRUE。

    $PID
       包含承载当前 Windows PowerShell 会话的进程的进程标识符 (PID)。

    $Profile
       包含当前用户和当前主机应用程序的 Windows PowerShell 配置文件的完整路径。可以在命令
       中使用此变量表示配置文件。例如，可以在命令中使用此变量确定是否已创建某个配置文件：

           test-path $profile

       也可以在命令中使用此变量创建配置文件：

           new-item -type file -path $pshome -force

       此外，还可以在命令中使用此变量在记事本中打开配置文件：

           notepad $profile

    $PSBoundParameters
       包含活动参数及其当前值的字典。只有在声明参数的作用域（如脚本或函数）中，
       此变量才有值。可以使用此变量显示或更改参数的当前值，也可以将参数值传递给
       其他脚本或函数。

       例如：

         function test {
            param($a, $b)

            # 以词典格式显示参数。
            $psboundparameters

            # 使用 $a 和 $b 调用 Test1 函数。
            test1 @psboundparameters
         }

    $PsCmdlet
       包含一个对象，该对象表示正在运行的 cmdlet 或高级函数。

       可以在 cmdlet 或函数代码中使用该对象的属性和方法来响应使用的条件。例如，
       ParameterSetName 属性包含正在使用的参数集的名称，而 ShouldProcess 方法将 WhatIf
       和 Confirm 参数动态添加到 cmdlet。

       有关 $PSCmdlet 自动变量的详细信息，请参阅 about_Functions_Advanced。

    $PsCulture
       包含操作系统中当前所用的区域性的名称。区域性确定数字、货币和日期等项的显示格式。这是系
       统的 System.Globalization.CultureInfo.CurrentCulture.Name 属性的值。要获取系统
       的 System.Globalization.CultureInfo 对象，请使用 Get-Culture cmdlet。

    $PSDebugContext
       在调试期间，此变量包含有关调试环境的信息。在其他时间，此变量包含 NULL 值。因此，可以使
       用此变量指示调试程序是否拥有控制权。填充之后，此变量包含一个具有 Breakpoints 和
       InvocationInfo 属性的 PsDebugContext 对象。InvocationInfo 属性有多个十分有用的
       属性，包括 Location 属性。Location 属性指示正在调试的脚本的路径。

    $PsHome
       包含 Windows PowerShell 的安装目录的完整路径（通常为
       %windir%\System32\WindowsPowerShell\v1.0）。可以在 Windows PowerShell 文件
       的路径中使用此变量。例如，下面的命令在概念性帮助主题中搜索"variable"一词：

            select-string -pattern variable -path $pshome\*.txt

    $PSScriptRoot
       包含要从中执行脚本模块的目录。
       通过此变量，脚本可以使用模块路径来访问其他资源。

    $PsUICulture
       包含操作系统中当前所用的用户界面 (UI) 区域性的名称。UI 区域性确定哪些文本字符串用于用户
       界面元素（如菜单和消息）。这是系统的
       System.Globalization.CultureInfo.CurrentUICulture.Name 属性的值。要获取系统
       的 System.Globalization.CultureInfo 对象，请使用 Get-UICulture cmdlet。

    $PsVersionTable
        包含一个只读哈希表，该哈希表显示有关在当前会话中运行的 Windows PowerShell 版本的详
        细信息。
        该表包括下列项：

        CLRVersion：            公共语言运行时 (CLR) 的版本

        BuildVersion：          当前版本的内部版本号

            PSVersion：             Windows PowerShell 版本号

            WSManStackVersion：     WS-Management 堆栈的版本号

        PSCompatibleVersions：  与当前版本兼容的 Windows PowerShell 版本

            SerializationVersion    序列化方法的版本

            PSRemotingProtocolVersion
                                    Windows PowerShell 远程管理协议的版本

    $Pwd
       包含一个路径对象，该对象表示当前目录的完整路径。

    $Sender
       包含生成此事件的对象。此变量只在事件注册命令的 Action 块内填充。
       此变量的值也可在 Get-Event 返回的 PSEventArgs
       (System.Management.Automation.PSEventArgs) 对象的 Sender 属性中找到。

    $ShellID
       包含当前 shell 的标识符。

    $SourceArgs
       包含表示正在被处理的事件的事件参数的对象。此变量只在事件注册命令的 Action
       块内填充。此变量的值也可在 Get-Event 返回的 PSEventArgs
       (System.Management.Automation.PSEventArgs) 对象的 SourceArgs 属性中找到。

    $SourceEventArgs
       包含一个对象，该对象表示从正在被处理的事件的 EventArgs 中派生出的
       第一个事件参数。此变量只在事件注册命令的 Action 块内填充。
       此变量的值也可在 Get-Event 返回的 PSEventArgs
       (System.Management.Automation.PSEventArgs) 对象的 SourceArgs 属性中找到。

    $This
        在定义脚本属性或脚本方法的脚本块中，$This 变量引用要扩展的对象。

    $True
       包含 TRUE。可以在命令和脚本中使用此变量表示 TRUE。

另请参阅
    about_Hash_Tables
    about_Preference_Variables
    about_Variables


about_Break

主题
    about_Break

简短说明
    描述一个可用于立即退出 Foreach、For、While、Do 或 Switch 语句的语句。

详细说明
    当 Break 语句出现在如 Foreach、For、Switch 或 While 等循环中时，该 Break 语句将使
    Windows PowerShell 立即退出该循环。在不循环的 Switch 构造中，Break 语句将使 Windows
    PowerShell 退出 Switch 代码块。

    Break 语句可以包含用于退出嵌套循环的标签。标签可以指定脚本中的任何循环关键字，如
    Foreach、For 或 While。使用标签时，Break 语句将使程序退出指定的循环。无论 Break 语句位
    于哪个循环中，它都使程序退出指定的循环。

    以下示例说明如何使用 Break 语句退出 For 语句：

        for($i=1; $i -le 10; $i++)
        {
            Write-Host $i
            break
        }

    在此示例中，Break 语句在 $i 变量等于 1 时将使程序退出 For 循环。虽然 For 语句在 $i 大
    于 10 之前计算结果都为 True，但 Windows PowerShell 仍会在第一次运行 For 循环时到达
    break 语句。

    Break 语句更常用于一定会满足某内部条件的循环中。以下面的 Foreach 语句为例：

        $i=0
        $varB = 10,20,30,40
        foreach ($val in $varB)
        {
            $i++
            if ($val -eq 30)
            {
                break
            }
        }
        Write-Host "30 was found in array position $i"

    在此示例中，Foreach 语句循环访问 $varB 数组。每次运行代码块时，$i 变量将递增 1。前两次运
    行循环时 if 语句的计算结果为 False。第三次运行循环时，$i 等于 3 并且 $val 变量等于 30。这
    时将运行 Break 语句，从而退出 Foreach 循环。

    退出其他循环语句与退出 Foreach 循环的方式完全相同。在以下示例中，在使用 Trap 语句捕获到
    DivideByZeroException 异常后，Break 语句将使程序退出 While 语句。

        $i = 3
        while ($true)
        {
            trap [DivideByZeroException]
            {
                Write-Host "divide by zero trapped" break
            }
            1 / $i--
        }

    Break 语句可以包含标签。如果将 Break 关键字与标签一起使用，Windows PowerShell 将退出
    带标签的循环而不是退出当前循环。标签的语法如下（此示例演示了 While 循环中的一个标签)：

        :myLabel while (<condition>) { <statement list>}

    标签的格式是冒号加您指定的名称。标签必须是语句中的第一个标记，后面必须跟随循环关键字（如
    While）。

    在 Windows PowerShell 中，只有循环关键字（如 Foreach、For 和 While）可以带标签。

    Break 将语句的执行移到带标签的循环之外。在嵌套循环中，这将产生与单用 Break 关键字不同的
    结果。以下结构性示例中的 While 语句含有一个 For 语句：

        :myLabel while (<condition 1>)
        {
            for ($item in $items)
            {
                if (<condition 2>) { break myLabel }
                $item = $x  # A statement inside the For-loop }
        }
        $a = $c # A statement after the labeled While-loop

    如果 condition 2 计算结果为 True，则脚本执行将跳到带标签的循环之后的语句。在本示例中，
    程序的执行将从"$a = $c"语句重新开始。

    如下面的结构性示例所示，您可以嵌套多个带标签的循环。

        :red while (<condition1>)
        {
            :yellow while (<condition2>)
            {
                while (<condition3>)
                {
                    if ($a) {break}
                    if ($b) {break red}
                    if ($c) {break yellow}
                }
                # After innermost loop
            }
                # After "yellow" loop
        }
                # After "red" loop

    如果 $b 变量计算结果为 True，则脚本的执行将在带"red"标签的循环之后继续。如果 $c 变量计
    算结果为 True，则脚本控制的执行将在带"yellow"标签的循环之后继续。

    如果 $a 变量计算结果为 True，则脚本执行将在最内层循环之后继续。跳出最内层循环不需要标签。

    Windows PowerShell 不限制使用标签恢复执行的位置。标签甚至可以跨越脚本和函数调用的边界传
    递控制。

    Break 关键字用于退出 Switch 构造。例如，以下 Switch 语句使用 Break 语句测试可以满足的最精确
    条件：

        $var = "word2"
        switch -regex ($var)
        {
            "word2"
            {
                Write-Host "Exact" $_
                break
            }

            "word.*"
            {
                Write-Host "Match on the prefix" $_ break
            }

            "w.*"
            {
                Write-Host "Match on at least the first letter" $_ break
            }

            default
            {
                Write-Host "No match" $_
                break
            }
        }

    此示例创建 $Var 变量并将其初始化为字符串值"word2"。Switch 语句使用 Regex 类先将该变量
    值与"word2"进行匹配。（Regex 类是一个 Microsoft .NET Framework 正则表达式类。）由
    于变量值与 Switch 语句中的第一个测试值匹配，因此将运行 Switch 语句中的第一个代码块。

    当 Windows PowerShell 到达第一个 Break 语句时，Switch 语句将退出。如果从此示例中删除这四
    个 Break 语句，则所有四个条件都会满足。此示例使用 Break 语句显示满足最精确的条件时的结果。

另请参阅
    about_Comparison_Operators
    about_For
    about_Foreach
    about_Switch
    about_While


about_Command_Precedence

主题
    about_Command_Precedence

简短说明
    描述 Windows PowerShell 如何确定要运行哪个命令。

详细说明

    此主题说明 Windows PowerShell 如何确定要运行哪个命令，特别是当会话包含多个同名命令时运行哪个命令。
    另外，此主题还说明如何运行在默认情况下不会运行的命令，以及如何在会话中避免命令名冲突。

 命令优先级
    当会话包含多个同名命令时，Windows PowerShell 按以下规则确定运行哪个命令。

    当从模块、管理单元和其他会话向您的会话中添加命令时，这些规则变得非常重要。

    -- 如果指定了命令的路径，Windows PowerShell 则运行路径所指定的位置的命令。

       例如，以下命令将运行位于 C:\TechDocs 目录下的 FindDocs.ps1 脚本：

           C:\TechDocs\FindDocs.ps1

       作为一项安全功能，Windows PowerShell 不运行包括 Windows PowerShell 脚本在内的可执行（本机）
       命令，除非该命令位于在 Path 环境变量 ($env:path) 中列出的路径中或您指定了脚本文件的路径。

       要运行位于当前目录下的脚本，请指定完整路径，或者键入句点 (.) 表示当前目录。

       例如，要运行当前目录下的 FindDocs.ps1 文件，请键入：

           .\FindDocs.ps1

    -- 如果不指定路径，Windows PowerShell 将按以下优先级顺序运行命令：

            1. Alias
            2. Function
            3. Cmdlet
            4. 本机 Windows 命令

        因此，如果键入“help”，则 Windows PowerShell 先查找名为“help”的别名，然后查找名为
        “Help”的函数，最后查找名为“Help”的 cmdlet。它将运行最先找到的“help”项。

        例如，假定有一个名为 Get-Map 的函数，又添加或导入了一个名为 Get-Map 的 cmdlet，则在键入
        “Get-Map”时 Windows PowerShell 默认将运行该函数。

    --	如果会话包含名称和类型都相同的项，例如两个同名的 cmdlet，则 Windows PowerShell 运行最近
          添加到会话中的项。

        例如，假定有一个名为 Get-Date 的 cmdlet，又导入了另一个名为 Get-Date 的 cmdlet，则在键入
        “Get-Date”时 Windows PowerShell 默认将运行最近导入的 cmdlet。

 隐藏和替换项
    由于这些规则的存在，导致某些项可被同名的项替换或隐藏。

        --  如果仍可以通过某种方式（比如通过使用模块名称或管理单元名称限定项名称）访问原始项，则表示该项
            被"隐藏"或"遮盖"。

            例如，如果导入一个与会话中某 cmdlet 同名的函数，则会隐藏而不是替换该 cmdlet，因为该
            cmdlet 是从管理单元或模块导入的。

        --  如果不能再访问原始项，则表示该项被“替换”或“覆盖”。

            例如，如果导入一个与会话中某变量同名的变量，则原始变量将被替换，不再可访问。
            变量不能通过模块名称进行限定。

            此外，如果在命令行键入一个函数，然后导入一个同名的函数，则原始函数将被替换，不再可访问。

 运行隐藏命令
    可以通过指定项属性以将特定命令与其他可能同名的命令区分开来，从而运行特定的命令。

    此方法可用于运行任何命令，但尤其适用于运行隐藏命令。

    在编写要分发的脚本时请使用此方法作为一种最佳实践，因为您无法预知在运行脚本的会话中会存在什么命令。

    限定名称
        对于从 Windows PowerShell 管理单元或模块或者从其他会话导入的命令，可以使用命令的来源模块或管
        理单元的名称对命令名进行限定，从而运行这些命令。

        可以限定命令，但不能限定变量或别名。

        例如，如果来自 Microsoft.PowerShell.Utility 管理单元的 Get-Date cmdlet 被其他同名别名、
        函数或 cmdlet 隐藏，则可以使用该 cmdlet 的管理单元限定名称来运行它：

            Microsoft.PowerShell.Utility\Get-Date

        要运行由 MapFunctions 模块添加的 New-Map 命令，请使用该命令的模块限定名称：

            MapFunctions\New-Map

        要查找从其导入命令的管理单元或模块，请使用以下 Get-Command 命令格式：

            get-command <command-name> | format-list -property Name, PSSnapin, Module

        例如，要查找 Get-Date cmdlet 的来源，请键入：

            get-command get-date | format-list -property Name, PSSnapin, Module

            Name     : Get-Date
            PSSnapIn : Microsoft.PowerShell.Utility
            Module   :

    调用运算符
        也可以使用调用运算符 (&) 运行可通过 Get-ChildItem（alias 是“dir”）、Get-Command 或
        Get-Module 命令获取的任何命令。

        要运行某命令，请将 Get-Command 放在括号中，并使用调用运算符 (&) 运行该命令。

            &(get-command ...)

        - 或 -

            &(dir ...)

        例如，如果名为 Map 的函数被名为 Map 的别名隐藏，可使用以下命令运行该函数。

            &(get-command -name map -type function)

        - 或 -

            &(dir function:\map)

        也可以将隐藏命令保存在变量中以便于运行。

        例如，以下命令将 Map 函数保存在 $myMap 变量中，然后使用调用运算符运行该命令。

            $myMap = (get-command -name map -type function)

            &($myMap)

        如果命令源自某个模块，则可以使用以下格式运行该命令：

           & <PSModuleInfo-object> <command>

        例如，要运行 FileCommands 模块中的 Add-File cmdlet，可使用以下命令序列：

           $FileCommands = get-module -name FileCommands

           & $FileCommands Add-File

 替换项
    对于不是从模块或管理单元导入的项，比如您在会话中自建的函数、变量和别名，
    或者您使用配置文件添加的项，则可能被同名的命令替换。这些项若被替换则不
    可访问。

    变量和别名总是被替换，即使它们是从模块或管理单元导入的也如此，
    这是因为您无法使用调用运算符或限定名称运行它们。

    例如，如果在会话中键入 Get-Map 函数，又导入一个名为 Get-Map 的函数，
    则原始函数将被替换，您无法在当前会话中检索原始函数。

 避免名称冲突
    管理命令名冲突的最佳方式是避免出现冲突。在为命令指定名称时，
    应使用独特且不太可能重复的名称。例如，可以在您的命令名中的名词中
    添加您的姓名或公司名的首字母缩写。

    另外，在从 Windows PowerShell 模块或其他会话向您的会话导入命令时，应使用 Import-Module 或
    Import-PSSession 的 Prefix 参数为命令名中的名词添加前缀。

    例如，在导入 DateFunctions 模块时，使用以下命令可以避免与 Windows PowerShell 附带的 Get-Date
    和 Set-Date cmdlet 产生任何冲突。

        import-module -name DateFunctions -prefix ZZ

    有关详细信息，请参阅 Import-Module 和 Import-PSSession cmdlet 的帮助主题。

另请参阅
    about_Path_Syntax
    about_Aliases
    about_Functions
    Alias（提供程序）
    Function（提供程序）
    Get-Command
    Import-Module
    Import-PSSession


about_Command_Syntax

主题
    about_Command_Syntax

简短说明
    描述帮助中的 Windows PowerShell 语法表示法。

详细说明
    Get-Help cmdlet 显示 cmdlet 的参数用法。Get-Help cmdlet 使用以下特殊符号：

        尖括号 (<>) 指示占位符文本。
        方括号 ([]) 指示可选项。
        大括号 ({}) 指示从多个值中选择一个。

    某些 cmdlet 包含多个参数集。不同参数集可能有一些相同的参数。Get-Help cmdlet 显示
    cmdlet 的所有参数集。

    您可以在参数说明和参数属性表中找到有关参数的其他信息。要查看有关参数的完整信息，请使用
    Get-Help 的 Full 或 Parameter 参数。

  语法
      Windows PowerShell cmdlet 帮助、帮助主题和其他文档在语法说明中对 cmdlet 使用以下表
      示法。

          <cmdlet name> -<Required Parameter name> <Required parameter Value>
                       [-<Optional Parameter name> <Optional Parameter Value>]
                       [-<Optional Switch Parameter>]
                       [-<Optional Parameter Name>] <Required parameter Value>

      下面是 New-Alias cmdlet 的语法。

          New-Alias [-Force] [-PassThru] [-Scope <string>]
              [-Option {None | ReadOnly | Constant | Private | AllScope}]
              [-Description <string>] [-Name] <string> [-Value] <string>
              [-confirm] [-whatif] [<CommonParameters>]

      语法为便于阅读而采用了大写字母，但 Windows Powershell 并不区分大小写。

      参数是有顺序的。仅当参数名可选时参数的顺序才有意义。如果使用 cmdlet 时未指定参数名，则
      Windows PowerShell 将按参数的位置和类型为参数赋值。

      参数名以连字符 (-) 开头。开关参数没有值类型。其他形式参数指定了所需实际参数的
      Microsoft .NET Framework 类型，或指定可能值的枚举。有关 .NET Framework 类型的详细
      信息，请参阅 http://go.microsoft.com/fwlink/?LinkId=143682。

      尖括号 (<>) 指示占位符文本。此文本可以描述
      项目类型（如字符串或进程对象），还可以作为一个或多个通用参数的占位符。

      方括号 ([]) 指示可选项。参数可以是可选项，必需参数的参数名也可以是可选项。开关参数始终
      是可选的。

      枚举值用大括号 ({}) 括起来。在 New-Alias cmdlet 的示例中，可以对 Option 参数赋予列
      出的任何值。

  可选项
      可选项用方括号 ([]) 括起来。例如，在 New-Alias cmdlet 语法说明中，Scope 参数为可选
      项。在语法中用方括号将参数名和类型括起来指示了这一点：

          [-Scope <string>]

      以下两个示例都是 New-Alias cmdlet 的正确用法：

          New-Alias -Name utd -Value Update-TypeData
          New-Alias -Name utd -Value Update-TypeData -Scope global

      参数名可以是可选项，即使该参数的值为必需时也如此。在语法中用方括号括起参数名而不括起参数
      类型指示了这一点，如 New-Alias cmdlet 中的本例所示：

          [-Name] <string> [-Value] <string>

      以下命令都正确使用了 New-Alias cmdlet，并会产生相同的结果：

          New-Alias -Name utd -Value Update-TypeData
          New-Alias -Name utd Update-TypeData
          New-Alias utd -Value Update-TypeData
          New-Alias utd Update-TypeData

      如果键入的语句中不包括形式参数名，Windows PowerShell 将尝试根据实际参数的位置为形式参
      数赋值。

      下例所示命令是不完整的：

          New-Alias utd

      此 cmdlet 要求为 Name 参数和 Value 参数都进行赋值。

      在语法示例中，在命名和强制转换成 .NET Framework 类型时也用了方括号。在此上下文中，方
      括号并不指示元素为可选项。

  数组参数
      在语法说明中方括号也用于表示数组。以下示例说明 Restart-Service cmdlet 的语法：

          Restart-Service [-Name] <string[]> [-Include <string[]>]
              [-Exclude <string[]>] [-Force] [-PassThru] [-Confirm] [-WhatIf]
              [<CommonParameters>]

      形式参数 Name 需要一个实际参数。具体来说，它需要将重新启动的服务的名称。该参数可以采用
      由逗号分隔的服务列表，如下例所示：

          Restart-Service RasAuto, RasMan, RemoteAccess

另请参阅
    Get-Help


about_Comment_Based_Help

主题
    about_Comment_Based_Help

简短说明
    描述如何为函数和脚本编写基于注释的帮助主题。

详细说明
    可通过使用特殊帮助注释关键字为函数和脚本编写基于注释的帮助主题。

    Get-Help cmdlet 显示基于注释的帮助的格式与它显示从 XML 文件生成的 cmdlet 帮助主题的格式相同。用
    户可使用 Get-Help 的所有参数，如 Detailed、Full、Example 和 Online 来显示函数和脚本帮助。

    也可通过使用帮助注释关键字为脚本和函数编写基于 XML 的帮助文件，并将用户重定向到另一个帮助文件。

    此主题说明如何为函数和脚本编写帮助主题。有关如何显示函数和脚本帮助主题的信息，请参阅 Get-Help。

 基于注释的帮助的语法
    基于注释的帮助的语法如下：
        # .< help keyword>
        # <help content>

    -或 -

        <#
            .< help keyword>
            < help content>
        #>

    基于注释的帮助是以一系列注释的形式编写的。可在每行注释之前键入一个注释符号 (#)，或使用"<#"和"#>"
    符号来创建一个注释块。注释块中的所有行都被解释为注释。

    基于注释的帮助主题中的所有行必须是连续的。如果基于注释的帮助主题跟在不属于
    该帮助主题的某个注释之后，则在最后一行非帮助注释主题与基于注释的帮助的起始行
    之间必须至少有一个空行。

    关键字定义了基于注释的帮助的每个部分。每个基于注释的帮助关键字前面都有一个
    句点 (.)。关键字可以按任何顺序出现。关键字名不区分大小写。

    例如，Description 关键字位于函数或脚本的说明之前。

        <#
        .Description
            Get-Function 显示会话中所有函数的名称和语法。
        #>

    注释块必须包含至少一个关键字。一些关键字（如 EXAMPLE）在同一个注释块内
    可能会出现多次。每个关键字的帮助内容都从该关键字后面一行开始，可以占多行。

 函数中基于注释的帮助的语法

    函数的基于注释的帮助可出现在以下三个位置之一：

        -- 函数体的开头。

        -- 函数体的末尾。

        -- Function 关键字之前。在函数帮助的最后一行与 Function 关键字之间不能有一个以上空行。

    例如：

        function MyFunction
        {
            <#
            .< help keyword>
            < help content>
            #>

            <function commands>
        }

    -或 -

        function MyFunction
        {
            <function commands>

            <#
            .< help keyword>
            < help content>
            #>
        }

    -或 -

        <#
        .< help keyword>
        < help content>
        #>
        function MyFunction { }

 脚本中基于注释的帮助的语法

    脚本的基于注释的帮助可出现在脚本中以下两个位置之一。

    -- 脚本文件的开头。脚本中脚本帮助的前面只能是注释和空行。

    -- 如果脚本体中的第一项（帮助的后面）是函数声明，则在脚本帮助的末尾与函数
       声明之间必须至少有两个空行。否则，该帮助将被解释为函数帮助，而非脚本帮助。

    -- 脚本文件的末尾。

    例如：

        <#
        .< help keyword>
        < help content>
        #>

        function MyFunction { }

    -或 -

        function MyFunction { }

        <#
        .< help keyword>
        < help content>
        #>

 基于注释的帮助关键字
    以下是基于注释的帮助的有效关键字，列出的顺序是它们通常在帮助主题中
    出现的顺序，并说明了这些关键字的预定用途。这些关键字可以按任何顺序
    出现在基于注释的帮助中，并且不区分大小写。

    .SYNOPSIS
        对函数或脚本的简短说明。此关键字在每个主题中只能使用一次。

    .DESCRIPTION
        函数或脚本的详细说明。此关键字在每个主题中只能使用一次。

    .PARAMETER <Parameter-Name>
        参数说明。可在函数或脚本语法中为每个参数包括一个 Parameter 关键字。

        Parameter 关键字可以按任意顺序出现在注释块中，但函数或脚本语法
        将确定参数（及其说明）在帮助主题中出现的顺序。要更改顺序，请更改语法。

        也可通过在函数或脚本语法中的参数变量名称前面放置注释来指定参数说明。
        如果同时使用语法注释和 Parameter 关键字，则将使用与 Parameter 关键字
        相关联的说明，而忽略语法注释。

    .EXAMPLE
        使用函数或脚本的示例命令，后面可跟有可选的示例输出和一段说明。针对每个示例重复此关键字。

    .INPUTS
        对象的可通过管道传送给函数或脚本的 Microsoft .NET Framework 类型。也可包括输入对象的说明。

    .OUTPUTS
        Cmdlet 所返回对象的 .NET Framework 类型。也可包括返回的对象的说明。

    .NOTES
        有关函数或脚本的其他信息。

    .LINK
        相关主题的名称。针对每个相关主题重复此关键字。

        此内容出现在帮助主题的 Related Links 部分中。

        Link 关键字内容也可包括指向相同帮助主题的联机版本的统一
        资源标识符 (URI)。联机版本在使用 Get-Help 的 Online 参数
        时打开。URI 必须以“http”或“https”开头。

    .COMPONENT
        函数或脚本使用的或与之相关的技术或功能。此内容在 Get-Help 命令中
        包括 Get-Help 的 Component 参数时出现。

    .ROLE
        帮助主题的用户角色。此内容在 Get-Help 命令中包括 Get-Help 的 Role 参数时出现。

    .FUNCTIONALITY
        函数的预定用途。此内容在 Get-Help 命令中包括 Get-Help 的 Functionality 参数时出现。

    .FORWARDHELPTARGETNAME <Command-Name>
        重定向到指定命令的帮助主题。可将用户重定向到任何帮助主题，
        包括函数、脚本、cmdlet 或提供程序的帮助主题。

    .FORWARDHELPCATEGORY <Category>
        在 ForwardHelpTargetName 中指定该项的帮助类别。
        有效值为 Alias、Cmdlet、HelpFile、Function、Provider、General、FAQ、Glossary、
        ScriptCommand、ExternalScript、Filter 或 All。使用此关键字可避免具有同名命令时发生冲突。

    .REMOTEHELPRUNSPACE <PSSession-variable>
        指定包括帮助主题的一个会话。输入包含 PSSession 的一个变量。此关键字由 Export-PSSession
        cmdlet 使用，用于查找导出的命令的帮助主题。

    .EXTERNALHELP <XML Help File Path>
        指定基于 XML 的脚本或函数帮助文件的路径。

        在 Windows Vista 以及更高版本的 Windows 上，如果 XML 文件的指定路径包括 UI 区域性特定子目
        录，则 Get-Help 将递归搜索这些子目录，以按照为 Windows Vista 建立的语言回退标准查找具有相应脚
        本或函数名的 XML 文件，就像它针对所有基于 XML 的帮助主题所执行的操作一样。

        有关 cmdlet 帮助的基于 XML 的帮助文件格式的详细信息，请参阅 MSDN
        (Microsoft Developer Network) 库中的“如何创建 Cmdlet 帮助”，
        网址是：http://go.microsoft.com/fwlink/?LinkID=123415。

 自动生成的内容
    名称、语法、参数列表、参数属性表、通用参数和备注是由 Get-Help cmdlet 自动生成的。

        名称：
            函数帮助主题的名称部分从函数语法中的函数名称获取。脚本帮助主题的名称从
            脚本文件名获取。要更改名称或其大小写，请更改函数语法或脚本文件名。

        语法：
            帮助主题的语法部分从函数或脚本语法生成。若要向帮助主题语法添加详细内容
            （如某个参数的 .NET Framework 类型），请将详细内容添加到语法中。如果不
           指定参数类型，则将“Object”类型作为默认值插入。

        参数列表：
            帮助主题中的参数列表是从函数或脚本语法以及使用 Parameters 关键字添加的
            说明生成的。函数参数以它们出现在函数或脚本语法中的相同顺序出现在帮助主题的
            “参数”部分。参数名的拼写和大小写也与语法中相同，不受 Parameter 关键字所指定的
            参数名的影响。

        通用参数：
            通用参数被添加到帮助主题的语法和参数列表中，即使它们不起任何作用也如此。
            有关通用参数的详细信息，请参阅 about_CommonParameters。

        参数属性表：
            Get-Help 将生成参数属性表，该表在使用 Get-Help 的 Full 或 Parameter 参数时出现。
            Required、Position 和 Default value 属性的值从函数或脚本语法获取。

        备注：
            帮助主题的备注部分从函数或脚本名称自动生成。您不能更改或影响此部分的内容。

 示例

    示例 1：基于注释的函数帮助

        以下示例函数包含了基于注释的帮助：

            function Add-Extension
            {
                param ([string]$Name,[string]$Extension = "txt")
                $name = $name + "." + $extension
                $name

            <#
            .SYNOPSIS
            Adds a file name extension to a supplied name.

            .DESCRIPTION
            Adds a file name extension to a supplied name.
            Takes any strings for the file name or extension.

            .PARAMETER Name
            Specifies the file name.

            .PARAMETER Extension
            Specifies the extension. "Txt" is the default.

            .INPUTS
            None. You cannot pipe objects to Add-Extension.

            .OUTPUTS
            System.String. Add-Extension returns a string with the extension or file name.

            .EXAMPLE
            C:\PS> extension -name "File"
            File.txt

            .EXAMPLE
            C:\PS> extension -name "File" -extension "doc"
            File.doc

            .EXAMPLE
            C:\PS> extension "File" "doc"
            File.doc

            .LINK
            联机版本：http://www.fabrikam.com/extension.html

            .LINK
            Set-Item
            #>
            }

        结果如下：

        C:\PS> get-help add-extension -full

        NAME
            Add-Extension

        SYNOPSIS
            Adds a file name extension to a supplied name.

        SYNTAX
            Add-Extension [[-Name] <String>] [[-Extension] <String>] [<CommonParameters>]

        DESCRIPTION
            Adds a file name extension to a supplied name. Takes any strings for the file name or extension.

        PARAMETERS
           -Name
               Specifies the file name.

               Required?                    false
               Position?                    0
               Default value
               Accept pipeline input?       false
               Accept wildcard characters?

           -Extension
               Specifies the extension. "Txt" is the default.

               Required?                    false
               Position?                    1
               Default value
               Accept pipeline input?       false
               Accept wildcard characters?

            <CommonParameters>
               This cmdlet supports the common parameters: -Verbose, -Debug,
               -ErrorAction, -ErrorVariable, -WarningAction, -WarningVariable,
               -OutBuffer and -OutVariable. For more information, type,
               "get-help about_commonparameters".

        INPUTs
            None.You cannot pipe objects to Add-Extension.

        OUTPUTS
            System.String. Add-Extension returns a string with the
            extension or file name.

            -------------------------- EXAMPLE 1--------------------------

            C:\PS> extension -name "File"
            File.txt

            -------------------------- EXAMPLE 2--------------------------

            C:\PS> extension -name "File" -extension "doc"
            File.doc

            -------------------------- EXAMPLE 3--------------------------

            C:\PS> extension "File" "doc"
            File.doc

        RELATED LINKS
            联机版本：http://www.fabrikam.com/extension.html
            Set-Item

    示例 2：函数语法中的参数说明

        此示例与前一个示例基本相同，只是将参数说明插入到函数语法中。说明比较简短时非常适合使用此格式。

        function Add-Extension
        {
            param
            (
                [string]
                # Specifies the file name.
                $name,

                [string]
                # Specifies the file name extension."Txt" is the default.
                $extension = "txt"
            )
            $name = $name + "."+ $extension
            $name

            <#
            .SYNOPSIS
            Adds a file name extension to a supplied name.

            .DESCRIPTION
            Adds a file name extension to a supplied name.Takes any strings for the file name or extension.

            .INPUTS
            None.You cannot pipe objects to Add-Extension.

            .OUTPUTS
            System.String. Add-Extension returns a string with the extension or file name.

            .EXAMPLE
            C:\PS> extension -name "File"
            File.txt

            .EXAMPLE
            C:\PS> extension -name "File" -extension "doc"
            File.doc

            .EXAMPLE
            C:\PS> extension "File" "doc"
            File.doc

            .LINK
            联机版本：http://www.fabrikam.com/extension.html

            .LINK
            Set-Item
            #>
        }

    示例 3：基于注释的脚本帮助

        以下示例脚本包含了基于注释的帮助。

        请注意结束标记"#>"与 Param 语句之间的空行。在没有 Param 语句的脚本中，帮助主题中的最后一条注释
        与第一个函数声明之间必须至少有两个空行。如果没有这些空行，则 Get-Help 将帮助主题与函数（而不是脚
        本）相关联。

           <#
           .SYNOPSIS
           Performs monthly data updates.

           .DESCRIPTION
           The Update-Month.ps1 script updates the registry with new data generated
           during the past month and generates a report.

           .PARAMETER InputPath
           Specifies the path to the CSV-based input file.

           .PARAMETER OutputPath
           Specifies the name and path for the CSV-based output file. By default,
           MonthlyUpdates.ps1 generates a name from the date and time it runs, and
           saves the output in the local directory.

           .INPUTS
           None. You cannot pipe objects to Update-Month.ps1.

           .OUTPUTS
           None. Update-Month.ps1 does not generate any output.

           .EXAMPLE
           C:\PS> .\Update-Month.ps1

           .EXAMPLE
           C:\PS> .\Update-Month.ps1 -inputpath C:\Data\January.csv

           .EXAMPLE
           C:\PS> .\Update-Month.ps1 -inputpath C:\Data\January.csv -outputPath C:\Reports\2009\January.csv
           #>

           param ([string]$InputPath, [string]$OutPutPath)

           function Get-Data { }
           ...

        以下命令获取脚本帮助。由于脚本不在 Path 环境变量中列出的目录中，因此用于获取脚本帮助的
        Get-Help 命令必须指定脚本路径。

            PS C:\ps-test> get-help .\update-month.ps1 -full

            NAME
                C:\ps-test\Update-Month.ps1

            SYNOPSIS
                Performs monthly data updates.

            SYNTAX
                C:\ps-test\Update-Month.ps1 [-InputPath] <String> [[-OutputPath]
                <String>] [<CommonParameters>]

            DESCRIPTION
                The Update-Month.ps1 script updates the registry with new data
                generated during the past month and generates a report.

            PARAMETERS
               -InputPath
                   Specifies the path to the CSV-based input file.

                   Required?                    true
                   Position?                    0
                   Default value
                   Accept pipeline input?       false
                   Accept wildcard characters?

               -OutputPath
                   Specifies the name and path for the CSV-based output file. By
                   default, MonthlyUpdates.ps1 generates a name from the date
                   and time it runs, and saves the output in the local directory.

                   Required?                    false
                   Position?                    1
                   Default value
                   Accept pipeline input?       false
                   Accept wildcard characters?

               <CommonParameters>
                   This cmdlet supports the common parameters: -Verbose, -Debug,
                   -ErrorAction, -ErrorVariable, -WarningAction, -WarningVariable,
                   -OutBuffer and -OutVariable. For more information, type,
                   "get-help about_commonparameters".

            INPUTS
                   None.You cannot pipe objects to Update-Month.ps1.

            OUTPUTS
                   None.Update-Month.ps1 does not generate any output.

            -------------------------- EXAMPLE 1--------------------------

            C:\PS> .\Update-Month.ps1

            -------------------------- EXAMPLE 2--------------------------

            C:\PS> .\Update-Month.ps1 -inputpath C:\Data\January.csv

            -------------------------- EXAMPLE 3--------------------------

            C:\PS> .\Update-Month.ps1 -inputpath C:\Data\January.csv -outputPath
            C:\Reports\2009\January.csv

            RELATED LINKS

    示例 4：重定向至 XML 文件

        可为函数和脚本编写基于 XML 的帮助主题。虽然基于注释的帮助较易实现，但如果想要
        更精确地控制帮助内容，或要将帮助主题翻译为多种语言，则需要使用基于 XML 的帮助。

        以下示例显示了 Update-Month.ps1 脚本的前面几行。该脚本使用 ExternalHelp 关键字
        来指定基于 XML 的脚本帮助主题的路径。

            # .ExternalHelp C:\MyScripts\Update-Month-Help.xml

            param ([string]$InputPath, [string]$OutPutPath)

            function Get-Data { }
            ...

       以下示例显示了 ExternalHelp 关键字在函数中的使用。

            function Add-Extension
            {
                param ([string] $name, [string]$extension = "txt")
                $name = $name + "." + $extension
                $name

                # .ExternalHelp C:\ps-test\Add-Extension.xml
            }

    示例 5：重定向至另一个帮助主题

        以下代码摘自 Windows PowerShell 内置 Help 函数的开始部分，它一次显示一屏帮助文本。由于 Get-
        Help cmdlet 的帮助主题描述 Help 函数，因此 Help 函数使用 ForwardHelpTargetName 和
        ForwardHelpCategory 关键字将用户重定向至 Get-Help cmdlet 帮助主题。

            function help
            {

            <#
            .FORWARDHELPTARGETNAME Get-Help
            .FORWARDHELPCATEGORY Cmdlet
            #>
            [CmdletBinding(DefaultParameterSetName='AllUsersView')] param(
                [Parameter(Position=0, ValueFromPipelineByPropertyName
                =$true)] [System.String]
                ${Name},
                   ...

        以下命令使用了此功能：

            C:\PS> get-help help

            NAME
                Get-Help

            SYNOPSIS
                Displays information about Windows PowerShell cmdlets and concepts.
            ...

另请参阅
    about_Functions
    about_Functions_Advanced_Parameters
    about_Scripts
    “如何编写 Cmdlet 帮助”(http://go.microsoft.com/fwlink/?LinkID=123415)


about_Commonparameters

主题
    about_CommonParameters

简短说明
    描述可用于任何 cmdlet 的参数。

详细说明
    通用参数是指可用于任何 cmdlet 的一组 cmdlet 参数。这些参数由 Windows PowerShell 而不是
    cmdlet 开发人员实现，并自动供所有 cmdlet 使用。

    通用参数可用于任何 cmdlet，但可能不是对所有 cmdlet 都起作用。例如，如果一个 cmdlet 不
    生成任何详细输出，则 Verbose 通用参数不起任何作用。

    有几个通用参数可覆盖您使用 Windows PowerShell 首选变量设置的系统默认值或首选项。与首选
    变量不同，通用参数只影响使用它们的命令。

    除通用参数外，很多 cmdlet 还提供 WhatIf 和 Confirm 风险缓解参数。给系统或用户数据带来
    风险的 Cmdlet 通常提供这些参数。

    这些通用参数包括：

       -Verbose
       -Debug
       -WarningAction
       -WarningVariable
       -ErrorAction
       -ErrorVariable
       -OutVariable
       -OutBuffer

    风险缓解参数为：

       -WhatIf
       -Confirm

    有关首选变量的详细信息，请键入：

       help about_preference_variables

  通用参数说明

    -Verbose[:{$true | $false}]

        显示有关由该命令执行的操作的详细信息。此信息类似于跟踪或事务日志中的
        信息。此参数仅在命令生成详细消息时才起作用。例如，此参数在命令中
        包含 Write-Verbose cmdlet 时起作用。

        Verbose 参数将覆盖当前命令的 $VerbosePreference 变量的值。$VerbosePreference
        变量的默认值为 SilentlyContinue，因此在默认情况下不显示详细消息。

        有效值：

            $true (-Verbose:$true) 与 -Verbose 作用相同。

            $false (-Verbose:$false) 禁止显示详细消息。当 $VerbosePreference 的值不
            是 SilentlyContinue（默认值）时使用此参数。

    -Debug[:{$true | $false}]

        显示有关由该命令执行的操作的程序员级详细信息。此参数仅在命令生成调试消息时
        才起作用。例如，此参数在命令中包含 Write-Debug cmdlet 时起作用。

        Debug 参数将覆盖当前命令的 $DebugPreference 变量的值。$DebugPreference 变量的
        默认值为 SilentlyContinue，因此在默认情况下不显示调试消息。

        有效值：

            $true (-Debug:$true)。与 -Debug 作用相同。

            $false (-Debug:$false)。当 $DebugPreference 的值不是 SilentlyContinue
            （默认值）时，禁止显示调试消息。

    -WarningAction[:{SilentlyContinue | Continue | Inquire | Stop}]

        确定 cmdlet 如何对命令生成的警告做出响应。默认值为“Continue”。此参数
    仅在命令生成警告消息时才起作用。例如，此参数在命令中包含
        Write-Warning cmdlet 时起作用。

        WarningAction 参数将覆盖当前命令的 $WarningPreference 变量的值。
        $WarningPreference 变量的默认值为 Continue，因此如果不使用 WarningAction 参数，
        则将显示警告并继续执行命令。

         有效值：

            SilentlyContinue。禁止显示警告消息并继续执行命令。

            Continue。显示警告消息并继续执行命令。默认值为"Continue"。

            Inquire。显示警告消息并在继续执行前提示您进行确认。此值很少使用。

            Stop。显示警告消息并停止执行命令。

    -WarningVariable [+]<variable-name>

        将与命令有关的警告存储在指定变量中。

        要将警告追加到变量内容而不是替换可能已存储在变量中的任何警告，请在变量名称之前键入加号 (+)。

        例如，以下命令将创建 $a 变量，然后在其中存储所有警告：

            get-process -id 6 -WarningVariable a

        以下命令在 $a 变量中添加所有警告：

            get-process -id 2 -WarningVariable +a

        以下命令显示 $a 的内容：

            $a

        可使用此参数创建一个变量，该变量仅包含来自特定命令的警告。可使用数组表示法（如 $a[0]
        或 $warning[1,2]）来引用存储在变量中的特定警告。

    -ErrorAction[:{SilentlyContinue | Continue | Inquire | Stop)]

        确定 cmdlet 如何对命令生成的非终止错误做出响应。此参数仅在命令生成调试消息时才起作
        用。例如，此参数在命令中包含 Write-Error cmdlet 时起作用。

        ErrorAction 参数将覆盖当前命令的 $ErrorActionPreference 变量的值。
        $ErrorActionPreference 变量的默认值为 Continue，因此如果不使用 ErrorAction 参
        数，则将显示错误消息并继续执行命令。

        ErrorAction 参数对数据丢失、参数无效或权限不足等终止错误不起作用，这些错误将阻止命令
        成功执行。

        有效值：

            SilentlyContinue。禁止显示错误消息并继续执行命令。

            Continue。显示错误消息并继续执行命令。默认值为"Continue"。

            Inquire。显示错误消息并在继续执行前提示您进行确认。此值很少使用。

            Stop。显示错误消息并停止执行命令。

    -ErrorVariable [+]<variable-name>

        将与命令有关的错误消息存储在指定变量和 $Error 自动变量中。有关详细信息，
    请键入以下命令：

            get-help about_automatic_variables

        默认情况下，新错误消息将覆盖已存储在变量中的错误消息。要在变量内容中追加错误消息，请在
        变量名称之前键入加号 (+)。

        例如，以下命令将创建 $a 变量，然后在其中存储所有错误：

            get-process -id 6 -ErrorVariable a

        以下命令在 $a 变量中添加所有错误消息：

            get-process -id 2 -ErrorVariable +a

        以下命令显示 $a 的内容：

            $a

        可使用此参数创建一个变量，该变量仅包含来自特定命令的错误消息。$Error 自动变量包含来自
        会话中所有命令的错误消息。
        可使用数组表示法（如 $a[0] 或 $error[1,2]）来引用存储在变量中的特定错误。

    -OutVariable [+]<variable-name>

        将命令的输出对象存储在指定变量中并在命令行进行显示。

        要将输出添加到变量中而不是替换可能已存储在变量中的任何输出，请在变量名称之前键入加号 (+)。

        例如，以下命令将创建 $out 变量，然后在其中存储进程对象：

            get-process powershell -OutVariable out

        以下命令将进程对象添加到 $out 变量：

            get-process iexplore -OutVariable +out

        以下命令显示 $out 变量的内容：

            $out

    -OutBuffer <Int32>

        确定在通过管道发送任何对象之前要在缓冲区中累积的对象数目。如果省略此参数，
    则对象在生成时即被发送。此资源管理参数供高级用户使用。

        当使用此参数时，Windows PowerShell 在生成的对象数目等于 OutBuffer + 1 之前，不
        会调用管道中的下一个 cmdlet。当对象数目达到该值之后，所有对象在生成时即被发送。

  风险管理参数说明

    -WhatIf[:{$true | $false}]
        显示描述命令效果的消息，而不是执行命令。

        WhatIf 参数将覆盖当前命令的 $WhatIfPreference 变量的值。$WhatIfPreference 变
        量的默认值为 0（禁用），因此在没有 WhatIf 参数时不会执行 WhatIf 行为。有关详细信息，
        请键入以下命令：

            get-help about_preference_variables

        有效值：

            $true (-WhatIf:$true)。与 -WhatIf 作用相同。
            $false (-WhatIf:$false)。禁止 $WhatIfPreference 变量的值为 1 时的自动
            WhatIf 行为。

        例如，以下命令在一个 Remove-Item 命令中使用 WhatIf 参数：

            PS> remove-item date.csv -whatif

        Windows PowerShell 列出它要执行的操作以及将影响的项，而不是将项删除。此命令将产生
        以下输出：

            What if: Performing operation "Remove File" on Target "C:\ps-test\date.csv".

    -Confirm[:{$true | $false}]
        在执行命令之前提示您进行确认。

        Confirm 参数将覆盖当前命令的 $ConfirmPreference 变量的值。默认值为 High。有关详
        细信息，请键入以下命令：

            get-help about_preference_variables

        有效值：

            $true (-Confirm:$true)。与 -Confirm 作用相同。

            $false(-Confirm:$false)。禁止在 $ConfirmPreference 的值小于或等于 cmdlet
            的估计风险时发生的自动确认。

        例如，以下命令在 Remove-Item 命令中使用 Confirm 参数。在删除项之前，Windows
        PowerShell 会列出它要执行的操作以及将影响的项，并请求批准。

            PS C:\ps-test> remove-item tmp*.txt -confirm

        此命令将产生以下输出：

            Confirm
            Are you sure you want to perform this action?
            Performing operation "Remove File" on Target " C:\ps-test\tmp1.txt
            [Y] Yes  [A] Yes to All  [N] No  [L] No to All  [S] Suspend
            [?] Help (default is "Y"):

另请参阅
    about_Preference_Variables
    Write-Debug
    Write-Warning
    Write-Error
    Write-Verbose


about_Comparison_Operators

主题
    about_Comparison_Operators

简短说明
    说明在 Windows PowerShell 中用于比较值的运算符。

详细说明
    使用比较运算符，可以指定用于比较值和查找与指定模式匹配的值的条件。
    若要使用比较运算符，请同时指定要进行比较的值以及分隔这些值的运算符。

    默认情况下，所有比较运算符都不区分大小写。若要使一个比较运算符区
    分大小写，请在运算符名称前加字母"c"。例如，"-eq"区分大小写的形式
    为"-ceq"。若要明确表示不区分大小写，则在运算符前加字母"i"。
    例如，"-eq"的明确不区分大小写的形式为"-ieq"。

    除包含运算符（-contains、-notcontains）和类型运算符（-is、-isnot）外的
    所有比较运算符在运算符的输入（运算符左侧的值）是单个值（标量）时，都将
    返回一个布尔值。当输入是值的集合时，包含运算符和类型运算符将返回任何
    匹配值。如果集合中没有匹配项，则这些运算符不返回任何值。包含运算符和类型
    运算符始终返回布尔值。

    Windows PowerShell 支持以下比较运算符。

    -eq
      说明：等于。包含一个相同的值。
      示例：

          C:\PS> "abc", "def" -eq "abc"
          abc

    -ne
      说明：不等于。包含一个不同的值。
      示例：

          C:\PS> "abc", "def" -ne "abc"
          def

    -gt
      说明：大于。
      示例：

          C:\PS> 8 -gt 6
          True

    -ge
      说明：大于或等于。
      示例：

          C:\PS> 8 -ge 8
          True

    -lt
      说明：小于。
      示例：

          C:\PS> 8 -lt 6
          False

    -le
      说明：小于或等于。
      示例：

          C:\PS> 6 -le 8
          True

    -like
      说明：使用通配符 (*) 匹配。
      示例：

          C:\PS> "Windows PowerShell" -like "*shell"
          True

    -notlike
      说明：使用通配符 (*) 不匹配。
      示例：

          C:\PS> "Windows PowerShell" -notlike "*shell"
          False

    -match
      说明：使用正则表达式与字符串匹配。当输入为标量时，它将填充 $Matches 自动变量。
      示例：

          C:\PS> "Sunday" -match "sun"
          True

          C:\PS> $matches
          Name Value
          ---- -----
          0    sun

    -notmatch
      说明：	与字符串不匹配。使用正则表达式。
                当输入为标量时，它将填充 $Matches 自动变量。
      示例：

          C:\PS> "Sunday" -notmatch "sun"
          False

          C:\PS> $matches
          NameValue
          ---- -----
          0  sun

    -contains
      说明：包含运算符。包含一个相同的完整值（而不是值的一部分）。始终返回布尔值。
      示例：

          C:PS> "abc", "def" -contains "def"
          True

    -notcontains
      说明：包含运算符。不包含一个相同值。始终返回布尔值。
      示例：

          C:PS> "Windows", "PowerShell" -notcontains "Shell"
          True

    -replace
      说明：替换运算符。更改值的指定元素。
      示例：

          C:\PS> "Get-Process" -replace "Get", "Stop"
          Stop-Process

  相等运算符
      相等运算符（-eq、-ne）在一个或多个输入值与指定模式相同时，返回一个 TRUE 值或返回匹配项。
      整个模式必须与整个值匹配。

      以下示例说明了等于运算符的功能：

          C:PS> 1,2,3 -eq 2
          2

          C:PS> "PowerShell" -eq "Shell"
          False

          C:PS> "Windows", "PowerShell" -eq "Shell"
          C:PS>

          C:\PS> "abc", "def", "123" -eq "def"
          def

  包含运算符
      包含运算符（-contains 和 -notcontains）与相等运算符相似。
      不过，包含运算符始终返回布尔值，即使在输入为集合时也如此。

      另外，与相等运算符不同的是，包含运算符在检测到第一个匹配项时
      立即返回一个值。相等运算符对所有输入进行评估，然后返回集合中的
      所有匹配项。以下示例说明了 -contains 运算符的功能：

          C:PS> 1,2,3 -contains 2
          True

          C:PS> "PowerShell" -contains "Shell"
          False

          C:PS> "Windows", "PowerShell" -contains "Shell"
          False

          C:\PS> "abc", "def", "123" -contains "def"
          True

          C:\PS> "true", "blue", "six" -contains "true"
          True

      以下示例说明了包含运算符与等于运算符有何不同。包含运算符在遇到
      第一个匹配项时返回一个 TRUE 值。

          C:\PS> 1,2,3,4,5,4,3,2,1 -eq 2
          2
          2

          C:\PS> 1,2,3,4,5,4,3,2,1 -contains 2
          True

      在一个非常大的集合中，-contains 运算符返回结果的速度比等于运算符快。

  匹配运算符
      匹配运算符（-match 和 -notmatch）使用正则表达式来查找与指定模式匹配或不匹配的元素。

      语法是：

          <string[]> -match <regular-expression>
          <string[]> -notmatch <regular-expression>

      以下示例说明了 -match 运算符的一些用法：

          C:\PS> "Windows", "PowerShell" -match ".shell"
          PowerShell

          C:\PS> (get-command get-member -syntax) -match "-view"
          True

          C:\PS> (get-command get-member -syntax) -notmatch "-path"
          True

          C:\PS> (get-content servers.txt) -match "^Server\d\d"
          Server01
          Server02

      匹配运算符仅在字符串中搜索。它们无法在整数数组或其他对象中搜索。

      当运算符的输入（左侧参数）是一个单标量对象时，-match 和 -notmatch 运算符填充 $Matches
      自动变量。当输入是标量时，-match 和 notmatch 运算符返回布尔值，并将 $Matches 自动变量
      的值设置为参数的匹配项目。

      如果输入是一个集合，则 -match 和 -notmatch 运算符返回该集合中的匹配成员，但运算符不会填
      充 $Matches 变量。

      例如，以下命令将一个字符串集合提交给 -match 运算符。-match 运算符将返回集合中的匹配项
      目。它不会填充 $Matches 自动变量。

          C:\PS> "Sunday", "Monday", "Tuesday" -match "sun"
          Sunday

          C:\PS> $matches
          C:\PS>

      相比之下，以下命令向匹配运算符提交一个单字符串。-match 运算符返回布尔值并填充 $Matches
      自动变量。

          C:\PS> "Sunday" -match "sun"
          True

          C:\PS> $matches

          Name                           Value
          ----                           -----
          0                              Sun

      -notmatch 运算符在输入是标量且结果为 False 时（也就是说，当它检测到匹配项时）填充
       $Matches 自动变量。

          C:\PS> "Sunday" -notmatch "rain"
          True

          C:\PS> $matches
          C:\PS>

          C:\PS> "Sunday" -notmatch "day"
          False

          C:\PS> $matches
          C:\PS>

          Name                           Value
          ----                           -----
          0                              day

  替换运算符
      -replace 运算符可通过正则表达式用指定值替换某个值的全部或部分。可使用 -replace 运算符完
       成很多管理任务，如重命名文件。例如，以下命令可将所有 .gif 文件的文件扩展名更改为.jpg：

          Get-ChildItem | Rename-Item -NewName { $_ -replace '.gif$','.jpg$' }

      -replace 运算符的语法如下，其中，<original> 占位符表示要被替换的字符，而 <substitute>
       占位符表示要替换成的字符：

          <input> <operator> <original>, <substitute>

      默认情况下，-replace 运算符不区分大小写。要使它区分大小写，请使用 -creplace。要明确表示
      它不区分大小写，请使用 ireplace。请看以下示例：

          C:\PS> "book" -replace "B", "C"
          Cook
          C:\PS> "book" -ireplace "B", "C"
          Cook
          C:\PS> "book" -creplace "B", "C"
          book

  位运算符
      Windows PowerShell 支持标准位运算符，包括位与运算符 (-band) 以及位或和位异或运算符（-
      bor 和 -bxor）。从 Windows PowerShell 2.0 开始，所有位运算符都使用 64 位整数。

      Windows PowerShell 支持以下位运算符。

      运算符	说明			  示例
      --------  ----------------------    -------------------
      -band	位与			  C:\PS> 10 -band 3
                                          2

      -bor	位或			  C:\PS> 10 -bor 3
                                          11

      -bxor	位异或			  C:\PS> 10 -bxor 3
                                          9

      位运算符对二进制格式值执行运算。例如，数字 10 的
      位结构是 00001010（基于 1 个字节），数字 3 的位结构
      是 00000011。在使用位运算符来比较 10 和 3 时，将比较每个
      字节中的各个位。

      在位与运算中，仅在两个输入位都为 1 时才将所得的位设置为 1。

          00001010   	(10)
          00000011   	( 3)
          ------------------ 位与
          00000010   	( 2)

      在位或运算中，当一个或两个输入位是 1 时，都会将所得的位设置为 1。
      仅在输入位都为 0 时，才将所得的位设置为 0。

          00001010   	(10)
          00000011   	( 3)
          ------------------ 位或
          00001011   	(11)

      在位异或运算中，仅在一个输入位为 1 时才将所得的位设置为 1。

          00001010  	(10)
          00000011   	( 3)
          ------------------ 位异或
          00001001   	( 9)

另请参阅
    about_Operators
    about_Regular_Expressions
    about_Wildcards
    Compare-Object


about_Continue

主题
    about_Continue

简短说明
    说明 Continue 语句如何使程序流立即返回到程序循环的顶部。

详细说明
    在脚本中，Continue 语句使程序流立即返回到由 For、Foreach 或 While 语句控制的最内层循
    环的顶部。

    Continue 关键字支持标签。标签是为脚本语句指定的名称。有关标签的信息，请参阅
    about_Break。

    在下面的示例中，如果变量 $ctr 等于 5，则程序流返回到 While 循环的顶部。因此，将显示
    从 1 到 10 之间的所有数字（除 5 之外）：

        while ($ctr -lt 10)
             {
               $ctr +=1
               if ($ctr -eq 5) {continue}
               Write-Host $ctr
             }

    注意，在 For 循环中，将从循环的第一行继续执行。如果 For 语句的参数测试由 For 语句修改的值，
    则将导致无限循环。

另请参阅
    about_Comparison_Operators


about_Core_Commands

主题
    about_Core_Commands

简短说明
    列出用于 Windows PowerShell 提供程序的 cmdlet。

详细说明
    Windows PowerShell 包含一组专用 cmdlet，用于管理数据存储中由 Windows PowerShell 提
    供程序公开的项。可使用这些 cmdlet 以相同的方式来管理提供程序所提供的不同类型数据。
    有关提供程序的详细信息，请键入"get-help about_providers"。

    例如，可使用 Get-ChildItem cmdlet 来列出文件系统目录中的文件、注册表项下面的各项或由您
    编写或下载的提供程序所公开的项。

    下面是用于提供程序的 Windows PowerShell cmdlet 的列表：

  ChildItem cmdlet
      Get-ChildItem

  Content cmdlet
      Add-Content
      Clear-Content
      Get-Content
      Set-Content

  Item cmdlet
      Clear-Item
      Copy-Item
      Get-Item
      Invoke-Item
      Move-Item
      New-Item
      Remove-Item
      Rename-Item
      Set-Item

  ItemProperty cmdlet
      Clear-ItemProperty
      Copy-ItemProperty
      Get-ItemProperty
      Move-ItemProperty
      New-ItemProperty
      Remove-ItemProperty
      Rename-ItemProperty
      Set-ItemProperty

  Location cmdlet
      Get-Location
      Pop-Location
      Push-Location
      Set-Location

  Path cmdlet
      Join-Path
      Convert-Path
      Split-Path
      Resolve-Path
      Test-Path

  PSDrive cmdlet
      Get-PSDrive
      New-PSDrive
      Remove-PSDrive

  PSProvider cmdlet
      Get-PSProvider

    有关 cmdlet 的详细信息，请键入"get-help <cmdlet-name>"。

另请参阅
    about_Providers


about_Data_Sections

主题
    about_Data_Sections

简短说明
    说明 Data 节，这些节将文本字符串和其他只读数据与脚本逻辑隔离。

详细说明
    用于 Windows PowerShell 的脚本可具有仅包含数据的一个或多个 Data 节。可将一个或多个
    Data 节包含在任何脚本、函数或高级函数中。Data 节的内容限制为 Windows PowerShell 脚本
    语言的指定子集。

    数据与代码逻辑的分离使标识和管理逻辑和数据更加容易。这样可以为错误消息和 Help 字符串等文本
    提供单独的字符串资源文件。另外，还可将代码逻辑进行隔离，从而便于进行安全与验证测试。

    在 Windows PowerShell 中，Data 节用于支持脚本国际化。使用 Data 节，可更加方便地隔离、
    定位和处理将转换为众多用户界面 (UI) 语言的字符串。

    Data 节是 Windows PowerShell 2.0 的功能。含有 Data 节的脚本不经修改将无法在
    Windows PowerShell 1.0 中运行。

  语法

    Data 节的语法如下：

        DATA [-supportedCommand <cmdlet-name>] {

            <Permitted content>
        }

    Data 关键字是必需的。它不区分大小写。

    Permitted content 限于以下元素：

        - 除 -match 外的所有 Windows PowerShell 运算符
        - If、Else 和 ElseIf 语句

    - 以下自动变量：$PsCulture、$PsUICulture、$True、$False 和 $Null

        - 注释

        - 管道

        - 使用分号 (;) 分隔的语句

        - 如下所示的文本：

            a

            1

            1,2,3

            "Windows PowerShell 2.0"

            @( "red", "green", "blue" )

            @{ a = 0x1; b = "great"; c ="script" }

            [XML] @'
             <p> Hello, World </p>
            '@

        - Data 节中允许的 Cmdlet。默认情况下只允许 ConvertFrom-StringData cmdlet。

        - 通过 SupportedCommand 参数而允许在 Data 节中使用的 Cmdlet。

    在 Data 节中使用 ConvertFrom-StringData cmdlet 时，可将键-值对放入用单引号或双引号
    括起的字符串中，或放入用单引号或双引号括起的 here-string 中。但是，必须将含有变量和子表达
    式的字符串放入用单引号括起的字符串或用单引号括起的 here-string 中，从而避免展开变量和执行
    子表达式。

  SupportedCommand

      可使用 SupportedCommand 参数来指示一个 cmdlet 或函数仅生成数据。用户可使用该参数将
      cmdlet 和函数包括在他们已编写或测试的一个数据节中。

      SupportedCommand 的值是一个或多个 cmdlet 或函数名的逗号分隔列表。

      例如，以下数据节包含一个用户编写的 cmdlet (Format-XML)，该 cmdlet 设置 XML 文件中的
      数据格式：

      DATA -supportedCommand Format-XML
          {
             Format-XML -strings string1, string2, string3
          }

  使用 Data 节

      若要使用 Data 节的内容，请将该 Data 节赋给一个变量，然后使用变量表示法访问其内容。

      例如，以下数据节中包含一个用于将 here-string 转换为哈希表的 ConvertFrom-
      StringData 命令。该哈希表将赋给 $TextMsgs 变量。

      $TextMsgs 变量不是数据节的一部分。

          $TextMsgs = DATA {
              ConvertFrom-StringData -stringdata @'
                Text001 = Windows 7
                Text002 = Windows Server 2008 R2
          '@
          }

      若要访问 $TextMsgs 中哈希表中的键和值，请使用以下命令。

          $TextMsgs.Text001
          $TextMsgs.Text002

示例

    简单数据字符串。

        DATA {
            "Thank you for using my Windows PowerShell Organize.pst script."
            "It is provided free of charge to the community."
            "I appreciate your comments and feedback."
        }

    包含允许变量的字符串。

        DATA {
            if ($null) {
           "To get help for this cmdlet, type get-help new-dictionary."
            }
        }

    使用了 ConvertFrom-StringData cmdlet 的用单引号括起的 here-string：

        DATA {
          ConvertFrom-StringData -stringdata @' Text001 = Windows 7
            Text002 = Windows Server 2008 R2
        '@
        }

    使用了 ConvertFrom-StringData cmdlet 的用双引号括起的 here-string：

        DATA {
          ConvertFrom-StringData -stringdata @" Msg1 = To start,
          press any key.
            Msg2 = To exit, type "quit".
        "@
        }

    包含用户编写用于生成数据的 cmdlet 的数据节：

    DATA -supportedCommand Format-XML {
           Format-XML -strings string1, string2, string3
        }

另请参阅
    about_Automatic_Variables
    about_Comparison_Operators
    about_Hash_Tables
    about_If
    about_Operators
    about_Quoting_Rules
    about_Script_Internationalization
    ConvertFrom-StringData
    Import-LocalizedData


about_Debuggers

主题
    about_Debuggers

简短说明
    说明 Windows PowerShell 调试程序。

详细说明
    调试是在脚本运行过程中对其进行检查的过程，目的是识别和更正脚本指令中的错误。Windows
    PowerShell 调试程序可帮助检查和识别脚本中的错误和低效率之处。

    注意：Windows PowerShell 调试程序无法远程运行。若要调试远程计算机上的脚本，请将该脚本复
    制到本地计算机。

    可使用 Windows PowerShell 调试程序的功能，在 Windows PowerShell 脚本、函数、命令或
    表达式运行过程中对它们进行检查。Windows PowerShell 调试程序包含一组 cmdlet，可用来设置
    断点、管理断点以及查看调用堆栈。

    Windows PowerShell 提供了几种用于调试脚本、函数和命令的方法。

    方法 1：Set-PsDebug cmdlet 提供了基本脚本调试功能，包括单步执行和跟踪。有关详细信息，
        请键入："get-help set-psdebug"。

    方法 2：使用 Set-StrictMode cmdlet 来检测是否存在对未初始化变量的引用、对不存在的对象
            属性的引用以及无效的函数语法。

    方法 3：在脚本中添加诊断语句，如用于显示变量值的语句，用于读取命令行输入的语句，或用于报告
            当前指令的语句。可出于调试目的使用包含 Write 动词的 cmdlet，如 Write-Host、Write-
            Debug、Write-Warning 和 Write-Verbose。

    方法 4：使用 Windows PowerShell 调试程序来调试脚本。或者，使用调试程序来调试在命令提示
            符下键入的函数或脚本块。可以设置断点、单步执行脚本、检查变量的值、运行诊断和
        日志记录命令并显示调用堆栈。

  调试程序 Cmdlet
      Windows PowerShell 调试程序包含下面一组 cmdlet：

          Set-PsBreakpoint：     在行、变量和命令上设置断点。

          Get-PsBreakpoint：     获取当前会话中的断点。

          Disable-PsBreakpoint： 关闭当前会话中的断点。

          Enable-PsBreakpoint：  重新启用当前会话中的断点。

          Remove-PsBreakpoint：  删除当前会话中的断点。

          Get-PsCallStack：   	 显示当前调用堆栈。

  启动和停止调试程序
      若要启动调试程序，请设置一个或多个断点。然后，运行想要调试的脚本、命令或函数。

      在到达断点时，执行会停止，调试程序将接管控制。

      若要停止调试程序，请运行脚本、命令或函数，直到运行完成。或者，键入“stop”或“t”。

  调试程序命令
      在 Windows PowerShell 控制台中使用调试程序时，可使用以下命令来控制执行。

      注意：有关如何在其他主机应用程序中使用调试程序的信息，请参阅主机应用程序文档。

     s, Step-into        执行下一条语句，然后停止。

     v, Step-over        执行下一条语句，但跳过函数和调用。将执行被跳过的语句，
                 但不单步执行。

     o, Step-out         移出当前函数；如果嵌套则上移一级。如果位于 main 函数体
                 中，则继续前进到末尾或下一个断点。将执行被跳过的语句，
                但不单步执行。

     c, Continue         继续运行，直到脚本完成或到达下一个断点。将执行被跳过的语
                 句，但不单步执行。

        l, List             显示正在执行的脚本部分。默认情况下，它将显示当前行、前面
                    5 行和后面 10 行。若要继续列出脚本，请按 Enter。

        l <m>, List         显示从 <m> 所指定的行号开始的 16 行脚本。

        l <m> <n>, List     显示从 <m> 所指定的行号开始的 <n> 行脚本。

        q, Stop             停止执行脚本并退出调试程序。

        k, Get-PsCallStack  显示当前调用堆栈。

    <Enter>             如果最后一个命令是 Step (s)、Step-over (v) 或 List (l)，
                则重复该命令。否则表示提交操作。

    ?, h                显示调试程序命令帮助。

      若要退出调试程序，请使用 Stop (q)。

      您还可以在调试程序中输入命令、显示变量的值、使用 cmdlet 和运行脚本。

      通过使用这些调试程序命令，可以运行脚本、在相关点处停止、检查变量的值和
      系统的状态，以及继续运行脚本直到发现问题。

  调试程序环境
      在到达断点时，会进入调试程序环境中。此时命令提示符变为以“[DBG]:”开头。可以自定义提示符。

      另外，在某些主机应用程序如 Windows PowerShell 控制台中，将打开用于调试的嵌套提示符
      （但在 Windows PowerShell 集成脚本环境 [ISE] 中不是这样）。您可以通过命令提示符中重
      复的大于号字符 (ASCII 62) 看出提示符嵌套。

      例如，以下是 Windows PowerShell 控制台中的默认调试提示符：

          [DBG]: PS (get-location)>>>

      可以使用 $NestedPromptLevel 自动变量检查嵌套级别。

      另外，在本地作用域中还会定义一个自动变量 $PSDebugContext。可根据 $PsDebugContext
      变量是否存在来判断是否处于调试程序中。

      例如：

          if ($psdebugcontext) {"Debugging"} else {"Not Debugging"}

      调试时可以使用 $PSDebugContext 变量的值。

    [DBG]: PS>>> $psdebugcontext.invocationinfo

        Name   CommandLineParameters  UnboundArguments  Location
        ----   ---------------------  ----------------  --------
        =      {}                     {}                C:\ps-test\vote.ps1 (1)

  调试和作用域
      强行进入调试程序不会改变正在使用的作用域，但在到达脚本中的断点时，
      将会进入脚本作用域。脚本作用域是运行调试程序的作用域的子作用域。

      若要查找在脚本作用域中定义的变量和别名，请使用 Get-Alias 或 Get-Variable cmdlet 的
      Scope 参数。

      例如，以下命令可获取本地（脚本）作用域中的变量：

      get-variable -scope 0

      可将该命令缩写为：

    gv -s 0

      在您只想查看在脚本中定义的变量以及在调试过程中定义的变量时，这是一个有用的方法。

  在命令行上进行调试
      在设置变量断点或命令断点时，可只在脚本文件中设置。但在默认情况下，
      该断点会设置在运行于当前会话中的所有内容。

      例如，如果在 $name 变量上设置一个断点，则调试程序将在任何运行的脚本、
      命令、函数、脚本 cmdlet 或表达式中的任何 $name 变量处中断，直到将该
      断点禁用或删除。

      这可使您在更加真实的环境下对脚本进行调试，在这样的环境下，脚本可能会
      受到会话中和用户配置文件中的函数、变量以及其他脚本的影响。

      行断点是脚本文件所特有的，因此只能在脚本文件中设置。

  调试函数
      当在包含 Begin、Process 和 End 节的函数上设置断点时，调试程序将在每节的第一行中断。

      例如：

              function test-cmdlet
              {
                  begin
                  {
                      write-output "Begin"
                  }
                  process
                  {
                      write-output "Process"
                  }
                  end
                  {
                      write-output "End"
                  }
              }

          C:\PS> set-psbreakpoint -command test-cmdlet

          C:\PS> test-cmdlet

          Begin
          Entering debug mode.Use h or ?for help.

          Hit Command breakpoint on 'prompt:test-cmdlet'

          test-cmdlet

          [DBG]: C:\PS> c
          Process
          Entering debug mode.Use h or ?for help.

          Hit Command breakpoint on 'prompt:test-cmdlet'

          test-cmdlet

          [DBG]: C:\PS> c
          End
          Entering debug mode.Use h or ?for help.

          Hit Command breakpoint on 'prompt:test-cmdlet'

          test-cmdlet

          [DBG]: C:\PS>

  调试远程脚本
      不能在远程会话中运行 Windows PowerShell 调试程序。若要调试远程
      计算机上的脚本，请将该脚本复制到本地计算机。

      以下命令将 Test.ps1 脚本从 Server01 远程计算机复制到本地计算机：

          invoke-command -computername Server01 `
          {get-content c:\ps-test\test.ps1} | set-location c:\ps-test\test.ps1

  示例
      此测试脚本检测操作系统的版本，并显示一条与系统相关的消息。
      脚本中包含一个函数、一个函数调用和一个变量。

      以下命令显示测试脚本文件的内容：

      c:>\PS-test> get-content test.ps1

      function psversion {
             "Windows Powershell " + $psversiontable.psversion
              if ($psversiontable.psversion.major -lt 2) {
                  "Upgrade to Windows PowerShell 2.0!"
              }
              else {
                  "Have you run a background job today (start-job)?"}
          }

      $scriptname = $MyInvocation.MyCommand.Path
      psversion
      "Done $scriptname."

      若要开始，请在脚本中的相关位置（如行、命令、变量或函数）设置一个断点。

      首先在当前目录中的 Test.ps1 脚本的第一行设置一个行断点。

          PS C:\ps-test> set-psbreakpoint -line 1 -script test.ps1

      可将此命令缩写为：

          PS C:\ps-test> spb 1 -s test.ps1

      该命令返回一个行断点对象 (System.Management.Automation.LineBreakpoint)。

          Column     : 0
            Line       : 1
            Action     :
            Enabled    : True
            HitCount   : 0
            Id         : 0
            Script     : C:\ps-test\test.ps1
            ScriptName : C:\ps-test\test.ps1

      现在启动脚本。

      PS C:\ps-test> .\test.ps1

      当脚本到达第一个断点时，断点消息指示调试程序正在运行。该消息
      对断点进行描述，并预览脚本中作为函数声明的第一行。命令提示符
      也发生改变，以指示调试程序获得控制权。

      预览行包含脚本名和被预览命令的行号。

          Entering debug mode.Use h or ?for help.

          Hit Line breakpoint on 'C:\ps-test\test.ps1:1'

          test.ps1:1  function psversion {
          DBG>

      使用 Step 命令 (s) 执行脚本中的第一条语句并预览下一条语句。下一条语句使用
      $MyInvocation 自动变量将 $ScriptName 变量的值设置为脚本文件的路径和文件名。

          DBG> s
          test.ps1:11  $scriptname = $MyInvocation.MyCommand.Path

      此时还没有填充 $ScriptName 变量，但可显示该变量的值以验证该值。在本例中，该值为
      $null。

          DBG> $scriptname
          DBG>

      使用另一个 Step 命令 (s) 执行当前语句并预览脚本中的下一条语句。下一条语句将调用
      PsVersion 函数。

      DBG> s
      test.ps1:12 psversion

      此时已填充 $ScriptName 变量，您可显示该变量的值以验证该值。在本例中，
      已将该值设置为脚本路径。

          DBG> $scriptname
          C:\ps-test\test.ps1

      使用另一个 Step 命令来执行函数调用。按 Enter 或键入"s"以执行 Step 命令。

      DBG> s
      test.ps1:2       "Windows Powershell " + $psversiontable.psversion

      调试消息中包含对函数中语句的预览。若要执行此语句并预览函数中的下一条语句，
      可使用一个 Step 命令。但本例中使用的是 Step-Out 命令 (o)。该命令将完成函
      数的执行（除非遇到断点）并步入脚本中的下一条语句。

      DBG> o
      Windows Powershell 2.0
      Have you run a background job today (start-job)?
      test.ps1:13 "Done $scriptname"

      由于已位于脚本中的最后一条语句上，因此 Step、Step-Out 和 Continue 命令的效果相同。
      本例中使用 Step-Out (o)。

      Done C:\ps-test\test.ps1
      PS C:\ps-test>

      Step-Out 命令将执行最后一条命令。显示的标准命令提示符表明调试程序已退出，
      控制权已返还给命令处理程序。

      现在，再次运行调试程序。首先，使用 Get-PsBreakpoint 和 Remove-PsBreakpoint
      cmdlet 删除当前断点。（如果可能需要再次使用该断点，则应使用 Disable-PsBreakpoint
      cmdlet 而非 Remove-PsBreakpoint。）

      PS C:\ps-test> Get-PsBreakpoint | Remove-PSBreakpoint

      可将此命令缩写为：

      PS C:\ps-test> gbp | rbp

      或者，通过编写函数来运行命令，如下面的函数：

      function delbr { gbp | rbp }

      现在，在 $scriptname 变量上创建断点。

      PS C:\ps-test> set-psbreakpoint -variable scriptname -script test.ps1

      可将该命令缩写为：

      PS C:\ps-test> sbp -v scriptname -s test.ps1

      现在启动脚本。脚本到达变量断点。默认模式为 Write，因此将恰好在更改变量值的语句之前停止执行。

      PS C:\ps-test> .\test.ps1
      Hit Variable breakpoint on 'C:\ps-test\test.ps1:$scriptname'
          (Write access)

      test.ps1:11 $scriptname = $MyInvocation.mycommand.path

      显示 $scriptname 变量的当前值，该值为 $null。

          DBG> $scriptname
          DBG>

      使用 Step 命令 (s) 执行用于填充该变量的语句。然后，显示 $scriptname 变量的新值。

      DBG> $scriptname
      C:\ps-test\test.ps1

      使用 Step 命令 (s) 预览脚本中的下一条语句。

      DBG> s
      test.ps1:12 psversion

      下一条语句是对 PsVersion 函数的调用。若要跳过函数但仍执行该函数，请使用 Step-Over 命
      令 (v)。如果使用 Step-Over 时当前位置已在函数中，则该函数调用将无效。这种情况下将显示函
      数调用，但不会执行该函数调用。

      DBG> v
      Windows Powershell 2.0
      Have you run a background job today (start-job)?
      test.ps1:13 "Done $scriptname"

      Step-Over 命令执行该函数，预显脚本中的下一条语句（该语句输出最后一行）。

      使用 Stop 命令 (t) 退出调试程序。命令提示符重新变为标准命令提示符。

      C:\ps-test>

      若要删除断点，请使用 Get-PsBreakpoint 和 Remove-PsBreakpoint cmdlet。

      PS C:\ps-test> Get-PsBreakpoint | Remove-PSBreakpoint

      在 PsVersion 函数上创建新的命令断点。

          PS C:\ps-test> Set-PsBreakpoint -command psversion -script test.ps1

      可将此命令缩写为：

          PS C:\ps-test> sbp -c psversion -s test.ps1

      现在运行脚本。

          PS C:\ps-test> .\test.ps1
          Hit Command breakpoint on 'C:\ps-test\test.ps1:psversion'

          test.ps1:12 psversion
          DBG>

      脚本到达函数调用位置的断点。此时尚未调用该函数。这样您就能使用 Set-PsBreakpoint 的
      Action 参数来设置断点执行条件，或执行准备或诊断任务，如启动日志或调用诊断或安全脚本。

      若要设置操作，请使用 Continue 命令 (c) 退出脚本，并使用 Remove-PsBreakpoint 命令
      删除当前断点。（断点是只读的，因此无法在当前断点中添加操作。）

      DBG> c
      Windows PowerShell 2.0
      Have you run a background job today (start-job)?
      Done C:\ps-test\test.ps1

      PS C:\ps-test> get-psbreakpoint | remove-psbreakpoint
      PS C:\ps-test>

      现在，创建一个包含操作的新命令断点。以下命令设置一个包含操作的命令断点，该操作将在调用函
      数时记录 $scriptname 变量的值。由于该操作中未使用 Break 关键字，因此执行不会停止。（倒
      引号 (`) 为行继续符）。

         PS C:\ps-test> set-psbreakpoint -command psversion -script test.ps1  `
         -action { add-content "The value of `$scriptname is $scriptname." `
         -path action.log}

      您还可以添加用于设置断点条件的操作。在以下命令中，仅在执行策略设置为 RemoteSigned 时才
      会执行命令断点，该策略是允许脚本运行的执行策略中限制性最强的策略。（倒引号 (`) 为继续
      符）。

          PS C:\ps-test> set-psbreakpoint -script test.ps1 -command psversion `
          -action { if ((get-executionpolicy) -eq "RemoteSigned") { break }}

      操作中的 Break 关键字将引导调试程序执行断点。也可以使用 Continue 关键字来引导调试程序
      不中断地执行。默认关键字为 Continue，因此必须指定 Break 才能停止执行。

      现在运行脚本。

      PS C:\ps-test> .\test.ps1
      Hit Command breakpoint on 'C:\ps-test\test.ps1:psversion'

      test.ps1:12 psversion

      由于执行策略设置为 RemoteSigned，执行将在函数调用位置停止。

      此时，您可能希望检查调用堆栈。可使用 Get-PsCallStack cmdlet 或 Get-PsCallStack
      调试程序命令 (k) 进行检查。以下命令获取当前调用堆栈。

      DBG> k
      2: prompt
      1: .\test.ps1: $args=[]
      0: prompt: $args=[]

      此示例仅演示了使用 Windows PowerShell 调试程序的众多方法中的几种。

      有关调试程序 cmdlet 的详细信息，请键入以下命令：

          help <cmdlet-name> -full

      例如，键入：

          help set-psbreakpoint -full

另请参阅
    Disable-PsBreakpoint
    Get-PsBreakpoint
    Remove-PsBreakpoint
    Set-PsBreakpoint
    Set-PsDebug
    Set-Strictmode
    Write-Debug
    Write-Verbose
    Enable-PsBreakpoint
    Get-PsCallStack


about_Do

主题
    about_Do

简短说明
    根据 While 或 Until 条件，运行一个语句列表一次或多次。

详细说明
    Do 关键字与 While 关键字或 Until 关键字一起使用，用于根据一个条件来运行脚本块中的语句。
    与相关的 While 循环不同，Do 循环中的脚本块始终至少运行一次。

    Do-While 循环是 While 循环的一种变体。在 Do-While 循环中，将在脚本块运行之后对条件进行
    计算。与在 While 循环中一样，只要条件计算结果为 True，就会重复运行脚本块。

    与 Do-While 循环相似，在对条件进行计算之前，Do-Until 循环始终至少运行一次。但是，脚本块
    仅在条件为 False 时运行。

    可在 Do-While 循环或 Do-Until 循环中使用 Continue 和 Break 流控制关键字。

  语法
      下面显示了 Do-While 语句的语法：

          do {<statement list>} while (<condition>)

      下面显示了 Do-Until 语句的语法：

          do {<statement list>} until (<condition>)

      语句列表中包含一个或多个每次进入或重复循环时都将运行的语句。

      该语句的条件部分可解析为 True 或 False。

  示例
      以下 Do 语句示例对数组中的项进行计数，直到到达值为 0 的项。

          C:\PS> $x = 1,2,78,0
          C:\PS> do { $count++; $a++; } while ($x[$a] -ne 0)
          C:\PS> $count
          3

      以下示例使用了 Until 关键字。请注意，用等于运算符 (-eq) 替换了不等于运算符 (-ne)。

          C:\PS> $x = 1,2,78,0
          C:\PS> do { $count++; $a++; } until ($x[$a] -eq 0)
          C:\PS> $count
          3

      以下示例写出一个数组中不小于 0 的所有值。

          do
          {
              if ($x[$a] -lt 0) { continue }
              Write-Host $x[$a]
          }
          while (++$a -lt 10)

另请参阅
    about_While
    about_Operators
    about_Assignment_Operators
    about_Comparison_Operators
    about_Break
    about_Continue


about_Environment_Variables

主题
    about_Environment_Variables

简短说明
    说明如何在 Windows PowerShell 中访问 Windows 环境变量。

详细说明
    环境变量存储了操作系统环境的相关信息。此信息包括操作系统路径、
    操作系统使用的处理器的数量以及临时文件夹的位置之类的详细信息。

    环境变量存储了由操作系统和其他程序使用的数据。例如，WINDIR 环境变量
    包含 Windows 安装目录的位置。程序可以查询此变量的值以确定 Windows 操作
    系统文件的位置。

    Windows PowerShell 使您可以查看和更改 Windows 环境变量，包括在注册表中
    设置的变量以及为特定会话设置的变量。Windows PowerShell Environment 提供
    程序简化了这个过程，使查看和更改环境变量变得很容易。

    与 Windows PowerShell 中其他类型的变量不同，环境变量和它们的值由子会话
    （如本地后台作业和运行模块成员的会话）来继承。这就使环境变量非常适合
    存储父会话和子会话中都需要的值。

  Windows PowerShell Environment 提供程序
      通过 Windows PowerShell Environment 提供程序，可以在 Windows PowerShell 的
      Windows PowerShell 驱动器（Env: 驱动器）中访问 Windows 环境变量。
      此驱动器与文件系统驱动器非常相像。要进入 Env: 驱动器，请键入：

      set-location env:

      随后，要显示 Env: 驱动器的内容，请键入：

      get-childitem

      您可从任何其他 Windows PowerShell 驱动器中查看 Env: 驱动器中的
      环境变量，而且可以进入 Env: 驱动器来查看和更改环境变量。

  环境变量对象
      在 Windows PowerShell 中，每个环境变量都通过作为 System.Collections.Dictionary
      Entry 类的实例的对象来表示。

      在每个 DictionaryEntry 对象中，环境变量的名称为字典键。环境变量的值为字典值。

      若要在 Windows PowerShell 中显示环境变量，需要获取表示该变量的对象，然后显示
      该对象属性的值。若要在 Windows PowerShell 中更改环境变量，请使用与 DictionaryEntry
      对象相关联的方法。

      要在 Windows PowerShell 中显示表示环境变量的对象的属性和方法，请使用 Get-Member cmdlet。
      例如，要显示 Env: 驱动器中所有对象的方法和属性，请键入：

      get-item -path env:* |get-member

  显示环境变量
      可以使用包含 Item 名词的 cmdlet (Item cmdlet) 来显示和更改环境变量的值。
      由于环境变量不具有子项，因此 Get-Item 和 Get-ChildItem 的输出相同。

      若要引用环境变量，请键入 Env: 驱动器名称，然后在后面键入该变量的名称。
      例如，若要显示 COMPUTERNAME 环境变量的值，请键入：

      get-childitem env:computername

      若要显示所有环境变量的值，请键入：

      get-childitem env:

      默认情况下，Windows PowerShell 将按环境变量的检索顺序显示这些变量。若要
      按变量名称对环境变量列表进行排序，请将 Get-ChildItem 命令的输出通过管道
      传递给 Sort-Object cmdlet。例如，从任何 Windows PowerShell 驱动器中，请键入：

      get-childitem env: | sort name

      也可以通过使用 Set-Location cmdlet 进入 Env: 驱动器：

      set-location env:

      在位于 Env: 驱动器中时，可以从路径中省略 Env: 驱动器名称。
      例如，若要显示所有环境变量，请键入：

      get-childitem

      若要从 Env: 驱动器中显示 COMPUTERNAME 变量的值，请键入：

      get-childitem computername

      也可以使用 Windows PowerShell 中的表达式分析程序来显示和更改
      环境变量的值，而无需使用 cmdlet。若要显示环境变量的值，
      请使用以下语法：

      $env:<变量名称>

      例如，若要显示 WINDIR 环境变量的值，请在 Windows PowerShell 命令提示符下键入以下命令：

      $env:windir

      在此语法中，美元符号 ($) 表示变量，驱动器名称表示环境变量。

  更改环境变量
      若要对环境变量进行永久性更改，请使用“控制面板”中的“系统”
      （“高级”选项卡或“高级系统设置”选项）将更改存储在注册表中。

      在 Windows PowerShell 中更改环境变量时，所做的更改仅影响当前会话。
      这种行为类似于基于 Windows 的环境中的 Set 命令以及基于 UNIX 的
      环境中的 Setenv 命令的行为。

      此外，您还必须具有更改变量值的权限。如果尝试更改值但没有足够的权限，
      则命令将无法执行，且 Windows PowerShell 将显示错误。

      可以使用以下语法，在不使用 cmdlet 的情况下更改变量的值：

          $env:<变量名称> = "<新值>"

      例如，若要将";c:\temp"追加到 Path 环境变量的值中，请使用以下语法：

      $env:path = $env:path + ";c:\temp"

      也可以使用 Set-Item、Remove-Item 和 Copy-Item 等 Item cmdlet 来更改环境变量的值。例如，若要
      使用 Set-Item cmdlet 将";c:\temp"追加到 Path 环境变量的值中，请使用以下语法：

          set-item -path env:path -value ($env:path + ";c:\temp")

      在此命令中，值括在圆括号中，因此该值为一个单元。

  保存对环境变量的更改
      若要在每个 Windows PowerShell 会话中都创建或更改环境变量的值，可将所做更改添加到 Windows
      PowerShell 配置文件中。

      例如，若要在每个 Windows PowerShell 会话中都将 C:\Temp 目录添加到 Path 环境变量中，请将以下命
      令添加到 Windows PowerShell 配置文件中。

      $env:path = $env:path + ";c:\temp"

      若要将命令添加到现有配置文件如"CurrentUser,AllHosts"配置文件中，请键入：

      add-content -path $profile.CurrentUserAllHosts -value '$env:path =
      $env:path + ";c:\temp"'

  用于存储首选项的环境变量
      Windows PowerShell 的功能可使用环境变量来存储用户首选项。这些变量的作用与首选项变量类似，但它们
      由创建它们的会话的子会话来继承。有关首选项变量的详细信息，请参阅 about_preference_variables。

      用于存储首选项的环境变量包括：

        PSModulePath
            存储默认模块目录的路径。未指定指向模块的完整路径时，Windows PowerShell 将在指定目录中查找
            模块。

            $env:PSModulePath 的默认值为：

                $home\Documents\WindowsPowerShell\Modules; $pshome\Modules

            Windows PowerShell 在注册表中设置"$pshome\Modules"的值。
            Windows PowerShell 每次启动时都将设置
            "$home\Documents\WindowsPowerShell\Modules"的值。

            另外，将模块安装到其他目录（如 Program Files 目录）的安装程序会将它们的位置追加到
            PSModulePath 的值中。

            若要更改默认模块目录，请更改 PSModulePath 环境变量的值。

            例如，若要将"C:\ps-test\Modules"目录添加到 PSModulePath 环境变量的值中，请键入：

                $env:PSModulePath = $env:PSModulePath + ";c:\ps-test\Modules"

            命令中的分号 (;) 将新路径与列表中该路径前面的路径分隔开。

            所做的更改仅影响当前会话，除非您将一个更改该值的命令添加到配置文件中，或使用“控制面板”中的
            “系统”在注册表中更改 PSModulePath 环境变量的值。

            有关详细信息，请参阅 about_Modules。

另请参阅
    Environment（提供程序）


about_Escape_Characters

主题
    about_Escape_Characters

简短说明
    介绍 Windows PowerShell 中的转义字符并解释其作用。

详细说明
    转义字符用于对位于其后的字符给出特殊解释。

    在 Windows PowerShell 中，转义字符为倒引号 (`)，也称为抑音符 (ASCII 96)。转义字符可
    用于指示文本、行继续和特殊字符。

  指示文本
      当一个转义字符位于变量前面时，它可防止该变量被值替代。当一个转义字符位于双引号前面时，
      Windows PowerShell 将双引号解释为字符，而不是字符串分隔符。

      例如：

          C:\>$a = 5
          C:\>"The value is stored in $a."
          The value is stored in 5.

          C:\>$a = 5
          C:\>"The value is stored in `$a."
          The value is stored in $a.

          C:\> "Use quotation marks (") to indicate a string."
          Unexpected token ')' in expression or statement.
          At line:1 char:25
          + "Use quotation marks (") <<<< to indicate a string."

          C:\> "Use quotation marks (`") to indicate a string."
          Use quotation marks (") to indicate a string.

  指示行继续
      转义字符告知 Windows PowerShell 命令在下一行继续。

      例如：

          C:\> get-process `
          >> powershell

          Handles  NPM(K)    PM(K)      WS(K) VM(M)   CPU(s)     Id ProcessName
          -------  ------    -----      ----- -----   ------     -- -----------
              340       8    34556      31864   149     0.98   2036 powershell

  指示特殊字符
      如果在引号内使用，则转义字符指示向命令分析程序提供指令的特殊字符。

      以下为 Windows PowerShell 能够识别的特殊字符：

          0  	Null
          `a  	警报
          `b  	退格
          `f  	换页
          `n  	换行
          `r  	回车
          `t  	水平制表
          `v  	垂直制表

      例如：

          C:\> "12345678123456781`nCol1`tColumn2`tCol3"
          12345678123456781
          Col1  Column2 Col3

      有关详细信息，请键入：

          get-help about_special_characters

另请参阅
    about_Quoting_Rules


about_Eventlogs

主题
    about_EventLogs

简短说明
    Windows PowerShell 将创建一个名为"Windows PowerShell"的 Windows 事件日志，以记录
    Windows PowerShell 事件。可在事件查看器中查看此日志，或通过用于获取事件的 cmdlet（如
    Get-EventLog cmdlet）来查看此日志。默认情况下，Windows PowerShell 引擎和提供程序事
    件记录在事件日志中，但您可以使用事件日志首选项变量来自定义事件日志。例如，可添加与 Windows
    PowerShell 命令有关的事件。

详细说明
    Windows PowerShell 事件日志将记录 Windows PowerShell 操作的详细信息，如程序引擎的启
    动和停止以及 Windows PowerShell 提供程序的启动和停止。也可以记录与 Windows PowerShell 命
    令有关的详细信息。

    在 Windows Vista 及更高版本中，Windows PowerShell 事件日志位于"应用程序和服务日志"
    组中。Windows PowerShell 日志是一种不使用 Windows 事件技术的传统事件日志。若要查看日
    志，请使用针对传统事件日志设计的 cmdlet，如 Get-EventLog。

  查看 Windows PowerShell 事件日志

      可在事件查看器中或使用 Get-EventLog 和 Get-WmiObject cmdlet 来查看 Windows
      PowerShell 事件日志。若要查看 Windows PowerShell 日志的内容，请键入：

      get-eventlog -logname "Windows PowerShell"

      若要检查事件及其属性，请使用 Sort-Object cmdlet、Group-Object cmdlet 和包含
      Format 动词的 cmdlet (Format cmdlets)。

      例如，若要查看日志中通过事件 ID 进行分组的事件，请键入：

      get-eventlog "Windows PowerShell" | format-table -groupby eventid

      或键入：

      get-eventlog "Windows PowerShell" | sort-object eventid `
            | group-object eventid

      若要查看所有传统事件日志，请键入：

      get-eventlog -list

      也可以通过 Get-WmiObject cmdlet 使用事件相关 Windows Management
      Instumentation (WMI) 类来检查事件日志。
      例如，若要查看事件日志文件的所有属性，请键入：

      get-wmiobject win32_nteventlogfile | where `
            {$_.logfilename -eq "Windows PowerShell"} | format-list -property *

      若要查找 Win32 事件相关 WMI 类，请键入：

    get-wmiobject -list | where {$_.name -like "win32*event*"}

      有关详细信息，请键入"get-help get-eventlog"和"get-help get-wmiobject"。

  选择在 Windows PowerShell 事件日志中记录的事件

      可以使用事件日志首选项变量来确定在 Windows PowerShell 事件日志中记录哪些事件。

      共有六个事件日志首选项变量；两个变量用于三个日志组件中的每个组件：引擎（Windows
      PowerShell 程序）、提供程序和命令。LifeCycleEvent 变量记录正常启动和停止事件。
      Health 变量记录错误事件。

      下表列出了事件日志首选项变量。

          变量                         说明
      --------------------------   ----------------------------------------
      $LogEngineLifeCycleEvent     记录 Windows PowerShell 的启动和停止。

      $LogEngineHealthEvent        记录 Windows PowerShell 程序错误。

      $LogProviderLifeCycleEvent   记录 Windows PowerShell 提供程序的启动和停止。

      $LogProviderHealthEvent      记录 Windows PowerShell 提供程序错误。

      $LogCommandLifeCycleEvent    记录命令的开始执行和完成。

      $LogCommandHealthEvent       记录命令错误。

      （有关 Windows PowerShell 提供程序的信息，请键入"get-help about_providers"。）

      默认情况下，仅启用以下事件类型：

      $LogEngineLifeCycleEvent
      $LogEngineHealthEvent
      $LogProviderLifeCycleEvent
      $LogProviderHealthEvent

      若要启用某个事件类型，请将该事件类型的首选项变量设置为 $true。例如，若要启用命令生命周
      期事件，请键入：

      $LogCommandLifeCycleEvent

      或键入：

      $LogCommandLifeCycleEvent = $true

      若要禁用某个事件类型，请将该事件类型的首选项变量设置为 $false。例如，若要禁用命令生命周
      期事件，请键入：

      $LogProviderLifeCycleEvent = $false

      这些变量设置仅适用于当前 Windows PowerShell 会话。若要将这些设置应用于所有 Windows
      PowerShell 会话，请将它们添加到 Windows PowerShell 配置文件中。

  安全和审核

      Windows PowerShell 事件日志用于指示活动性，并提供用于疑难解答的详细操作信息。

      但是，与大多数基于 Windows 的应用程序事件日志类似，Windows PowerShell 事件日志也有
      不安全的一面。不应将它用于审核安全性，或用于记录机密或专有信息。

      事件日志可由用户读取和理解。用户可读取日志，并向日志中写入内容。
      恶意用户可读取位于本地或远程计算机上的事件日志，记录错误数据，并阻止记录他们的活动。

另请参阅
    Get-EventLog
    Get-WmiObject
    about_Preference_Variables


about_Execution_Policies

主题
    about_Execution_Policies

简短说明
    说明 Windows PowerShell 执行策略，并介绍如何对它们进行管理。

详细说明
    使用 Windows PowerShell 执行策略，可以确定 Windows PowerShell
    加载配置文件和运行脚本的条件。

    可以为本地计算机、当前用户或特定会话设置执行策略。也可使用组策略设置
    为计算机和用户设置执行策略。

    用于本地计算机和当前用户的执行策略存储在注册表中。无需在 Windows PowerShell
    配置文件中设置执行策略。用于特定会话的执行策略仅存储在内存中，会话关闭时，
    该执行策略将丢失。

    执行策略并不是限制用户操作的安全系统。例如，当无法运行脚本时，
    用户可通过在命令行中键入脚本内容而轻松规避某个策略。执行策略的
    真正用途是帮助用户设置一些基本规则，并防止用户无意中违反这些规则。

 WINDOWS POWERSHELL 执行策略
 -------------------------------------

    Windows PowerShell 执行策略如下：

    "Restricted"是默认策略。

        Restricted
            - 默认执行策略。

            - 允许单个命令运行，但不能运行脚本。

            - 阻止所有脚本文件的运行，包括格式和配置文件 (.ps1xml)、模块脚本文件 (.psm1)
              和 Windows PowerShell 配置文件 (.ps1)。

        AllSigned
            - 可以运行脚本。

            - 要求所有脚本和配置文件由可信发布者签名，包括在本地计算机上编写的脚本。

            - 在运行来自尚未分类为可信或不可信发布者的脚本之前进行提示。

            - 运行来自 Internet 以外的源的未签名脚本及已签名但有恶意的脚本存在风险。

        RemoteSigned
            - 可以运行脚本。

            - 要求可信发布者对从 Internet（包括电子邮件和即时消息程序）下载的脚本和配置文件
              进行数字签名。

            - 不要求对已经运行和已在本地计算机编写的脚本（不是从 Internet 下载的脚本）进行数
              字签名。

            - 面临运行已签名但有恶意的脚本带来的风险。

        Unrestricted
            - 可以运行未签名脚本。（面临运行恶意脚本所带来的风险。）

            - 在运行从 Internet 下载的脚本和配置文件之前警告用户。

        Bypass
            - 不阻止任何执行项，不显示警告和提示。

            - 此执行策略设计用于两种配置：一种是 Windows PowerShell 脚本内置于一个较大的
              应用程序中；一种是 Windows PowerShell 成为拥有自身安全模型的某个程序的基础。

        Undefined
            - 当前作用域中未设置执行策略。

            - 如果所有作用域中的执行策略为 Undefined，则有效执行策略为 Restricted，该策略
              是默认执行策略。

    注意：在不对通用命名约定 (UNC) 路径与 Internet 路径加以区分的系统上，可能无法使用
          RemoteSigned 执行策略来允许运行由 UNC 路径标识的脚本。

 执行策略作用域
 ----------------------
    可以设置仅在特定作用域中有效的执行策略。

    Scope 的有效值为 Process、CurrentUser 和 LocalMachine。LocalMachine 是设置执行策
    略时的默认设置。

    Scope 值按优先级顺序列出。

        - Process
             执行策略仅对当前会话（当前 Windows PowerShell 进程）起作用。执行策略存储在
             $PSExecutionPolicyPreference 环境变量中。当设置了策略的会话关闭时，将删除
             此值。

        - CurrentUser
             执行策略仅对当前用户起作用。该策略存储在 HKEY_CURRENT_USER 注册表子项中。

        - LocalMachine
             执行策略对当前计算机上的所有用户起作用。该策略存储在 HKEY_LOCAL_MACHINE 注册
             表子项中。

    优先策略将在当前会话中有效，即使在较低优先级上设置了限制更加严格的策略也如此。

    有关详细信息，请参阅 Set-ExecutionPolicy。

 获取执行策略
 ------------------------------
    若要获取在当前会话中有效的 Windows PowerShell 执行策略，请使用 Get-ExecutionPolicy
    cmdlet。

    以下命令获取当前执行策略：

    get-executionpolicy

    若要获取对当前会话起作用的所有执行策略并按优先级顺序显示它们，请键入：

        get-executionpolicy -list

    结果类似于以下示例输出：

                  Scope	   ExecutionPolicy
                  -----    ---------------
          MachinePolicy          Undefined
             UserPolicy          Undefined
                Process          Undefined
            CurrentUser       RemoteSigned
           LocalMachine          AllSigned

    在此例中，有效执行策略为 RemoteSigned，因为用于当前用户的执行策略优先于为
    本地计算机设置的执行策略。

    若要获取为特定作用域设置的执行策略，请使用 Get-ExecutionPolicy 的 Scope 参数。

    例如，以下命令可获取用于当前用户作用域的执行策略。

        get-executionpolicy -scope CurrentUser

 更改执行策略
 ------------------------------
    若要在计算机上更改 Windows PowerShell 执行策略，请使用 Set-ExecutionPolicy
    cmdlet。

    所做的更改会立即生效；无需重新启动 Windows PowerShell。

    如果为本地计算机（默认）或当前用户设置执行策略，则所做更改保存在注册表中，并在再次更改该策略之前保持有效。

    如果为当前进程设置执行策略，则该策略不会保存在注册表中。执行策略一直保留到当前进程和其所有子进程关闭为止。

    注意：在 Windows Vista 以及更高版本的 Windows 上，若要运行更改用于本地计算机（默认）的执行策略的命令，
    则应使用"以管理员身份运行"选项启动 Windows PowerShell。

    若要更改执行策略，请键入：

        Set-ExecutionPolicy <policy-name>

    例如：

        Set-ExecutionPolicy RemoteSigned

    若要在特定作用域中设置执行策略，请键入：

        Set-ExecutionPolicy <policy-name> -scope <scope>

    例如：

        Set-ExecutionPolicy RemoteSigned -scope CurrentUser

    用于更改执行策略的命令能够成功执行，但仍无法更改有效执行策略。

    例如，用于为本地计算机设置执行策略的命令能够成功执行，但该策略会被用于当前用户的执行策略覆盖。

 删除执行策略
 ----------------------------
    若要删除特定作用域的执行策略，请将执行策略的值设置为 Undefined。

    例如，若要删除本地计算机所有用户的执行策略，请键入：

        set-executionpolicy Undefined

    或键入：

        set-executionpolicy Undefined -scope LocalMachine

    如果没有在任何作用域中设置执行策略，则有效执行策略为 Restricted，该策略是默认执行策略。

 在 POWERSHELL.EXE 中设置执行策略
 -----------------------------------------
    可以使用 PowerShell.exe 的 ExecutionPolicy 参数为新的 Windows PowerShell 会话设
    置执行策略。
    该执行策略仅对当前会话和子会话起作用。

    若要为新会话设置执行策略，请在命令行启动 Windows PowerShell（如 Cmd.exe 或 Windows
    PowerShell），然后使用 PowerShell.exe 的 ExecutionPolicy 参数来设置执行策略。

    例如：

    powershell.exe -executionpolicy -allsigned

    设置的执行策略不存储在注册表中，而是存储在 $PSExecutionPolicyPreference
    环境变量中。当设置了策略的会话关闭时，将删除该变量。

    在会话过程中，为该会话设置的执行策略优先于在注册表中为本地计算机或当前用户设置的
    执行策略。但是，它不会优先于使用组策略设置设置的执行策略（组策略设置在下面讨论）。

 使用组策略管理执行策略
 -------------------------------------------
    可以使用"启动脚本执行"组策略设置来管理企业中的计算机的执行策略。组策略设置将覆盖在
    Windows PowerShell 中设置的所有作用域中的执行策略。

    "启动脚本执行"策略设置如下：

    -- 如果禁用了"启动脚本执行"，则脚本无法运行。这等效于"Restricted"执行策略。

    -- 如果启用了"启动脚本执行"，则可选择一个执行策略。组策略设置等效于以下执行策略设置。

        组策略			    执行策略
        ------------                ----------------
        允许所有脚本运行。	    Unrestricted

        允许本地脚本和远程	    RemoteSigned
    签名脚本运行。

        仅允许签名脚本运行。	    AllSigned

    -- 如果没有配置"启动脚本执行"，则它将不起作用。在 Windows PowerShell 中设置
       的执行策略有效。

    在组策略编辑器中，PowerShellExecutionPolicy.adm 文件将"启动脚本执行"策略添加到"计
    算机配置"和"用户配置"节点的以下路径中。

        对于 Windows XP 和 Windows Server 2003：
        管理模板\Windows 组件\Windows PowerShell

        对于 Windows Vista 及更高版本的 Windows：
        管理模板\经典管理模板\Windows 组件\Windows PowerShell

    在"计算机配置"节点中设置的策略优先于在"用户配置"节点中设置的策略。

    PowerShellExecutionPolicy.adm 文件在 Microsoft 下载中心提供。有关详细信息，请参阅以
    下位置的"Windows PowerShell 的管理模板"：http://go.microsoft.com/fwlink/?LinkId=131786。

 执行策略优先级
 ---------------------------
    在确定会话的有效执行策略时，Windows PowerShell 按以下优先级顺序来评估执行策略：

        - 组策略：计算机配置
        - 组策略：用户配置
        - 执行策略：Process（或 PowerShell.exe -ExecutionPolicy）
        - 执行策略：CurrentUser
        - 执行策略：LocalMachine

 管理签名和未签名脚本
 ----------------------------------
    如果 Windows PowerShell 执行策略为 RemoteSigned，则 Windows PowerShell 将不会运
    行从 Internet（包括电子邮件和即时消息程序）下载的未签名脚本。

    可对脚本进行签名，或选择在不更改执行策略的情况下运行未签名脚本。

    有关详细信息，请参阅 about_Signing。

另请参阅
    Get-ExecutionPolicy
    Set-ExecutionPolicy
    about_Signing
    "Windows PowerShell 的管理模板"
       (http://go.microsoft.com/fwlink/?LinkId=131786)


about_For

主题
    about_For

简短说明
    说明可用于基于条件测试来运行语句的一种语言命令。

详细说明
    For 语句（也称为 For 循环）是一种语言结构，可用于创建在某一指定条件的计算结果为 True 时
    运行命令块中的命令的循环。

    For 循环的典型用法为循环访问值数组，并对这些值的子集执行操作。在大多数情况下，若要循环访问
    数组中的所有值，请考虑使用 Foreach 语句。

  语法
      下面显示了 For 语句的语法。

          for (<init>; <condition>; <repeat>)
          {<statement list>}

      <init> 占位符表示一条或多条命令（多条命令以逗号分隔），在循环开始前运行。通常使用该语句
      的 <init> 部分来创建变量并使用初值对其进行初始化。

      然后，此变量将成为 For 语句的下一部分中要测试的条件的基础。

      <condition> 占位符表示的 For 语句部分可解析为布尔值 True 或 False。
      Windows PowerShell 在每次运行 For 循环时都计算该条件。如果该语句为 True，
      则将运行命令块中的命令，并再次计算该语句。如果该条件仍为 True，
      则再次运行语句列表中的命令。循环重复运行，直到条件变为 False。

      <repeat> 占位符表示一条或多条命令（多条命令以逗号分隔），将在每次重复
      循环时执行。通常，这用于修改在语句的 <condition> 部分中被测试的变量。

      <statement list> 占位符表示一条或一组命令，这些命令在每次进入或
      重复循环时运行。语句列表的内容括在大括号中。

  示例
      For 语句的最简单形式要求在括号中包含语句的 <init>、<condition> 和 <repeat> 部分，
      并在大括号中包含语句 <statement list> 部分中的一条命令。

      请注意，接下来的示例特意将代码放在 For 语句的外部。而在更后面的示例中，
      代码将集成到 For 语句中。

      例如，以下 For 语句将连续显示 $i 变量的值，直到您按 Ctrl+C 手动中断该命令。

          $i = 1
          for (;;){Write-Host $i}

      可以在语句列表中添加其他命令，使得循环每运行一次，$i 的值就递增 1，如以下示例所示。

          for (;;){$i++; Write-Host $i}

      此语句将连续显示 $i 变量的值，循环每运行一次该变量的值就递增 1，直到您按 Ctrl+C 中断该命
      令为止。

      可以不在 For 语句的语句列表部分中更改变量的值，而是使用 For 语句的 <repeat> 部分，如下
      所示。

          $i=1
          for (;;$i++){Write-Host $i}

      此语句将无限重复，直到您按 Ctrl+C 中断命令。

      通过设置条件（使用 For 语句的 <condition> 部分），可以在条件的计算结果为 False 时结束
      For 循环。在以下示例中，For 循环在 $i 的值小于或等于 10 时运行。

          $i=1
          for(;$i -le 10;$i++){Write-Host $i}

      可以不在 For 语句之外创建并初始化变量，而是通过使用 For 语句的 <init> 部分在 For 循环内
      执行此任务。

          for($i=1; $i -le 10; $i++){Write-Host $i}

      可以使用回车符（而不是分号）来分隔 For 语句中的 <init>、<condition> 和 <repeat> 部
      分。以下示例显示了使用此替代形式的 For 语句语法。

            for (<init>
          <condition>
          <repeat>){
          <statement list>
          }

      For 语句的这一替代形式在 Windows PowerShell 脚本文件中和 Windows PowerShell 命令提示符
      下均可使用。不过，在命令提示符下输入交互式命令时，使用带分号的 For 语句语法更为方便。

      由于 For 循环允许使用模式来递增数组或集合中的值，因此它比 Foreach 循环更为灵活。 在以下
      示例中，$i 变量在 For 语句的 <repeat> 部分以 2 为增量递增。

          for ($i = 0; $i -ile 20; $i += 2) {Write-Host $i}

另请参阅
    about_Comparison_Operators
    about_Foreach


about_Foreach

主题
    about_Foreach

简短说明
    说明可用于遍历项集合中的所有项的一种语言命令。

详细说明
    Foreach 语句（也称为 Foreach 循环）是一种用于逐一遍历（循环访问）项集合中一系列值的语言
    结构。

    可遍历的最简单、最典型的集合类型是数组。在 Foreach 循环中，经常会针对数组中的
    每一项运行一个或多个命令。

  语法
      下面显示了 Foreach 语法：

          foreach ($<item> in $<collection>){<statement list>}

  命令管道之外的 Foreach 语句 Foreach 语句中括在括号中的部分表示一个变量和一个要循环访问的集
  合。Windows PowerShell 在运行 Foreach 循环时自动创建该变量 ($<item>)。在每次迭代通过循
  环之前，该变量将设置为集合中的值。Foreach 语句后面的语句块 {<statement list>} 包含一组要
  针对集合中的各项执行的命令。

  示例
      例如，以下示例中的 Foreach 循环显示了 $letterArray 数组中的值。

          $letterArray = "a","b","c","d"
          foreach ($letter in $letterArray)
          {
              Write-Host $letter
          }

      在此示例中，将创建 $letterArray 数组，并使用字符串值"a"、"b"、"c"和"d"对其进行初
      始化。Foreach 语句第一次运行时，将 $letter 变量设置为与 $letterArray 中的第一项
      （"a"）相等的值。然后，该语句使用 Write-Host cmdlet 显示字母 a。下一次通过循环时，
      $letter 被设置为"b"，依此类推。在 Foreach 循环显示字母 d 之后，Windows PowerShell
      退出循环。

      要在 Windows PowerShell 命令提示符下将 Foreach 语句作为命令运行，则整个 Foreach
      语句必须单占一行。如果将命令放入 .ps1 脚本文件中，则整个 Foreach 语句不必单占一行。

      还可以将 Foreach 语句与可返回项集合的 cmdlet 一起使用。在以下示例中，Foreach 语句将逐一
      通过由 Get-ChildItem cmdlet 返回的项列表。

          foreach ($file in Get-ChildItem)
          {
              Write-Host $file
          }

      可以通过使用 If 语句限制返回的结果来优化该示例。在以下示例中，Foreach 语句将执行与前一示
      例相同的循环操作，但是该示例还添加了 If 语句，以将结果限制为大于 100 千字节 (KB) 的文件：

          foreach ($file in Get-ChildItem)
          {
              if ($file.length -gt 100k)
              {
                  Write-Host $file
              }
          }

      在此示例中，Foreach 循环使用 $file 变量的属性来执行比较运算 ($file.length -gt 100k)。
      $file 变量包含由 Get-ChildItem cmdlet 返回的对象中的所有属性。因此，返回的结果不止只
      有文件名。在下一示例中，Windows PowerShell 将在语句列表中返回长度和上次访问时间：

          foreach ($file in Get-ChildItem)
          {
              if ($file.length -gt 100k)
              {
                  Write-Host $file
                  Write-Host $file.length
                  Write-Host $file.lastaccesstime }
          }

      在此示例中，并不限于只在语句列表中执行一条命令。

      也可以在 Foreach 循环之外使用变量，并在循环内递增该变量。以下示例对超过 100 KB 的文件进
      行计数：

          $i = 0
          foreach ($file in Get-ChildItem)
          {
              if ($file.length -gt 100k)
              {
                  Write-Host $file "file size:" ($file.length /
          1024).ToString("F0") KB
                  $i = $i + 1
              }
          }

          if ($i -ne 0)
          {
              Write-Host
              Write-Host $i " file(s) over 100 KB in the current
          directory."}
          else
          {
              Write-Host "No files greater than 100 KB in the current
          directory."
          }

      在上一示例中，在循环外将 $i 变量设置为 0，并在每找到一个大于 100 KB 的文件时在循环内将该
      变量递增 1。退出循环时，If 语句对 $i 的值进行计算，以显示超过 100 KB 的所有文件的计数。
      或者，该语句将显示一条消息，表明没有找到超过 100 KB 的文件。

      上一示例还演示了设置文件长度结果格式的方式：

          ($file.length / 1024).ToString("F0")

      该值除以 1024 即可以千字节（而不是字节）为单位显示结果，随后使用固定点格式说明符对计算得
      到的值进行格式设置，以删除结果中的所有小数值。"0"将使格式说明符不显示小数位。

  命令管道之内的 Foreach 语句
      当 Foreach 出现在命令管道中时，Windows PowerShell 将使用 foreach 别名调用 ForEach-Object 命令。
      在命令管道中使用 foreach 别名时，无需像在 Foreach 语句中那样包含 ($<item> in $<collection>) 语法。
      这是因为管道中的前一命令已提供此信息。在命令管道中使用的 foreach 别名的语法如下：

          <command> | foreach {<command_block>}

      例如，以下命令管道中的 Foreach 循环将显示工作集（内存使用量）超过 20 兆字节 (MB) 的所有
      进程。Windows PowerShell 通过管道将 Get-Process 命令的输出传递给 foreach 别名。在
      foreach 别名命令块内，$_.WS 变量包含由 Get-Process cmdlet 传递给它的 WS（工作集）
      属性的值。（声明的 $_ 部分是 Windows Script Host [WSH] 自动变量，WS 部分是属性。）
      If 语句使用条件语句来判断工作集是否大于 20 MB（20,000,000 字节）。如果是，则将显示存储
      在 $_.name 变量中的该进程的名称，并以兆字节为单位显示工作集大小。
      如果不存在超过 20 MB 的进程工作集，则不显示任何内容。

          Write-Host "Processes with working-sets greater than 20 MB" Get-
          Process | foreach {
              if ($_.WS -gt 20m)
              {
                  Write-Host $_.name ": "
         ($_.WS/1m).ToString("F0") MB -Separator ""
              }
          }

      foreach 别名还支持起始命令块、中间命令块和结尾命令块。起始命令块和结尾命令块只运行一
      次，而中间命令块在每次 Foreach 循环访问一次集合或数组时都运行一次。

      Foreach 别名在具有起始、中间和结尾命令块组的命令管道中使用时的语法为：

          <command> | foreach {<beginning command_block>}{<middle
          command_block>}{<ending command_block>}

      以下示例演示了起始、中间和结尾命令块的用法。

          Get-ChildItem | foreach {
          $fileCount = $directoryCount = 0}{
          if ($_.PsIsContainer) {$directoryCount++} else
          {$fileCount++}}{ "$directoryCount directories and $fileCount files"}

      起始命令块创建两个变量，并将它们初始化为 0：

          {$fileCount = $directoryCount = 0}

      中间命令块计算由 Get-ChildItem 返回的每项是目录还是文件：

          {if ($_.PsIsContainer) {$directoryCount++} else {$fileCount++}}

      如果返回的项是目录，则 $directoryCount 变量递增 1。如果该项不是目录，则 $fileCount
      变量递增 1。结尾命令块在中间命令块完成循环操作之后运行，返回计算结果：

          {"$directoryCount directories and $fileCount files"}

      通过使用起始、中间和结尾命令块结构及管道运算符，可以重新编写前面的示例，以查找大于
      100 KB 的任何文件，如下所示：

          Get-ChildItem | foreach{
              $i = 0}{
              if ($_.length -gt 100k)
              {
                  Write-Host $_.name "file size:" ($_.length /
          1024).ToString("F0") KB
                  $i++
              }
              }{
              if ($i -ne 0)
              {
                  Write-Host
                  Write-Host "$i file(s) over 100 KB in the current
          directory."
              }
              else
              {
              Write-Host "No files greater than 100 KB in the current
          directory."}
              }

另请参阅
    about_Automatic_Variables
    about_If
    Foreach-Object


about_Format.ps1xml

主题
    about_Format.ps1xml

简短说明
    Windows PowerShell 中的 Format.ps1xml 文件用于定义 Windows PowerShell
    控制台中对象的默认显示。您可以创建自己的 Format.ps1xml 文件，以更改对象的显示或者为在 Windows
    PowerShell 中创建的新对象类型定义默认显示。

详细说明
    Windows PowerShell 中的 Format.ps1xml 文件用于定义 Windows PowerShell
    中对象的默认显示。您可以创建自己的 Format.ps1xml 文件，以更改对象的显示或者为在 Windows
    PowerShell 中创建的新对象类型定义默认显示。

    当 Windows PowerShell 显示对象时，它将使用结构化格式设置文件中的数据来确定对象的默认显示。格式设
    置文件中的数据确定是在表还是在列表中呈现对象，还确定默认情况下显示哪些属性。

    格式设置仅影响显示，不影响传入管道的对象属性以及这些属性的传递方式。

    Windows PowerShell 提供七个格式设置文件。这些文件位于安装目录 ($pshome) 中。每个文件定义一组
    Microsoft .NET Framework 对象的显示：

    Certificate.Format.ps1xml
            证书存储区中的对象（如 X.509 证书）和证书存储区。

    DotNetTypes.Format.ps1xml
            其他 .NET Framework 类型，如 CultureInfo、FileVersionInfo 和
            EventLogEntry 对象。

    FileSystem.Format.ps1xml
            文件系统对象，如文件和目录。

    Help.Format.ps1xml
            帮助视图（如详细和完整视图）、参数和示例。

    PowerShellCore.format.ps1xml
            由 Windows PowerShell 核心 cmdlet（如 Get-Member 和
            Get-History）生成的对象。

    PowerShellTrace.format.ps1xml
            跟踪对象，如由 Trace-Command cmdlet 生成的对象。

    Registry.format.ps1xml
            注册表对象，如注册表项和注册表条目。

    格式设置文件可以为每个对象定义四种不同的视图：表视图、列表视图、宽视图和复杂视图。例如，
    在将 Get-ChildItem 命令的输出通过管道传入 Format-List 命令时，Format-List 将使用
    FileSystem.format.ps1xml 文件中的视图确定如何将文件和文件夹对象显示为列表。

    在 Format.ps1xml 文件中，视图由一组 XML 标记定义，这些标记描述了该视图的名称、该视图可应用于的对
    象类型、列标题以及在该视图主体中显示的属性。Format.ps1xml 文件中的格式在即将向用户呈现数据时应用。

  创建新的 Format.ps1xml 文件

      与 Windows PowerShell 一起安装的 .ps1xml 文件经过了数字签名以防篡改（因为格式设置中可能包含脚
      本块）。因此，若要更改现有对象视图的显示格式或为新对象添加视图，请创建您自己的 Format.ps1xml 文
      件，然后将这些文件添加到 Windows PowerShell 会话中。

      若要创建新文件，请复制现有的 Format.ps1xml 文件。新文件可以使用任何名称，但其文件扩展名必须
      为 .ps1xml。您可以将新文件放在 Windows PowerShell 可访问的任何目录中，但最好将这些文件放在
      Windows PowerShell 安装目录 ($pshome) 或该安装目录的子目录中。

      若要更改当前视图的格式设置，请在格式设置文件中找到该视图，然后使用标记更改该视图。
      若要为新对象类型创建视图，请创建一个新视图，或者将现有视图用作模型。（标记将在本主题的
      下一节中进行说明。）然后，可以删除该文件中的所有其他视图，以便检查该文件的任何人都可以明显看到这些更改。

      保存这些更改之后，使用 Update-FormatData cmdlet 将新文件添加到 Windows PowerShell 会话
      中。如果希望您的视图优先于内置文件中定义的视图，请使用 Update-FormatData 的 PrependData 参
      数。Update-FormatData 仅影响当前会话。要使更改应用于以后所有的会话，请在 Windows PowerShell
      配置文件中添加 Update-FormatData 命令。

  示例：向区域性对象中添加日历数据

      此示例说明如何更改由 Get-Culture cmdlet 生成的区域性对象
      (System.Globalization.CultureInfo) 的格式设置。
      示例中的命令将 Calendar 属性添加到区域性对象的默认表视图中。

      第一步是查找包含区域性对象的当前视图的 Format.ps1xml 文件。以下 Select-String 命令用于查找该
      文件：

      select-string -path $pshome\*format.ps1xml `
              -pattern System.Globalization.CultureInfo

      此命令显示相应的定义位于 DotNetTypes.Format.ps1xml 文件中。

      下一个命令将该文件的内容复制到一个新文件 MyDotNetTypes.Format.ps1xml 中。

      copy-item DotNetTypes.Format.ps1xml MyDotNetTypes.Format.ps1xml

      然后，使用任何 XML 或文本编辑器（如记事本）打开 MyDotNetTypes.Format.ps1xml 文件。找到
      System.Globalization.CultureInfo 对象节。以下 XML 定义 CultureInfo 对象的视图。
      该对象只有一个 TableControl 视图。

      <View>
          <Name>System.Globalization.CultureInfo</Name>
          <ViewSelectedBy>
             <TypeName>Deserialized.System.Globalization.CultureInfo</TypeName>
             <TypeName>System.Globalization.CultureInfo</TypeName>
          </ViewSelectedBy>

          <TableControl>
              <TableHeaders>
                  <TableColumnHeader>
                      <Width>16</Width>
                  </TableColumnHeader>
                  <TableColumnHeader>
                      <Width>16</Width>
                  </TableColumnHeader>
                  <TableColumnHeader/>
              </TableHeaders>
              <TableRowEntries>
                  <TableRowEntry>
                      <TableColumnItems>
                          <TableColumnItem>
                              <PropertyName>LCID</PropertyName>
                          </TableColumnItem>
                          <TableColumnItem>
                              <PropertyName>Name</PropertyName>
                          </TableColumnItem>
                          <TableColumnItem>
                              <PropertyName>DisplayName</PropertyName>
                          </TableColumnItem>
                      </TableColumnItems>
                  </TableRowEntry>
               </TableRowEntries>
          </TableControl>
      </View>

      删除该文件的其余部分，但不要删除 <?XML>、<Configuration> 和 <ViewDefinitions> 起始标记以及
      <ViewDefintions> 和 <Configuration> 结束标记。此外，每次更改该文件时还必须删除
      数字签名。

      <?xml version="1.0" encoding="utf-8" ?>
      <Configuration>
          <ViewDefinitions>
              <View>
                  <Name>System.Globalization.CultureInfo</Name>
                  <ViewSelectedBy>
                      <TypeName>Deserialized.System.Globalization.CultureInfo</TypeName>
                      <TypeName>System.Globalization.CultureInfo</TypeName>
                  </ViewSelectedBy>

                  <TableControl>
                      <TableHeaders>
                          <TableColumnHeader>
                              <Width>16</Width>
                          </TableColumnHeader>
                          <TableColumnHeader>
                              <Width>16</Width>
                          </TableColumnHeader>
                          <TableColumnHeader/>
                      </TableHeaders>
                      <TableRowEntries>
                          <TableRowEntry>
                              <TableColumnItems>
                                  <TableColumnItem>
                                      <PropertyName>LCID</PropertyName>
                                  </TableColumnItem>
                                  <TableColumnItem>
                                      <PropertyName>Name</PropertyName>
                                  </TableColumnItem>
                                  <TableColumnItem>
                                      <PropertyName>DisplayName</PropertyName>
                                  </TableColumnItem>
                              </TableColumnItems>
                          </TableRowEntry>
                       </TableRowEntries>
                  </TableControl>
              </View>
          </ViewDefinitions>
      </Configuration>

      接着，通过添加一组新的 <TableColumnHeader> 标记，为 Calendar 属性创建一个新列。Calendar 属
      性的值可能很长，因此将使用包含 45 个字符的值，如下所示：

                  <TableControl>
                    <TableHeaders>
                        <TableColumnHeader>
                            <Width>16</Width>
                        </TableColumnHeader>
                        <TableColumnHeader>
                            <Width>16</Width>
                        </TableColumnHeader>

                        <TableColumnHeader>
                            <Width>45</Width>
                        </TableColumnHeader>

                        <TableColumnHeader/>
                    </TableHeaders>

      现在，在表行中添加一个新列项，如下所示：

                <TableRowEntries>
                    <TableRowEntry>
                        <TableColumnItems>
                            <TableColumnItem>
                                <PropertyName>LCID</PropertyName>
                            </TableColumnItem>
                            <TableColumnItem>
                                <PropertyName>Name</PropertyName>
                            </TableColumnItem>

                            <TableColumnItem>
                                <PropertyName>Calendar</PropertyName>
                            </TableColumnItem>

                            <TableColumnItem>
                                <PropertyName>DisplayName</PropertyName>
                            </TableColumnItem>
                        </TableColumnItems>
                    </TableRowEntry>
                 </TableRowEntries>

      在保存并关闭该文件后，使用 Update-FormatData 命令（如下面的命令）将新格式文件添加到当前会话中。
      该命令使用 PrependData 参数以高于原始文件的优先级顺序放入新文件。（有关 Update-FormatData 的
      详细信息，请键入"get-help update-formatdata"。）

      update-formatdata -prependpath $pshome\MyDotNetTypes.format.ps1xml

      若要测试这一更改，请键入"get-culture"，然后查看输出（输出中包含 Calendar 属性）。

      C:\PS> get-culture

      LCID Name  Calendar                               DisplayName
      ---- ----  --------                               -----------
      1033 en-US System.Globalization.GregorianCalendar English (United States)

  Format.ps1xml 文件中的 XML

      每个 Format.ps1xml 文件的 ViewDefinitions 节都包含定义每一种视图的 <View> 标记。典型的
      <View> 标记包括以下标记：

          <Name>
              <Name> 标记用于标识视图的名称。

          <ViewSelectedBy>
              <ViewSelectedBy> 标记用于指定应用该视图的
              对象类型。

          <GroupBy>
              <GroupBy> 标记用于指定视图中的项
              的分组方式。

          <TableControl>
          <ListControl>
          <WideControl>
          <ComplexControl>
              这些标记包含指定各项的显示方式的标记。

      <ViewSelectedBy> 标记可为要应用该视图的每个对象类型包含一个 <TypeName> 标记。或者，它也可包含
      一个 <SelectionSetName> 标记，引用在别处使用 <SelectionSet> 标记定义的选择集。

      <GroupBy> 标记包含 <PropertyName> 标记，后者指定按哪个对象属性对项进行分组。它还包含 <Label>
      标记或 <ComplexControlName> 标记，前者为每个组指定用作标签的字符串，后者引用使用 <Control>
      标记在别处定义的复杂控件。<Control> 标记包含一个 <Name> 标记和一个 <ComplexControl> 标记。

      <TableControl> 标记通常包含 <TableHeaders> 和 <TableRowEntries> 标记，这两个标记将定义表
      头和表行的格式设置。<TableHeaders> 标记通常包含 <TableColumnHeader> 标记，后者又包含
      <Label>、<Width> 和 <Alignment> 标记。<TableRowEntries> 标记包含用于表中每一行的
      <TableRowEntry> 标记。<TableRowEntry> 标记又包含 <TableColumnItems> 标记，后者包含用于行
      中每一列的 <TableColumnItem> 标记。
      <TableColumnItem> 标记通常包含 <PropertyName> 标记或 <ScriptBlock> 标记，前者标识要在定义
      的位置显示的对象属性，后者包含用于计算将在该位置显示的结果的脚本代码。

      注意：脚本块还可以用于需要显示计算结果的其他位置。

      <TableColumnItem> 还可以包含 <FormatString> 标记，后者将指定属性或计算结果的显示方式。

      <ListControl> 标记通常包含 <ListEntries> 标记。<ListEntries> 标记又包含
      <ListItems> 标记。<ListItems> 标记包含 <ListItem> 标记，后者又包含
      <PropertyName> 标记。<PropertyName> 标记指定要在列表中的指定位置显示的对象属性。如果通过选择
      集定义了视图选择，则 <ListControl> 标记还可以包含 <EntrySelectedBy> 标记，后者包含一个或多个
      <TypeName> 标记。这些 <TypeName> 标记指定 <ListControl> 标记要显示的对象类型。

      <WideControl> 标记通常包含 <WideEntries> 标记。<WideEntries> 标记又包含一个或多个
      <WideEntry> 标记。<WideEntry> 标记通常包含 <PropertyName> 标记，后者用于指定要在视图的指定
      位置显示的属性。<PropertyName> 标记可以包含 <FormatString> 标记，后者指定属性的显示方式。

      <ComplexControl> 标记包含比其他视图类型更复杂的标记组合。<ComplexControl> 标记通常包含
      <ComplexEntries> 标记。<ComplexEntries> 标记包含多个 <ComplexEntry> 标记。
      <ComplexEntry> 标记通常包含 <ComplexItem> 标记。此标记又可以包含针对视图中的指定位置
      指定内容和格式设置的各种标记，其中包括 <Text>、<Indentation>、<ExpressionBinding>
      和 <NewLine> 标记。

  Update-FormatData

      若要将 Format.ps1xml 文件加载到 Windows PowerShell 会话，请使用 Update-FormatData
      cmdlet。如果希望您文件中的视图优先于内置文件 Format.ps1xml 中的视图，请使用 Update-
      FormatData 的 PrependData 参数。Update-FormatData 仅影响当前会话。要使更改应用于以后所有的
      会话，请在 Windows PowerShell 配置文件中添加 Update-FormatData 命令。

  Types.ps1xml 中的默认显示

      $pshome 目录下的 Types.ps1xml 文件定义了一些基本对象类型的默认显示。这些节点名为
      PsStandardMembers，其子节点使用以下任一标记：

          <DefaultDisplayProperty>
          <DefaultDisplayPropertySet>
          <DefaultKeyPropertySet>

      有关详细信息，请键入以下命令：

      get-help about_types.ps1xml

  跟踪 Format.ps1xml 文件使用情况

      若要在加载或应用 Format.ps1xml 文件时检测错误，请使用 Trace-Command cmdlet 并将以下任意格式
      组件用作 Name 参数的值：

      FormatFileLoading
          UpdateFormatData
          FormatViewBinding

      有关详细信息，请键入以下命令：

          get-help trace-command
          get-help get-tracesource

  对 Format.ps1xml 文件进行签名

      若要对您的 Format.ps1xml 文件的用户提供保护，请使用数字签名对该文件进行签名。有关详细信息，请键入：

          get-help about_signing

另请参阅
    Update-FormatData
    Trace-Command
    Get-TraceSource


about_Functions

主题
    about_Functions

简短说明
    说明如何在 Windows PowerShell 中创建和使用函数。

详细说明
    函数是具有指定名称的语句列表。在运行函数时，需键入函数名称。列表中语句的运行效果
    与在命令提示符下键入它们时的运行效果相同。

    与 cmdlet 类似，函数也可带有参数。参数可以是命名参数、位置参数、开关参数或动态参数。
    函数参数可从命令行或通过管道读取。

    函数返回的值可以显示出来、赋给变量或传递到其他函数或 cmdlet。

    函数的语句列表可包含带有 Begin、Process 和 End 关键字的不同语句列表类型。
    这些语句列表以不同方式对来自管道的输入进行处理。

    筛选器是使用 Filter 关键字的一种特殊函数。

    函数的工作方式也可类似于 cmdlet。可在不使用 C# 编程的情况下创建工作方式类似于 cmdlet 的函数。
    有关详细信息，请参阅 about_Functions_Advanced。

  语法
      下面是函数的语法：

          function [<scope:>]<name> [([type]$parameter1[,[type]$parameter2])]
          {
              param([type]$parameter1 [,[type]$parameter2])

              dynamicparam {<statement list>}

              begin {<statement list>}
              process {<statement list>}
              end {<statement list>}
          }

      函数中包含以下各项：

          - 一个 Function 关键字
          - 一个作用域（可选）
          - 一个由您选择的名称
          - 任意数目的命名参数（可选）
          - 括在大括号 ({}) 内的一条或多条 Windows PowerShell 命令

      有关函数中的 Dynamicparam 关键字和动态参数的详细信息，请参阅
      about_Functions_Advanced_Parameters。

  简单函数
      函数不必很复杂即可非常有用。以下函数可获取不属于当前系统的 System 帐户的环境变量：

          function other_env
          {
             get-wmiObject win32_environment |
                where {$_.username -ne "<System>"}
          }

      若要运行该函数，请键入“other_env”。

      可创建一个包含有用小型函数的工具箱，并将这些函数添加到 Windows PowerShell 配置文件中，如
      about_Profiles 中以及本主题后面内容所述。

  使用参数的函数
      可在函数中使用参数，包括命名参数、位置参数、开关参数和动态参数。有关函数中的动态参数的详细信
      息，请参阅 about_Functions_Advanced_Parameters。

  命名参数
      可以定义任意数目的命名参数。可为命名参数提供默认值，如本主题后面的内容所述。

      可以使用 Param 关键字在大括号内定义参数，如以下示例语法所示：

          function <name> {
               param ([type]$parameter1[,[type]$parameter2])
               <statement list>
          }

      也可以在大括号外定义参数而不使用 Param 关键字，如以下示例语法所示：

          function <name> [([type]$parameter1[,[type]$parameter2])] {
              <statement list>
          }

      这两种方法之间没有差别。您可以自行选择使用任何方法。

      在运行函数时，为参数提供的值将赋给包含该参数名的变量。可在函数中使用该变量的值。

      以下示例是一个名为"Small_files"的函数。此函数有一个 $size 参数。该函数显示小于 $size 参
      数的值的所有文件，并排除目录：

          function small_files {
              param ($size)
              Get-ChildItem c:\ | where {
                  $_.length -lt $size -and !$_.PSIsContainer}
          }

      在该函数中，可以使用 $size 变量，该变量是为该参数定义的名称。

      若要使用该函数，请键入以下命令：

          C:\PS> function small_files -size 50

      也可以为命名参数输入值而不使用该参数的名称。例如，以下命令与指定 Size 参数名的
      命令所得结果相同：

          C:\PS> function small_files 50

      若要定义参数的默认值，请在参数名称的后面键入等号和值，如 Small_files 示例的
      以下变化形式所示：

          function small_files ($size = 100) {
              Get-ChildItem c:\ | where {
                  $_.length -lt $size -and !$_.PSIsContainer}
          }

      如果键入"small_files"而不带任何值，则函数将 100 赋给 $size。如果提供一个值，
      则函数将使用该值。

  位置参数
      位置参数是不带参数名称的参数。Windows PowerShell 根据参数值的顺序将每个参数值
      与函数中的参数相关联。

      在使用位置参数时，请在函数名称的后面键入一个或多个值。位置参数值赋给 $args 数组变量。
      跟在函数名称后面的值赋给 $args 数组中的第一个位置 $args[0]。

      以下 Extension 函数将 .txt 文件扩展名添加到您提供的文件名：

          function extension {
              $name = $args[0] + ".txt"
              $name
          }

          C:\PS> extension myTextFile
          myTextFile.txt

      函数可使用一个以上的位置参数。以下示例显示随函数名称输入的所有值。

          function repeat { foreach ($arg in $args) { "The input is
          $arg" } }

          C:\PS>repeat one
          The input is one

          C:\PS> repeat one two three
          The input is one
          The input is two
          The input is three

      此函数可使用任意数目的值。该函数将每个值赋给 $args 数组中的一个位置。

  开关参数
      开关是不需要值的参数。在键入函数名称后键入开关参数的名称即可使用开关参数。

      若要定义开关参数，请在参数名称前面指定类型 [switch]，如以下示例所示：

          function switchExample {
              param ([switch]$on)
              if ($on) { "Switch on" }
              else { "Switch off" }
          }

      如果在函数名称后面键入 On 开关参数，则函数将显示“Switch on”。如果不使用该开关参数，则函数
      将显示"Switch off"。

          C:\PS> SwitchExample -on
          Switch on

          C:\PS> SwitchExample
          Switch off

      也可在运行函数时将布尔值赋予开关，如以下示例所示：

          C:\PS> SwitchExample -on:$true
          Switch on

          C:\PS> SwitchExample -on:$false
          Switch off

  通过管道将对象传递给函数
      任何函数都可通过管道获取输入。可以使用 Begin、Process 和 End 关键字来控制函数处理来自管道
      的输入的方式。以下示例语法显示了这三个关键字：

          function <name> {
              begin {<statement list>}
              process {<statement list>}
              end {<statement list>}
          }

      Begin 语句列表只运行一次，位于函数开头。

      Process 语句列表针对管道中的每个对象运行一次。
      当 Process 块运行时，将每个管道对象逐次赋予 $_ 自动变量。

      在函数收到管道中的所有对象之后，将运行一次 End 语句列表。如果未使用 Begin、Process 或 End
      关键字，则将所有语句视同一个 End 语句列表。

      以下函数使用 Process 关键字。该函数显示来自管道的示例：

          function pipelineFunction
          {
              process {"The value is: $_"}
          }

      若要演示此函数，请输入用逗号分隔的数字数组，如以下示例所示：

          C:\PS> 1,2,4 | pipelineFunction
          The value is: 1
          The value is: 2
          The value is: 4

      在管道中使用函数时，通过管道传递给函数的对象将赋给 $input 自动变量。在从管道传入任何对象之
      前，函数会运行带有 Begin 关键字的语句。在通过管道收到所有对象之后，函数将运行带有 End 关键字
      的语句。

      以下示例显示了和 Begin 和 End 关键字一起使用的 $input 自动变量。

          function PipelineBeginEnd
          {
              begin {"Begin: The input is $input"}
              end {"End:   The input is $input" }
          }

      如果使用管道运行此函数，则函数将显示以下结果：

          C:\PS> 1,2,4 | PipelineBeginEnd
          Begin: The input is
          End:  The input is 1 2 4

      当 Begin 语句运行时，函数还没有来自管道的输入。End 语句在函数获取值之后运行。

      如果函数中有 Process 关键字，则函数将读取 $input 中的数据。以下示例包含一个 Process 语句列
      表：

          function PipelineInput
          {
              process {"Processing:  $_ " }
              end {"End:   The input is: $input" }
          }

      在此示例中，通过管道传递给函数的每个对象都将发送到 Process 语句列表。Process 语句将对每个对
      象逐次运行。当函数到达 End 关键字时，$input 自动变量为空。

          C:\PS> 1,2,4 | PipelineInput
          Processing: 1
          Processing: 2
          Processing: 4
          End:  The input is:

  筛选器
      筛选器是一种对管道中的每个对象运行的函数。筛选器与将所有语句都放在 Process 块中的函数类似。

      筛选器的语法如下：

          filter [<scope:>]<name> {<statement list>}

      以下筛选器通过管道获取日志条目，然后显示整个条目或仅显示条目的消息部分：

          filter ErrorLog ([switch]$message)
          {
              if ($message) { out-host -inputobject $_.Message } else
              { $_ }
          }

  函数作用域
      函数存在于创建它的作用域中。

      如果函数是脚本的一部分，则该函数可供该脚本内的语句使用。默认情况下，脚本中的函数在命令提示符下不可用。

      可以指定函数的作用域。例如，以下示例将函数添加到全局作用域：

          function global:get-dependentsvs { get-service |
             where {$_.dependentservices} }

      当函数处于全局作用域中时，可以在脚本中、函数中和命令行上使用该函数。

      函数通常会创建一个作用域。在函数中创建的项（如变量）仅存在于该函数作用域中。

      有关 Windows PowerShell 中的作用域的详细信息，请参阅 about_Scope。

  使用 Function: 驱动器查找和管理函数 Windows PowerShell
      中的所有函数和筛选器都自动存储在 Function: 驱动器中。此驱动器由 Windows PowerShell Function 提供程序公开。

      若要引用 Function: 驱动器，请在 Function 后键入一个冒号，就像引用计算机上的 C 或 D 驱动器
      一样。

      以下命令显示了 Windows PowerShell 的当前会话中的所有函数：

          C:\PS>  dir function:

      函数中的命令作为脚本块存储在该函数的 definition 属性中。例如，若要显示 Windows
      PowerShell 附带的 Help 函数中的命令，请键入：

          (dir function:help).definition

      有关 Function: 驱动器的详细信息，请参阅"函数"。

  在新会话中重用函数
      在 Windows PowerShell 命令提示符下键入一个函数时，该函数将成为当前会话的一部分。在会话结束
      之前该函数一直可用。

      若要在所有 Windows PowerShell 会话中使用您的函数，请将该函数添加到 Windows PowerShell 配
      置文件中。有关配置文件的详细信息，请参阅 about_Profiles。

      也可以将函数保存在 Windows PowerShell 脚本文件中。在一个文本文件中键入函数，然后以 .ps1
      作为文件扩展名来保存该文件。

  编写函数帮助
    Get-Help cmdlet 可获取函数、cmdlet、提供程序和脚本的帮助。若要获取函数帮助，请键入 Get-
    Help，并在后面键入函数名称。

    例如，若要获取 MyDisks 函数的帮助，请键入：

        get-help MyDisks

    可使用以下两种方法之一来编写函数帮助：

    --  基于注释的函数帮助

        通过在注释中使用特殊关键字来创建帮助主题。若要创建基于注释的函数帮助，必须将注释放在函数体的
        开头或末尾，或放在 function 关键字前面的行中。有关基于注释的帮助的详细信息，请参阅
        about_Comment_Based_Help。

    --  基于 XML 的函数帮助

        创建基于 XML 的帮助主题，例如通常为 cmdlet 创建的类型。如果要将帮助主题本地化为多种语言，
        则需要使用基于 XML 的帮助。

        若要将函数与基于 XML 的帮助主题相关联，请使用 .ExternalHelp 帮助注释关键字。有关
        ExternalHelp 关键字的详细信息，请参阅 about_Comment_Based_Help。有关基于 XML 的帮助的
        详细信息，请参阅 MSDN 中的“如何编写 Cmdlet 帮助”。

另请参阅
    about_Automatic_Variables
    about_Comment_Based_Help
    about_Functions_Advanced
    about_Functions_CmdletBinding
    about_Parameters
    about_Profiles
    about_Scopes
    about_Script_Blocks
    Function（提供程序）


about_Functions_Advanced

主题
    about_Functions_Advanced

简短说明
    介绍与 cmdlet 行为类似的高级函数。

详细说明
    可通过高级函数来编写执行与 cmdlet 类似的操作的函数。当您希望快速编写函数而不必使用
    Microsoft .NET Framework 语言来编写已编译 cmdlet 时，高级函数十分有用。当您希望限制
    已编译 cmdlet 的功能或希望编写与已编译 cmdlet 类似的函数时，这些高级函数也十分有用。

    创作已编译 cmdlet 与创作高级函数之间存在差别。已编译 cmdlet 是必须以 .NET Framework
    语言（如 C#）编写的 .NET Framework 类。相比之下，高级函数是以 Windows PowerShell 脚
    本语言编写的，编写方法与编写其他函数或脚本块的方法相同。

    高级函数使用 CmdletBinding 属性将自身标识为作用与 cmdlet 相似的函数。CmdletBinding
    属性类似于在已编译 cmdlet 类中用于将类标识为 cmdlet 的 Cmdlet 属性。有关此属性的详细信
    息，请参阅 about_Functions_CmdletBindingAttribute。

    以下示例显示了一个函数，该函数接受一个名称，然后使用提供的名称输出一条问候语。另请注意，
    此函数定义的名称中包含一对动词 (Send) 和名词 (Greeting)，这与已编译 cmdlet 的动词-名词对
    相似。但是，动词-名词名称不是函数所必需的。

        function Send-Greeting
        {
          [CmdletBinding()]
          Param(
              [Parameter(Mandatory=$true)]
              [string] $Name
          )
          Process
          {
            write-host ("Hello " + $Name + "!") }
        }

    函数的参数通过 Parameter 属性来声明。此属性可单独使用，也可与 Alias 属性或几个
    其他参数验证属性结合使用。有关如何声明参数（包括在运行时添加的动态参数）的
    详细信息，请参阅 about_Functions_Advanced_Parameters。

    上一函数的实际工作是在 Process 块中执行的，这种方法等效于已编译 cmdlet 所用的
    ProcessingRecord 方法，已编译 cmdlet 使用该方法处理传递给该 cmdlet 的数据。
    about_Functions_Advanced_Methods 主题对 Process 块以及 Begin 和 End 块进行了
    说明。

    高级函数在以下方面与已编译 cmdlet 有所不同：

        - 在将字符串数组绑定到布尔参数时，高级函数参数捆绑不会引发异常。

        - ValidateSet 属性和 ValidatePattern 属性不能传递命名参数。

        - 事务中不能使用高级函数。

另请参阅
    about_Functions_Advanced_CmdletBindingAttribute
    about_Functions_Advanced_Methods
    about_Functions_Advanced_Parameters
    Windows PowerShell Cmdlets (http://go.microsoft.com/fwlink/?LinkID=135279)


about_Functions_Advanced_Methods

主题
    about_Functions_Advanced_Methods

简短说明
    说明指定了 CmdletBinding 属性 (attribute) 的函数如何使用可用于已编译 cmdlet 的方法和属
    性 (property)。

详细说明
    指定了 CmdletBinding 属性 (attribute) 的函数可通过 $pscmdlet 变量访问一些方法和属性
    (property)。这些方法包括：

        - 已编译 cmdlet 执行操作时使用的输入处理方法。

        - ShouldProcess 和 ShouldContinue 方法，用于在执行操作之前获取用户反馈。

        - ThrowTerminatingError 方法，用于生成错误记录。

        - 几种 Write 方法，用于返回不同类型的输出。

        - 几种 Write 方法，用于返回不同类型的输出。

    PSCmdlet 类的所有方法和属性均可用于高级函数。有关这些方法和属性的详细信息，
    请参阅 MSDN (Microsoft Developer Network) Library 中的
    System.Management.Automation.PSCmdlet，网址是：
    http://go.microsoft.com/fwlink/?LinkId=142139。

  输入处理方法

      本节介绍的方法称为输入处理方法。对于函数，这三种方法分别由函数的 Begin、Process 和
      End 块表示。每个函数都必须包含其中一个或多个块。Windows PowerShell 运行时在运行函数
      时会使用这些块中的代码。（这些块也可用于未使用 CmdletBinding 属性的函数。）

    Begin
      此块用于为函数提供可选的一次性预处理。Windows PowerShell 运行时对管道中的每个函数实例
      使用一次此块中的代码。

    Process
      此块用于为函数提供逐个记录处理。根据函数输入的不同，此块可能使用任意多次，也可以完全不使用。
      例如，如果函数是管道中的第一个命令，则 Process 块将使用一次。如果函数不是管道中的第一个命令，
      则对函数从管道收到的每个输入使用一次 Process 块。如果没有管道输入，则不使用 Process 块。

      如果函数参数设置为接受管道输入，则必须定义此块。如果未定义此块并且参数从管道接受输入，
      则函数将会丢失通过管道传给函数的值。

      此外，如果函数支持确认请求（当 Parameter 属性的 SupportsShouldProcess 参数设置为
      $True 时），则必须在 Process 块中执行对 ShouldProcess 方法的调用。

    End
      此块用于为函数提供可选的一次性后处理。

      以下示例显示了一个函数结构，该函数包含一个 Begin 块（用于一次性预处理）、一个 Process
      块（用于多次记录处理）和一个 End 块（用于一次性后处理）。

          Function Test-ScriptCmdlet
          {
            [CmdletBinding(SupportsShouldProcess=$True)] Param
            ($Parameter1)
            Begin{}
            Process{}
            End{}
          }

  确认方法

    ShouldProcess
      调用此方法是为了在函数执行将更改系统的操作之前请求用户进行确认。函数可根据该方法返回的布
      尔值继续执行。只能从函数的 Process{} 块中调用此方法。并且，CmdletBinding 属性必须声明
      该函数支持 ShouldProcess（如上例所述）。

      有关此方法的详细信息，请参阅 MSDN Library 中的
      System.Management.Automation.Cmdlet.ShouldProcess，网址为
      http://go.microsoft.com/fwlink/?LinkId=142142。

      有关如何请求确认的详细信息，请参阅 MSDN Library 中的"请求确认"，网址为
      http://go.microsoft.com/fwlink/?LinkID=136658。

    ShouldContinue
      调用此方法是为了请求第二条确认消息。此方法应在 ShouldProcess 方法
      返回 $true 时调用。有关此方法的详细信息，请参阅 MSDN Library 中的
      System.Management.Automation.Cmdlet.ShouldContinue，
      网址为 http://go.microsoft.com/fwlink/?LinkId=142143。

  错误方法

    函数可在发生错误时调用两个不同的方法。如果发生非终止错误，函数应调用 WriteError 方法，
    "Write 方法"一节中介绍了该方法。如果发生终止错误，函数无法继续执行，则应调用
    ThrowTerminatingError 方法。此外，还可以对终止错误使用 Throw 语句，对非终止错误使用
    Write-Error cmdlet。

    有关详细信息，请参阅 MSDN Libray 中的 System.Management.Automation.Cmdlet.
    ThrowTerminatingError，网址为 http://go.microsoft.com/fwlink/?LinkId=142144。

  Write 方法

      函数可调用以下方法以返回不同类型的输出。请注意，并不是所有输出都会传入管道中的下一个命
      令。您也可以使用各种 Write cmdlet，如 Write-Error。

    WriteCommandDetail
      有关 WriteCommandDetails 方法的信息，请参阅 MSDN Library 中的
      System.Management.Automation.Cmdlet.WriteCommandDetail，网址为
      http://go.microsoft.com/fwlink/?LinkId=142155。

    WriteDebug
      若要提供可用于对函数进行问题排查的信息，可让函数调用 WriteDebug 方法。调用该方法会向用
      户显示调试消息。有关详细信息，请参阅 MSDN Library 中的
      System.Management.Automation.Cmdlet.WriteDebug，网址为
      http://go.microsoft.com/fwlink/?LinkId=142156。

    WriteError
      如果函数应在发生非终止错误时继续处理记录，则函数应在发生此类错误时调用此方法。有关详细信
      息，请参阅 MSDN Library 中的 System.Management.Automation.Cmdlet.WriteError，
      网址为 http://go.microsoft.com/fwlink/?LinkId=142157。

      注意：如果发生终止错误，则函数应调用 ThrowTerminatingError 方法。

    WriteObject
      此方法允许函数向管道中的下一个命令发送对象。多数情况下会在函数返回数据时使用此方法。
      有关详细信息，请参阅 MSDN Library 中的 System.Management.Automation.PSCmdlet.WriteObject，
      网址为 http://go.microsoft.com/fwlink/?LinkId=142158。

    WriteProgress
      对于需要很长时间才能完成操作的函数，此方法允许这些函数调用 WriteProgress 方法以便显示
      进度信息。例如，可显示已完成百分比。有关详细信息，请参阅
      MSDN Library 中的 System.Management.Automation.PSCmdlet.WriteProgr
      ess，网址为 http://go.microsoft.com/fwlink/?LinkId=142160。

    WriteVerbose
      若要提供有关函数执行情况的详细信息，可让函数调用 WriteVerbose 方法以便向用户显示详细消
      息。默认情况下不显示详细消息。有关详细信息，请参阅 MSDN Library 中的
      System.Management.Automation.PSCmdlet.WriteVerbose，网址为
      http://go.microsoft.com/fwlink/?LinkId=142162。

    WriteWarning
      若要提供有关可能导致意外结果的条件的信息，可让函数调用 WriteWarning 方法以便向用户显示
      警告消息。默认情况下显示警告消息。有关详细信息，请参阅
      MSDN Library 中的 System.Management.Automation.PSCmdlet.WriteWarning，
      网址为 http://go.microsoft.com/fwlink/?LinkId=142164。

      注意：也可以通过配置 WarningPreference 变量或使用 Verbose 和 Debug 命令行选项来显
      示警告消息。

  其他方法和属性

      有关可通过 $PSCmdlet 变量访问的其他方法和属性的信息，请参阅 MSDN library 中的
      System.Management.Automation.PSCmdlet，网址为
      http://go.microsoft.com/fwlink/?LinkId=142139。

      例如，使用 ParameterSetName 属性可查看正在使用的参数集。使用参数集可创建根据运行时指
      定的参数执行不同任务的函数。

另请参阅
    about_Functions_Advanced
    about_Functions_CmdletBindingAttributes
    about_Functions_Advanced_Parameters


about_Functions_Advanced_Parameters

主题
    about_Functions_Advanced_Parameters

简短说明
    说明如何向声明了 CmdletBinding 属性的函数添加静态或动态参数。

详细说明
    您可以在编写函数时声明自己的参数，并且可以使编写的函数能够访问可用于已编译 cmdlet 的通用
    参数。有关 Windows PowerShell 通用参数的详细信息，请参阅 about_CommonParameters。

静态参数
    以下示例显示了定义 ComputerName 参数的参数声明。此参数具有以下特征：

        - 它是必需的。
        - 它接受管道输入。
        - 它接受字符串数组输入。

        Param
          (
            [parameter(Mandatory=$true,
            ValueFromPipeline=$true)]
            [String[]]
            $ComputerName
          )

    Parameter 属性是声明参数时的唯一一个必需属性。不过，您也可以声明 Alias 属性和几个验证参
    数。可添加到参数声明的属性数目没有限制。

  Parameter 属性

      Parameter 属性用于声明函数的参数。
      此属性具有以下用于定义形式参数特征（如形式参数是必需的还是可选的）的命名实际参数。

    必需命名参数

        必需实际参数表示在函数运行时形式参数是必需的。如果未指定此实际参数，则形式参数是可选的。
        以下示例显示了在函数运行时必需的参数的声明。

        Param
          (
            [parameter(Mandatory=$true)]
            [String[]]
            $ComputerName
          )

    位置命名参数

        位置实际参数指定形式参数的位置。如果未指定此实际参数，则在设置形式参数时必须明确指定
        该形式参数的名称或别名。此外，如果函数中的所有参数都没有指定位置，则 Windows PowerShell 运行时
        会按收到这些参数的顺序为每个参数分配位置。

        以下示例显示了一个形式参数的声明，在运行 cmdlet 时必须将该形式参数的值指定为第一个实
        际参数。请注意，无论是否指定参数名称，都可以运行此函数。

        Param
          (
            [parameter(Position=0)]
            [String[]]
            $ComputerName
          )

    ParameterSetName 命名参数

        ParameterSetName 实际参数指定形式参数所属的形式参数集。如果未指定参数集，则参数属于
        函数定义的所有参数集。此行为意味着每个参数集必须有一个不属于任何其他参数集的唯一参数。
        以下示例显示了属于两个不同参数集的两个参数的参数声明。

        Param
          (
            [parameter(Mandatory=$true,
                      ParameterSetName="Computer")] [String[]]
            $ComputerName
          )

        Param
          (
            [parameter(Mandatory=$true,
                      ParameterSetName="User")] [String[]]
            $UserName
          )

        有关参数集的详细信息，请参阅 MSDN Library 中的"Cmdlet 参数集"，网址为
        http://go.microsoft.com/fwlink/?LinkId=142183。

    ValueFromPipeline 命名参数

        ValueFromPipeline 实际参数指定形式参数通过管道对象接受输入。如果 cmdlet 访问完整
        对象，而不仅仅是对象的属性，则应指定此参数。以下示例显示了一个必需参数 ComputerName
        的参数声明，该参数接受通过管道传递给函数的输入对象。

        Param
          (
            [parameter(Mandatory=$true,
                      ValueFromPipeline=$true)] [String[]]
            $ComputerName
          )

    ValueFromPipelineByPropertyName 命名参数

        valueFromPipelineByPropertyName 实际参数指定形式参数通过管道对象的属性接受输入。
        在满足以下条件时，应指定此属性：

            - 参数访问通过管道传递的对象的属性。

            - 属性与参数具有相同的名称或别名。

        例如，如果函数具有 ComputerName 参数，并且通过管道传递的对象具有 ComputerName 属
        性，则将 ComputerName 属性的值赋予函数的 ComputerName 参数。

        以下示例显示了 ComputerName 参数的参数声明，该参数通过传递给 cmdlet 的输入对象的
        ComputerName 属性接受输入。

        Param
          (
            [parameter(Mandatory=$true,
                      ValueFromPipelineByPropertyName=$true)] [String[]]
            $ComputerName
          )

    ValueFromRemainingArguments 命名参数

        ValueFromRemainingArguments 实际参数指定形式参数接受未绑定到函数形式参数的其余所
        有实际参数。以下示例显示了 ComputerName 形式参数的参数声明，该形式参数接受传递给函数
        的输入对象的其余所有实际参数。

        Param
          (
            [parameter(Mandatory=$true,
                      ValueFromRemainingArguments=$true)] [String[]]
            $ComputerName
          )

    HelpMessage 命名参数

        HelpMessage 实际参数指定包含对形式参数的简短说明的消息。以下示例显示了提供参数说明的参
        数声明。

        Param
          (
            [parameter(Mandatory=$true,
                      HelpMessage="An array of computer names.")]
                      [String[]]
            $ComputerName
          )

  Alias 属性

      Alias 属性为参数指定另一个名称。可分配给参数的别名数目没有限制。以下示例显示了将别名
      "CN"添加到 ComputerName 参数的必需参数声明。

        Param
          (
            [parameter(Mandatory=$true)]
            [alias("CN")]
            [String[]]
            $ComputerName
          )

  参数验证属性

      这些属性定义 Windows PowerShell 运行时如何验证高级函数的参数。

    AllowNull 验证属性

        AllowNull 属性允许将 cmdlet 必需形式参数的实际参数设置为 Null。在以下示例中，
        ComputerName 参数可包含 Null 值，即使此参数是必需参数也如此。

        Param
          (
            [parameter(Mandatory=$true)]
            [String]
            [AllowNull()]
            $ComputerName
          )

    AllowEmptyString 验证属性

        AllowEmptyString 属性允许将空字符串作为 cmdlet 必需形式参数的实际参数。在以下示例
        中，ComputerName 参数可以包含空字符串 ("")，即使此参数是必需参数也如此。

        Param
          (
            [parameter(Mandatory=$true)]
            [String]
            [AllowEmptyString()]
            $ComputerName
          )

    AllowEmptyCollection 验证属性

        AllowEmptyCollection 属性允许将空集合作为必需形式参数的实际参数。

        Param
          (
            [parameter(Mandatory=$true)]
            [String[]]
            [AllowEmptyCollection()]
            $ComputerName
          )

    ValidateCount 验证属性

        ValidateCount 属性指定形式参数可接受的实际参数的最小和最大数目。如果实际参数的数目
        超出该范围，则 Windows PowerShell 运行时会生成错误。在以下示例中，ComputerName 形
        式参数可具有一到五个实际参数。

        Param
          (
            [parameter(Mandatory=$true)]
            [String[]]
            [ValidateCount(1,5)]
            $ComputerName
          )

    ValidateLength 验证属性

        ValidateLength 属性指定形式参数的实际参数的最小和最大长度。如果形式参数的实际参数的
        长度超出该范围，则 Windows PowerShell 运行时会生成错误。在以下示例中，指定的计算机
        名称必须包含 1 到 10 个字符。

        Param
          (
            [parameter(Mandatory=$true)]
            [String[]]
            [ValidateLength(1,10)]
            $ComputerName
          )

    ValidatePattern 验证属性

        ValidatePattern 属性指定对形式参数的实际参数模式进行验证的正则表达式。如果形式参数
        的实际参数与此模式不匹配，则 Windows PowerShell 运行时会生成错误。在以下示例中，形式
        参数的实际参数必须是一个四位数，并且每一位必须是 0 到 9 中的一个数字。

        Param
          (
            [parameter(Mandatory=$true)]
            [String[]]
            [ValidatePattern("[0-9][0-9][0-9][0-9]")] $ComputerName
          )

    ValidateRange 验证属性

        ValidateRange 属性指定形式参数的实际参数的最小值和最大值。如果形式参数的实际参数超
        出该范围，则 Windows PowerShell 运行时会生成错误。在以下示例中，形式参数的实际参数不
        能小于 0 也不能大于 10。

        Param
          (
            [parameter(Mandatory=$true)]
            [Int[]]
            [ValidateRange(0,10)]
            $Count
          )

    ValidateScript 验证属性

        ValidateScript 属性指定用于对形式参数的实际参数进行验证的脚本。如果脚本结果为
        false 或脚本引发异常，则 Windows PowerShell 运行时会生成错误。在以下示例中，Count
        参数的值必须小于 4。

        Param
          (
            [parameter()]
            [Int]
            [ValidateScript({$_ -lt 4})]
            $Count
          )

    ValidateSet 属性

        ValidateSet 属性为形式参数的实际参数指定一组有效值。如果形式参数的实际参数与该值集中
        的值不匹配，则 Windows PowerShell 运行时会生成错误。
        在以下示例中，形式参数的实际参数只能包含名字 Steve、Mary 和 Carl。

        Param
          (
            [parameter(Mandatory=$true)]
            [String[]]
            [ValidateRange("Steve", "Mary", "Carl")] $UserName
          )

    ValidateNotNull 验证属性

        ValidateNotNull 属性指定形式参数的实际参数不能设置为 Null。如果参数值为 Null，则
        Windows PowerShell 运行时会生成错误。

        Param
          (
            [parameter(Mandatory=$true)]
            [String[]]
            [ValidateNotNull()]
            $UserName
          )

    ValidateNotNullOrEmpty 验证属性

        ValidateNotNullOrEmpty 属性指定形式参数的实际参数不能设置为 Null，也不能为空。如
        果指定了参数，但参数值为 Null、空字符串或空数组，则 Windows PowerShell 运行时会生成
        错误。

        Param
          (
            [parameter(Mandatory=$true)]
            [String[]]
            [ValidateNotNullOrEmpty()]
            $UserName
          )

动态参数

        动态参数是只在特定条件下可用的 cmdlet、函数或脚本的参数。

        例如，有几个提供程序 cmdlet 就具有只在提供程序路径中使用了 cmdlet 时
        才可用的参数。一个较常见的动态参数是 Set-Item cmdlet 的 Encoding 参数，
        它只在 FileSystem 提供程序中使用了 Set-Item cmdlet 时可用。

        要为函数或脚本创建动态参数，请使用 DynamicParam 关键字。

        语法如下。

          DynamicParam {<statement-list>}

        在语句列表中，使用 If 语句指定
        参数在函数中可用的条件。

        使用 New-Object cmdlet 创建 System.Management.Automation.RuntimeDefinedParameter
        对象以表示该参数并指定其名称。

        也可使用 New-Object 命令创建
        System.Management.Automation.ParameterAttribute 对象以表示
        参数的属性，例如 Mandatory、Position 或
        ValueFromPipeline 或其参数组。

        以下示例展示了一个示例函数，它具有名为 Name 和 Path 的
        标准参数以及名为 DP1 的可选动态参数。DP1 参数在 PSet1 参
        数组中且其类型为 Int32。DP1 参数只是在 Path 参数值包含
       “HKLM:”（表明 HKEY_LOCAL_MACHINE 注册表驱动器中正在使用
        它）时在 Sample 函数中可用。

        function Sample {
          Param ([String]$Name, [String]$Path)

          DynamicParam
          {
            if ($path -match "*HKLM*:")
            {
              $dynParam1 = new-object
                System.Management.Automation.RuntimeDefinedParameter("dp1",
                [Int32], $attributeCollection)

              $attributes = new-object System.Management.Automation.ParameterAttribute
              $attributes.ParameterSetName = 'pset1'
              $attributes.Mandatory = $false

              $attributeCollection = new-object
                -Type System.Collections.ObjectModel.Collection``1[System.Attribute]
              $attributeCollection.Add($attributes)

              $paramDictionary = new-object
                System.Management.Automation.RuntimeDefinedParameterDictionary
              $paramDictionary.Add("dp1", $dynParam1)

              return $paramDictionary
            } End if
          }
        }

        有关详细信息，请参阅 MSDN (Microsoft Developer Network)
        库中的“RuntimeDefinedParameter 类”，网址是：
        http://go.microsoft.com/fwlink/?LinkID=145130。

另请参阅
    about_Advanced 函数

    about_Functions_Advanced_Methods
    about_Functions_CmdletBindingAttribute


about_Functions_Cmdletbindingattribute

主题
    about_Functions_CmdletBindingAttribute

简短说明
    说明一个声明函数的属性，这种函数与已编译 cmdlet 有类似的功能。

详细说明
    在编写函数时，可以添加 CmdletBinding 属性，这样，Windows PowerShell 将按绑定已编译
    cmdlet 的参数的方式来绑定函数的参数。声明此属性后，Windows PowerShell 还会设置
    $PSCmdlet 自动变量。

    在使用 cmdlet 绑定时，未知形式参数和无匹配位置形式参数的位置实际参数会导致形式参数绑定失
    败。此外，使用 cmdlet 绑定的函数或脚本不使用 $args 变量。

    注意：已编译 cmdlet 使用必需的 Cmdlet 属性，该属性与本主题中说明的 CmdletBinding 属性
    类似。

    以下示例显示了一个函数结构，该函数指定 CmdletBinding 属性的所有可选参数。在此示例之后，
    对每个参数进行了简短说明。

        {
          [CmdletBinding(SupportsShouldProcess=<Boolean>,
                     ConfirmImpact=<String>,
                     DefaultParameterSetName=<String>)]

          Param ($Parameter1)
          Begin{}
          Process{}
          End{}
        }

  SupportsShouldProcess

      如果 SupportsShouldProcess 参数设置为 true，则表明函数支持调用 ShouldProcess 方法，
      该方法用于在函数对系统进行更改之前提示用户提供反馈。如果指定此实际参数，则函数会启用
      Confirm 和 WhatIf 形式参数。

      有关如何确认请求的详细信息，请参阅 MSDN (Microsoft Developer Network) Library 中
      的"请求确认"，网址为 http://go.microsoft.com/fwlink/?LinkId=136658。

  DefaultParameterSetName

      DefaultParameterSetName 实际参数指定形式参数集的名称，Windows PowerShell 在无法
      确定要使用的形式参数集时，将尝试使用该形式参数集。通过将每个参数集的唯一参数设置为必需参
      数，可避免此问题。

  ConfirmImpact

      ConfirmImpact 参数通过对 ShouldProcess 方法的调用指定何时应确认函数操作。只有在
      ConfirmImpact 参数等于或大于 $ConfirmPreference 首选项变量的值时，对
      ShouldProcess 方法的调用才会显示确认提示。（该参数的默认值为 Medium。）只有指定了
      SupportsShouldProcess 参数，才能指定此参数。

另请参阅
    about_Functions_Advanced
    about_Functions_CmdletBindingAttribute
    about_Functions_ParameterAttributes


about_Hash_Tables

主题
    about_Hash_Tables

简短说明
    说明如何在 Windows PowerShell 中创建、使用和排序哈希表。

详细说明
    哈希表（也称为字典或关联数组）是一种紧凑型数据结构，用于存储一个或多个名称/值对。例如，
    哈希表可能包含一系列姓名与职员 ID、计算机名称与 IP 地址，或消息 ID 与消息文本。

    哈希表很常用，这是因为哈希表在查找和检索数据时的效率很高。在 Windows PowerShell 中，哈
    希表可用来存储列表和创建计算属性。此外，Windows PowerShell 具有 cmdlet ConvertFrom-
    StringData，可用于将字符串转换为哈希表。

  创建哈希表
      哈希表中的各项按名称/值对排列，如下所示：

          Msg1="Please enter your password."
          Msg2="The path parameter is required."
          Msg3="The alias of Get-Command is gcm."

      值映射到名称或与名称关联，以便提交名称时 Windows PowerShell 返回相应值。

      在 Windows PowerShell 中，哈希表的语法如下：

          @{ <name> = <value>; [<name> = <value> ] ...}

      创建哈希表时，请遵循以下准则：

          - 以 at 符号 (@) 作为哈希表开头。

          - 用大括号 ({}) 将哈希表括起。

          - 输入一个或多个名称/值对作为哈希表的内容。

          - 使用等号 (=) 将每个名称与其值分隔开。

          - 使用分号 (;) 分隔名称/值对。

          - 如果名称或值包含空格，请将其用引号括起。

      例如，上述用户消息的哈希表如下所示：

          @{
          Msg1="Please enter your password.";
          Msg2="The path parameter is required.";
          Msg3="The alias of Get-Command is gcm.";
          }

      若要在脚本和命令中使用哈希表，请将其保存在变量中。该变量的值是一个哈希表对象
      (System.Collections.Hashtable)，而名称/值对中的每个名称都是该哈希表对象的一个属性。

      以下命令将 user-message 哈希表保存在 $a 变量中，并使用点表示法显示这些值。

          C:\PS> $a = @{
          >> Msg1="Please enter your password.";
          >> Msg2="The path parameter is required.";
          >> Msg3="The alias of Get-Command is gcm.";
          >> }

          C:\PS> $a
          Name                           Value
          ----                           -----
          Msg1                    Please enter your password.
          Msg3                    The alias of Get-Command is gcm.
          Msg2                    The path parameter is required.

          C:\PS> $a.Msg1
          Please enter your password.

      哈希表不限于一种数据类型。可以在哈希表中输入任何数据类型，还可以将不同数据类型
      合并在一个哈希表中。例如，可以生成一个包含整数、cmdlet 调用和字符串的哈希表。

  排序哈希表
      要按键或值的字母顺序对哈希表进行排序，请使用哈希表的 GetEnumerator 方法获取哈希表中的
      键和值，然后使用 Sort-Object cmdlet 对其进行排序。

      例如，以下命令按键的字母顺序对 $a 中的哈希表进行排序。

          C:\PS> $a.getenumerator() | sort-object -property key

          Name                           Value
          ----                           -----
          Msg1                           Please enter your password.
          Msg2                           The path parameter is required.
          Msg3                           The alias of Get-Command is gcm.

      以下命令使用同一方法按降序对哈希值进行排序。

          C:\PS> $a.getenumerator() | sort-object -property value
          -descending

          Name                           Value
          ----                           -----
          Msg2                           The path parameter is required.
          Msg3                           The alias of Get-Command is gcm.
          Msg1                           Please enter your password.

  ConvertFrom-StringData
      ConvertFrom-StringData cmdlet 将名称/值对的字符串或 here-string 转换为哈希表。可
      以在脚本的 Data 节中安全地使用 ConvertFrom-StringData cmdlet，还可以将该 cmdlet 与
      Import-LocalizedData cmdlet 一起使用，从而以当前用户的用户界面 (UI) 区域性显示用户
      消息。

      当哈希表中的值包含引号时，Here-string 尤为有用。（有关 here-string 的详细信息，请参
      阅 about_Quoting_Rules。）

      以下示例说明如何为上例中的用户消息创建 here-string，以及如何使用 ConvertFrom-
      StringData 将其从字符串转换为哈希表。

      以下命令创建名称/值对的 here-string，然后将其保存在 $string 变量中。

          C:\PS> $string = @"
          Msg1="Please enter your password."
          Msg2="The path parameter is required."
          Msg3="The alias of Get-Command is gcm."
          "@

    以下命令使用 ConvertFrom-StringData cmdlet 将 here-string 转换为哈希表。

        C:\PS> convertfrom-stringdata $string

        Name                           Value
        ----                           -----
        Msg3                           "The alias of Get-Command is gcm."
        Msg2                           "The path parameter is required."
        Msg1                           "Please enter your password."

另请参阅
    about_Arrays
    about_Quoting_Rules
    about_Script_Internationalization
    ConvertFrom-StringData
    Import-LocalizedData


about_History

主题
    about_History

简短说明
    说明如何检索和运行命令历史记录中的命令。

详细说明
    在命令提示符下输入命令时，Windows PowerShell 将该命令保存在命令历史记录中。可以将该历史记
    录中的命令用作工作记录。此外，还可以恢复和运行命令历史记录中的命令。

  历史记录 Cmdlet
      Windows PowerShell 有一组用于管理命令历史记录的 cmdlet。

          Cmdlet（别名）         说明
          -------------------    ------------------------------------------
      Get-History (h)        获取命令历史记录。

          Invoke-History (r)     运行命令历史记录中的命令。

          Add-History            向命令历史记录中添加命令。

          Clear-History (clh)    从命令历史记录中删除命令。

  用于管理历史记录的键盘快捷方式
      在 Windows PowerShell 控制台中，可以使用以下快捷方式来管理命令历史记录。

      对于其他主机应用程序，请参阅产品文档。

          键		    执行的操作
          -------------     ------------------------
          向上		    键显示上一个命令。

          向下		    键显示下一个命令。

          F7		    显示命令历史记录。要隐藏历史记录，请按 Esc。

          F8		    查找命令。键入一个或多个字符，然后按 F8。
                要查找下一个匹配项，请再次按 F8。

          F9		    按历史记录 ID 查找命令。键入历史记录 ID，
                然后按 F9。要查找 ID，请按 F7。

  MaximumHistoryCount
      $MaximumHistoryCount 首选项变量确定 Windows PowerShell 在命令历史记录中
      最多保存的命令数。默认值为 64，即 Windows PowerShell 最多保存 64 个
      最近的命令，不过，您可以更改该变量的值。

      例如，以下命令将 $MaximumHistoryCount 增加为 100 个命令：

          $MaximumHistoryCount = 100

      要应用该设置，请重新启动 Windows PowerShell。

      要为所有 Windows PowerShell 会话保存新变量值，请在 Windows PowerShell 配置文件中
      添加赋值语句。有关详细信息，请参阅 about_Profiles。

  历史记录中的命令的顺序
      命令是在执行完成时（而不是在输入命令时）添加到历史记录的。如果命令需要
      花一些时间才能完成，或者在嵌套提示中执行，则它们在历史记录中的顺序可能
      不正确。（只有在退出提示级别时，在该嵌套提示中执行的命令才算完成。）

另请参阅
    about_Line_Editing
    about_Variables
    about_Preference_Variables


about_If

主题
    about_If

简短说明
    说明一个语言命令，该语言命令可用于根据一个或多个条件测试的结果运行语句列表。

详细说明
    如果指定的条件测试的计算结果为 true，则可以使用 If 语句运行代码块。如果前面所有测试的计算
    结果均为 false，还可以指定运行一个或多个其他条件测试。最后，可以指定在前面的其他条件测试的计
    算结果均不为 true 时所运行的额外代码块。

  语法
    以下示例说明 If 语句的语法：

        if (<test1>)
            {<statement list 1>}
        [elseif (<test2>)
            {<statement list 2>}]
        [else
            {<statement list 3>}]

    运行 If 语句时，Windows PowerShell 计算 <test1> 条件表达式的结果是 true 还是 false。
    如果 <test1> 为 true，则运行 <statement list 1>，并且 Windows PowerShell 退出 If
    语句。如果 <test1> 为 false，则 Windows PowerShell 计算 <test2> 条件表达式所指定的条件。

    如果 <test2> 为 true，则运行 <statement list 2>，并且 Windows PowerShell 退出 If
    语句。如果 <test1> 和 <test2> 的计算结果均为 false，则运行 <statement list 3> 代码
    块，并且 Windows PowerShell 退出 If 语句。

    可以使用多个 Elseif 语句连成一系列条件测试，这样，每个测试都只在前面所有测试均为 false 时
    才会运行。如果需要创建包含许多 Elseif 语句的 If 语句，请考虑改用 Switch 语句。

  示例
    最简单的 If 语句包含一个命令，不包含任何 Elseif 语句或任何 Else 语句。以下示例说明 If 语
    句的最简单形式：

        if ($a -gt 2)
        {
            Write-Host "The value $a is greater than 2."
        }

    在本示例中，如果 $a 变量大于 2，条件的计算结果为 true，则运行语句列表。如果 $a 小于或等于 2，
    或者不是现有变量，则 If 语句不显示消息。通过添加 Else 语句，可以确保当 $a 小于或等于 2 时
    显示消息，如下一个示例所示：

        if ($a -gt 2)
        {
            Write-Host "The value $a is greater than 2."
        }
        else
        {
            Write-Host "The value $a is less than or equal to 2, is not
        created or is not initialized."
        }

    若要进一步优化此示例，可以使用 Elseif 语句，以便当 $a 的值等于 2 时显示消息，如下一个示
    例所示：

        if ($a -gt 2)
        {
            Write-Host "The value $a is greater than 2."
        }
        elseif ($a -eq 2)
        {
            Write-Host "The value $a is equal to 2."
        }
        else
        {
            Write-Host "The value $a is less than 2 or was not created
        or initialized."
        }

另请参阅
    about_Comparison_Operators
    about_Switch


about_Jobs

主题
    about_Jobs

简短说明
    提供有关 Windows PowerShell 后台作业如何在后台运行命令或表达式而不与当前会话交互的信息。

详细说明
    本主题说明如何在本地计算机的 Windows PowerShell 中运行后台作业。有关在远程计算机上
    运行后台作业的信息，请参阅 about_Remote_Jobs。

    启动后台作业时，命令提示符会立即返回，即使该作业需要较长时间才能完成也是如此。
    您可以在作业运行的同时继续在此会话中工作，而不会产生中断。

    重要说明：通过使用 Start-Job 或使用 Invoke-Command 的 AsJob 参数启动的后台作业依赖于
    Windows PowerShell 远程处理基础结构。若要使用这些功能，即使后台作业只在本地计算机上运行，
    也必须为 Windows PowerShell 配置远程处理。有关详细信息，请参阅
    about_Remote_Requirements。

 如何在本地计算机上启动作业
    若要在本地计算机上启动后台作业，请使用 Start-Job cmdlet。

    若要编写 Start-Job 命令，请将作业运行的命令用大括号 ({}) 括起。请使用 ScriptBlock 参数来
    指定命令。

    下面的命令启动一个后台作业，该作业在本地计算机上运行 Get-Process 命令。

        start-job -scriptblock {get-process}

    Start-Job 命令返回一个表示该作业的对象。作业对象包含作业的有用信息，但不包含作业结果。

    将作业对象保存在变量中，然后将它用于其他作业 cmdlet 以管理该后台作业。下面的命令启动一个作业
    对象，然后将生成的作业对象保存在 $job 变量中。

        $job = start-job -scriptblock {get-process}

    此外，还可以使用 Get-Job cmdlet 获取表示在当前会话中启动的作业的对象。Get-Job 返回的作业
    对象与 Start-Job 返回的相同。

 获取作业对象

    若要获取表示在当前会话中启动的后台作业的对象，请使用 Get-Job cmdlet。如果没有参数，则 Get-
    Job 返回在当前会话中启动的所有作业。

    例如，下面的命令获取当前会话中的作业。

    get-job

        Id  Name  State      HasMoreData  Location   Command
        --  ----  -----      -----------  --------   -------
        1   Job1  Running    True         localhost  get-process

    此外，还可以将作业对象保存在变量中，并在后面的命令中使用该变量表示相应作业。
    下面的命令获取 ID 为 1 的作业并将其保存在变量 $job 中。

       $job = get-job -id 1

    作业对象包含指示作业是否已完成的作业状态。已完成的作业的状态为"Complete"或"Failed"。
    作业也可能处于"Blocked"或"Running"状态。

    get-job

        Id  Name  State       HasMoreData  Location   Command
        --  ----  -----       -----------  --------   -------
        1   Job1  Complete    True         localhost  get-process

 获取作业的结果

    运行后台作业时，不会立即显示结果。实际上，Start-Job cmdlet 返回表示作业的作业对象，但不包
    含结果。若要获取后台作业的结果，请使用 Receive-Job cmdlet。

    下面的命令使用 Receive-Job cmdlet 获取作业结果。它使用保存在 $job 变量中的作业对象来标识
    作业。

    receive-job -job $job

     Receive-Job cmdlet 返回作业结果。

           Handles  NPM(K)    PM(K)      WS(K) VM(M)   CPU(s)    Id ProcessName
           -------  ------    -----      ----- -----   ------    -- -----------
               103       4    11328       9692    56           1176 audiodg
               804      14    12228      14108   100   101.74  1740 CcmExec
               668       7     2672       6168   104    32.26   488 csrss
       ...

     也可以将作业结果保存在变量中。下面的命令将 $job 变量中的作业的结果保存在 $results 变量
     中。

    $results = receive-job -job $job

     此外，还可以通过使用重定向运算符 (>) 或 Out-File cmdlet 将作业结果保存在文件中。下面的命
     令使用重定向运算符将作业结果保存在 Results.txt 文件的 $job 变量中。

        receive-job -job $job > results.txt

 获取和保留部分作业结果

    Receive-Job cmdlet 返回后台作业的结果。如果作业完成，则 Receive-Job 返回作业的完整结
    果。如果作业仍在运行，则 Receive-Job 获取到目前为止已生成的结果。再次运行 Receive-Job 命
    令可以获取其余结果。

    当 Receive-Job 返回结果时，默认情况下，它会删除存储作业结果的缓存中的结果。如果运行另一个
    Receive-Job 命令，则只获取尚未收到的结果。

    下面的命令说明在作业完成之前运行的 Receive-Job 命令的结果。

    C:\PS> receive-job -job $job

        Handles  NPM(K)    PM(K)      WS(K) VM(M)   CPU(s)     Id ProcessName
        -------  ------    -----      ----- -----   ------     -- -----------
            103       4    11328       9692    56            1176 audiodg
            804      14    12228      14108   100   101.74   1740 CcmExec

    C:\PS> receive-job -job $job

        Handles  NPM(K)    PM(K)      WS(K) VM(M)   CPU(s)     Id ProcessName
        -------  ------    -----      ----- -----   ------     -- -----------
             68       3     2632        664    29     0.36   1388 ccmsetup
            749      22    21468      19940   203   122.13   3644 communicator
            905       7     2980       2628    34   197.97    424 csrss
           1121      25    28408      32940   174   430.14   3048 explorer

    若要防止 Receive-Job 删除它所返回的作业结果，请使用 Keep 参数。这样，Receive-Job 将返回
    此前生成的所有结果。

    下面的命令说明对尚未完成的作业使用 Keep 参数的效果。

    C:\PS> receive-job -job $job -keep

        Handles  NPM(K)    PM(K)      WS(K) VM(M)   CPU(s)     Id ProcessName
        -------  ------    -----      ----- -----   ------     -- -----------
            103       4    11328       9692    56            1176 audiodg
            804      14    12228      14108   100   101.74   1740 CcmExec

    C:\PS> receive-job -job $job -keep

        Handles  NPM(K)    PM(K)      WS(K) VM(M)   CPU(s)     Id ProcessName
        -------  ------    -----      ----- -----   ------     -- -----------
            103       4    11328       9692    56            1176 audiodg
            804      14    12228      14108   100   101.74   1740 CcmExec
             68       3     2632        664    29     0.36   1388 ccmsetup
            749      22    21468      19940   203   122.13   3644 communicator
            905       7     2980       2628    34   197.97    424 csrss
           1121      25    28408      32940   174   430.14   3048 explorer

等待结果

    如果运行需要很长时间才能完成的命令，则可以使用作业对象的属性来确定作业何时完成。下面的命令使用
    Get-Job 对象获取当前会话中的所有后台作业。

    get-job

    结果显示在一个表中。作业状态显示在 State 列中。

        Id  Name  State      HasMoreData  Location   Command
        --  ----  -----      -----------  --------   -------
        1   Job1  Complete    True         localhost  get-process
        2   Job2  Running     True         localhost  get-eventlog -log syst...
        3   Job3  Complete    True         localhost  dir -path c:\* -recurse

    在本例中，从 State 属性可以看出 Job 2 仍在运行。如果此时要使用 Receive-Job cmdlet 获取
    作业结果，则结果将是不完整的。可以重复使用 Receive-Job cmdlet 以获取所有结果。默认情况下，
    每次使用该 cmdlet 时，都只获取尚未收到的结果，不过，可以使用 Receive-Job cmdlet 的 Keep
    参数来保留结果（即使已收到这些结果）。

    此时，可以将结果写入文件，然后在新收到的结果到达时进行追加。也可以等待，稍后再检查作业的状态。

    此外，还可以使用 Wait-Job cmdlet 等待作业的任意或所有结果。使用 Wait-Job 可以等待特定作
    业、所有作业或任何要完成的作业。

    下面的命令使用 Wait-Job cmdlet 等待 ID 为 10 的作业。

    wait-job -ID 10

    结果是，在作业完成之前，都禁止显示 Windows PowerShell 提示符。

    等待时间也可以是预定的时间段。下面的命令使用 Timeout 参数将等待时间限制为 120 秒。超过该时
    间时，命令提示符会返回，但作业继续在后台运行。

    wait-job -ID 10 -timeout 120

停止作业

    若要停止后台作业，请使用 Stop-Job cmdlet。下面的命令启动一个作业，以获取系统事件日志中的每
    个条目。它将作业对象保存在 $job 变量中。

    $job = start-job -scriptblock {get-eventlog -log system}
    下面的命令停止该作业。它使用管道运算符 (|) 将 $job 变量中的作业发送到 Stop-Job。

    $job | stop-job

删除作业

    若要删除后台作业，请使用 Remove-Job cmdlet。下面的命令删除 $job 变量中的作业。

    remove-job -job $job

调查失败的作业

    若要查明作业失败的原因，请使用作业对象的 Reason 子属性。

    下面的命令在未使用所需凭据的情况下启动作业。它将作业对象保存在 $job 变量中。

         $job = start-job -scriptblock {new-item -path HKLM:\Software\MyCompany}

         Id   Name  State    HasMoreData  Location   Command
         --   ----  -----    -----------  --------   -------
         1    Job1  Failed   False         localhost  new-item -path HKLM:\S...

    下面的命令使用 Reason 属性查找导致作业失败的错误。

         $job.ChildJobs[0].JobStateInfo.Reason

    在本例中，作业失败的原因是远程计算机需要显式凭据才能运行该命令。Reason 属性的值为：

         Connecting to remote server failed with the following error
         message : Access is denied.

作业 Cmdlet

    Start-Job        在本地计算机上启动后台作业。

    Get-Job          获取在当前会话中启动的后台作业。

    Receive-Job      获取后台作业的结果。

    Stop-Job         停止后台作业。

    Wait-Job         禁止显示命令提示符，直到一个或所有作业完成。

    Remove-Job       删除后台作业。

    Invoke-Command   AsJob 参数在远程计算机上将任何命令都作为后台作业运行。此外，还可以使用
                 Invoke-Command 远程运行任何作业命令，包括 Start-Job 命令。

另请参阅
   about_Remote_Jobs
   about_Job_Details
   about_Remote
   about_PSSessions
   Start-Job
   Get-Job
   Receive-Job
   Stop-Job
   Wait-Job
   Remove-Job
   Invoke-Command


about_Job_Details

主题
  about_Job_Details

简短说明
  提供有关本地和远程计算机上的后台作业的详细信息。

详细说明
   本主题说明后台作业的概念，并提供有关后台作业如何在 Windows PowerShell 中工作的技术信息。

   本主题是对 about_Jobs 和 about_Remote_Jobs 主题的补充。

   重要说明：通过使用 Start-Job 或使用 Invoke-Command 的 AsJob 参数启动的后台作业依赖于
            Windows PowerShell 远程处理基础结构。若要使用这些功能，即使后台作业只在本地
         计算机上运行，也必须为 Windows PowerShell 配置远程处理。有关详细信息，请参阅
            about_Remote_Requirements。

 关于后台作业
    后台作业异步运行命令或表达式。它可运行 cmdlet、函数、脚本或任何其他基于命令的任务。它用于运
    行需要较长时间的命令，不过，您可以使用它在后台运行任何命令。

    在运行同步命令时，在命令完成之前，都禁止显示 Windows PowerShell 命令提示符。但后台作业不禁
    止显示 Windows PowerShell 提示符。用于启动后台作业的命令会返回一个作业对象。提示符会立即返
    回，这样，在后台作业运行时可以处理其他任务。

    但是，启动后台作业后，即使该作业运行速度很快，也不会立即获得结果。返回的作业对象包含作业的
    有用信息，但不包含作业结果。必须运行一个单独的命令才能获得作业结果。此外，还可以运行用于
    停止作业、等待作业完成以及删除作业的命令。

    若要使后台作业的计时独立于其他命令，每个后台作业都应在自己的 Windows PowerShell 环境（"会
    话"）中运行。不过，这可以是只为运行作业然后销毁作业而创建的临时连接，也可以是可用于运行多个相
    关作业或命令的持续会话 (PSSession)。

 使用作业 Cmdlet
    使用 Start-Job 命令可以在本地计算机上启动后台作业。Start-Job 返回作业对象。通过使用 Get-
    Job cmdlet，还可以获取表示在本地计算机上启动的作业的对象。

    若要获取作业结果，请使用 Receive-Job 命令。如果作业未完成，则 Receive-Job 返回部分结果。
    此外，还可以使用 Wait-Job cmdlet 禁止显示命令提示符，直到在会话中启动的一个或全部作业完成。

    若要停止后台作业，请使用 Stop-Job cmdlet。若要删除作业，请使用 Remove-Job cmdlet。

    有关这些 cmdlet 如何工作的详细信息，请参阅每个 cmdlet 的帮助主题和 about_Jobs。

 在远程计算机上启动后台作业
    可以在本地或远程计算机上创建和管理后台作业。若要远程运行后台作业，请使用 cmdlet（如 Invoke-
    Command）的 AsJob 参数，或使用 Invoke-Command cmdlet 远程运行 Start-Job 命令。此外，
    还可以在交互式会话中启动后台作业。

    有关远程后台作业的详细信息，请参阅 about_Remote_Jobs。

 子作业
    每个后台作业由一个父作业和一个或多个子作业组成。在通过使用 Start-Job 或 Invoke-Command
    的 AsJob 参数启动的作业中，父作业是管理性作业。它不运行任何命令，也不返回任何结果。命令实际
    上是由子作业运行的。（通过其他 cmdlet 启动的作业的工作方式可能有所不同。）

    子作业存储在父作业对象的 ChildJobs 属性中。ChildJobs 属性可包含一个或多个子作业对象。子作
    业对象的名称、ID 和实例 ID 不同于父作业，因此，可以分别管理父作业和子作业，也可以将它们作为一
    个整体进行管理。

    若要查看作业中的父作业和子作业，请使用 Get-Job cmdlet 获取父作业，然后通过管道将父作业传递
    给用于显示对象的 Name 和 ChildJobs 属性的 Format-List 命令，如以下命令所示。

        C:\PS> get-job | format-list -property Name, ChildJobs

        Name          : Job1
        ChildJobs     : {Job2}

    也可以对子作业使用 Get-Job 命令，如以下命令所示：

        C:\PS> get-job job2

        Id    Name   State      HasMoreData   Location    Command
        --    ----   -----      -----------   --------    -------
        2     Job2   Completed  True          localhost   get-process

    子作业的配置取决于启动该作业时所用的命令。

       -- 使用 Start-Job 在本地计算机上启动作业时，该作业由管理性父作业和运行命令的
          子作业组成。

       -- 如果使用 Invoke-Command 的 AsJob 参数在一台或多台计算机上启动作业，则作业由管理性
          父作业和子作业（每台计算机上运行的每个作业对应于一个子作业）组成。

       -- 如果使用 Invoke-Command 在一台或多台远程计算机上运行 Start-Job 命令，则结果与在每
          台远程计算机上运行本地命令的结果相同。该命令为每台计算机返回一个作业对象。作业对象由管理
          性父作业和一个运行命令的子作业组成。

    父作业表示所有子作业。在管理父作业时，同时也在管理关联的子作业。例如，如果停止父作业，
    则会停止所有子作业。如果获取父作业的结果，则会获取所有子作业的结果。

    不过，也可以单独管理子作业。如果希望调查作业问题，或者只获取通过 Invoke-Command 的 AsJob
    参数启动的诸多子作业中的一个子作业的结果，这非常有用。(倒引号 [`] 是继续符。)

    以下命令使用 Invoke-Command 的 AsJob 参数在本地计算机和两台远程计算机上启动后台作业。此命
    令将作业保存在 $j 变量中。

        C:\PS> $j = invoke-command -computername localhost, Server01, Server02 `
               -command {get-date} -AsJob

    在显示 $j 中的作业的 Name 和 ChildJob 属性时，结果显示该命令返回了一个作业对象，其中有三个
    子作业（每台计算机一个子作业）。

        C:\PS> $j | format-list name, childjobs

        Name      : Job3
        ChildJobs : {Job4, Job5, Job6}

    在显示父作业时，结果显示该作业失败。

        C:\PS> $j

        Id   Name    State   HasMoreData     Location             Command
        --   ----    -----   -----------     --------             -------
        1    Job3    Failed  True            localhost,server... get-date

    但是，对每个子作业运行 Get-Job 命令时，结果显示只有一个子作业失败。

        PS C:\ps-test> get-job job4, job5, job6

        Id   Name   State      HasMoreData     Location           Command
        --   ----   -----      -----------     --------           -------
        4    Job4   Completed  True            localhost          get-date
        5    Job5   Failed     False           Server01           get-date
        6    Job6   Completed  True            Server02           get-date

    若要获取所有子作业的结果，请使用 Receive-Job cmdlet 获取父作业的结果。不过，也可以获取特定
    子作业的结果，如以下命令所示。

        C:\PS> receive-job -job6 -keep | format-table ComputerName, DateTime -auto

        ComputerName DateTime
        ------------ --------
        Server02     Thursday, March 13, 2008 4:16:03 PM

    使用 Windows PowerShell 后台作业的子作业功能，可以在更大程度上控制运行的作业。

另请参阅
    about_Jobs
    about_Remote_Jobs
    about_Remote
    Invoke-Command
    Start-Job
    Get-Job
    Wait-Job
    Stop-Job
    Remove-Job
    New-PSSession
    Enter-PSSession
    Exit-PSSession


about_Join

主题
    about_join

简短说明
    说明联接运算符 (-join) 如何将多个字符串合并为单个字符串。

详细说明
    联接运算符将一组字符串连接成单个字符串。字符串按其在命令中的出现顺序追加到生成的字符串中。

  语法
      下图说明联接运算符的语法。

    -Join <String[]>
    <String[]> -Join <Delimiter>

  参数
      String[]
          指定要联接的一个或多个字符串。

      Delimiter
      指定放在被连接的字符串之间的一个或多个字符。
          默认值为无分隔符 ("")。

  备注
      一元联接运算符 (-join <string[]>) 的优先级高于
      逗号。因此，如果向一元联接运算符提交逗号分隔的字符串列表，则只有第一个
      字符串（第一个逗号之前的部分）才会提交给联接运算符。

      若要使用一元联接运算符，请将字符串用圆括号括起，或将字符串存储在变量中，
      然后提交该变量以进行联接。

      例如：

          -join "a", "b", "c"
          a
          b
          c

          -join ("a", "b", "c")
          abc

          $z = "a", "b", "c"
          -join $z
          abc

  示例
      下面的语句联接三个字符串：

          -join ("Windows", "PowerShell", "2.0")
          WindowsPowerShell2.0

      下面的语句以空格为分隔符，联接三个字符串：

          "Windows", "PowerShell", "2.0" -join " "
          Windows PowerShell 2.0

      下面的语句使用多字符分隔符联接三个字符串：

          $a = "WIND", "SP", "ERSHELL"
          $a -join "OW"
          WINDOWSPOWERSHELL

      下面的语句将 here-string 中的各行联接成单个字符串。因为 here-string 是一个字符串，
      所以必须对 here-string 中的各行进行拆分，才能进行联接。使用此方法可以重新联接 XML 文件
      中已保存在 here-string 中的字符串：

          $a = @'
          a
          b
          c
          '@

          (-split $a) -join " "
          a b c

另请参阅
    about_Operators
    about_Comparison_Operators
    about_Split


about_Language_Keywords

主题
    about_Language_Keywords

简短说明
    说明 Windows PowerShell 脚本语言中的关键字。

详细说明
    Windows PowerShell 包含以下语言关键字。有关详细信息，请参阅关键字的相关主题以及下表后面
    的信息。

        关键字		   参考
        -------            ---------
        Begin              about_Functions, about_Functions_Advanced
        Break              about_Break, about_Trap
        Catch              about_Try_Catch_Finally
        Continue           about_Continue, about_Trap
        Data               about_Data_Sections
        Do                 about_Do, about_While
        Dynamicparam       about_Functions_Advanced_Parameters
        Else               about_If
        Elseif             about_If
        End                about_Functions, about_Functions_Advanced_Methods
        Exit               详见本主题中的说明。
        Filter             about_Functions
        Finally            about_Try_Catch_Finally
        For                about_For
        Foreach            about_Foreach
        From               保留以供将来使用。
        Function           about_Functions, about_Functions_Advanced
        If                 about_If
        In                 about_Foreach
        Param              about_Functions
        Process            about_Functions, about_Functions_Advanced
        Return             about_Return
        Switch             about_Switch
        Throw              about_Throw, about_Functions_Advanced_Methods
        Trap               about_Trap, about_Break, about_Try_Catch_Finally
        Try                about_Try_Catch_Finally
        Until              about_Do
        While              about_While, about_Do

  语言关键字

      Begin
      -----

      与 Dynamicparam、Process 和 End 关键字一起，指定函数体的一个部分。在接收来自管道的
      任何对象之前，会运行一次 Begin 语句列表。

      语法：

          function <name> {
              dynamicparam {<statement list>}
              begin {<statement list>}
              process {<statement list>}
              end {<statement list>}
          }

      Break
      -----

      使脚本退出循环。

      语法：

          while (<condition>) {
              <statements>
                   ...
              break
                   ...
              <statements>
          }

      Catch
      -----

      指定在相应 Try 语句列表中发生错误时要运行的语句列表。错误类型需要用方括号括起。另一对方
      括号表示该错误类型是可选的。

      语法：

          try {<statement list>}
          catch [[<error type>]] {<statement list>}

      Continue
      --------

      使脚本停止运行循环，并返回到条件处。如果符合条件，则脚本重新开始循环。

      语法：

          while (<condition>) {
              <statements>
                  ...
              continue
                  ...
              <statements>
          }

      Data
      ----

      在脚本中，定义将数据与脚本逻辑分隔开的节。也可以包含 If 语句和有限的一些命令。

      语法：

      data <variable> [-supportedCommand <cmdlet-name>] {<permitted
      content>}

      Do
      --

      与 While 或 Until 关键字一起使用，形成循环结构。Windows PowerShell 至少运行一次这
      种语句列表，这与使用 While 的循环不同。

      语法：

          do {<statement list>} while (<condition>)

          do {<statement list>} until (<condition>)

      Dynamicparam
      ------------

      与 Begin、Process 和 End 关键字一起，指定函数体的一个部分。动态参数是在运行时添加的。

      语法：

          function <name> {
              dynamicparam {<statement list>}
              begin {<statement list>}
              process {<statement list>}
              end {<statement list>}
          }

      Else
      ----

      与 If 关键字一起使用，用于指定默认语句列表。

      语法：

          if (<condition>) {<statement list>}
          else {<statement list>}

      Elseif
      ------

      与 If 和 Else 关键字一起使用，用于指定其他条件。Else 关键字是可选的。

      语法：

          if (<condition>) {<statement list>}
          elseif (<condition>) {<statement list>}
          else {<statement list>}

      End
      ---

      与 Dynamicparam、Begin 和 End 关键字一起，指定函数体的一个部分。在接收来自管道的所有
      对象之后，运行一次 End 语句列表。

      语法：

          function <name> {
              dynamicparam {<statement list>}
              begin {<statement list>}
              process {<statement list>}
              end {<statement list>}
          }

      Exit
      ----

      使 Windows PowerShell 退出脚本或 Windows PowerShell 实例。

      语法：

          exit

      Filter
      ------

      指定一个函数，在该函数中，为每个输入对象运行一次语句列表。它与只包含 Process 块的函数作
      用相同。

      语法：

          filter <name> {<statement list>}

      Finally
      -------

      定义一个语句列表，该语句列表在与 Try 和 Catch 关联的语句之后运行。即使按 Ctrl+C 离开
      脚本或在脚本中使用 Exit 关键字，也会运行 Finally 语句列表。

      语法：

          try {<statement list>}
          catch [<error type] {<statement list>}
          finally {<statement list>}

      For
      ---

      通过使用条件来定义循环。

      语法：

          for (<initialize>; <condition>; <iterate>) {<statement list>}

      Foreach
      -------

      通过使用每个集合成员来定义循环。

      语法：

          foreach (<item> in <collection>){<statement list>}

      From
      -----

      保留以供将来使用。

      Function
      --------

      创建由可重用代码组成的命名语句列表。可以为函数所属的作用域指定名称。并且，可以使用
      Param 关键字指定一个或多个命名参数。在 function 语句列表中，可以包含 Dynamicparam、
      Begin、Process 和 End 语句列表。

      语法：

          function [<scope:>]<name> {
              param ([type]<$pname1> [, [type]<$pname2>])
              dynamicparam {<statement list>}
              begin {<statement list>}
              process {<statement list>}
              end {<statement list>}
          }

      此外，还可以在语句列表之外、函数名之后定义一个或多个参数。

      语法：

          function [<scope:>]<name> [([type]<$pname1>, [[type]<$pname2
          >])] {
              dynamicparam {<statement list>}
              begin {<statement list>}
              process {<statement list>}
              end {<statement list>}
          }

      If
      --

      定义条件。

      语法：

          if (<condition>) {<statement list>}

      In
      --

      在 Foreach 语句中使用，用于创建使用每个集合成员的循环。

      语法：

          foreach (<item> in <collection>){<statement list>}

      Param
      -----

      定义函数中的参数。

      语法：

          function [<scope:>]<name> {
              param ([type]<$pname1>[, [[type]<$pname2>]])
              <statement list>
          }

      Process
      -------

      与 Dynamicparam、Begin 和 End 关键字一起，指定函数体的一个部分。当 Process 语句列
      表收到来自管道的输入时，将为来自管道的每个元素运行一次 Process 语句列表。如果管道未提供
      任何对象，则不会运行 Process 语句列表。如果该命令是管道中的第一个命令，则运行一次
      Process 语句列表。

      语法：

          function <name> {
              dynamicparam {<statement list>}
              begin {<statement list>}
              process {<statement list>}
              end {<statement list>}
          }

      Return
      ------

      使 Windows PowerShell 离开当前作用域（如脚本或函数），并将可选表达式写入输出。

      语法：

          return [<expression>]

      Switch
      ------

      指定要对来自管道或文件的项执行的各种操作。可以使用以下两种语法模型中的任何一种。

      语法 1：

          switch [-regex|-wildcard|-exact][-casesensitive] ( pipeline )

          {
              <string>|<number>|<variable>|{ <expression> } {<statement list>}
              <string>|<number>|<variable>|{ <expression> } {<statement list>}
                    ...
              default {<statement list>}
          }

      语法 2：

      Syntax 2:

          switch [-regex|-wildcard|-exact][-casesensitive] -file filename
          {
              <string>|<number>|<variable>|{ <expression> } {<statement list>}
              <string>|<number>|<variable>|{ <expression> } {<statement list>}
                    ...
              default {<statement list>}
          }

      Throw
      -----

      引发一个对象来作为错误。

      语法：

          throw [<object>]

      Trap
      ----

      定义在发生错误时运行的语句列表。错误类型需要用方括号括起。另一对方括号表示该错误类型是可选的。

      语法：

          trap [[<error type>]] {<statement list>}

      Try
      ---

      定义一个语句列表，该语句列表用于在运行语句时检查错误。如果发生错误，Windows
      PowerShell 将在 Catch 或 Finally 语句中继续运行。错误类型需要用方括号括起。另一对方
      括号表示该错误类型是可选的。

      语法：

          try {<statement list>}
          catch [[<error type]] {<statement list>}
          finally {<statement list>}

      Until
      -----

      用在 Do 语句中作为循环结构，在这种循环结构中，语句列表至少会执行一次。

      语法：

          do {<statement list>} until (<condition>)

      While
      -----

      用在 Do 语句中作为循环结构，在这种循环结构中，语句列表至少会执行一次。

      语法：

          do {<statement list>} while (<condition>)

另请参阅
         about_escape_characters
         about_special_characters
         about_wildcards


about_Line_Editing

主题
    about_Line_Editing

简短说明
    说明如何在 Windows PowerShell 命令提示符下编辑命令。

详细说明
    Windows PowerShell 控制台具有一些有用的功能，可帮助您在 Windows PowerShell 命令提示
    符下编辑命令。

    向左和向右移动
        要将光标向左移动一个字符，请按向左键。要将光标向左移动一个单词，请按 Ctrl+向左键。
        要将光标向右移动一个字符，请按向右键。要将光标向右移动一个单词，请按 Ctrl+向右键。

    行首和行尾
        要移动到行首，请按 Home 键。要移动到行尾，请按 End 键。

    删除字符
        要删除光标左边的字符，请按 Backspace 键。
        要删除光标右边的字符，请按 Delete 键。

    删除一行中的其余字符
        要删除一行中光标后面的所有字符，请按 Ctrl+End。

    插入/改写模式
        要更改为改写模式，请按 Insert 键。要返回插入模式，请再次按 Insert。

    Tab 补齐功能
        要完成命令的输入（例如 cmdlet 的名称、cmdlet 参数，或路径），请按 Tab 键。如果显示
        的第一条建议不是想要的内容，请再次按 Tab 键。

另请参阅
    about_Command_Syntax
    about_Path_Syntax


about_Locations

主题
    about_Locations

简短说明
    说明如何在 Windows PowerShell 中从工作位置访问项目。

详细说明
    当前工作位置是命令指向的默认位置。换句话说，如果不向受命令影响的项目或位置提供显式路径，
    则这就是 Windows PowerShell 使用的位置。大多数情况下，当前工作位置是通过 Windows
    PowerShell FileSystem 提供程序访问的驱动器，在某些情况下，是该驱动器上的某个目录。
    例如，可以将当前工作位置设置为以下位置：

        C:\Program Files\Windows PowerShell

    结果是，除非显式提供另一个路径，否则将从此位置处理所有命令。

    Windows PowerShell 为每个驱动器（即使不是当前驱动器）保存当前工作位置。这样，只需通过引
    用另一个位置的驱动器，即可从当前工作位置访问项目。例如，假设当前工作位置是 C:\Windows。现
    在，假设使用以下命令将当前工作位置更改为 HKLM: 驱动器：

        Set-Location HKLM:

    尽管当前位置是注册表驱动器，但只需通过使用 C: 驱动器，仍然可以访问 C:\Windows 目录中的项
    目，如下例所示：

        Get-ChildItem C:

    Windows PowerShell 会记住该驱动器的当前工作位置是 Windows 目录，因此它从该目录检索项
    目。如果运行以下命令，结果是一样的：

        Get-ChildItem C:\Windows

    在 Windows PowerShell 中，可以使用 Get-Location 命令确定当前工作位置，还可以使用
    Set-Location 命令设置当前工作位置。例如，以下命令将当前工作位置设置为 C: 驱动器的
    Windows 目录：

        Set-Location c:\windows

    设置了当前工作位置后，只需通过在命令中包括驱动器名称（后跟冒号），仍然可以访问其他
    驱动器中的项目，如下例所示：

        Get-ChildItem HKLM :\software

    该命令将检索注册表中 HKEY Local Machine 配置单元的 Software 容器中的项目的列表。

    Windows PowerShell 还允许使用特殊字符表示当前工作位置及其父位置。若要表示当前工作位置，
    请使用一个句点。要表示当前工作位置的父位置，请使用两个句点。例如，以下命令指定当前工作位置中
    名为 System 的子目录：

        Get-ChildItem .\system

    如果当前工作位置是 C:\Windows，则此命令将返回 C:\Windows\System 中所有项目的列表。但
    是，如果使用两个句点，则使用当前工作目录的父目录，如下例所示：

        Get-ChildItem ..\"program files"

    在本例中，Windows PowerShell 将这两个句点视为 C: 驱动器，因此命令将检索 C:\Program
    Files 目录中的所有项目。

    以斜线开头的路径标识从当前驱动器的根目录开始的路径。例如，如果当前工作位置是 C:\Program
    Files\Windows PowerShell，则驱动器的根目录是 C。因此，以下命令将列出 C:\Windows 目录
    中的所有项目：

        Get-ChildItem \windows

    如果在提供容器或项目的名称时不指定以驱动器名称、斜线或句点开头的路径，则系统假定容器或
    项目位于当前工作位置。例如，如果当前工作位置是 C:\Windows，则以下命令将返回 C:\Windows\System
    目录中的所有项目：

        Get-ChildItem system

    如果指定文件名而不是目录名，则 Windows PowerShell 将返回有关该文件的详细信息（假设该文
    件位于当前工作位置）。

另请参阅
    Set-Location
    about_Providers
    about_Path_Syntax


about_Logical_Operators

主题
    about_Logical_Operators

简短说明
    说明在 Windows PowerShell 中用于连接语句的运算符。

详细说明
    Windows PowerShell 逻辑运算符可连接表达式和语句，从而可以用单个表达式来测试多个条件。

    例如，以下语句使用 and 运算符和 or 运算符来连接三个条件语句。仅当 $a 的值大于 $b 的值，
    并且 $a 或 $b 小于 20 时，该语句才为 True。

        ($a -gt $b) -and (($a -lt 20) -or ($b -lt 20))

    Windows PowerShell 支持以下逻辑运算符。

        运算	  符说明			     示例
        --------  ------------------------------     -------
        -and	  逻辑与。仅当两条语句		     (1 -eq 1) -and (1 -eq 2)
          都为 TRUE 时才为 TRUE。	     False

        -or	  逻辑或。当其中一条语句为 TRUE      (1 -eq 1) -or (1 -eq 2)
          或两条语句都为 TRUE 时为 TRUE。    True

        -xor	  逻辑异或。仅当一条语句为 TRUE      (1 -eq 1) -xor (2 -eq 2)
          而另一条语句为 FALSE 时才为 TRUE。 False

        -not	  逻辑非。对后面的语句取反。	     -not (1 -eq 1)
                             False

        !         逻辑非。对后面的语句取反	     !(1 -eq 1)
         （与 -not 相同）。		     False

    请注意，上面的示例还使用了等于比较运算符 (-eq)。有关详细信息，
        请参阅 about_Comparison_Operators。
            这些示例还使用了整数布尔值。整数 0 的布尔值为 FALSE。所有其他整数的
            布尔值都为 TRUE。

    逻辑运算符的语法如下：

        <statement> {-AND | -OR | -XOR} <statement>
        {! | -NOT} <statement>

    使用逻辑运算符的语句返回布尔值（TRUE 或 FALSE）。

    Windows PowerShell 逻辑运算符仅计算确定整个语句真值所必需的语句。如果包含 and 运算符的
    语句的左操作数为 FALSE，则不再计算右操作数。如果包含 or 运算符的语句的左操作数为 TRUE，
    则不再计算右操作数。因此，可以像使用 If 语句一样使用这些语句。

另请参阅
    about_Operators
    Compare-Object
    about_Comparison_operators
    about_If


about_Methods

主题
    about_methods

简短说明
    说明如何在 Windows PowerShell 中使用方法对对象执行操作。

详细说明
    Windows PowerShell 使用结构化的信息集合（称为对象）表示数据存储中的项目或计算机的状态。
    例如，在 Windows PowerShell 中访问文件时，并不处理实际文件。而是处理 FileInfo 对象，这
    是一种充当文件代理的对象。

    大多数对象都包含方法。方法是一组说明，它们指定可以用对象执行的特定操作。例如，FileInfo
    对象包含称为 CopyTo 的方法，该方法用于复制用对象表示的文件。

    若要查看与特定对象关联的方法和方法定义的列表，可以使用 Get-Member cmdlet。但是，若要使
    用该 cmdlet，对象必须已经以某种形式存在，或者通过变量表示、作为在将命令指定为 Get-Member
    命令的参数时所创建的对象，或者作为通过管道传递的对象。例如，假设 $a 变量已被赋予字符串值，
    这就意味着该变量与字符串对象关联。若要查看对象的方法列表，请在 Windows PowerShell 命令提示
    符下输入以下命令：

        Get-Member -inputobject $a -membertype method

    若要查看哪些方法和方法定义与通过管道传递的对象关联，可以在管道中使用 Get-Member 命令，
    如下例所示：

        Get-ChildItem c:\final.txt | Get-Member -membertype method

    调用方法的最常见方式是在对象引用（例如，变量或表达式）的后面指定方法名称。必须用句点分隔
    对象引用和方法。此外，必须紧跟在方法名称后面使用圆括号，将应当传递给方法的所有参数括在括号内。

    如果方法签名中没有要传递的参数，仍然必须使用一组空的圆括号。

    例如，以下命令使用 GetType 方法来返回与 $a 字符串对象关联的数据类型：

        $a.GetType()

    GetType 方法将返回任何对象的数据类型，并且变量始终表示对象。对象的类型取决于存储在该变量
    中的数据类型。

    无论声明变量还是将命令合并到管道中，在 Windows PowerShell 中执行的每个操作都与对象关联。
    因此，可以在各种情况下使用方法。例如，可以使用方法对属性值执行操作，如以下命令所示：

        (Get-ChildItem c:\final.txt).name.ToUpper()

    在此示例中，对其调用 ToUpper 方法的对象是与 name 属性关联的字符串对象。（注意，Final.txt
    文件必须存在于 C: 驱动器的根目录上，此示例才能正常工作。）name 属性实际上是由 Get-
    ChildItem 命令返回的 FileInfo 对象的属性。这不仅演示了 Windows PowerShell 的面向对
    象的特性，而且演示了如何调用任何可访问对象的方法。

    通过使用变量来存储 Get-ChildItem 命令输出，可以得到与上例相同的结果，如下例所示：

        $a = (Get-ChildItem c:\final.txt).name
        $a.ToUpper()

    该命令也使用与变量关联的字符串对象的 ToUpper 方法，此变量包含 Get-ChildItem 命令返回的
    文件名。

    在某些情况下，方法需要参数来指示该方法的操作。例如，FileInfo 对象包含 MoveTo 方法，该方
    法提供了将文件从一个位置移动到另一个位置的方式。该方法需要一个用于指定文件目标位置的参数。以
    下命令演示如何包括该参数：

        (Get-ChildItem c:\final.txt).MoveTo("c:\techdocs\final.txt")

    Get-ChildItem 命令返回 Final.txt 文件的 FileInfo 对象，然后使用该对象的 MoveTo 方
    法启动操作，并指定文件的新位置。

    若要确定与方法关联的参数，请查看相应的方法定义。方法定义中包含一个或多个方法签名（在
    Microsoft .NET Framework 中也称为重载）。方法签名包含方法的名称，以及零个或更多个调用
    方法时必须提供的参数。在 Get-Member cmdlet 的显示结果中，每个方法签名都以逗号与前面的签
    名隔开。例如，FileInfo 类的 CopyTo 方法包含以下两个方法签名：

        1. CopyTo(String destFileName)
        2. CopyTo(String destFileName, Boolean overwrite)

    第一个方法签名获取要复制其中的源文件的目标文件名（包括路径）。在以下示例中，使用第一个
    CopyTo 方法将 Final.txt 复制到 C:\Bin 目录：

        (Get-ChildItem c:\final.txt).CopyTo("c:\bin\final.txt")

    如果目标位置已存在该文件，则 CopyTo 方法会失败，并且 Windows PowerShell 会报告以下错误：

        Exception calling "CopyTo" with "1" argument(s): "The file
        'c:\bin\final.txt' already exists.".

    在第二个方法签名中，将像第一个示例中一样传递目标文件名，但还要传递布尔值，
    以指定是否要覆盖目标位置中的同名现有文件，如下例所示：

        (Get-ChildItem c:\final.txt).CopyTo("c:\bin\final.txt", $true)

    传递布尔值时，必须使用 $True 变量，它是由 Windows PowerShell 自动创建的。$True 变量
    包含"true"布尔值。（可以想到，$False 变量包含"false"布尔值。）

另请参阅
    about_Objects
    Get-Member


about_Modules

主题
    about_Modules

简短说明
    说明如何安装、导入和使用 Windows PowerShell 模块。

详细说明
    模块就是一个程序包，可以包含 Windows PowerShell 命令，例如 cmdlet、提供程序、函数、变量和别名。

    编写命令的人员可以使用模块来组织自己的命令，然后与其他人共享这些模块。获得模块的人员可
    将模块中的命令添加到自己的 Windows PowerShell 会话中，可像内置命令一样使用这些命令。

    本主题说明如何使用 Windows PowerShell 模块。有关如何编写 Windows PowerShell 模块的信息，请参阅
    MSDN (Microsoft Developer Network) 库中的“编写 Windows PowerShell 模块”：
    http://go.microsoft.com/fwlink/?LinkId=144916。

 如何使用模块
    要使用某个模块，请执行以下任务：

        1. 安装模块。（通常已经预先安装好了。）
        2. 将模块导入 Windows PowerShell 会话。
        3. 找到模块添加的命令。
        4. 使用模块添加的命令。

    本主题说明如何执行这些任务，还介绍有关管理模块的其他有用信息。

 如何安装模块
    如果获得的模块是包含文件的文件夹形式，则需要将该模块安装到计算机上，然后才能将其导入 Windows
    PowerShell。

    大多数模块都已经安装好了。Windows PowerShell 附带了几个预先安装的模块。在 Windows Server 2008 R2 中，
    服务器管理器中的添加功能向导自动安装所选的功能模块。在用于安装模块的安装程序中，包含许多其他模块。

    安装模块文件夹：

        1. 为当前用户创建 Modules 目录（如果尚无该目录）。

           要创建 Modules 目录，请键入：

               new-item -type directory -path $home\Documents\WindowsPowerShell\Modules

        2. 将整个模块文件夹复制到 Modules 目录中。

           可以使用任意方法复制文件夹，包括 Windows 资源管理器和 Cmd.exe 以及 Windows
           PowerShell。

           在 Windows PowerShell 中，使用的是 Copy-Item cmdlet。例如，若要将
           MyModule 文件夹从 C:\ps-test\MyModule 复制到 Modules 目录中，请键入：

               copy-item -path c:\ps-test\MyModule -dest $home\Documents\WindowsPowerShell\Modules

    可以将模块安装到任何位置，但将模块安装到默认的模块位置会使模块的管理更加方便。
    有关默认模块位置的详细信息，请参阅“模块位置和 PSModulePath”一节。

 如何查找安装的模块
     安装模块后，可将其导入到 Windows PowerShell 会话中。

     要查找安装到默认模块位置的模块，请在 Windows PowerShell 提示符处键入：

         get-module -listAvailable

     要查找已经导入到会话中的模块，请在 Windows PowerShell 提示符处键入：

         get-module

     有关 Get-Module cmdlet 的详细信息，请参阅 Get-Module。

 如何导入模块
    要使用模块中的命令，请将该模块导入到 Windows PowerShell 会话中。

    要将模块从默认模块位置导入到当前会话中，请使用以下命令格式。

        import-module <module-name>

    例如，以下命令会将 BitsTransfer 模块导入到当前会话中。

        import-module BitsTransfer

    要导入默认模块位置以外的模块，请在命令中使用模块文件夹的完全限定路径。

    例如，要将 C:\ps-test 目录中的 TestCmdlets 模块添加到会话中，请键入：

        import-module c:\ps-test\TestCmdlets

    有关将模块添加到会话中的详细信息，请参阅“Import-Module”。

 如何将所有模块导入 WINDOWS POWERSHELL 会话
    在 Windows 7 和 Windows Server 2008 R2 中，“导入所有模块”任务会打开一个
    Windows PowerShell 会话，其中包含所有可用的 Windows PowerShell 模块和管理单元。

    要启动包含所有可用的 Windows PowerShell 模块和管理单元的
    Windows PowerShell 会话，请使用以下过程。

    -- 右键单击任务栏中的 Windows PowerShell 图标，然后单击“导入所有模块”。

    注意：在 Windows Server 2008 R2 中，Windows PowerShell 图标默认固定在
          任务栏上。不过，必须启动一次 Windows PowerShell，才能使
          “导入所有模块”任务出现。

    在其他 Windows 版本中，要将所有可用模块导入会话中，
    请在 Windows PowerShell 提示符处键入：

        get-module -listAvailable |import-module

 如何查找模块中的命令
    将模块导入到 Windows PowerShell 会话中之后，可以使用模块中的命令。

    要查找模块添加的命令，请在 Windows PowerShell 提示符处键入：

        get-command -module <module-name>

    例如，要查找 BitsTransfer 模块添加的命令，请键入：

        get-command -module BitsTransfer

    有关 Get-Command cmdlet 的详细信息，请参阅 Get-Command。

 如何查找模块中的命令的相关帮助
    如果模块包含有关其导出的命令的帮助主题，则可使用 Get-Help cmdlet
    来显示这些帮助主题。使用的命令格式与在 Windows PowerShell 中查看
    任何帮助主题的命令格式相同。

    要查找模块中的命令的相关帮助主题，请在 Windows PowerShell 命令符处键入：

        get-help <command-name>

    有关详细帮助，请键入：

        get-help <command-name> -detailed

    例如，要查找 Start-BitsTransfer cmdlet 的详细帮助，请键入：

        get-help Start-BitsTransfer -detailed

    有关 Get-Help 模块的详细信息，请参阅 Get-Help。

 如何删除模块
    删除模块时，将从会话中删除模块添加的命令。

    要从会话中删除模块，请使用以下命令格式。

        remove-module <module-name>

    例如，以下命令会将 BitsTransfer 模块从当前会话中删除。

        remove-module BitsTransfer

    删除模块的操作是导入模块操作的逆过程。删除模块并不会将模块卸载。
    有关 Remove-Module cmdlet 的详细信息，请参阅 Remove-Module。

 如何将模块导入所有会话中
    Import-Module 命令将模块导入当前的 Windows PowerShell 会话。此命令仅影响当前会话。

    要将模块导入到已启动的每一个 Windows PowerShell 会话中，请将 Import-Module 命令
    添加到 Windows PowerShell 配置文件。

    有关配置文件的详细信息，请参阅 about_Profiles。

 模块位置和 PSMODULEPATH
    Windows PowerShell 有两个默认的模块位置，一个用于系统，另一个用于当前用户。

        系统：        $pshome\Modules
                           (%windir%\System32\WindowsPowerShell\v1.0\Modules)

        当前用户：    $home\Documents\WindowsPowerShell\Modules
                           (%UserProfile%\Documents\WindowsPowerShell\Modules)

                       - 或 -

                       $home\My Documents\WindowsPowerShell\Modules
                           (%UserProfile%\My Documents\WindowsPowerShell\Modules)

        注意：在 Windows Vista、Windows Server 2008 和 Windows 的更高版本中，要向
              %Windir%\System32 目录中添加文件或更改其中的文件，请使用
          “以管理员身份运行”选项启动 Windows PowerShell。

    通过更改 PSModulePath 环境变量 ($env:psmodulepath) 的值，可更改系统上的默认模块位置。
    PSModulePath 环境变量是在 Path 环境变量上建模的，二者具有相同的格式。

    要查看默认的模块位置，请键入：

        $env:psmodulepath

    要添加默认的模块位置，请使用以下命令格式。

        $env:psmodulepath = $env:psmodulepath + ";<path>"

    命令中的分号 (;) 将新路径与列表中该路径前面的路径分隔开。

    例如，要添加"C:\ps-test\Modules"目录，请键入：

        $env:psmodulepath + ";c:\ps-test\Modules"

    将路径添加到 PSModulePath 时，Get-Module 和 Import-Module 命令将包含该路径中的模块。

    所设置的值只影响当前会话。要进行永久性更改，请将该命令添加到 Windows PowerShell 配置文件中，
    或使用“控制面板”中的“系统”项来更改注册表中 PSModulePath 环境变量的值。

    有关 PSModulePath 变量的详细信息，请参阅 about_Environment_Variables。

 模块和名称冲突
    当会话中多条命令的名称相同时，会发生名称冲突。当模块中的命令的名称与会话中
    现有命令或项的名称相同时，将该模块导入会话便会导致名称冲突。

    名称冲突可导致命令被隐藏或替换。
        -- 隐藏。键入某条命令的名称时，如果运行的不是该命令，则该命令已被隐藏，不过，通过其他
           方法可以运行该命令（例如使用生成命令的模块或管理单元的名称对命令名称进行限定）。

        -- 替换。如果命令被名称相同的命令覆盖而无法运行，则该命令已被替换。
           即使删除导致冲突的模块，也无法运行被替换的命令，除非重新启动会话。

    Import-Module 添加的命令可能隐藏和替换当前会话中的命令。另外，会话中的命令也可能隐藏模块添加的命令。

    为防止名称冲突，请使用 Import-Command 的 Prefix 参数为导入的命令创建唯一的名称。

    也可使用 Import-Module 的 Alias、Cmdlet、Function 和 Variable 参数来选择要导入的命令，排除在
    会话中会导致名称冲突的命令。

    即使命令被隐藏，也可以使用生成该命令的模块或管理单元的名称对命令名称进行限定，从而运行该命令。
    当会话中有名称相同的多个命令时，由 Windows Powershell 命令优先级规则确定运行哪个命令。

    例如，如果会话包含名称相同的函数和 cmdlet 时，Windows PowerShell 默认运行函数。如果会话包含名称相
    同、类型相同的命令（例如名称相同的两条 cmdlet），则默认运行最近添加的那一条命令。

    有关详细信息，包括优先级规则的说明和运行隐藏命令的说明，请参阅 about_Command_Precedence。

 模块和管理单元
    可以将命令从模块和管理单元添加到会话中。模块可添加所有类型的命令，包括 cmdlet、提供程序、
    函数和项（如变量、别名和 Windows PowerShell 驱动器）。管理单元只能添加 cmdlet 和提供程序。

    事实上，尽管可以通过键入相应名称或运行添加脚本来添加函数、别名、变量和驱动器，会话中的
    所有 cmdlet 和提供程序都来自模块或管理单元。

    从会话中删除模块或管理单元时，请使用以下命令确定要删除的命令。

    要查找会话中的 cmdlet 的来源，请使用以下命令格式：

        get-command <cmdlet-name> | format-list -property verb, noun, pssnapin, module

    例如，要查找 Get-Date cmdlet 的来源，请键入：

        get-command get-date | format-list -property verb, noun, pssnapin, module

    有关 Windows PowerShell 管理单元的详细信息，请参阅 about_PSSnapins。

另请参阅
    about_Command_Precedence
    about_PSSnapins
    Get-Command
    Get-Help
    Get-Module
    Import-Module
    Remove-Module


about_Objects

主题
    about_Objects

简短说明
    提供有关 Windows PowerShell 中的对象的基本信息。

详细说明
    在 Windows PowerShell 中执行的每个操作都是在对象的上下文中发生的。数据从一个命令移动到
    下一个命令时，它是作为一个或多个可识别对象移动的。而对象是表示命名空间中某个项目的一组数据。
    一个对象由三种类型的数据构成：对象的类型、对象的方法和对象的属性。

    关于对象类型的数据提供了对象所属种类的详细信息。例如，表示文件的对象是 FileInfo 对象。

    对象的方法是对对象所表示的项目可以执行的操作。例如，FileInfo 对象包含可以用于复制文件的方
    法。也就是说，当调用对象的复制方法时，将复制对象所表示的文件。

    对象的属性是有关该对象的状态的信息。例如，FileInfo 对象包含 Length 属性，该属性指定对象所表
    示的文件的大小。

    使用对象时，可以在命令中使用对象的方法和属性来执行特定的操作和操作数据。
    在将多个命令组合成一个管道时，这尤其有用。

    命令在管道中组合在一起时，它们将作为对象相互传递信息。运行第一个命令时，该命令会通过管道
    将一个或多个对象发送给第二个命令。第二个命令从第一个命令那里接收对象，然后处理该对象，
    之后将新的或经过修改的对象传递给管道中的下一个命令。继续进行此过程，直到运行了管道中的所有命令。

    以下示例演示了如何将对象从一个命令传递到下一个命令：

        Get-ChildItem c: | where {$_.PsIsContainer -eq $false}
        |Format-List

    第一个命令 (Get-ChildItem c:) 为文件系统根目录中的每个项目返回一个对象。这些对象通过管
    道传递给第二个命令 (where {$_.PsIsContainer -eq $false})。第二个命令使用对象的 PsIsContainer
    属性从输入对象中筛选数据，因此不返回任何目录（容器）。然后，该命令将此信息作为对象传递给第三
    个命令 (Format-List)，后者以列表格式显示每个通过管道传递的对象的内容。

另请参阅
    about_Methods
    about_Properties
    about_Pipelines
    Get-Member


about_Operators

主题
    about_Operators

简短说明
    说明 Windows PowerShell 支持的运算符

详细说明
    运算符是一种可在命令或表达式中使用的语言元素。Windows PowerShell 支持几种运算符，
    以帮助您对值进行操作。

  算术运算符
      使用算术运算符（+、-、*、/、%）可以计算命令或表达式中的值。通过这些运算符，
      可以对值进行加、减、乘或除运算，以及计算除法运算的余数（模）。

      还可以使用算术运算符对字符串、数组和哈希表进行运算。加法运算符用于将元素连接起来。
      乘法运算符用于返回每个元素的指定数量的副本。

      有关详细信息，请参阅 about_Arithmetic_Operators。

  赋值运算符
      使用赋值运算符（=、+=、-=、*=、/=、%=）可将一个或多个值赋予变量，更改变量中的值，
      以及将值附加给变量。还可以将变量转换为任何 Microsoft .NET Framework 数据类型
      （例如字符串或 DateTime）或进程变量。

      有关详细信息，请参阅 about_Assignment_Operators。

  比较运算符
      使用比较运算符（-eq、-ne、-gt、-lt、-le、-ge）可以比较值和进行条件测试。
      例如，可以比较两个字符串值，以确定它们是否相等。

      比较运算符包括使用正则表达式查找模式的匹配运算符（-match、-notmatch）、使用
      正则表达式更改输入值的替换运算符 (-replace) 以及使用通配符 (*) 查找模式的
      like 运算符（-like、-notlike）。

      比较运算符还包括用于操作值中的位模式的位运算符（-bAND、-bOR、-bXOR、-bNOT）。

    有关详细信息，请参阅 about_Comparison_Operators

  逻辑运算符
      使用逻辑运算符（-and、-or、-xor、-not、!）可将多个条件语句连接成一个复杂的条件。例
      如，通过逻辑运算符 -and 可使用两个不同条件来创建一个对象筛选器。

      有关详细信息，请参阅 about_Logical_Operators。

  重定向运算符
      使用重定向运算符（>、>>、2>、2> 和 2>&1）可将命令或表达式的输出发送至文本文件。重定向
      运算符的功能与 Out-File cmdlet（不带参数）相似，但这些运算符还可以用于将错误输出重定向
      至指定文件。您也可以使用 Tee-Object cmdlet 重定向输出。

      有关详细信息，请参阅 about_Redirection。

  拆分运算符与联接运算符
      -split 和 -join 运算符用于拆分和合并子字符串。-split 运算符将一个字符串拆分为多个子
      字符串。-join 运算符将多个字符串连接成单个字符串。

      有关详细信息，请参阅 about_Split 和 about_Join。

  类型运算符
      使用类型运算符（-is、-isnot、-as）可查找或更改对象的 .NET Framework 类型。

      有关详细信息，请参阅 about_Type_Operators。

  一元运算符
      使用一元运算符可以增加或减少变量或对象属性，并将整数设置为正数或负数。例如，若要使变量
      $a 从 9 增加到 10，请键入 $a++。

  特殊运算符
      使用特殊运算符可以执行其他类型的运算符无法执行的任务。例如，特殊运算符可以执行诸如
      运行命令和更改值的数据类型这样的操作。

      & 调用运算符
        说明：运行命令、脚本或脚本块。因为调用运算符不进行分析，所以它不能解释命令参数。
        此调用运算符用于指示它后面的值为命令。使用此运算符可以运行存储在变量中并由字符串
        表示的命令。示例：

            & "new cmdlet"
            $c = "get-executionpolicy"
            & $c

      . 属性取消引用运算符
        说明：访问对象的属性和方法。示例：

            $myString.length
            $myString.substring(1,3)

      . 使用点"."获得来源运算符
        说明：运行脚本，使脚本中的项目成为调用作用域的组成部分。有关详细信息，请参阅
        about_Scope。示例：

            . c:\scripts.sample.ps1

        注意：点 (.) 还用作父目录符号，如下例所示：

                .\sample.ps1

              此命令运行 Sample.ps1 脚本，但不属于调用作用域的组成部分。

      :: 静态成员运算符
        说明：调用 .NET Framework 类的静态属性运算符和方法。要查找对象的静态属性和方法，
        请使用 Get-Member cmdlet 的 Static 参数。示例：

            [datetime]::now

      .. 范围运算符
        说明：表示给定上下限的整数数组中的序列整数。示例：

            1..10
            10..1
            foreach ($a in 1..$max) {write-host $a}

      -f 格式运算符
        说明：使用字符串对象的格式化方法对字符串进行格式化。在运算符左侧输入格式字符串，
        在运算符右侧输入要格式化的对象。示例：

            C:\PS> "{0} {1,-10} {2:N}" -f
            C:\PS> 1,"hello",[math]::pi
            1 hello 3.14

      $( ) 子表达式运算符
        说明：返回一条或多条语句的结果。对于单个结果将返回标量。对于多个结果将返回数组。示例：

            $($x * 23)
            $(Get-WMIObject win32_Directory)

      @( ) 数组子表达式运算符
        说明：通过数组返回一条或多条语句的结果。如果只有一项，则数组只有一个成员。示例：

            @(Get-WMIObject win32_logicalDisk)

      , 运算符
        说明：用作二元运算符时，逗号用于创建数组。用作一元运算符时，逗号用于创建只含一个成员的数组。
        逗号放在成员之前。示例：

            $myArray = 1,2,3
            $SingleArray = ,1

另请参阅
    about_Arithmetic_Operators
    about_Assignment_Operators
    about_Comparison_Operators
    about_Logical_Operators
    about_Type_Operators
    about_Split
    about_Join
    about_Redirection


about_Parameters

主题
    about_Parameters

简短说明
    说明如何在 Windows PowerShell 中使用 cmdlet 参数。

详细说明
    大多数 Windows PowerShell cmdlet 和函数都依赖参数让用户选择选项或提供输入。参数放在
    cmdlet 或函数名称后面，通常采用以下格式：

        -<parameter_name> <parameter_value>

    参数名称前面有连字符 (-)，它通知 Windows PowerShell 连字符后面的词是参数，而不是传递给
    cmdlet 或函数的值。并非所有参数都需要值，也并非必须为所有参数都指定名称。在某些情况下，
    参数名称是隐含的，不需要包含在命令中。

    参数的类型以及对这些参数的要求因 cmdlet 和函数而异。要查找有关 cmdlet 参数的信息，请使用
    Get-Help cmdlet。例如，要查找有关 Get-ChildItem cmdlet 参数的信息，请键入：

        get-help get-childitem

    要查找某个函数的参数信息，请查看参数定义。参数是在函数名称之后或在函数体之内利用 Param 关
    键字进行定义的。有关详细信息，请参阅 about_Functions。

    某些函数还包含有关参数的基于注释的帮助。可对这些函数使用 Get-Help cmdlet。有关详细信息，
    请参阅 Get-Help 的帮助主题和 about_Comment_Based_Help。

    Get-Help Cmdlet 将返回有关 cmdlet 或函数的各种详细信息，包括 cmdlet 或函数的说明、命令语
    法、有关参数的信息以及显示如何使用 cmdlet 或函数的示例。

    您还可使用 Get-Help cmdlet 或函数的 Parameter 参数来查找有关特定参数的信息。或者，可
    以在 Parameter 参数中使用通配符 (*) 来查找有关 cmdlet 或函数所有参数的信息。例如，
    以下命令获取有关 Get-Member cmdlet 或函数所有参数的信息：

        get-help get-member -parameter *

    此信息包括使用该参数而需要了解的详细信息。例如，Get-ChildItem cmdlet 的帮助主题包含有关
    其 Path 参数的以下详细信息：

        -path <string[]>
            指定一个或多个位置的路径。允许使用通配符。
            默认位置是当前目录 (.)。

        必选？                    false
        位置？                    1
        默认值                    当前目录
        是否接受管道输入？        true (ByValue, ByPropertyName)
        是否接受通配符？          true

    参数信息包括参数的语法、说明以及属性。以下几节描述了参数的属性。

  参数是否为必需？
    此设置说明参数是否必需，即是否使用该 cmdlet 的所有命令都必须包含该参数。当值为"True"而
    命令中无该参数时，Windows PowerShell 将提示您输入该参数的值。

  参数位置？
    此设置说明是否可以提供参数的值，而不在值前面提供参数名称。如果设置为"0"或"named"，
    则必须提供参数名称。此类参数称为命名参数。命名参数可以列在 cmdlet 名称之后的任何位置。

    如果"参数位置？"设置被设为非 0 的整数，则参数名称不是必需的。此类型的参数称为位置参数，该
    数字指示此参数相对于其他位置参数的确切显示位置。如果为位置参数指定参数名称，则该参数可以列在
    cmdlet 名称之后的任何位置。

    例如，Get-ChildItem cmdlet 具有 Path 和 Exclude 参数。Path 的"参数位置？"设置为 1，
    表示该参数是位置参数。Exclude 的"参数位置？"设置为 0，表示该参数是命名参数。

    这意味着，Path 不需要参数名称，但它的参数值必须是命令中的第一个或唯一一个非命令参数值。然
    而，由于 Exclude 参数是命名参数，因此可以将其放在命令中的任何位置。

    由于这两个参数的"参数位置？"设置，您可以使用以下任何命令：

        Get-ChildItem -path c:\techdocs -exclude *.ppt
        Get-ChildItem c:\techdocs -exclude *.ppt
        Get-ChildItem -exclude *.ppt -path c:\techdocs
        Get-ChildItem -exclude *.ppt c:\techdocs

    如果要包括另一个位置参数而不包括参数名称，则必须按"参数位置？"设置指定的顺序放置该参数。

  参数类型
    此设置指定参数值的 Microsoft .NET Framework 类型。例如，如果类型是 Int32，则参数值必须为整
    数。如果类型是 string，则参数值必须为字符串。如果字符串包含空格，则必须用引号将值括起来或在
    空格前放置转义字符 (`)。

  默认值
    此设置指定在没有提供其他值时参数将采用的值。例如，Path 参数的默认值通常是当前目录。必需的
    参数从来没有默认值。许多可选参数都没有默认值，这是因为不使用这些参数不会产生任何影响。

  是否接受多个值？
    此设置说明参数是否接受多个参数值。如果参数接受多个值，则可键入以逗号分隔的列表用作命令的参数值，
    或将逗号分隔的列表（数组）保存到变量中，然后将该变量指定为参数值。

    例如，Get-Service cmdlet 的 ServiceName 参数就接受多个值。以下命令均有效：

        get-service -servicename winrm, netlogon

        $s = "winrm", "netlogon"
        get-service -servicename $s

  是否接受管道输入？
    此设置指示是否可以使用管道运算符 (|) 将值传送给参数。

    值                       说明
    -----                    -----------
    False                    指示不能使用管道将值传送给参数。

    True (by Value)          指示任何值只要具有为参数指定的 .NET Framework 类型或
                     可以转换成指定的 .NET Framework 类型，
                 就可以通过管道传送给参数。

                             当参数为"True (by Value)"时，Windows PowerShell
                             先尝试将使用管道传送的任何值与该参数进行关联，
                 然后再尝试使用其他方法解释命令。

    True (by Property Name)  指示可以使用管道将值传送给参数，但参数的 .NET Framework
                 类型必须包括一个与该参数同名的属性。

                             例如，仅当一个值具有"Name"属性时，才能使用管道将该值传送给
                             Name 参数。

  是否接受通配符？
    此设置说明参数的值是否可以包含通配符，使参数值可以与目标容器中的多个现有项目匹配。

  通用参数
    通用参数是指可以用于所有 cmdlet 的参数。有关通用参数的详细信息，请键入：

        help about_commonparameters

另请参阅
    about_Command_syntax
    about_Comment_Based_Help
    about_Functions_Advanced
    about_Pipelines
    about_Wildcards


about_Parsing

主题
    about_parsing

简短说明
    说明 Windows PowerShell 如何分析命令。

详细说明
    在命令提示符下输入命令时，Windows PowerShell 会将命令文本分解成一系列称为标记的段，
    然后确定如何解释每个标记。例如，Windows PowerShell 将下面的命令分解成两个标记：
    "Write-Host"和"book"，然后单独解释每个标记：

        Write-Host book

    处理命令时，Windows PowerShell 分析程序以表达式模式或参数模式进行操作：

        - 在表达式模式中，字符串值必须用引号括起来。没有用引号括起来的数字将被视为数字值
          （而不是一串字符）。

        - 在参数模式中，每个值均被视为可扩展字符串，除非该值以下列某个特殊字符开头：
          美元标记 ($)、at 符号 (@)、单引号 (')、双引号 (") 或左括号 (()。

    如果值前面有这些字符之一，则该值被视为值表达式。

    下表提供了在表达式模式和参数模式下处理的几个命令示例，以及这些命令产生的结果。

    示例		模式	     结果
    ------------------  ----------   ----------------
    2+2                 表达式	     4（整数）
    Write-Output 2+2    参数	     "2+2"（字符串）
    Write-Output (2+2)  表达式	     4（整数）
    $a = 2+2	        表达式	     $a = 4（整数）
    Write-Output 	$a表达式     4（整数）
    Write-Output 	$a/H参数     "4/H"（字符串）

    每个标记都可以解释为某种对象类型，例如布尔或字符串类型。Windows PowerShell 尝试根据表达
    式确定对象类型。对象类型取决于命令所需的形式参数类型以及 Windows PowerShell 是否知道如何将实
    际参数转换为正确类型。下表显示了赋给表达式返回值的几个类型示例：

    示例		模式	     结果
    ------------------ 	----------   ---------------
    Write-Output !1    	参数	     "!1"（字符串）
    Write-Output (!1)  	表达式	     False（布尔）
    Write-Output (2)   	表达式	     2（整数）

另请参阅
    about_Command_Syntax


about_Path_Syntax

主题
    about_Path_Syntax

简短说明
    说明 Windows PowerShell 中的完整和相对路径名称格式。

详细说明
    数据存储中可通过 Windows PowerShell 提供程序访问的所有项目都可以由其路径名称唯一标识。路径
    名称是项目名称、项目所在的容器及子容器和借以访问容器的 Windows PowerShell 驱动器的组合。

    在 Windows PowerShell 中，路径名称分为下面两种类型：完全限定路径名称和相对路径名称。
    完全限定路径名称由路径的所有元素组成。以下语法显示了完全限定路径名称中的元素：

        [<提供程序>::]<驱动器>:[\<容器>[\<子容器>...]]\<项目>

    <提供程序> 占位符是指访问数据存储所使用的 Windows PowerShell 提供程序。
    例如，FileSystem 提供程序可用于访问计算机上的文件和目录。语法中的此元素
    是可选的，并且不是永远需要的，因为驱动器名称在所有提供程序中都是唯一的。

    <驱动器> 占位符是指特定 Windows PowerShell 提供程序所支持的 Windows PowerShell 驱动器。
    对于 FileSystem 提供程序，Windows PowerShell 驱动器映射到系统上所配置的 Windows 驱动器。
    例如，如果系统中有 A: 驱动器和 C: 驱动器，则 FileSystem 提供程序将在 Windows PowerShell
    中创建相同的驱动器。

    在指定驱动器之后，必须指定包含项目的任何容器和子容器。必须按容器在数据存储中的分级顺序指定容器。
    换句话说，必须以父容器开始，然后是父容器中的子容器，依此类推。此外，每个容器的前面都必须有反斜杠。
    （注意，Windows PowerShell 允许使用正斜杠，以便与其他 PowerShell 兼容。）

    在指定容器和子容器之后，必须提供项目名称，并且名称前面加反斜杠。例如，
    C:\Windows\System32 目录中的 Shell.dll 文件的完全限定路径名称如下：

        C:\Windows\System32\Shell.dll

    在此示例中，用来访问容器的驱动器是 C: 驱动器，顶级容器是 Windows，子容器是 System32（位于
    Windows 容器中），项目是 Shell.dll。

    在某些情况下，不需要指定完全限定路径名称，可以改用相对路径名称。相对路径名称基于当前工作位
    置。Windows PowerShell 允许根据项目与当前工作位置的相对位置来标识该项目。可以使用特殊字
    符来指定相对路径名称。下表逐一描述了这些字符，并提供了相对路径名称和完全限定路径名称的示例。
    表中的示例基于被设置为 C:\Windows 的当前工作目录。

    符号   说明			      相对路径		完全限定路径
    ------ -------------------------- ----------------  ---------
    .      当前工作位置		      .\System		c:\Windows\System
    ..     当前工作位置的父级	      ..\Program Files	c:\Program Files
    \      当前工作位置的	      \Program Files	c:\Program Files
           驱动器根目录
    [无]   无特殊字符		      System		c:\Windows\System

    在命令中使用路径名称时，无论使用完全限定路径名称还是相对名称，都应当按相同方式输入该名称。
    例如，假设当前工作目录是 C:\Windows。以下 Get-ChildItem 命令将检索 C:\Techdocs 目录中的
    所有项目：

        Get-ChildItem \techdocs

    反斜杠表示应当使用当前工作位置的驱动器根目录。因为工作目录是 C:\Windows，所以驱动器根目录
    是 C: 驱动器。由于 techdocs 目录在根目录下，因此只需要指定反斜杠。

    使用以下命令可以取得相同结果：

        Get-ChildItem c:\techdocs

    不管使用完全限定路径名称还是相对路径名称，路径名称都是重要的，这不仅因为它可以定位项目，
    而且因为它唯一地标识项目，即使该项目与其他容器中的另一个项目同名。

    例如，假设您有两个文件，每个文件都命名为 Results.txt。第一个文件位于 C:\Techdocs\Jan
    目录下，第二个文件位于 C:\Techdocs\Feb 目录下。通过第一个文件的路径名称
    (C:\Techdocs\Jan\Results.txt) 和第二个文件的路径名称
    (C:\Techdocs\Feb\Results.txt)，可以清楚地分辨这两个文件。

另请参阅
    about_Locations


about_Pipelines

主题
    about_pipelines

简短说明
    在 Windows PowerShell 中将命令合并到管道中

详细说明
    管道是由管道运算符 (|)(ASCII 124) 连接的一连串命令。每个管道运算符将前一条命令的
    结果发给下一条命令。

    可以使用管道将一条命令输出的对象作为另一条命令的输入发给该命令，以供其处理。
    然后可以将该命令的输出再发送给另一条命令。其结果是得到一个由一系列简单命令组成的
    非常强大的命令链，或称"管道"。

    例如，

    Command-1 | Command-2 | Command-3

    此示例中，Command-1 发出的对象发送给 Command-2。Command-2 处理这些对象，然后将其发送给
    Command-3。Command-3 接着处理这些对象，再将它们沿管道向下发送。由于管道中已没有其他
    命令，因此控制台上将显示结果。

    在管道中，按命令出现顺序从左到右处理这些命令。处理过程是作为单个操作进行的，
    并且一生成输出就会显示该输出。

    下面是一个简单的示例。下面的命令获取 Notepad 进程，然后将其停止。

         get-process notepad |stop-process

    第一条命令使用 Get-Process cmdlet 获取表示 Notepad 进程的对象。它使用管道运算符 (|) 将该进程对
    象发送给 Stop-Process cmdlet，后者将停止 Notepad 进程。请注意 Stop-Process 命令不包含用于指定
    进程的 Name 或 ID 参数，因为指定的进程是通过管道提交的。

    下面是一个实际的示例。此命令管道获取当前目录中的文本文件，只选择长度超过 10,000 字节的文件，
    将它们按长度排序，然后在表中显示每个文件的名称和长度。

        Get-ChildItem -path *.txt | Where-Object {$_.length -gt 10000} |
        Sort-Object -property Length | Format-Table -property name, length

    此管道由四个命令按指定的顺序组成。该命令是横向输入的，但在下图中我们将纵向显示该过程。

       Get-ChildItem -path *.txt

                  |
                  |  (FileInfo 对象 )
                  |  (  .txt         )
                  |
                  V

       Where-Object {$_.length -gt 10000}

                  |
                  |  (FileInfo 对象 )
                  |  (  .txt         )
                  |  ( 长度 > 10000 )
                  |
                  V

       Sort-Object -property Length

                  |
                  |  (FileInfo 对象 )
                  |  (  .txt          )
                  |  ( 长度 > 10000  )
                  |  ( 按长度排序 )
                  |
                  V

       Format-Table -property name, length

                  |
                  |  (FileInfo 对象   )
                  |  (  .txt             )
                  |  ( 长度 > 10000   )
                  |  ( 按长度排序    )
                  |  ( 格式化为表    )
                  |
                  V
        Name                       Length
        ----                       ------
        tmp1.txt                    82920
        tmp2.txt                   114000
        tmp3.txt                   114000

使用管道

    Windows PowerShell cmdlet 是为在管道中使用而设计的。例如，通常可以将 Get cmdlet 的结果
    通过管道传给名词相同的操作 cmdlet（如 Set、Start、Stop 或 Rename cmdlet）。

    例如，可以将从 Get-Service cmdlet 得到的任何服务通过管道传给 Start-Service 或 Stop-Service
    cmdlet（但禁用的服务不能按此方式重新启动）。

    下面的命令管道用于启动计算机上的 WMI 服务：

    get-service wmi |start-service

    用于获取和设置 Windows PowerShell 提供程序的对象的 cmdlet（如 Item 和 ItemProperty
    cmdlet）也可以在管道中使用。

    例如，可以将 Windows PowerShell 注册表提供程序中 Get-Item 或 Get-ChildItem 命令的结果通过管道
    传给 New-ItemProperty cmdlet。下面的命令将值为 8124 的新注册表条目 NoOfEmployees 添加到
    MyCompany 注册表项。

       get-item -path HKLM:\Software\MyCompany | new-Itemproperty -name NoOfEmployees -value 8124

    很多实用工具 cmdlet（如 Get-Member、Where-Object、Sort-Object、Group-Object
    和 Measure-Object）几乎专门在管道中使用。可以将任何对象通过管道传给这些 cmdlet。

    例如，可以将计算机上的所有进程通过管道传给 Sort-Object 命令，并按进程中的句柄数对这些进程排序。

    get-process | sort-object -property handles

    此外，可以通过管道将任何对象传给格式设置 cmdlet（如 Format-List 和 Format-Table）、导出 cmdlet
    （如 Export-Clixml 和 Export-CSV）和输出 cmdlet（如 Out-Printer）。

    例如，可以将 Winlogon 进程通过管道传给 Format-List cmdlet，以便在列表中显示该进程的所有属性。

    get-process winlogon | format-list -property *

    通过一些实践您会发现，将简单命令组合成管道不仅省时，而且省去很多键入工作，因此将使脚本编写工作更加高效。

管道的工作方式

     在通过管道传递对象（也就是将一条命令输出的对象发送给另一条命令）时，Windows Powershell 尝试将通过
     管道传递的对象与接收该对象的 cmdlet 的某个参数关联起来。

     为此，Windows Powershell"参数绑定"组件（它将输入对象与 cmdlet 参数关联）尝试查找符合以下条件的
     参数：

     -- 该参数必须接受来自管道的输入（并非所有参数都从管道接受输入）
     -- 该参数必须接受发来的对象的类型，或者该对象可转换成的类型。
     -- 该参数必须尚未在命令中使用。

     例如，Start-Service cmdlet 有很多参数，但是只有其中两个，即 Name 和 InputObject 接受管道输
     入。Name 参数接受字符串，而 InputObject 参数接受服务对象。因此，可以将字符串和服务对象
     （以及其属性可转换为字符串和服务对象的对象）通过管道传给 Start-Service。

     如果 Windows PowerShell 的参数绑定组件无法将管道传递的对象与接收方 cmdlet 的参数关联，那么命令
     将失败，并且 Windows PowerShell 将提示您提供缺少的参数值。

     不能强制参数绑定组件将管道传递的对象与某个特定参数关联 -- 甚至不能建议参数。实际上，
     该组件的逻辑会尽可能高效地管理管道。

“每次一个”的处理

     通过管道将对象传给命令与使用命令的参数提交对象非常类似。

     例如，将表示计算机上的服务的对象用管道传给 Format-Table 命令，如：

          get-service | format-table -property name, dependentservices

     与将服务对象保存到变量中，然后使用 Format-Table 的 InputObject 参数提交该服务对象，

          $services = get-service
                  format-table -inputobject $services -property name, dependentservices

     或者将命令嵌入参数值中非常相似。

                  format-table -inputobject (get-service wmi) -property name, dependentservices

     但是，这里有一个重要区别。当通过管道将多个对象传给某个命令时，Windows PowerShell 每次
     将一个对象发送给该命令。而在使用命令参数时，这些对象作为一个数组对象发送。

     这一看似技术性的差异可能产生一些实际的，有时甚至是很有用的结果。

     例如，如果将多个进程对象通过管道从 Get-Process cmdlet 传给 Get-Member cmdlet，Windows
     PowerShell 将每次把一个进程对象发送给 Get-Member。
     Get-Member 显示这些进程对象的 .NET 类（类型）及其属性和方法。
     （Get-Member 会消除重复项，因此如果这些对象全都是同一类型，那么它将只显示一个对象类型。）

     在此情况下，Get-Member 显示每个进程对象（即 System.Diagnostics.Process 对象）的属性和方法。

                 get-process | get-member

                    TypeName: System.Diagnostics.Process

                 Name                           MemberType     Definition
                 ----                           ----------     ----------
                 Handles                        AliasProperty  Handles = Handlecount
                 Name                           AliasProperty  Name = ProcessName
                 NPM                            AliasProperty  NPM = NonpagedSystemMemorySize
                 ...

      但是，如果使用 Get-Member 的 InputObject 参数，则 Get-Member 将获取
      System.Diagnostics.Process 对象的数组（作为一个单元），然后显示对象数组的属性。（请注意
      System.Object 类型名称后面的数组符号 ([])。）

                 get-member -inputobject (get-process)

                TypeName: System.Object[]

                Name               MemberType    Definition
                ----               ----------    ----------
                Count              AliasProperty Count = Length
                Address            Method        System.Object& Address(Int32 )
                Clone              Method        System.Object Clone()
                ...

     这个结果可能并不是您所需要的结果，但是在您理解这一点之后，就可以加以利用。
     例如，进程对象数组有一个 Count 属性，可以用它来统计计算机上的进程数量。

        (get-process).count

     这个区别可能非常重要，因此请记住，当通过管道将对象传给 cmdlet 时，每次只传递一个对象。

接受管道输入

    为了接收管道中的对象，接收方 cmdlet 必须有接受管道输入的参数。可以使用带 Full
    或 Parameter 参数的 Get-Help 命令来确定 cmdlet 的哪个参数（如果有的话）接受管道输入。

    在 Get-Help 默认显示中，“Accepts pipeline input”项出现在参数属性表中。只有在
    使用了 Get-Help cmdlet 的 Full 或 Parameter 参数的情况下，此表才会显示。

    例如，为了确定 Start-Service cmdlet 的哪个参数接受管道输入，请键入：

        get-help start-service -full

        get-help start-service -parameter *

    例如，Start-Service cmdlet 的帮助显示 Name 和 InputObject 参数接受管道输入 ("true")。所有其
    他参数在"Accept pipeline input?"行中的值都为"false"。

        -name <string[]>
           为要启动的服务指定服务名称。
           参数名称是可选的。可使用“-Name”或其别名
           “-ServiceName”，或者，可以省略该参数名称。

           必选？                    true
           位置？                    1
           默认值
      -->  是否接受管道输入？        true (ByValue, ByPropertyName)
           是否接受通配符？          true

        -inputObject <ServiceController[]>
           指定代表要启动的服务的 ServiceController 对象。
           请输入包含对象的变量或键入获取对象的命令或表达式。

           必选？                    false
           位置？                    named
           默认值
      -->  是否接受管道输入？        true (ByValue)
           是否接受通配符？          false

     这意味着您可以通过管道向 Where-Object cmdlet 发送对象 (PsObjects)
     而 Windows PowerShell 会将该对象与 InputObject 参数关联。

接受管道输入的方法

     Cmdlet 参数可按以下两种方法中的任一方法接受管道输入：

     -- ByValue："按值"接受输入的参数可接受与其参数值的 .NET 类型相同的管道传递对象，
        或者可转换为该类型的对象。

        例如，Start-Service 的 Name 参数按值接受管道输入。它可接受字符串对象或可转换为字符串的对象。

     -- ByPropertyName："按属性名"接受输入的参数只在对象的属性与参数同名时，才接受管道对象。

        例如，Start-Service 的 Name 参数可接受有 Name 属性的对象。

        （若要列出对象的属性，请将该对象通过管道传给 Get-Member。）

     某些参数既可按值，也可按属性名接受对象。这些参数如此设计是为了能轻松地通过管道获取输入。

调查管道错误

     如果命令由于管道错误而失败，可以调查故障并重写命令。

     例如，下面的命令尝试将某个注册表条目从一个注册表项移至另一个注册表项，方法是使用 Get-Item cmdlet
     获取目标路径，然后通过管道将该路径传给 Move-ItemProperty cmdlet。

     具体而言，该命令使用 Get-Item cmdlet 获取目标路径。然后使用管道运算符将结果发送给 Move-
     ItemProperty cmdlet。Move-ItemProperty 命令指定当前路径以及要移动的注册表条目的名称。

          get-item -path hklm:\software\mycompany\sales |
          move-itemproperty -path hklm:\software\mycompany\design -name product

     该命令失败，并且 Windows PowerShell 显示以下错误消息：

         Move-ItemProperty：输入对象无法绑定到命令的任何参数，因为该命令不接受管道输入
         或输入及其属性与接受管道输入的参数不匹配。
         位于行：1 字符：23
         + $a | move-itemproperty <<<<  -path hklm:\software\mycompany\design -name product

    若要调查错误，请使用 Trace-Command 跟踪 Windows PowerShell 的参数绑定组件。下面的命令在命令进行
    处理时跟踪参数绑定组件。它使用 -pshost 参数在控制台上显示结果，并使用 -filepath 命令将这些结果发送
    到 debug.txt 文件以备参考。

         trace-command -name parameterbinding -expression {get-item -path hklm:\software\mycompany\sales |
             move-itemproperty -path hklm:\software\mycompany\design -name product} -pshost -filepath debug.txt

    跟踪的结果非常冗长，但是它们显示了绑定到 Get-Item cmdlet 的值，然后显示了绑定到 Move-
    ItemProperty cmdlet 的命名值。

       ...
        BIND NAMED cmd line args [Move-ItemProperty]
            BIND arg [hklm:\software\mycompany\design] to parameter [Path]
        ...
            BIND arg [product] to parameter [Name]
        ....
        BIND POSITIONAL cmd line args [Move-ItemProperty]
        ...

    最后显示将路径绑定到 Move-ItemProperty 的 Destination 参数的尝试失败。
        ...
        BIND PIPELINE object to parameters: [Move-ItemProperty]
            PIPELINE object TYPE = [Microsoft.Win32.RegistryKey]
            RESTORING pipeline parameter's original values
            Parameter [Destination] PIPELINE INPUT ValueFromPipelineByPropertyName NO COERCION
            Parameter [Credential] PIPELINE INPUT ValueFromPipelineByPropertyName NO COERCION
        ...

     若要调查故障，请使用 Get-Help cmdlet 查看 Destination 参数的属性。下面的命令用于获取有关
     Destination 参数的详细信息。

    get-help move-itemproperty -parameter destination

     结果显示 Destination 只"按属性名"接受管道输入。
     即管道传递的对象必须有名为 Destination 的属性。

        -destination <string>
            Specifies the path to the destination location.

            Required?                    true
            Position?                    2
            Default value
            Accept pipeline input?       true (ByPropertyName)
            Accept wildcard characters?  true

     若要查看通过管道传给 Move-ItemProperty cmdlet 的对象的属性，请将该对象通过管道传给
     Get-Member cmdlet。下面的命令将命令第一部分的结果通过管道传给 Get-Member cmdlet。

          get-item -path hklm:\software\mycompany\sales |get-member

     输出显示该项是一个没有 Destination 属性的 Microsoft.Win32.RegistryKey。这说明了命令失败的原因。

     为了修正该命令，我们必须在 Move-ItemProperty cmdlet 中指定目标。我们可以使用 Get-
     ItemProperty 命令获取路径，但是名称和目标必须在命令的 Move-ItemProperty 部分中指定。

         get-item -path hklm:\software\mycompany\design |
             move-itemproperty -dest hklm:\software\mycompany\design -name product

     若要验证命令是否奏效，请使用 Get-ItemProperty 命令：

    get-itemproperty hklm:\software\mycompany\sales

     结果显示 Product 注册表条目已移至 Sales 项。

        PSPath       : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\software\mycompany\sales
        PSParentPath : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\software\mycompany
        PSChildName  : sales
        PSDrive      : HKLM
        PSProvider   : Microsoft.PowerShell.Core\Registry
        Product      : 18

另请参阅

    about_objects

    about_parameters

    about_command_syntax

    about_foreach


about_Preference_Variables

主题
    首选项变量

简短说明
    用于自定义 Windows PowerShell 行为的变量

详细说明
    Windows PowerShell 包含一组可用于自定义其行为的变量。这些“首选项变量”
    的作用与基于 GUI 的系统中选项的作用相似。

    首选项变量影响 Windows PowerShell 操作环境以及在该环境中运行的所有命令。
    很多情况下，cmdlet 带有的参数可用于替代特定命令的首选行为。

    下表列出了首选项变量及其默认值。

    Variable				 默认值
    --------                             -------------
    $ConfirmPreference                   High
    $DebugPreference                     SilentlyContinue
    $ErrorActionPreference               Continue
    $ErrorView                           NormalView
    $FormatEnumerationLimit              4
    $LogCommandHealthEvent		 False（不记入日志）
    $LogCommandLifecycleEvent		 False（不记入日志）
    $LogEngineHealthEvent		 True（记入日志）
    $LogEngineLifecycleEvent		 True（记入日志）
    $LogProviderLifecycleEvent		 True（记入日志）
    $LogProviderHealthEvent		 True（记入日志）
    $MaximumAliasCount                   4096
    $MaximumDriveCount                   4096
    $MaximumErrorCount                   256
    $MaximumFunctionCount                4096
    $MaximumHistoryCount                 64
    $MaximumVariableCount                4096
    $OFS				 （空格字符 (" ")）
    $OutputEncoding		         ASCIIEncoding 对象
    $ProgressPreference			 Continue
    $PSEmailServer			 （无）
    $PSSessionApplicationName		 WSMAN
    $PSSessionConfigurationName		 http://schemas.microsoft.com/powershell/microsoft.powershell
    $PSSessionOption			 （见下文）
    $VerbosePreference			 SilentlyContinue
    $WarningPreference			 Continue
    $WhatIfPreference			 0

    Windows Powershell 还包含存储用户首选项的以下环境变量。有关环境变量的更多详细，
    请参阅 about_environment_variables。

    Variable
    --------
    PSModulePath

使用首选项变量
    本文描述每一个首选项变量。

    若要显示某特定首选项变量的当前值，请键入该变量的名称。Windows PowerShell
    在响应中提供该值。例如，下面的命令显示了 $ConfirmPreference 变量的值。

        PS> $ConfirmPreference
        High

    若要更改变量的值，请使用赋值语句。例如，下面的语句将值“Medium”赋给 $ConfirmPreference 变量。

        PS> $ConfirmPreference = "Medium"

    与所有其他变量一样，您设置的值特定于当前 Windows PowerShell 窗口。为了使这些值在所有 Windows
    PowerShell 窗口中都有效，请将它们添加到 Windows PowerShell 配置文件中。有关详细信息，请参阅
    about_profiles。

远程工作
   当在远程计算机上运行命令时，远程命令只遵循在远程计算机上的 Windows PowerShell 客户端中设置的首选
   项。例如，当运行远程命令时，远程计算机上 $DebugPreference 变量的值决定了 Windows PowerShell 如何
   响应调试消息。

   有关远程命令的详细信息，请参阅 about_remote。

$ConfirmPreference
------------------
    确定哪些 cmdlet 操作在执行前自动请求用户确认。

    当 $ConfirmPreference 值（High、Medium、Low 或 None）大于等于 cmdlet 操作的风险（High、
    Medium、Low 或 None）时，Windows PowerShell 在执行该操作时自动请求用户确认。

    可以使用 cmdlet 的 Confirm 参数来替代特定命令的首选项。

        有效值：
        None：	不自动确认任何 cmdlet 操作。用户必须使用 Confirm 参数来请求确认特定命令。

        Low： 	风险为低、中或高的 cmdlet 操作自动提示确认。若要阻止特定命令提示确认，
                  请使用 -Confirm:$false。

        Medium：风险为中或高的 cmdlet 操作自动提示确认。若要为特定命令启用提示确认，
            请使用 -confirm。若要阻止特定命令提示确认，请使用 confirm:$false。

        High：	高风险的 cmdlet 操作自动提示确认。若要为特定命令启用提示确认，
           （默认） 请使用 -confirm。若要阻止特定命令提示确认，请使用 -confirm:$false。

    详细说明
        当 cmdlet 操作对系统有显著影响（例如，删除数据或使用大量系统资源）时，
        Windows PowerShell 在执行操作之前自动提示您确认。

        例如，

        PS> remove-item pref2.txt

            Confirm
            Are you sure you want to perform this action?
            Performing operation "Remove File" on Target "C:\pref2.txt".
            [Y] Yes  [A] Yes to All  [N] No  [L] No to All  [S] Suspend  [?] Help (default is "Y"):

        风险估计是该 cmdlet 的称为“ConfirmImpact”的部分。该项不可更改。

        可能对系统产生风险的 cmdlet 有一个 Confirm 参数，可以使用该参数来请求或阻止对特定命令的确认。

    由于大多数 cmdlet 使用默认风险值 Medium，并且 $ConfirmPreference 的默认值为 High，因此自动提
    示确认极少发生。但是，可通过将 $ConfirmPreference 值更改为 Medium 或 Low 来激活自动提示确认。

    示例
      下面的示例演示 $ConfirmPreference 默认值的作用。High 值只要求确认高风险 cmdlet 操作。大多数操
      作是中等风险，因此它们不会自动提示确认（但可以使用 cmdlet 的 Confirm 参数来请求确认某个特定命令）。

          PS> $confirmpreference              #Get the current value of the
          High                                 variable

          PS> remove-item temp1.txt           #Delete a file
          PS>                                 #Deleted without confirmation
          PS> remove-item temp2.txt -confirm  #Use the Confirm parameter

          Confirm
          Are you sure you want to perform this action?
          Performing operation "Remove File" on Target "C:\temp2.txt".
          [Y] Yes  [A] Yes to All  [N] No  [L] No to All  [S] Suspend  [?] Help (default is "Y"):

       下面的示例演示将 $ConfirmPreference 的值更改为 Medium 的作用。由于大多数 cmdlet 操作都是中
       等风险，因此它们自动提示确认，并且您必须使用值为 $false 的 Confirm 参数才能阻止某个特定
       命令的确认提示。

          PS> $confirmpreference = "Medium"
                                     #Change the value of $ConfirmPreference
          PS> remove-item temp2.txt
                                     #Deleting a file triggers confirmation
          Confirm
          Are you sure you want to perform this action?
          Performing operation "Remove File" on Target "C:\temp2.txt".
          [Y] Yes  [A] Yes to All  [N] No  [L] No to All  [S] Suspend  [?] Help (default is "Y"):

          PS> remove-item temp3.txt -confirm:$false   #Use Confirm parameter
                                                       to suppress confirmation
          PS>

$DebugPreference
------------------
    确定 Windows PowerShell 如何响应由脚本、cmdlet 或提供程序生成的调试消息，
    或者 Write-Debug 命令在命令行上生成的调试消息。

        某些 cmdlet 会显示调试消息，这些消息通常是面向程序员和技术支持专业人员的技术性很强的
        消息。默认情况下，不会显示调试消息，但可通过更改 $DebugPreference 的值来显示调试消息。

        您还可以使用 cmdlet 的 Debug 通用参数来显示或隐藏特定命令的调试消息。
        有关详细信息，请键入“get-help about_commonparameters”。

        有效值：
        Stop：               显示调试消息并停止执行。将错误写至控制台。

             Inquire：            显示调试消息，并询问您是否要继续。

            Continue：           显示调试消息并继续执行。

            SilentlyContinue：	 无效果。不显示调试消息，执行继续而无中断。
            （默认）

    示例

    下面的示例演示在命令行上输入 Write-Debug 命令时，更改 $DebugPreference 值的作用。更改将影响所有
    调试消息，包括 cmdlet 和脚本生成的消息。该示例还演示了 Debug 通用参数的用法，该参数显示或隐藏与单个
    命令相关的调试消息。

    下面的示例演示了默认值“SilentlyContinue”的作用。不显示调试消息且处理继续。最后一条命令使用 Debug
    参数替代单个命令的首选项。

        PS> $debugpreference                    # Get the current value of
        SilentlyContinue                          $DebugPreference

        PS> write-debug "Hello, World"
        PS>                                     # The debug message is not
                                                  displayed.

        PS> write-debug "Hello, World" -Debug   # Use the Debug parameter
        DEBUG: Hello, World                     # The debug message is
                                                  is requested.                                                                                                    displayed and confirmation
        Confirm
        Continue with this operation?
        [Y] Yes  [A] Yes to All  [H] Halt Command  [S] Suspend  [?] Help (default is "Y"):

    下面的示例演示“Continue”值的作用。最后一条命令使用值为 $false 的 Debug 参数阻止单个命令的消息。

        PS> $debugpreference = "Continue"   # Change the value to "Continue"

        PS> write-debug "Hello, World"
        DEBUG: Hello, World                 # The debug message is displayed
        PS>                                   and processing continues.

        PS> write-debug "Hello, World" -Debug:$false
                                            # Use the Debug parameter with
                                              false.
        PS>                                 # The debug message is not
                                              displayed.

    下面的示例演示“Stop”值的作用。最后一条命令使用值为 $false 的 Debug 参数阻止单个命令的消息。

        PS> $debugpreference = "Stop"       #Change the value to "Stop"
        PS> write-debug "Hello, World"
        DEBUG: Hello, World
        Write-Debug : Command execution stopped because the shell variable "DebugPreference" is
        set to Stop.
        At line:1 char:12
        + write-debug  <<<< "Hello, World"

        PS> write-debug "Hello, World" -Debug:$false
                                            # Use the Debug parameter with
                                              $false
        PS>                                 # The debug message is not
                                              displayed and processing is
                                              not stopped.

    下面的示例演示“Inquire”值的作用。最后一条命令使用值为 $false 的 Debug 参数阻止单个命令的消息。

        PS> $debugpreference = "Inquire"
        PS> write-debug "Hello, World"
        DEBUG: Hello, World

        Confirm
        Continue with this operation?
        [Y] Yes  [A] Yes to All  [H] Halt Command  [S] Suspend  [?] Help (default is "Y"):

        PS> write-debug "Hello, World" -Debug:$false
                                            # Use the Debug parameter with
                                              $false
        PS>                                 # The debug message is not
                                              displayed and processing
                                              continues without interruption.

$ErrorActionPreference
----------------------
    确定 Windows PowerShell 如何响应命令行、脚本、cmdlet 或提供程序中的非终止性
    错误（不会导致cmdlet 处理停止的错误），例如 Write-Error cmdlet 生成的错误。

        您还可以使用 cmdlet 的 ErrorAction 通用参数来替代特定命令的首选项。
        有关详细信息，请键入“get-help about_commonparameters”。

        有效值：
        Stop：               显示错误消息并停止执行。

             Inquire：            显示错误消息，并询问您是否要继续。

            Continue：           显示错误消息并继续执行。

            SilentlyContinue：	 无效果。不显示错误消息，执行继续而无中断。
        （默认）

       $ErrorActionPreference 和 ErrorAction 通用参数都不会影响 Windows
       PowerShell 响应终止性错误（导致 cmdlet 处理停止的错误）的方式。

       有关 ErrorAction 通用参数的详细信息，请键入“get-help about_commonparameters”。

    示例

    下面的示例演示 $ErrorActionPreference 不同值的作用，以及如何使用 ErrorAction 通用
    参数来替代单个命令的首选项。ErrorAction 参数的有效值与 $ErrorActionPreference 变量相同。

    下面的示例演示 Continue 值的作用，该值是默认值。

        PS> $erroractionpreference
        Continue		# Display the value of the preference.

        PS> write-error "Hello, World"
                                # Generate a non-terminating error.

        write-error "Hello, World" : Hello, World
                                # The error message is displayed and
                                  execution continues.

        PS> write-error "Hello, World" -ErrorAction:SilentlyContinue
                                # Use the ErrorAction parameter with a
                                  value of "SilentlyContinue".
        PS>
                                # The error message is not displayed and
                                  execution continues.

    下面的示例演示 SilentlyContinue 值的作用。

        PS> $ErrorActionPreference = "SilentlyContinue"
                                # Change the value of the preference.
        PS> write-error "Hello, World"
                                # Generate an error message.
        PS>
                                # Error message is suppressed.
        PS> write-error "Hello, World" -erroraction:continue
                                # Use the ErrorAction parameter with a
                                  value of "Continue".
        write-error "Hello, World" -erroraction:continue : Hello, World
                                # The error message is displayed and
                                  execution continues.

    下面的示例演示真实错误生成的结果。此例中，命令获取一个不存在的文件 nofile.txt。
    该示例还使用 ErrorAction 通用参数来替代首选项。

        PS> $erroractionpreference
        SilentlyContinue        # Display the value of the preference.

        PS> get-childitem -path nofile.txt
        PS>                     # Error message is suppressed.

        PS> $ErrorActionPreference = "Continue"
                                # Change the value to Continue.

        PS> get-childitem -path nofile.txt
        Get-ChildItem : Cannot find path 'C:\nofile.txt' because it does not exist.
        At line:1 char:4
        + get-childitem  <<<< nofile.txt

        PS> get-childitem -path nofile.txt -erroraction SilentlyContinue
                                # Use the ErrorAction parameter
        PS>
                                # Error message is suppressed.

        PS> $ErrorActionPreference = "Inquire"
                                # Change the value to Inquire.
        PS> get-childitem -path nofile.txt

        Confirm
        Cannot find path 'C:\nofile.txt' because it does not exist.
        [Y] Yes  [A] Yes to All  [H] Halt Command  [S] Suspend  [?] Help (default is "Y"): y

        Get-ChildItem : Cannot find path 'C:\nofile.txt' because it does not exist.
        At line:1 char:4
        + get-childitem  <<<< nofile.txt

        PS> $ErrorActionPreference = "Continue"
                                # Change the value to Continue.
        PS> Get-Childitem nofile.txt -erroraction "Inquire"
                                # Use the ErrorAction parameter to override
                                  the preference value.

        Confirm
        Cannot find path 'C:\nofile.txt' because it does not exist.
        [Y] Yes  [A] Yes to All  [H] Halt Command  [S] Suspend  [?] Help (default is "Y"):

$ErrorView
----------
        确定 Windows PowerShell 中错误消息的显示格式。

        有效值：
        NormalView：         面向大多数用户的详细视图。由以下内容组成：错误描述、
        （默认）		 错误中所涉及对象的名称，以及指向命令中导致错误的词的箭头 (<<<<)。

             CategoryView：       针对生产环境设计的简明结构化视图。格式为：{Category}:
                          ({TargetName}:{TargetType}):[{Activity}], {Reason}

        有关 CategoryView 中字段的详细信息，请参阅 Windows PowerShell SDK 中的
        “ErrorCategoryInfo 类”。

    示例

    下面的几个示例演示 ErrorView 值的作用。

    下面的示例演示当 $ErrorView 值为 NormalView 时错误是如何显示的。此例中，Get-ChildItem 命令用于
    查找不存在的文件。

        PS> $ErrorView                         # Verify the value.
        NormalView

        PS> get-childitem nofile.txt           # Find a non-existent file.
        Get-ChildItem : Cannot find path 'C:\nofile.txt' because it does not exist.
        At line:1 char:14
        + get-childitem  <<<< nofile.txt

    下面的示例演示当 $ErrorView 的值为 CategoryView 时，如何显示与上面相同的错误。

        PS> $ErrorView = "CategoryView"        # Change the value to
                                                 CategoryView

        PS> get-childitem nofile.txt
        ObjectNotFound: (C:\nofile.txt:String) [Get-ChildItem], ItemNotFoundException

   下面的示例表明 ErrorView 的值只影响错误显示；它不会更改存储在 $error 自动变量中的错误对象的结构。
   有关 $error 自动变量的信息，请参阅 about_automatic_variables。

   此命令接受与错误数组中的最新错误（元素 0）关联的 ErrorRecord 对象，并以列表格式显示错误对象的
   所有属性。

        PS> $error[0] | format-list -property * -force

        Exception    : System.Management.Automation.ItemNotFoundException: Cannot find path
                       'C:\nofile.txt' because it does not exist.
                       at System.Management.Automation.SessionStateInternal.GetChildItems(String path,
                       Boolean recurse, CmdletProviderContext context)
                       at System.Management.Automation.ChildItemCmdletProviderIntrinsics.Get(String path,
                       Boolean recurse, CmdletProviderContext context)
                       at Microsoft.PowerShell.Commands.GetChildItemCommand.ProcessRecord()
        TargetObject          : C:\nofile.txt
        CategoryInfo          : ObjectNotFound: (C:\nofile.txt:String) [Get-ChildItem],
                                ItemNotFoundException
        FullyQualifiedErrorId : PathNotFound,Microsoft.PowerShell.Commands.GetChildItemCommand
        ErrorDetails          :
        InvocationInfo        : System.Management.Automation.InvocationInfo

$FormatEnumerationLimit
-----------------------
        确定一次显示中包含多少个枚举项。此变量不影响基础对象；只影响显示。
        当 $FormatEnumerationLimit 的值小于枚举项的数量时，Windows PowerShell
        添加一个省略号 (...) 来指示还有其他项未显示。

        有效值：整数 (Int32)
        默认值：4

    示例

        下面的示例演示如何使用 $FormatEnumerationLimit 变量来改善枚举项的显示。

        此示例中的命令生成一个表，该表分两组列出计算机上运行的所有服务；一组表示正在运行的服务，另一组表
        示已停止的服务。此例中使用 Get-Service 命令获取所有服务，然后将结果通过管道发送给 Group-Object
        cmdlet，后者按服务状态将结果分组。

        得到的显示结果是一个表，表中在 Name 列中列出状态，在 Group 列中列出处于该状态的进程。（若要更改
        列标签，请使用哈希表。有关详细信息，请参阅"get-help format-table - 示例"中的示例。）

        Group 列中对应每种状态最多列出 4 个服务。为了增加列出的项数，示例中将
        $FormatEnumerationLimit 的值增加到 1000。

        在得到的显示结果中，Group 列中的列表受到行长度的限制。示例的最后一条命令使用 Format-Table 的
        Wrap 参数显示每个 Status 组中的所有进程。

        PS> $formatenumerationlimit         # Find the current value
        4

        PS> get-service | group-object -property status
                                            # List all services grouped by
                                              status

        Count Name                      Group
        ----- ----                      -----
           60 Running                   {AdtAgent, ALG, Ati HotKey Poller, AudioSrv...}
           41 Stopped                   {Alerter, AppMgmt, aspnet_state, ATI Smart...}

                                           # The list is truncated after
                                             4 items.

        PS> $formatenumerationlimit = 1000
                                           # Increase the limit to 1000.

        PS> get-service | group-object -property status
                                           # Repeat the command.

        Count Name     Group
        ----- ----     -----
           60 Running  {AdtAgent, ALG, Ati HotKey Poller, AudioSrv, BITS, CcmExec...
           41 Stopped  {Alerter, AppMgmt, aspnet_state, ATI Smart, Browser, CiSvc...

        PS> get-service | group-object -property status | format-table -wrap
                                           # Add the Wrap parameter.

        Count Name       Group
        ----- ----       -----
           60 Running    {AdtAgent, ALG, Ati HotKey Poller, AudioSrv, BITS, CcmExec, Client
                         for NFS, CryptSvc, DcomLaunch, Dhcp, dmserver, Dnscache, ERSvc,
                         Eventlog, EventSystem, FwcAgent, helpsvc, HidServ, IISADMIN,
                         InoRPC, InoRT, InoTask, lanmanserver, lanmanworkstation, LmHosts,
                         MDM, Netlogon, Netman, Nla, NtLmSsp, PlugPlay, PolicyAgent,
                         ProtectedStorage, RasMan, RemoteRegistry, RpcSs, SamSs, Schedule,
                         seclogon, SENS, SharedAccess, ShellHWDetection, SMT PSVC, Spooler,
                         srservice, SSDPSRV, stisvc, TapiSrv, TermService, Themes, TrkWks,
                         UMWdf, W32Time, W3SVC, WebClient, winmgmt, wscsvc, wuauserv,
                         WZCSVC, zzInterix}

           41 Stopped    {Alerter, AppMgmt, aspnet_state, ATI Smart, Browser, CiSvc,
                         ClipSrv, clr_optimization_v2.0.50727_32, COMSysApp, CronService,
                         dmadmin, FastUserSwitchingCompatibility, HTTPFilter, ImapiService,
                         Mapsvc, Messenger, mnmsrvc, MSDTC, MSIServer, msvsmon80, NetDDE,
                         NetDDEdsdm, NtmsSvc, NVSvc, ose, RasAuto, RDSessMgr, RemoteAccess,
                         RpcLocator, RSVP, SCardSvr, SwPrv, SysmonLog, TlntSvr, upnphost,
                         UPS, VSS, WmdmPmSN, Wmi, WmiApSrv, xmlprov}

$Log*Event
----------
        Log*Event 首选项变量确定哪些类型的事件写入事件查看器中的 Windows PowerShell
        事件日志。默认情况下，只有引擎和提供程序事件记入日志，但是可以使用 Log*Event
        首选项变量来自定义您的日志，如记录有关命令的事件。

        Log*Event 首选项变量如下：

            $LogCommandHealthEvent：记录命令初始化和进行处理时产生的错误和异常。
            默认值 = $false（不记入日志）。

            $LogCommandLifecycleEvent：
                记录命令和命令管道的启动和停止，以及命令发现过程中的安全异常。
                默认值 = $false（不记入日志）。

            $LogEngineHealthEvent：记录会话的错误和故障。默认值 = $true（记入日志）。

            $LogEngineLifecycleEvent：记录会话的打开和关闭。默认值 = $true（记入日志）。

            $LogProviderHealthEvent：记录提供程序错误，如读写错误、查找错误以及调用错误。
            默认值 = $true（记入日志）。

            $LogProviderLifecycleEvent：记录添加和删除 Windows PowerShell 提供程序。
                默认值 = $true（记入日志）。（有关 Windows PowerShell 提供程序的信息，
                请键入：“get-help about_provider”。）

        若要启用某个 Log*Event，键入值为 $true 的变量，例如：

            $LogCommandLifeCycleEvent

            - 或 -

            $LogCommandLifeCycleEvent = $true

        若要禁用某个事件类型，键入值为 $false 变量，例如：

            $LogCommandLifeCycleEvent = $false

        您启用的事件只对当前 Windows PowerShell 控制台有效。若要将配置应用到
        所有控制台，请将变量设置保存在 Windows PowerShell 配置文件中。

$MaximumAliasCount
------------------
        确定在 Windows PowerShell 会话中允许多少个别名。默认值 4096 对于大多数
        用户来说应该足够，但是可以将其调整为其他值以符合您的需求。

        有效值：1024 - 32768 (Int32)
        默认值：4096

        若要统计系统中别名的数量，请键入：

        (get-alias).count

$MaximumDriveCount
------------------
        确定在给定的会话中，允许多少个 Windows PowerShell 驱动器。其中包括 Windows PowerShell 提
        供程序公开的，且作为驱动器出现的文件系统驱动器和数据存储，如 Alias: 和 HKLM: 驱动器。

        有效值：1024 - 32768 (Int32)
        默认值：4096

        若要统计系统中驱动器的数量，请键入：

        (get-psdrive).count

$MaximumErrorCount
------------------
        确定在会话的错误历史记录中保存多少个错误。

        有效值：256 - 32768 (Int32)
        默认值：256

        表示每个被保留错误的对象存储在 $Error 自动变量中。此变量包含由错误记录对象组成的数组，
        每个对象对应一种错误。最新的错误是数组中的第一个对象 ($Error[0])。

        若要统计系统中错误的数量，请使用 $Error 数组的 Count 属性。键入：

        $Error.count

        若要显示某个特定错误，请使用数组表示法来显示该错误。例如，若要查看最新的错误，请键入：

                $Error[0]

        若要显示最早保留的错误，请键入：

                $Error[($Error.Count -1]

        若要显示 ErrorRecord 对象的属性，请键入：

                $Error[0] | format-list -property * -force

        在此命令中，使用 Force 参数将覆盖 ErrorRecord 对象的特殊格式设置，并恢复为传统格式。

        若要删除错误历史记录中的所有错误，请使用错误数组的 Clear 方法。

               PS> $Error.count
               17
               PS> $Error.clear()
               PS>
               PS> $Error.count
               0

       若要查找错误数组的所有属性和方法，请使用包含 InputObject 参数的 Get-Member cmdlet。
       当通过管道将对象集合传递给 Get-Member 时，Get-Member 显示集合中对象的属性和方法。
       在使用 Get-Member 的 InputObject 参数时，Get-Member 显示该集合的属性和方法。

$MaximumFunctionCount
------------------
        确定给定会话中允许多少个函数。

        有效值：1024 - 32768 (Int32)
        默认值：4096

        若要查看会话中的函数，请使用 Windows PowerShell Function 提供程序公开的 Windows
        PowerShell Function: 驱动器。有关 Function 提供程序的详细信息，请键入"get-help
        function"。

        若要列出当前会话中的函数，请键入：

            get-childitem function:

        若要统计当前会话中函数的数量，请键入：

            (get-childitem function:).count

$MaximumHistoryCount
------------------
        确定当前会话的命令历史记录中保存多少条命令。

        有效值：1 - 32768 (Int32)
        默认值：64

        若要确定当前保存在命令历史记录中的命令数量，请键入：

            (get-history).count

        若要查看会话历史记录中保存的命令，请使用 Get-History cmdlet。
        有关详细信息，请键入：“get-help about_history”。

$MaximumVariableCount
------------------
        确定给定会话中允许多少个变量，包括自动变量、首选项变量以及在命令和脚本中创建的变量。

        有效值：1024 - 32768 (Int32)
        默认值：4096

        若要查看会话中的变量，请使用 Get-Variable cmdlet 以及 Windows PowerShell
        Variable: 驱动器和 Windows PowerShell Variable 提供程序的功能。有关
        Variable 提供程序的信息，请键入"get-help variable"。

        若要获取系统上变量的当前数量，请键入：

            (get-variable).count

$OFS
----
        输出字段分隔符。指定在数组转换为字符串时，用来分隔数组元素的字符。

        有效值：任何字符串。
        默认值：空格

        默认情况下，$OFS 变量不存在，并且输出文件分隔符是空格，
        但是您可以添加此变量，并将其设置为任何字符串。

    示例

    下面的示例演示在将数组转换为字符串时使用空格来分隔值。此例中，
    一个整数数组存储在变量中，然后该变量被强制转型为字符串。

       PS> $array = 1,2,3                 # Store an array of
       integers.

       PS> [string]$array                 # Cast the array to a string.
       1 2 3                              # Spaces separate the elements

    若要更改分隔符，请添加 $OFS 变量，方法是为该变量赋值。该变量必须命名为 $OFS 才能起到正确的作用。

       PS> $OFS = "+"                     # Create $OFS and assign a "+"

       PS> [string]$array                 # Repeat the command
       1+2+3                              # Plus signs separate the elements

    若要恢复默认行为，可以将空格 (" ") 赋给 $OFS 的值或者删除该变量。
    下面的命令删除该变量，然后验证分隔符是否为空格。

       PS> Remove-Variable OFS            # Delete $OFS
       PS>

       PS> [string]$array                 # Repeat the command
       1 2 3                              # Spaces separate the elements

$OutputEncoding
---------------
       确定 Windows PowerShell 在将文本发送给其他应用程序时，所使用的字符编码方法。例如，如果应用程序
       将 Unicode 字符串返回给 Windows PowerShell，那么您可能需要更改该值，以便正确发送字符。

        有效值：   从编码类派生的对象，如 ASCIIEncoding、SBCSCodePageEncoding、UTF7Encoding、
               UTF8Encoding、UTF32Encoding 和 UnicodeEncoding。

        默认值：   ASCIIEncoding 对象 (System.Text.ASCIIEncoding)

    示例

       下面的示例演示，在针对使用 Unicode 字符的语言（如中文）本地化的计算机上，
       如何使 Windows 中的 FINDSTR 命令在 Windows PowerShell 程序中起作用。

       第一条命令查找 $OutputEncoding 的值。由于该值是编码对象，因此只显示其 EncodingName 属性。

          PS> $OutputEncoding.EncodingName # Find the current value
          US-ASCII

       在下面的示例中，FINDSTR 命令用于搜索 Test.txt 文件中存在的两个中文字符。当此 FINDSTR 命令在
       Windows 命令提示符 (Cmd.exe) 下运行时，FINDSTR 在该文本文件中找到了这两个字符。但是，当在
       Windows PowerShell 中运行同样的 FINDSTR 命令时，未找到这两个字符，这是因为 Windows
       PowerShell 将它们作为 ASCII 文本（而不是 Unicode 文本）发送给 FINDSTR。

          PS> findstr <Unicode-characters>  # Use findstr to search.
          PS>                               # None found.

       为了使该命令在 Windows PowerShell 中也能使用，需要将 $OutputEncoding 的值设置为控制台的
       OutputEncoding 属性的值，该值基于为 Windows 选择的区域设置。因为 OutputEncoding 是控制台的
       静态属性，所以在命令中使用双冒号 (::)。

          PS> $OutputEncoding = [console]::outputencoding
          PS>                               # Set the value equal to the
                                              OutputEncoding property
                                              of the console.
          PS> $OutputEncoding.EncodingName
          OEM United States
                                            # Find the resulting value.

       如此更改后，FINDSTR 命令就能找到这两个字符。

          PS> findstr <Unicode-characters>
          test.txt:         <Unicode-characters>

                    # Use findstr to search.It find the
                                          characters in the text file.

$ProgressPreference
-------------------
    确定 Windows PowerShell 如何响应由脚本、cmdlet 或提供程序生成的进度更新，例如 Write-Progress
    cmdlet 生成的进度栏。Write-Progress cmdlet 创建描述命令状态的进度栏。

        有效值：
        Stop：               不显示进度栏，而是显示错误消息并停止执行。

             Inquire：            不显示进度栏。提示是否允许继续。如果按 Y 或 A 响应，则显示进度栏。

            Continue（默认）：   显示进度栏，并继续执行。

            SilentlyContinue：	 执行命令，但是不显示进度栏。

$PSEmailServer
--------------
       指定用于发送电子邮件的默认电子邮件服务器。此首选项变量由发送
       电子邮件的 cmdlet（如 Send-MailMessage cmdlet）使用。

$PSSessionApplicationName
---------------------------
       指定使用 WS-Management 技术的远程命令的默认应用程序名称。

       系统默认应用程序名称为 WSMAN，但是可以使用首选项变量来更改该默认值。

       应用程序名称是连接 URI 中最后一个节点。例如，下面的示例 URI 中的应用程序名称为 WSMAN。

           http://Server01:8080/WSMAN

       当远程命令未指定连接 URI 或应用程序名称时，将使用默认应用程序名称。

       WinRM 服务使用该应用程序名称来选择为连接请求提供服务的侦听器。
       此参数的值应与远程计算机上的侦听器的 URLPrefix 属性值匹配。

       若要替代系统默认值以及此变量的值，并为特定会话选择其他应用程序名称，请使用 New-PSSession、
       Enter-PSSession 或 Invoke-Command cmdlet 的 ConnectionURI 或 ApplicationName 参数。

       此首选项变量是在本地计算机上设置的，但是它指定远程计算机上的侦听器。如果
       您指定的应用程序名称在远程计算机上不存在，那么建立会话的命令将失败。

$PSSessionConfigurationName
---------------------------
       指定用于在当前会话中创建的 PSSession 的默认会话配置。

       此首选项变量是在本地计算机上设置的，但是它指定位于远程计算机上的会话配置。

       $PSSessionConfigurationName 变量的值是完全限定资源 URI。

       默认值：

         http://schemas.microsoft.com/powershell/microsoft.powershell

       指示远程计算机上的 Microsoft.PowerShell 会话配置。

       如果只指定配置名称，那么将在前面加上以下架构 URI：

           http://schemas.microsoft.com/powershell/

       使用 New-PSSession、Enter-PSSession 或 Invoke-Command cmdlet 的
       ConfigurationName 参数可替代该默认值，并为特定会话选择其他会话配置。

       可以随时更改此变量的值。更改时请记住，您选择的会话配置必须在远程
       计算机上存在。如果不存在，创建使用该会话配置的会话的命令将失败。

       此首选项变量不确定在远程用户创建连接到此计算机的会话时，使用哪个本地会话
       配置。但是，可以使用针对本地会话配置的权限来确定哪些用户可以使用它们。

$PSSessionOption
----------------
        确定远程会话中高级用户选项的默认值。这些选项首选项替代会话选项的系统默认值。

        还可以在创建会话的 cmdlet（如 New-PSSession、Enter-PSSession 和 Invoke-Command）
        中使用 SessionOption 参数来为特定远程会话设置自定义选项。SessionOption 参
        数值优先于系统默认值以及在此变量中设置的默认值。

        $PSSessionOption 变量包含 PSSessionOption 对象
        (System.Management.Automation.Remoting.PSSessionObject)。该对象的每个
        属性表示一个会话选项。例如，NoCompression 属性在会话期间关闭数据压缩。

        若要创建 $PSSessionOption 首选项变量，请使用 New-PSSessionOption cmdlet。
        将输出保存在名为 $PSSessionOption 的变量中。

        例如，

            $PSSessionOption = New-PSSessionOption -NoCompression

        若要在每个 Windows PowerShell 会话中都使用 $PSSessionOption 首选项变量，请将创建
        $PSSessionOption 变量的 New-PSSessionOption 命令添加到 Windows PowerShell 配置文件中。

        有关 New-PSSessionOption cmdlet 的详细信息，请参阅 New-PSSessionOption
        的帮助主题。有关远程命令和会话的详细信息，请参阅 about_Remote 和 about_PSSessions。
        有关使用配置文件的详细信息，请参阅 about_Profiles。

$VerbosePreference
------------------
           确定 Windows PowerShell 如何响应由脚本、cmdlet 或提供程序生成的详细消息，如 Write-
           Verbose cmdlet 生成的消息。详细消息通常描述为执行某个命令而执行的操作。
        默认情况下不会显示详细消息，但是可通过更改 $VerbosePreference 的值来更改此行为。

        还可以使用 cmdlet 的 Verbose 通用参数来显示或隐藏特定命令的详细消息。
        有关详细信息，请键入“get-help about_commonparameters”。

        有效值：
        Stop：               显示详细消息和错误消息，然后停止执行。

             Inquire：            显示详细消息，然后显示询问用户是否要继续的提示。

            Continue：           显示详细消息，然后继续执行。

            SilentlyContinue：不显示详细消息。继续执行。
        （默认）

    示例

    下面的示例演示 $VerbosePreference 不同值的作用，以及如何使用 Verbose 通用参数来替代首选项值。

    下面的示例演示 SilentlyContinue 值的作用，该值是默认值。

        PS> $VerbosePreference             # Find the current value.
        SilentlyContinue

        PS> Write-Verbose "Verbose message test."
        PS>                                # Write a verbose message.
                                           # Message is not displayed.

        PS> Write-Verbose "Verbose message test."-verbose
        VERBOSE: Verbose message test.
                                       # Use the Verbose parameter.

    下面的示例演示 Continue 值的作用。

       PS> $VerbosePreference = "Continue"
                                           # Change the value to Continue.
        PS> Write-Verbose "Verbose message test."
                                           # Write a verbose message.
        VERBOSE: Verbose message test.
                                           # Message is displayed.

        PS> Write-Verbose "Verbose message test." -verbose:$false
                                           # Use the Verbose parameter with
                                             a value of $false.
        PS>
                                           # Message is not displayed.

    下面的示例演示 Stop 值的作用。

        PS> $VerbosePreference = "Stop"
                                           # Change the value to Stop.
        PS> Write-Verbose "Verbose message test."
                                           # Write a verbose message.
        VERBOSE: Verbose message test.
        Write-Verbose : Command execution stopped because the shell variable "VerbosePreference"
        is set to Stop.
        At line:1 char:14
        + Write-Verbose  <<<< "Verbose message test."

       PS> Write-Verbose "Verbose message test." -verbose:$false
                                          # Use the Verbose parameter with
                                            a value of $false
       PS>
                                          # Message is not displayed.

    下面的示例演示 Inquire 值的作用。

       PS> $VerbosePreference = "Inquire"
                                         # Change the value to Inquire.
       PS> Write-Verbose "Verbose message test."
       VERBOSE: Verbose message test.
                                         # Write a verbose message.
       Confirm
       Continue with this operation?
       [Y] Yes  [A] Yes to All  [H] Halt Command  [S] Suspend  [?] Help (default is "Y"): y
       PS>

       PS> Write-Verbose "Verbose message test." -verbose:$false
                                        # Use the Verbose parameter.
       PS>
                                        # Message is not displayed.

$WarningPreference
------------------
        确定 Windows PowerShell 如何响应由脚本、cmdlet 或提供程序生成的警告消息，
        如 Write-Warning cmdlet 生成的消息。

        默认情况下将显示警告消息，并且执行将继续，但是可通过
        更改 $WarningPreference 的值来更改此行为。

        也可以使用 cmdlet 的 WarningAction 通用参数来确定 Windows PowerShell 如何响应
        来自某个特定命令的警告。有关详细信息，请键入“get-help about_commonparameters”。

        有效值：
        Stop：               显示警告消息和错误消息，然后停止执行。

             Inquire：            显示警告消息，然后提示是否允许继续。

            Continue（默认）：   显示警告消息，然后继续执行。

            SilentlyContinue：	 不显示警告消息。继续执行。

    示例

    下面的示例演示 $WarningPreference 不同值的作用，以及如何使用 WarningAction 通用参数来替代首选项值。

    下面的示例演示 Continue 值的作用，该值是默认值。

            PS> $WarningPreference    # Find the current value.
            Continue

                                      # Write a warning message.
            PS> Write-Warning "This action can delete data."
            WARNING: This action can delete data.

                                      # Use the WarningAction parameter to
                                      # suppress the warning for this command
            PS> Write-Warning "This action can delete data." -warningaction silentlycontinue

   下面的示例演示 SilentlyContinue 值的作用。

            PS> $WarningPreference = "SilentlyContinue"
                                      # Change the value to SilentlyContinue.

            PS> Write-Warning "This action can delete data."
            PS>                        # Write a warning message.

            PS> Write-Warning "This action can delete data." -warningaction stop
                                      # Use the WarningAction parameter to stop
                                      # processing when this command generates a
                                      # warning.
            WARNING: This action can delete data.
            Write-Warning : Command execution stopped because the shell variable
            "WarningPreference" is set to Stop.
            At line:1 char:14
            + Write-Warning <<<<  "This action can delete data." -warningaction stop

    下面的示例演示 Inquire 值的作用。

           PS> $WarningPreference = "Inquire"
                                      # Change the value to Inquire.
           PS> Write-Warning "This action can delete data."
                                      # Write a warning message.
           WARNING: This action can delete data.

           Confirm
           Continue with this operation?
           [Y] Yes  [A] Yes to All  [H] Halt Command  [S] Suspend  [?] Help (default is "Y"): y
           PS>

           PS> Write-Warning "This action can delete data." -warningaction silentlycontinue
           PS>                         # Use the WarningAction parameter to change the
                                       # response to a warning for the current command.

     下面的示例演示 Stop 值的作用。
           PS> $WarningPreference = "Stop"
                                     # Change the value to Stop.

           PS> Write-Warning "This action can delete data."
                                     # Write a warning message.
           WARNING: This action can delete data.
           Write-Warning : Command execution stopped because the shell variable
             "WarningPreference" is set to Stop.
           At line:1 char:14
           + Write-Warning  <<<< "This action can delete data."

           PS> Write-Warning "This action can delete data." -warningaction inquire
           WARNING: This action can delete data.

           Confirm
           Continue with this operation?
           [Y] Yes  [A] Yes to All  [H] Halt Command  [S] Suspend  [?] Help (default is "Y"):
                                       # Use the WarningAction parameter to change the
                                       # response to a warning for the current command.

$WhatIfPreference
------------------
           确定对于支持 WhatIf 的每一条命令是否自动启用 WhatIf。
           当启用 WhatIf 时 cmdlet 将报告预期的命令结果，但不会执行命令。

        有效值：
        0：（默认值）       不自动启用 WhatIf。若要手动启用它，请使用命令的 WhatIf 参数。

             1:                  WhatIf 对支持它的所有命令自动启用。用户可使用带 False 值
                的 WhatIf 命令 (WhatIf:$false) 来手动将其禁用。

    详细说明

        如果某 cmdlet 支持 WhatIf，则该 cmdlet 将报告命令的预期结果而不会执行该命令。
        例如，在响应 Remove-Item 命令时，Windows PowerShell 不会删除 test.txt 文件，
        而是报告该命令将删除什么。随后执行 Get-Childitem 命令可确认并未删除该文件。

              PS> remove-item test.txt
              What if: Performing operation "Remove-Item" on Target "Item:
                C:\test.txt
              PS> get-childitem test.txt

              Directory: Microsoft.PowerShell.Core\FileSystem::C:

              Mode                LastWriteTime     Length     Name
              ----                -------------     ------     ----
              -a---         7/29/2006   7:15 PM         84     test.txt

    示例

    下面的这些示例演示 $WhatIfPreference 不同值的作用。它们还演示了如何
    使用 WhatIf cmdlet 参数来替代特定命令的首选项变量。

    下面的示例演示 0（不启用）值的作用，该值是默认值。

             PS> $whatifpreference
             0                         # Check the current value.

             PS> get-childitem test.txt | format-list FullName
             FullName : C:\test.txt
                                       # Verify that the file exists.

             PS> remove-item test.txt
             PS>                       # Delete the file.

             PS> get-childitem test.txt | format-list -property FullName
                                       # Verify that the file is deleted.

             Get-ChildItem : Cannot find path 'C:\test.txt' because it does not exist.
             At line:1 char:14
             + get-childitem  <<<< test.txt | format-list fullname

     下面的示例演示在 $WhatIfPreference 的值为 0 时，使用 WhatIf 参数的作用。

             PS> get-childitem test2.txt | format-list -property FullName
             FullName : C:\test2.txt
                                      # Verify that the file exists.

             PS> remove-item test2.txt -whatif
             What if: Performing operation "Remove File" on Target "C:\test2.txt".
                                      # Use the WhatIf parameter

             PS> get-childitem test2.txt | format-list -property FullName
             FullName : C:\test2.txt
                                      # Verify that the file was not deleted

    下面的示例演示 1（启用 WhatIf）值的作用。在使用 Remove-Item 删除
    文件时，Remove-Item 显示该命令将删除的文件的路径，但是不会删除该文件。

             PS> $whatifpreference = 1
             PS> $whatifpreference
             1                        # Change the value.

             PS> remove-item test.txt
             What if: Performing operation "Remove File" on Target "C:\test.txt".
                                      # Try to delete a file.

             PS> get-childitem test.txt | format-list FullName
             FullName : C:\test.txt
                                      # Verify that the file exists.

     下面的示例演示在 $WhatIfPreference 值为 1 时，如何删除文件。该例中使用值为 $false 的 WhatIf
     参数。

             PS> remove-item test.txt -whatif:$false
                                      # Use the WhatIf parameter with $false.

     下面的示例表明某些 cmdlet 支持 WhatIf 行为，而其他 cmdlet 不支持这些行为。此例中，
     $WhatIfPreference 的值为 1（启用），并且执行了 Get-Process 命令（该命令不支持 WhatIf），
     但是 Stop-Process 命令执行 WhatIf 行为。
     可以使用值为 $false 的 WhatIf 参数来替代 Stop-Process 命令的 WhatIf 行为。

            PS> $whatifpreference = 1
                                     # Change the value to 1.

            PS> get-process winword
                                    # A Get-Process command completes.

            Handles  NPM(K)    PM(K)      WS(K) VM(M)   CPU(s)     Id ProcessName
            -------  ------    -----      ----- -----   ------     -- -----------
                234       8     6324      15060   154     0.36   2312 WINWORD

           PS> stop-process -name winword
           What if: Performing operation "Stop-Process" on Target "WINWORD (2312)".
                                    # A Stop-Process command uses WhatIf.

           PS> stop-process -name winword  -whatif:$false
           PS>                      # WhatIf:$false overrides the preference.

           PS> get-process winword
           Get-Process : Cannot find a process with the name 'winword'. Verify the process name
            and call the cmdlet again.
           At line:1 char:12
           + get-process  <<<< winword
                                    # Verify that the process is stopped.

另请参阅

    about_Automatic_Variables
    about_CommonParameters
    about_Environment_Variables
    about_Profiles
    about_Remote
    about_Scopes
    about_Variables


about_Profiles

主题
    about_Profiles

简短说明
    描述如何创建和使用 Windows PowerShell 配置文件。

详细说明
    可以创建 Windows PowerShell 配置文件来自定义环境，以及将特定于会话的元素
    添加到您启动的每一个 Windows PowerShell 会话。

    Windows PowerShell 配置文件是在 Windows PowerShell 启动时运行的脚本。可以将配置文件用作登录脚
    本来自定义环境。可以添加命令、别名、函数、变量、管理单元、模块以及 Windows PowerShell 驱动器。
    您还可以在配置文件中添加特定于会话的其他元素，这样这些元素就可以直接在每次会话中存在，而无需
    导入或重新创建它们。

    Windows PowerShell 支持多种针对用户和主机程序的配置文件。但是，它不会为您创建配置文件。
    本主题介绍配置文件，并描述如何在计算机上创建和维护配置文件。

    本文它说明了如何使用 Windows PowerShell 控制台 (PowerShell.exe) 的 NoProfile 参数
    直接启动 Windows PowerShell（而无需任何配置文件）。此外，本主题还将说明 Windows
    PowerShell 执行策略对配置文件的影响。

 配置文件

    Windows PowerShell 支持多种配置文件。此外，Windows PowerShell 主机程序可支持其自身
    的特定于主机的配置文件。

    例如，Windows PowerShell 控制台支持以下基本配置文件。这些配置文件按优先级顺序列出。
    第一个配置文件的优先级最高。

        说明			路径
        -----------             ----
        当前用户，当前主机	$Home\[My ]Documents\WindowsPowerShell\Profile.ps1
        当前用户，所有主机	$Home\[My ]Documents\Profile.ps1
        所有用户，当前主机	$PsHome\Microsoft.PowerShell_profile.ps1
        所有用户，所有主机	$PsHome\Profile.ps1

    配置文件路径包含以下变量：

        - $PsHome 变量，它存储 Windows PowerShell 的安装目录。

        - $Home 变量，它存储当前用户的主目录。

    此外，承载 Windows PowerShell 的其他程序可支持其各自的配置文件。例如，
    Windows PowerShell 集成脚本环境 (ISE) 支持以下特定于主机的配置文件。

        说明			路径
        -----------             -----
        当前用户，当前主机	$Home\[My ]Documents\WindowsPowerShell\Microsoft.PowerShellISE_profile.ps1
        所有用户，当前主机	$PsHome\Microsoft.PowerShellISE_profile.ps1

    在 Windows PowerShell 帮助中，"当前用户，当前主机"配置文件一般被称为"您的 Windows
    PowerShell 配置文件"。

 $PROFILE 变量

    $Profile 自动变量存储当前会话中可用的 Windows PowerShell 配置文件的路径。

    若要查看配置文件路径，应显示 $Profile 变量的值。还可以在命令中使用 $Profile 变量表示路径。

    $Profile 变量存储“当前用户，当前主机”配置文件的路径。其他配置文件
    保存在 $profile 变量的 note 属性中。

    例如，$Profile 变量在 Windows PowerShell 控制台中有以下值。

        Name                               Description
        -----------                        -----------
        $Profile                           Current User,Current Host
        $Profile.CurrentUserCurrentHost    Current User,Current Host
        $Profile.CurrentUserAllHosts       Current User,All Hosts
        $Profile.AllUsersCurrentHost       All Users, Current Host
        $Profile.AllUsersAllHosts          All Users, All Hosts

    由于 $Profile 变量的值对于每个用户以及每个主机应用程序都不同，因此请确保显示
    您所使用的每个 Windows PowerShell 主机应用程序中的 profile 变量的值。

    若要查看 $Profile 变量的当前值，请键入：

        $profile | get-member -type noteproperty

    可以在很多命令中使用 $Profile 变量。例如，下面的命令在记事本中
    打开“当前用户，当前主机”配置文件：

    notepad $profile

    下面的命令确定本地计算机上是否创建了“所有用户，所有主机”配置文件：

    test-path $profile.AllUsersAllHosts

 如何创建配置文件

    若要创建 Windows PowerShell 配置文件，请使用下面的命令格式：

        if (!(test-path <profile-name>))
           {new-item -type file -path <profile-name> -force}

    例如，若要创建当前 Windows PowerShell 主机应用程序中当前用户的配置文件，请使用下面的命令：

        if (!(test-path $profile))
           {new-item -type file -path $profile -force}

    在此命令中，If 语句阻止覆盖现有配置文件。
    请将 <profile-path> 占位符的值替换为您要创建的配置文件的路径。

    注：若要在 Windows Vista 及更高版本 Windows 中创建“所有用户”配置文件，
        请使用“以管理员身份运行”选项启动 Windows PowerShell。

 如何编辑配置文件

    可以在记事本等文本编辑器中打开任何 Windows PowerShell 配置文件。

    若要在记事本中打开当前 Windows PowerShell 主机应用程序中当前用户的配置文件，请键入：

        notepad $profile

    若要打开其他配置文件，请指定配置文件名。例如，若要打开所有主机应用程序的所有用户的配置文件，请键入：

        notepad $profile.AllUsersAllHosts

    若要应用更改，请保存配置文件，然后重新启动 Windows PowerShell。

 如何选择配置文件

    如果使用多个主机应用程序，请将所有主机应用程序中使用的项都放入 $Profile.CurrentUserAllHosts 配置
    文件中。
    将特定于某个主机应用程序的项（如设置主机应用程序背景色的命令）放入特定于该主机应用程序的配置文件中。

    如果您是为很多用户自定义 Windows PowerShell 的管理员，请遵循下面的指南：

        -- 将公共项存储在 $profile.AllUsersAllHosts 配置文件中。

        -- 将特定于某个主机应用程序的项存储在特定于该主机应用程序的 $profile.AllUsersCurrentHost 配
           置文件中。

        -- 将特定用户的项存储在特定于这些用户的配置文件中。

    务必查看有关 Windows PowerShell 配置文件的任何特殊实现的主机应用程序文档。

 如何使用配置文件

    您在 Windows PowerShell 中创建的很多项以及运行的大多数命令只会影响当前会话。会话结束时这些项将被删除。

    特定于会话的命令和项包括在会话中添加的变量、首选项变量、别名、函数、命令（Set-ExecutionPolicy 除
    外）以及 Windows PowerShell 管理单元。

    若要保存这些项，并使之可在以后的所有会话中使用，请将它们添加到 Windows PowerShell 配置文件中。

    配置文件的另一种常见用法是保存常用函数、别名和变量。将这些项保存在配置文件中之后，
    就可以在任何适用的会话中直接使用这些项，而无需重新创建它们。

 如何开始使用配置文件

    配置文件在打开时是空的。但是，可以在其中填入常用的变量、别名和命令。

    以下是一些入门建议。

    -- 添加使配置文件易于打开的命令。如果使用的是非“当前用户，当前主机”的配置文件，
       那么这一点尤其有用。例如，添加下面的命令：

           function pro {notepad $profile.CurrentUserAllHosts}

    -- 添加用于打开编译 HTML 帮助文件 (.chm) 中的 Windows PowerShell 帮助的函数。

           function Get-CHM
            {
               (invoke-item $env:windir\help\mui\0409\WindowsPowerShellHelp.chm)
            }

       此函数打开的是英文版的 .chm 文件，但可以通过替换语言代码 (0409) 打开其他版本的 .chm 文件。

    -- 添加用于列出所有 cmdlet 的别名的函数。

          function Get-CmdletAlias ($cmdletname)
           {
              get-alias | Where {$_.definition -like "*$cmdletname*"} | ft Definition, Name -auto
           }

    -- 添加一个 Add-PsSnapin 命令，以便添加使用的所有 PowerShell 管理单元。

    -- 自定义控制台。

           function Color-Console
           {
            $host.ui.rawui.backgroundcolor = "white"
            $host.ui.rawui.foregroundcolor = "black"
                $hosttime = (dir $pshome\powershell.exe).creationtime
                $Host.UI.RawUI.WindowTitle = "Windows PowerShell $hostversion ($hosttime)"
                clear-host
           }
           Color-console

    -- 添加包含计算机名和当前路径的自定义 Windows PowerShell 提示符。

           function prompt
           {
              $env:computername + "\" + (get-location) + "> "
           }

       有关 Windows PowerShell 提示符的详细信息，请参阅 about_Prompts。

 NOPROFILE 参数

    若要启动无配置文件的 Windows PowerShell，请使用 PowerShell.exe（启动 Windows
    PowerShell 的程序）的 NoProfile 参数。

    若要开始，请打开可启动 Windows PowerShell 的程序，如 Cmd.exe
    或 Windows PowerShell 本身。也可以使用 Windows 中的“运行”对话框。

    键入：

    powershell -noprofile

    如需获得 PowerShell.exe 参数的完整列表，请键入：

    powershell -?

 配置文件和执行策略

    Windows PowerShell 执行策略在某种程度上确定您是否可以运行脚本和加载配置文件。
    Restricted 执行策略是默认执行策略。它阻止所有脚本（包括配置文件）运行。如果
    使用 Restricted 策略，将不会运行配置文件及应用其内容。

    Set-ExecutionPolicy 命令用于设置和更改执行策略。该命令的值保存在注册表中，因此
    它是少数几种适用于所有 Windows PowerShell 会话的命令之一。您不必在打开控制台时
    设置 Set-ExecutionPolicy 命令或在配置文件中存储它。

 配置文件和远程会话

    Windows PowerShell 配置文件不会在远程会话中自动运行，因此配置文件所添加的命令
    在远程会话中不存在。此外，$profile 自动变量将不在远程会话中填充。

    若要在会话中运行配置文件，请使用 Invoke-Command cmdlet。

    例如，下面的命令在 $s 中的会话中运行本地计算机上的 CurrentUserCurrentHost 配置文件。

        invoke-command -session $s -filepath $profile

    下面的命令在 $s 中的会话中运行远程计算机上的 CurrentUserCurrentHost 配置文件。
    由于 $profile 变量没有填充，因此该命令使用配置文件的显式路径。

        invoke-command -session $s {invoke-expression
        "$home\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1"}

    运行此命令后，配置文件添加到会话的命令可在 $s 中使用。

另请参阅
    about_Automatic_Variables
    about_Functions
    about_Prompts
    about_Execution_Policies
    about_Signing
    about_Remote
    Set-ExecutionPolicy


about_Prompts

主题
    about_Prompts

简短说明
    描述 Prompt 函数并演示如何创建自定义 Prompt 函数。

详细说明
    Windows PowerShell 命令提示符指示 Windows PowerShell 准备好运行命令：

    PS C:\>

    Windows PowerShell 提示符是由 Prompt 函数确定的。可通过创建您自己的 Prompt 函数来自定义提示符。
    然后，可以在 Windows PowerShell 配置文件中保存此函数。

  Prompt 函数

      Prompt 函数确定 Windows PowerShell 提示符的外观。Windows PowerShell 附带内置的
      Prompt 函数，但是您可以定义自己的 Prompt 函数来替代它。

      Prompt 函数的语法如下：

      function prompt { <function-body> }

      Prompt 函数必须返回一个对象，通常是字符串。建议使其返回字符串，或者可格式化为字符串的对象。该字符
      串应适合 80 字符的行。

      例如：

      PS C:\> function prompt {"Hello, World > "}
          Hello, World >

      与所有其他函数一样，Prompt 函数也存储在 Function: 驱动器中。若要显示当前 Prompt 函数中的代码，
      请键入：

      (get-item function:prompt).definition

      此命令使用 Get-Item cmdlet 显示 Function: 驱动器中的 Prompt 项。然后，它使用点表示法来显示
      Prompt 函数的 Definition 属性值。

  默认提示符

      默认的 Windows PowerShell 提示符为：

      PS>

      此提示符只在 prompt 函数生成错误时，或者 prompt 函数未返回字符串或对象时才会出现。

          PS C:\> function prompt {$null}
          PS>

      由于 Windows PowerShell 附带内置提示符，因此您通常要在编写自己的 prompt 函数之后才会看到默认提
      示符。

  内置提示符

      Windows PowerShell 包含一个创建常见提示符的内置 prompt 函数。内置 prompt 函数为：

           function prompt
          {
              $(if (test-path variable:/PSDebugContext) { '[DBG]: ' }

              else { '' }) + 'PS ' + $(Get-Location) `

              + $(if ($nestedpromptlevel -ge 1) { '>>' }) + '> '
          }

      该函数使用 Test-Path cmdlet 来确定 $PSDebugContext 自动变量是否填充了值。如果
      $PSDebugContext 有值，那么您正处于调试模式下，并且"[DBG]"将添加到提示符中，如下所示：

      [DBG] PS C:\ps-test>

      如果 $PSDebugContext 未填充值，则该函数将"PS"添加到提示符中。并且，该函数使用 Get-Location
      cmdlet 来获取当前文件系统目录位置。然后，添加右尖括号 (>)。
           例如：
      PS C:\ps-test>

      如果是在嵌套提示符下，那么该函数将两个尖括号 (>>) 添加到提示符中。（如果 $NestedPromptLevel 自
      动变量的值大于 1，则表示您处在嵌套提示符下。）

      例如，当您在嵌套提示符下进行调试时，提示符与下面类似：

      [DBG] PS C:\ps-test>>>

      Start-PSSession cmdlet 将远程计算机的名称附加在当前 Prompt 函数前面。当使用 Start-
      PSSession cmdlet 启动与远程计算机之间的会话时，将更改命令提示符使其包含远程计算机的名称。例如：

          PS Hello, World> Enter-PSSession Server01

          [Server01]: PS Hello, World>

      其他 Windows PowerShell 主机应用程序和替代 shell 可能有其自己的自定义命令提示符。

      有关 $PSDebugContext 和 $NestedPromptLevel 自动变量的详细信息，请参阅
      about_Automatic_Variables。

  自定义提示符

      若要自定义提示符，请编写新的 Prompt 函数。该函数不受保护，因此可以覆盖它。

      若要编写 prompt 函数，请键入以下内容：

      function prompt { }

      然后在大括号内输入创建提示符的命令或字符串。

      例如，下面的提示符包含计算机名：

      function prompt {"PS [$env:COMPUTERNAME]> "}

      在 Server01 计算机上，提示符与下面类似：

      PS [Server01] >

      下面的 prompt 函数包含当前日期和时间：

      function prompt {"$(get-date)> "}

      该提示符与下面类似：

      01/01/2008 17:49:47>

      您还可以修改默认 Prompt 函数：

         function prompt
          {
              $(if (test-path variable:/PSDebugContext) { '[DBG]: ' }

              else { '' }) + "$(get-date)" `

              + $(if ($nestedpromptlevel -ge 1) { '>>' }) + '> '
          }

      例如，下面修改过的 Prompt 函数在用户使用"以管理员身份运行"选项打开 Windows PowerShell 时，将
      "[ADMIN]:"添加到内置 Windows PowerShell 提示符中：

          function prompt
          {
              $identity = [Security.Principal.WindowsIdentity]::GetCurrent()
              $principal = [Security.Principal.WindowsPrincipal] $identity

              $(if (test-path variable:/PSDebugContext) { '[DBG]: ' }

              elseif($principal.IsInRole([Security.Principal.WindowsBuiltInRole] "Administrator"))
                  { "[ADMIN]: " }

              else { '' }) + 'PS ' + $(Get-Location) + $(if ($nestedpromptlevel -ge 1) { '>>' }) + '> '
          }

      当您使用"以管理员身份运行"选项启动 Windows PowerShell 时，将出现与下面类似的提示符：

      [ADMIN]: PS C:\ps-test>

      下面的 Prompt 函数显示下一条命令的历史 ID。若要查看命令历史记录，请使用 Get-History cmdlet。

          function prompt
          {
             # The at sign creates an array in case only one history item exists.
             $history = @(get-history)
             if($history.Count -gt 0)
             {
                $lastItem = $history[$history.Count - 1]
                $lastId = $lastItem.Id
             }

             $nextCommand = $lastId + 1
             $currentDirectory = get-location
             "PS: $nextCommand $currentDirectory >"
          }

      下面的提示符使用 Write-Host 和 Get-Random cmdlet 来创建随机更改颜色的提示符。由于 Write-
      Host 写入当前主机应用程序，但是不返回对象，所以此函数包含 Return 语句。如果没有 Return 语句，
      Windows PowerShell 使用默认提示符"PS>"。

         function prompt
          {
              $color = get-random -min 1 -max 16
              write-host ("PS " + $(get-location) +">") -nonewline -foregroundcolor $color
              return " "
          }

  保存提示符

      与任何其他函数一样，Prompt 函数只在当前会话中有效。若要保存 Prompt 函数以用于将来的会话，请将该函
      数添加到 Windows PowerShell 配置文件中。有关配置文件的详细信息，请参阅 about_Profiles。

另请参阅
    Get-Location
    Enter-PSSession
    Get-History
    Get-Random
    Write-Host
    about_Profiles
    about_Functions
    about_Scopes
    about_Debuggers
    about_Automatic_Variables


about_Properties

主题
    about_Properties

简短说明
    描述如何在 Windows PowerShell 中使用对象属性。

详细说明
    Windows PowerShell 使用结构化的信息集合（称为对象）来表示数据存储中的项或计算机的状态。
    通常情况下，您使用属于 Microsoft .NET Framework 的对象，但是您也可以在 Windows PowerShell 中
    创建自定义对象。

    项与其对象之间的关联非常紧密。当您更改对象时，您是在更改对象所表示的项。例如，当您在 Windows
    PowerShell 中获取文件时，您得到的并不是实际文件。
    您获得的是表示该文件的 FileInfo 对象。当您更改 FileInfo 对象时，文件将随之更改。

    大多数对象都有属性。属性是与对象关联的数据。这些数据用于描述对象。例如，FileInfo 对象有名为 Length
    的属性，该属性描述此对象所表示的文件的大小。

  对象属性

     若要列出某个对象的属性，请使用 Get-Member cmdlet。例如，若要获取 FileInfo 对象的属性，请使用
     Get-ChildItem cmdlet 获取表示文件的 FileInfo 对象。然后，使用管道运算符 (|) 将 FileInfo 对象
     发送给 Get-Member。下面的命令获取 PowerShell.exe 文件，并将其发送给 Get-Member。$Pshome 自动
     变量包含 Windows PowerShell 安装目录的路径。

         get-childitem $pshome\powershell.exe |get-member

     该命令的输出列出 FileInfo 对象的成员。成员包括属性和方法。当在 Windows PowerShell 中工作时，您
     可以访问对象的所有成员。

     若只获取对象的属性而不获取其方法，请使用 Get-Member cmdlet 的 MemberType 参数，并将其赋值为
     "property"，如下面的示例所示。

         get-childitem $pshome\powershell.exe | get-member
         -membertype property

            TypeName: System.IO.FileInfo

         Name              MemberType Definition
         ----              ---------- ----------
         Attributes        Property   System.IO.FileAttributes Attributes {get;set;}
         CreationTime      Property   System.DateTime CreationTime {get;set;}
         CreationTimeUtc   Property   System.DateTime CreationTimeUtc {get;set;}
         Directory         Property   System.IO.DirectoryInfo Directory {get;}
         DirectoryName     Property   System.String DirectoryName {get;}
         Exists            Property   System.Boolean Exists {get;}
         Extension         Property   System.String Extension {get;}
         FullName          Property   System.String FullName {get;}
         IsReadOnly        Property   System.Boolean IsReadOnly {get;set;}
         LastAccessTime    Property   System.DateTime LastAccessTime {get;set;}
         LastAccessTimeUtc Property   System.DateTime LastAccessTimeUtc {get;set;}
         LastWriteTime     Property   System.DateTime LastWriteTime {get;set;}
         LastWriteTimeUtc  Property   System.DateTime LastWriteTimeUtc {get;set;}
         Length            Property   System.Int64 Length {get;}
         Name              Property   System.String Name {get;}

     发现属性之后，可以在 Windows PowerShell 命令中使用它们。

  属性值

     虽然某一特定类型的每个对象都有相同的属性，但这些属性的值描述的对象是特定的。例如，每个 FileInfo 对
     象都有 CreationTime 属性，但是该属性的值因文件而异。

     获得对象属性值的最常见途径是使用点方法。键入对象的引用（如包含该对象的变量），或者键入可获取该对象的
     命令。然后，键入一个点 (.)，后面跟随属性名。

     例如，下面的命令显示了 PowerShell.exe 文件的 CreationTime 属性的值。Get-ChildItem 命令返回表
     示 PowerShell.exe 文件的 FileInfo 对象。该命令包含在括号中，以确保在访问任何属性之前先执行该命
     令。Get-ChildItem 命令后面是一个点，以及 CreationTime 属性的名称，如下所示：

         C:\PS> (Get-ChildItem $pshome\powershell.exe).creationtime
         Tuesday, March 18, 2008 12:07:52 AM

     还可以将对象保存在变量中，然后使用点方法获得其属性，如下例所示：

         C:\PS> $a = Get-ChildItem $pshome\powershell.exe
         C:\PS> $a.CreationTime
         Tuesday, March 18, 2008 12:07:52 AM

     还可以使用 Select-Object 和 Format-List cmdlet 显示对象的属性值。Select-Object
     和 Format-List 都有 Property 参数。可以使用 Property 参数指定一个或多个属性及其值。或者，可以
     使用通配符 (*) 表示所有属性。

     例如，下面的命令显示了 PowerShell.exe 文件所有属性的值。

         C:\PS> Get-ChildItem $pshome\powershell.exe | Format-List -property *

         PSPath            : Microsoft.PowerShell.Core\FileSystem::C:\Windows\system32\WindowsPowerShell\v1.0\powershell.exe
         PSParentPath      : Microsoft.PowerShell.Core\FileSystem::C:\Windows\system32\WindowsPowerShell\v1.0
         PSChildName       : powershell.exe
         PSDrive           : C
         PSProvider        : Microsoft.PowerShell.Core\FileSystem
         PSIsContainer     : False
         VersionInfo       : File:             C:\Windows\system32\WindowsPowerShell\v1.0\powershell.exe
                             InternalName:     POWERSHELL
                             OriginalFilename: PowerShell.EXE.MUI
                             File Version:      6.1.6570.1 (fbl_srv_powershell(nigels).070711-0102)
                             FileDescription:  PowerShell.EXE
                             Product:          Microsoft® Windows® Operating System
                             ProductVersion:   6.1.6570.1
                             Debug:            False
                             Patched:          False
                             PreRelease:       False
                             PrivateBuild:     True
                             SpecialBuild:     False
                             Language:         English (United States)

         BaseName          : powershell
         Mode              : -a---
         Name              : powershell.exe
         Length            : 160256
         DirectoryName     : C:\Windows\system32\WindowsPowerShell\v1.0
         Directory         : C:\Windows\system32\WindowsPowerShell\v1.0
         IsReadOnly        : False
         Exists            : True
         FullName          : C:\Windows\system32\WindowsPowerShell\v1.0\powershell.exe
         Extension         : .exe
         CreationTime      : 3/18/2008 12:07:52 AM
         CreationTimeUtc   : 3/18/2008 7:07:52 AM
         LastAccessTime    : 3/19/2008 8:13:58 AM
         LastAccessTimeUtc : 3/19/2008 3:13:58 PM
         LastWriteTime     : 3/18/2008 12:07:52 AM
         LastWriteTimeUtc  : 3/18/2008 7:07:52 AM
         Attributes        : Archive

另请参阅
    about_Objects
    Get-Member
    Select-Object
    Format-List


about_Providers

主题
    about_Providers

简短说明
    描述 Windows PowerShell 提供程序如何使用户能够访问在无这些提供程序时很难从命令行访问的
    数据和组件。数据以类似于文件系统驱动器的一致格式提供。

详细说明
    Windows PowerShell 提供程序是基于 Microsoft .NET Framework 的程序，它们使存储于专
    用数据存储中的数据在 Windows PowerShell 中可用，以便于您查看和管理这些数据。

    提供程序公开的数据存储在驱动器中，您可以像在硬盘驱动器上一样通过路径访问这些数据。可以使用
    提供程序支持的任何内置 cmdlet 管理提供程序驱动器中的数据。此外，可以使用专门针对这些数据设计
    的自定义 cmdlet。

    提供程序在内置 cmdlet 中添加动态参数。只有当 cmdlet 与提供程序数据一起使用时，这些参数才可用。

内置提供程序
    Windows PowerShell 包括一组内置提供程序，它们可以用于访问不同类型的数据存储。

    提供程序		驱动器		数据存储
    -----------------   ------------		------------------------------
    Alias		Alias:		Windows PowerShell 别名

    证书用于数字签名的 	Cert:		x509 证书

    EnvironmentWindows 	Env: 		环境变量

    FileSystem		* 		文件系统驱动器、目录和文件

    Function		Function:	Windows PowerShell 函数

    Registry		HKLM:, HKCU   	Windows 注册表

    Variable		Variable: 	Windows PowerShell 变量

    WS-Management       WSMan           WS-Management 配置信息

    * FileSystem 驱动器因系统而异。

    您还可以创建自己的 Windows PowerShell 提供程序，也可以安装他人开发的提供程序。若要列出会话
    中可用的提供程序，请键入：

       get-psprovider

安装和删除提供程序
    Windows PowerShell 提供程序在 Windows PowerShell 管理单元中提供给您使用，这些管理单
    元是编译为 .dll 文件的基于 .NET Framework 的程序。这些管理单元可以包含提供程序和
    cmdlet。

    在使用提供程序功能之前，必须先安装包含该提供程序的管理单元，然后将该管理单元添加到 Windows
    PowerShell 控制台。有关详细信息，请参阅 about_PsSnapins。

    不能在当前会话中卸载提供程序，但可以移除提供程序的 Windows PowerShell 管理单元。如果这样
    做，则将移除该管理单元的所有内容，包括其 cmdlet。

    若要从当前会话中移除提供程序，请使用 Remove-PsSnapin cmdlet。此 cmdlet 不会卸载提供程
    序，但它将使该提供程序在会话中不可用。

    还可以使用 Remove-PsDrive cmdlet 从当前会话中移除任何驱动器。驱动器上的数据不会受影响，
    但该驱动器在该会话中不再可用。

查看提供程序
    若要查看计算机上的 Windows PowerShell 提供程序，请键入：

    get-psprovider

    输出将列出内置的提供程序以及您添加到会话中的提供程序。

提供程序 CMDLET
    下面的 cmdlet 用于处理由任何提供程序公开的数据。可以使用相同的 cmdlet，以相同的方式来管理提
    供程序公开的不同类型的数据。在学会管理一个提供程序的数据后，就可以使用相同的过程来管理任何提
    供程序中的数据。

    例如，New-Item cmdlet 用于创建一个新项。在 FileSystem 提供程序支持的 C: 驱动器中，可
    以使用 New-Item 来创建新的文件或文件夹。在 Registry 提供程序支持的驱动器中，可以使用
    New-Item 来创建新的注册表项。在 Alias: 驱动器中，可以使用 New-Item 来创建新的别名。

    有关以下任何 cmdlet 的详细信息，请键入：

        get-help <cmdlet-name> -detailed

    CHILDITEM CMDLET
        Get-ChildItem

    CONTENT CMDLET
        Add-Content
        Clear-Content
        Get-Content
        Set-Content

    ITEM CMDLET
        Clear-Item
        Copy-Item
        Get-Item
        Invoke-Item
        Move-Item
        New-Item
        Remove-Item
        Rename-Item
        Set-Item

    ITEMPROPERTY CMDLET
        Clear-ItemProperty
        Copy-ItemProperty
        Get-ItemProperty
        Move-ItemProperty
        New-ItemProperty
        Remove-ItemProperty
        Rename-ItemProperty
        Set-ItemProperty

    LOCATION CMDLET
        Get-Location
        Pop-Location
        Push-Location
        Set-Location

    PATH CMDLET
        Join-Path
        Convert-Path
        Split-Path
        Resolve-Path
        Test-Path

    PSDRIVE CMDLET
        Get-PSDrive
        New-PSDrive
        Remove-PSDrive

    PSPROVIDER CMDLET
        Get-PSProvider

查看提供程序数据
    提供程序的主要优点是，它可以按人们所熟悉的且一致的方式来公开其数据。用于显示数据的模型是文件系统驱动器。

    若要使用提供程序所公开的数据，可以将该数据视为硬盘驱动器中的数据来对其进行查看、
    浏览和更改。因此，有关提供程序的最重要信息是它所支持的驱动器的名称。

    驱动器在 Get-PsProvider cmdlet 的默认显示中列出，但是可以使用 Get-PsDrive cmdlet 来获
    取有关该提供程序驱动器的信息。例如，若要获取 Function: 驱动器的所有属性，请键入：

    get-psdrive Function | format-list *

    可以像在文件系统驱动器中一样查看和浏览提供程序驱动器中的数据。

    若要查看提供程序驱动器的内容，请使用 Get-Item 或 Get-ChildItem cmdlet。键入
    驱动器名称，后跟一个冒号 (:)。例如，若要查看 Alias: 驱动器的内容，请键入：

        get-item alias:

    可以从一个驱动器中查看和管理任何其他驱动器中的数据。例如，若要从另一个
    驱动器查看 HKLM: 驱动器中的 HKLM\Software 注册表项，请键入：

        get-childitem hklm:\software

    若要打开驱动器，请使用 Set-Location cmdlet。请记住，指定驱动器路径
    时要包含冒号。例如，若要将位置更改为 Cert: 驱动器的根目录，请键入：

        set-location cert:

    然后，若要查看 Cert: 驱动器的内容，请键入：

    get-childitem

浏览分层数据
    可以像浏览硬盘驱动一样浏览提供程序驱动器。如果数据位于项目内的
    项目层次结构中，请使用反斜杠 (\) 来指示子项。使用下面的格式：

    drive:\location\child-location\...

    例如，若要将位置更改到 HKLM\Software 注册表项，请键入 Set-Location 命令，例如：

        set-location hklm:\software

    还可以使用位置的相对引用。点 (.) 表示当前位置。例如，如果您在 HKLM:\Software\Microsoft 注
    册表项中，并且要列出 HKLM:\Software\Micrsoft\PowerShell 项中的注册表子项，请键入以下命令：

        get-childitem .\powershell

查找动态参数
    动态参数是由提供程序添加到 cmdlet 的 cmdlet 参数。这些参数只有
    在 cmdlet 与添加它们的提供程序一起使用时才可用。

    例如，Cert: 驱动器将 CodeSigningCert 参数添加到 Get-Item 和 Get-ChildItem
    cmdlet。只有在 Cert: 启动器中使用 Get-Item 或 Get-ChildItem 时，才可以使用此参数。

    若要查看提供程序所支持的动态参数的列表，请参阅提供程序的"帮助"文件。键入：

    get-help <provider-name>

    例如：

    get-help certificate

了解提供程序
    虽然所有提供程序数据都出现在驱动器中，并且可以使用相同方法来浏览它们，
    但它们之间的相似性只有这些。提供程序所公开的数据存储多种多样，可以是
    Active Directory 位置，也可以是 Microsoft Exchange Server 邮箱。

    有关各个 Windows PowerShell 提供程序的信息，请键入：

    get-help <ProviderName>

    例如：

    get-help registry

    如需获得有关提供程序的帮助主题的列表，请键入：

    get-help * -category provider

另请参阅
    about_Locations
    about_Path_Syntax


about_PSSessions

主题
    about_PSSessions

简短说明
    介绍 Winodos PowerShell 会话 (PSSession)，并说明如何与远程计算机建立持续性连接。

详细说明
    若要在远程计算机上运行 Windows PowerShell 命令，可以使用 cmdlet 的 ComputerName
    参数，也可以创建 Windows PowerShell 会话 (PSSession)，然后在 PSSession 中运行命令。

    创建 PSSession 后，Windows PowerShell 建立与远程计算机的持续性连接。使用 PSSession
    可在远程计算机上运行一系列相关命令。在同一 PSSession 中运行的命令可共享数据（如变量值、
    别名和函数）。

    此外，还可以在本地计算机上创建 PSSession，然后在其中运行命令。本地 PSSession 使用
    Windows PowerShell 远程处理基础结构来创建和维护 PSSession。

    本主题说明如何创建、使用、获取和删除 PSSession。有关高级信息，请键入"get-help
    about_PSSession_details"。

    注意：PSSession 使用 Windows PowerShell 远程处理基础结构。
          若要使用 PSSsession，必须为本地和远程计算机配置远程处理。有关详细信息，请参阅
          about_remote_requirements。

          在 Windows Vista 以及更高版本的 Windows 上，要在本地计算机上创建 PSSession，
          在打开 Windows PowerShell 时必须启用"以管理员身份运行"选项。

 什么是会话？
    会话是 Windows PowerShell 的运行环境。
    每次打开 Windows PowerShell 都会创建一个会话，在此会话中可运行命令。您也可以向会话添加
    项目（如模块和管理单元），还可以创建项目（如变量、函数和别名）。这些项目仅在该会话中存在，
    会话结束时即会删除。

    您也可以在本地计算机或远程计算机上创建其他会话，这些会话称为“Windows PowerShell 会话”
    或“PSSession”。与默认会话一样，您可以在 PSSession 中运行命令，也可以添加和创建项目。

    不过，您可以控制您所创建的 PSSession，这一点与自动启动的会话不同。您可以获取、创建、配置
    和删除这些 PSSession，也可以在同一 PSSession 中运行多个命令。从会话中删除之前，
    PSSession 保持为打开和可用的状态。

    通常，创建 PSSession 是为了在远程计算机上运行一系列相关命令。在远程计算机上创建
    PSSession 时，Windows PowerShell 与远程计算机建立持续性连接来支持该会话。

    如果使用 Invoke-Command 或 Enter-PSSession cmdlet 的 computerName 参数运行远程命
    令或启动交互式会话，则 Windows PowerShell 在远程计算机上创建一个临时会话，并在命
    令完成或交互式会话结束时关闭该临时会话。您不能控制这些临时会话，也不能将它们用于
    多条命令或多个交互式会话。

    在 Windows PowerShell 中，“当前会话”是正在使用的会话。“当前会话”可以指任何会话，包
    括临时会话或 PSSession。

 为何使用 PSSession？
    如果需要与远程计算机进行持续性连接，则使用 PSSession。通过 PSSession，可以运行一系列共
    享数据（如变量值、函数内容或别名定义）的命令。

    无需创建 PSSession 即可运行远程命令。使用支持远程处理的 cmdlet 的 ComputerName 参
    数，可以在一台或多台计算机上运行单条命令或一系列不相关的命令。

    使用 Invoke-Expression 或 Enter-PSSession 的 ComputerName 参数时，Windows
    PowerShell 会建立一个与远程计算机的临时连接，并在命令完成时关闭该连接。该连接关闭时，您创
    建的所有数据元素都会丢失。

    其他具有 ComputerName 参数的 cmdlet（如 Get-Eventlog 和 Get-WmiObject）使用不同的
    远程处理技术收集数据。它们都不像 PSSession 那样创建持续性连接。

 如何创建 PSSession
    若要创建 PSSession，请使用 New-PSSession cmdlet。若要在远程计算机上创建 PSSession，
    请使用 New-PSSession cmdlet 的 ComputerName 参数。

    例如，以下命令在计算机 Server01 上创建一个新的 PSSession。

        new-pssession -computername Server01

    提交此命令后，New-PSSession 创建 PSSession 并返回表示 PSSession 的对象。在创建
    PSSession 时可以将该对象保存在变量中，也可以在以后使用 Get-PSSession 命令获取
    PSSession。

    例如，以下命令在计算机 Server01 上创建一个新的 PSSession，并将得到的对象保存在变量 $ps 中。

        $ps = new-pssession -computername Server01

 如何在多台计算机上创建 PSSession
    若要在多台计算机上创建 PSSession，请使用 New-PSSession cmdlet 的 ComputerName 参
    数。在以逗号分隔的列表中键入远程计算机的名称。

    例如，要在计算机 Server01、Server02 和 Server03 上创建 PSSession，请键入：

        new-PSSession -computername Server01, Server02, Server03

    New-PSSession 在每台远程计算机上创建一个 PSSession。

 如何获取 PSSession
    若要获取当前会话中创建的 PSSession，请使用 Get-PSSession cmdlet。Get-PSSession 返
    回的对象类型与 New-PSSession 返回的相同。

    以下命令获取当前会话中创建的所有 PSSession。

        get-PSSession

    PSSession 的默认显示将显示其 ID 和默认友好名称。在创建会话时可以指定备用友好名称。

        Id   Name       ComputerName    State    ConfigurationName
        ---  ----       ------------    -----    ---------------------
        1    Session1   Server01        Opened   Microsoft.PowerShell
        2    Session2   Server02        Opened   Microsoft.PowerShell
        3    Session3   Server03        Opened   Microsoft.PowerShell

    您也可以将 PSSession 保存在变量中。以下命令获取 PSSession，并将其保存在变量 $ps123 中。

        $ps123 = get-PSSession

    使用 PSSession cmdlet 时，可通过 ID 或名称，或者其实例 ID (GUID) 引用 PSSession。
    以下命令按 ID 获取 PSSession，并将其保存在变量 $ps01 中。

        $ps01 = get-PSSession -id 1

    Get-PSSession 仅获取在当前会话中创建的 PSSession。此命令不获取在其他会话中或其他计算机
    上创建的 PSSession，即使这些会话与本地计算机连接且正在本地计算机上运行命令也是如此。

 如何在 PSSession 中运行命令
    若要在一个或多个 PSSession 中运行一条命令，请使用 Invoke-Command cmdlet。使用
    Session 参数指定 PSSession，使用 ScriptBlock 参数指定命令。

    例如，若要在变量 $ps123 所保存的三个 PSSession 中分别运行 Get-Childitem ("dir") 命
    令，请键入：

        invoke-command -session $ps123 -scriptblock {get-childitem}

 如何删除 PSSession
    PSSession 使用完毕后，请使用 Remove-PSSession cmdlet 删除 PSSession 并释放
    其所用的资源。

        remove-PSSession -session $ps

        - 或 -

        remove-PSSession -id 1

    如果不删除 PSSession，则在关闭当前会话或 Windows PowerShell 之前，PSSession 保持为
    打开和可用的状态。

    您也可以使用 New-PSSession 的 TimeOut 参数设置空闲 PSSession 的到期时间。有关详细信
    息，请键入"get-help new-PSSession -full"。

 PSSession cmdlet

    New-PSSession         在本地或远程计算机上创建新的 PSSession。
    Get-PSSession         获取当前会话中的 PSSession。
    Remove-PSSession      删除当前会话中的 PSSession。
    Enter-PSSession       启动交互式会话。
    Exit-PSSession        结束交互式会话。

    有关 PSSession cmdlet 的列表，请键入：

    get-help *-PSSession

 详细信息
    有关 PSSession 的详细信息，请参阅 about_PSSession_details。

另请参阅
    about_remote
    about_remote_requirements
    New-PSSession
    Get-PSSession
    Remove-PSSession
    Enter-PSSession
    Exit-PSSession
    Invoke-Command


about_PSSession_Details

主题
    about_PSSession_Details

简短说明
    介绍有关 Windows PowerShell 会话及其在远程命令中所起作用的详细信息。

详细说明
    会话是 Windows PowerShell 的运行环境。只要打开 Windows PowerShell，就会创建一个会话，您可以在
    自己的计算机或其他计算机上创建更多会话，这些会话称为"Windows PowerShell 会话"或"PSSession"。

    与 Windows PowerShell 为您创建的会话不同，您创建的 PSSession 是由您控制和管理的。

    PSSession 在远程计算中起着重要作用。当您创建连接至远程计算机的 PSSession 时，Windows
    PowerShell 与远程计算机建立持续性连接来支持 PSSession。可以使用 PSSession 运行一系列共享数
    据的命令、函数和脚本。

    本主题介绍有关 Windows PowerShell 中的会话和 PSSession 的详细信息。有关可通过会话执行
    的任务的基本信息，请参阅 about_PSSessions。

 关于会话
    在技术上，会话是 Windows PowerShell 运行的执行环境。每个会话都包括一个
    System.Management.Automation 引擎的实例，以及一个主机程序（Windows PowerShell 在
    该程序中运行）。主机可以是常见的 Windows PowerShell 控制台、其他运行命令（如 Cmd.exe）
    的程序，或为 Windows PowerShell 生成的主机程序（如 Windows PowerShell 集成脚本环境 (ISE)）。从
    Windows 的角度看，会话是目标计算机上的 Windows 进程。

    每个会话都是独立配置的，它包括自己的属性、执行策略和配置文件。在会话生存期内，
    会一直保存会话创建时所处的环境，即使您更改计算机上的环境也是如此。所有会话
    （包括在脚本中创建的会话）都是在全局作用域中创建的。

    在会话中，一次只能运行一个命令（或命令管道）。同步运行（一次一个）的第二个命令
    等待（最多四分钟）第一个命令完成。异步（同时）运行第二个命令会失败。

 关于 PSSession
    每次打开 Windows PowerShell 都会创建一个会话。Windows PowerShell 创建临时会话来运行各命令。
    不过，您也可以创建由自己控制和管理的会话，这些会话称为“Windows PowerShell 会话”或
   “PSSession”。

    PSSession 对于远程命令至关重要。如果使用 Invoke-Command 或 Enter-PSSession cmdlet
    的 ComputerName 参数，Windows Powershell 将建立临时会话来运行命令，然后在命令或交互式会话完
    成时关闭该会话。

    但是，如果使用 New-PSSession 创建 PSSession，Windows PowerShell 将在远程计算机上建
    立持续性会话，在该会话中，您可以运行多个命令或交互式会话。您所创建的 PSSession 将保持为打开和
    可用的状态，直至您将它删除或关闭创建该会话时所在的会话为止。

    在远程计算机上创建 PSSession 时，系统在该远程计算机上创建一个 PowerShell 进程，并建立
    从本地计算机到远程计算机上的进程之间的连接。在本地计算机上创建 PSSession 后，本地计算机上
    将创建新进程和连接。

 何时需要 PSSession？
    Invoke-Command 和 Enter-PSSession cmdlet 具有 ComputerName 和 Session 这两个参数。可以
    使用其中任何一个运行远程命令。

    使用 ComputerName 参数可在一台或多台计算机上运行单条命令或一系列不相关的命令。

    若要运行共享数据的命令，需要与远程计算机建立持续性连接。这种情况下，请创建 PSSession，
    然后使用 Session 参数在 PSSession 中运行命令。

    从远程计算机获取数据的许多其他 cmdlet（如 Get-Process、Get-Service、Get-EventLog
    和 Get-WmiObject）只有 ComputerName 参数。它们使用 Windows PowerShell 远程处理之
    外的技术从远程收集数据。这些 cmdlet 没有 Session 参数，不过，可以使用 Invoke-Command
    cmdlet 在 PSSession 中运行这些命令。

 如何创建 PSSession？
    若要创建 PSSession，请使用 New-PSSession cmdlet。使用 New-PSSession 可以在本地或远程计算
    机上创建 PSSession。

 我可以在任何计算机上创建 PSSession 吗？
    若要创建连接至远程计算机的 PSSession，必须在 Windows PowerShell 中为计算机配置远程处
    理。当前用户必须是远程计算机上 Administrators 组的成员，或者必须能够提供 Administrators 组的成员
    的凭据。有关详细信息，请参阅 about_Remote_Requirements。

 我可以查看其他人在我的计算机上创建的 PSSession 吗？
    不可以。您只能获取和管理您在当前会话中创建的 PSSession。您无法看到其他人创建的 PSSession，
    即使这些 PSSession 在本地计算机上运行命令也是如此。

 我可以在 PSSession 中运行后台作业吗？
    可以。后台作业是在后台异步运行而不与当前会话交互的命令。提交命令来启动作业时，
    命令返回一个作业对象，但该作业在后台继续运行，直至完成。

    若要在本地计算机上启动后台作业，请使用 Start-Job 命令。可以在临时连接（通过使用
    ComputerName 参数）或 PSSession（通过使用 Session 参数）中运行后台作业。

    若要在远程计算机上启动后台作业，请使用带有 AsJob 参数的 Invoke-Command cmdlet，或者使
    用 Invoke-Command cmdlet 在远程计算机上运行 Start-Job 命令。使用 AsJob 参数时，可以使用
    ComputerName 或 Session 参数。

    使用 Invoke-Command 运行 Start-Job 命令时，必须在 PSSession 中运行命令。如果使用
    ComputerName 参数，当作业对象返回、作业中断时，Windows PowerShell 将终止连接。

    有关详细信息，请参阅 about_jobs。

 我可以运行交互式会话吗？
    可以。若要启动与远程计算机的交互式会话，请使用 Enter-PSSession cmdlet。在交互式会话
    中，键入的命令在远程计算机上运行，就像在远程计算机上直接键入这些命令一样。

    可以在临时会话（通过使用 ComputerName 参数）或 PSSession（通过使用 Session 参数）中运
    行交互式会话。如果使用 PSSession，PSSession 会保存以前的命令的数据，还会保存交互式会话过
    程中生成的所有数据，供以后的命令使用。

    结束交互式会话时，PSSession 保持为打开和可用的状态。

    有关详细信息，请参阅 Enter-PSSession 和 Exit-PSSession。

 我是否必须删除 PSSession？
    是的。PSSession 是一个进程；即使未使用，它也是一个使用内存和其他资源的自包含环境。完成
    PSSession 后，请将其删除。如果创建了多个 PSSession，请关闭当前未使用的 PSSession，只保
    留当前使用的 PSSession。

    若要删除 PSSession，请使用 Remove-PSSession cmdlet。该 cmdlet 删除 PSSession 并释
    放 PSSession 所用的所有资源。

    此外，还可以使用 New-PSSession 的 TimeOut 参数在指定的间隔之后关闭空闲的 PSSession。
    有关详细信息，请参阅 New-PSSession。

    如果未删除 PSSession，也未设置超时，则在将其关闭、关闭其创建时所在的会话或退出 Windows
    PowerShell 之前，PSSession 保持为打开和可用的状态。不过，如果远程计算机四分钟未响应，则远
    程计算机上的 PSSession 将断开连接。（远程计算机配置为每三分钟发送一次检测信号脉冲。）

    如果将 PSSession 对象保存在变量中，然后删除 PSSession 或让它超时，则变量中仍然包含
    PSSession 对象，但 PSSession 处于非活动状态，无法使用或修复。

 是不是所有会话和 PSSession 都相似？
    不是。开发人员可以创建仅包括所选提供程序和 cmdlet 的自定义会话。如果命令可以在一个会话中
    运行，但无法在另一个会话中运行，则可能是因为会话受到了限制。

另请参阅
    about_Jobs
    about_PSSessions
    about_Remote
    about_Remote_Requirements
    Invoke-Command
    New-PSSession
    Get-PSSession
    Remove-PSSession
    Enter-PSSession
    Exit-PSSession


about_Pssnapins

主题
    about_PSSnapins

简短说明
    介绍 Windows PowerShell 管理单元，并说明如何使用和管理这些管理单元。

详细说明
    Windows PowerShell 管理单元是 Microsoft .NET Framework 程序集，其中包含 Windows
    PowerShell 提供程序和/或 cmdlet。Windows PowerShell 包含一组基本管理单元，但通过添
    加包含您创建的或从他人获得的提供程序和 cmdlet 的管理单元，可以扩展 Windows PowerShell
    的功能和价值。

    添加管理单元后，它所包含的 cmdlet 和提供程序即可在当前会话中使用，但是这些变化只影响当前
    会话。

    若要将管理单元添加到以后所有的会话中，请将它保存在 Windows PowerShell 配置文件中。此外，也
    可以使用 Export-Console cmdlet 将管理单元名称保存到控制台文件中，然后在以后的会话中使用。
    您甚至可以保存多个控制台文件，每个文件都包含不同的管理单元组。

 内置管理单元
    Windows PowerShell 包含一组 Windows PowerShell 管理单元，其中包含内置的提供程序和 cmdlet。

    Microsoft.PowerShell.Core
        包含用于管理 Windows PowerShell 基本功能的提供程序和 cmdlet。它包含 FileSystem、
        Registry、Alias、Environment、Function 和 Variable 提供程序，以及 Get-Help、Get-Command 和
        Get-History 之类的基本 cmdlet。

    Microsoft.PowerShell.Host
       包含 Windows PowerShell 主机所使用的 cmdlet，如 Start-Transcript 和 Stop-Transcript。

    Microsoft.PowerShell.Management
        包含用于管理基于 Windows 的功能的 cmdlet，如 Get-Service 和 Get-ChildItem。

    Microsoft.PowerShell.Security
        包含用于管理 Windows PowerShell 安全性的 cmdlet，如 Get-Acl、
        Get-AuthenticodeSignature 和 ConvertTo-SecureString。

    Microsoft.PowerShell.Utility
        包含用于处理对象和数据的 cmdlet，如 Get-Member、Write-Host 和 Format-List。

 查找管理单元
    若要获取计算机上的 Windows PowerShell 管理单元的列表，请键入：

    get-pssnapin

    若要获取每个 Windows PowerShell 提供程序的管理单元，请键入：

        get-psprovider | format-list name, pssnapin

    若要获取 Windows PowerShell 管理单元中的 cmdlet 的列表，请键入：

        get-command -module <snap-in_name>

 安装管理单元
    启动 Windows PowerShell 时，内置管理单元将在系统中注册，并添加到默认会话中。但是，您必须注
    册您创建的或从他人处获得的管理单元，然后将其添加到会话中。

 注册管理单元
    Windows PowerShell 管理单元是以 .NET Framework 语言编写并编译为 .dll 文件的程序。若
    要使用管理单元中的提供程序和 cmdlet，必须先注册该管理单元（将其添加到注册表）。

    大多数管理单元都包含注册 .dll 文件的安装程序（.exe 或 .msi 文件）。不过，如果收到 .dll 文件
    形式的管理单元，则可以在系统中注册。有关详细信息，请参阅 MSDN (Microsoft Developer
    Network) 库中的"如何注册 Cmdlet、提供程序和主机应用程序"，地址为：
    http://go.microsoft.com/fwlink/?LinkID=143619。

    若要获取系统中所有已注册的管理单元，或验证某个管理单元是否已注册，请键入：

    get-pssnapin -registered

 将管理单元添加到当前会话
    若要将已注册的管理单元添加到当前会话，请使用 Add-PsSnapin cmdlet。例如，若要将
    Microsoft SQL Server 管理单元添加到会话，请键入：

    add-pssnapin sql

    命令完成后，该管理单元中的提供程序和 cmdlet 将在会话中可用。但是，除非保存它们，否则它们
    只在当前会话中可用。

 保存管理单元
    若要在以后的 Windows PowerShell 会话中使用某个管理单元，请将 Add-PsSnapin 命令添加到
    Windows PowerShell 配置文件。或者，将管理单元名称导出到控制台文件。

    如果将 Add-PSSnapin 命令添加到配置文件，那么它将在以后的所有 Windows PowerShell 会话
    中可用。如果将会话中的管理单元名称导出，那么可以在需要这些管理单元时才使用导出文件。

    若要将 Add-PsSnapin 命令添加到 Windows PowerShell 配置文件，请打开配置文件，粘贴或键
    入命令，然后保存配置文件。
    有关详细信息，请参阅 about_Profiles。

    若要将会话中的管理单元保存在控制台文件 (.psc1) 中，请使用 Export-Console cmdlet。例
    如，若要将当前会话配置中的管理单元保存到当前目录中的 NewConsole.psc1 文件，请键入：

    export-console NewConsole

    有关详细信息，请参阅 Export-Console。

 使用控制台文件打开 WINDOWS POWERSHELL 要使用包含管理单元的控制台文件，请从 Cmd.exe 中或其
 他 Windows PowerShell 会话中的命令提示符下启动 Windows PowerShell (Powershell.exe)。
 使用 PsConsoleFile 参数指定包含管理单元的控制台文件。例如，下面的命令
 使用 NewConsole.psc1 控制台文件启动 Windows PowerShell：

    powershell.exe -psconsolefile NewConsole.psc1

    管理单元中的提供程序和 cmdlet 现在可在会话中使用。

 删除管理单元
    若要从当前会话中移除 Windows PowerShell 管理单元，请使用 Remove-PsSnapin cmdlet。
    例如，若要从当前会话中移除 SQL Server 管理单元，请键入：

    remove-pssnapin sql

    此 cmdlet 从会话中移除管理单元。该管理单元仍为已加载状态，但它所支持的提供程序和 cmdlet 不
    再可用。

另请参阅
    Add-PsSnapin
    Get-PsSnapin
    Remove-PsSnapin
    Export-Console
    Get-Command
    about_Profiles


about_Quoting_Rules

主题
    about_Quoting_Rules

简短说明
    介绍单引号和双引号在 Windows PowerShell 中的使用规则。

详细说明
    引号用于指定文本字符串。可以将字符串括在单引号 (') 或双引号 (") 中。

    引号还用于创建 here-string。here-string 是一个由单引号或双引号括起的字符串，在其中按照字面解释引
    号。here-string 可包括多行。here-string 中的所有行均被解释为字符串，未括在引号中的行也如此。

    在对远程计算机发出的命令中，引号定义在远程计算机上运行的命令部分。在远程会话中，
    引号还用于确定命令中的变量是先在本地计算机上进行解释，还是在远程计算机上进行解释。

 单引号和双引号字符串

      将字符串括在双引号中时（这种字符串称为"双引号字符串"），则在将字符串传递给命令进行处理之前，
      以美元符号 ($) 开头的变量名称将被替换为变量的值。

      例如：

          $i = 5
          "The value of $i is $i."

      此命令的输出是：

          The value of 5 is 5.

      并且，在双引号字符串中，将对表达式进行计算，并将结果插入到字符串中。例如：

      "The value of $(2+3) is 5."

      此命令的输出是：

      The value of 5 is 5.

      将字符串括在单引号中时（这种字符串称为"单引号字符串"），该字符串将按键入时的原样传递给命令。
      不执行任何替换。例如：

          $i = 5
          'The value of $i is $i.'

      此命令的输出是：

          The value $i is $i.

      同样，将不计算单引号字符串中的表达式。将按照字面解释这些表达式。例如：

      'The value of $(2+3) is 5.'

      此命令的输出是：

      The value of $(2+3) is 5.

      要防止在双引号字符串中换入变量值，可使用倒引号字符 (`)(ASCII 96)，该字符为 Windows
      PowerShell 转义字符。

      在以下示例中，第一个 $i 变量前面的倒引号字符将阻止 Windows PowerShell 用该变量的值替换变量名
      称。例如：

          $i = 5
          "The value of `$i is $i."

      此命令的输出是：

          The value $i is 5.

      要显示字符串中的双引号，请将整个字符串括在单引号中。例如：

          'As they say, "live and learn."'

      此命令的输出是：

          As they say, "live and learn."

      也可以将单引号字符串放入双引号字符串中。例如：

          "As they say, 'live and learn.'"

      此命令的输出是：

          As they say, 'live and learn.'

      或者，在用双引号括起的句子首尾再加一重双引号。例如：

          "As they say, ""live and learn."""

      此命令的输出是：

          As they say, "live and learn."

      要在单引号字符串中包括一个单引号，请使用两个连续的单引号。例如：

          'don''t'

      此命令的输出是：

          don't

      要强制 Windows PowerShell 按字面解释双引号，请使用倒引号字符。这将防止 Windows PowerShell
      将引号解释为字符串分隔符。例如：

          "Use a quotation mark (`") to begin a string."

      因为单引号字符串的内容将按照字面解释，所以不能在单引号字符串中使用倒引号字符强制按字面解释。

      例如，以下命令将生成一个错误，因为 Windows PowerShell 无法识别该转义字符。Windows PowerShell 会将
      第二个引号解释为字符串的结束。

      PS C:\> 'Use a quotation mark (`') to begin a string.'
          Unexpected token ')' in expression or statement.
          At line:1 char:27
          + 'Use a quotation mark (`') <<<< to begin a string.'

 单引号和双引号 Here-String

      here-string 的引号使用规则略有不同。

      here-string 是一个由单引号或双引号括起的字符串，在其中按照字面解释引号。here-string 可包括多
      行。here-string 中的所有行均被解释为字符串，未括在引号中的行也如此。

      类似于常规字符串，双引号 here-string 中的变量将使用变量值替换。在单引号 here-string 中，
      将不使用变量值替换变量。

      here-string 可用于任意文本，但对下列几种文本尤其有用：

          - 包含字面文本引号的文本
          - 诸如 HTML 或 XML 文档文本等多行文本以及
          - 脚本或函数的帮助文本

      here-string 可以采用以下任何一种格式，其中 <Enter> 表示在按 Enter 键时添加的换行隐藏字符。

      格式 1：

      @"<Enter>
          <string> [string] ...<Enter>
          "@

      格式 2：

      @'<Enter>
          <string> [string] ...<Enter>
          '@

      在每种格式中，结束引号都必须是行中的第一个字符。

      here-string 包括两个隐藏字符之间的所有文本。
      在 here-string 中，所有引号均按照字面解释。
      例如：

      @"
      For help, type "get-help"
      "@

      此命令的输出是：

      For help, type "get-help"

      使用 here-string 可以简化在命令中对字符串的使用。例如：

      @"
          Use a quotation mark (') to begin a string.
          "@

      此命令的输出是：

          Use a quotation mark (') to begin a string.

      在单引号 here-string 中，变量将按照字面解释并严格按原样再现。例如：

          @'
      The $profile variable contains the path
          of your Windows PowerShell profile.
          '@

      此命令的输出是：

      The $profile variable contains the path
          of your Windows PowerShell profile.

      在双引号 here-string 中，变量将由变量值替换。例如：

      @"
          Even if you have not created a profile, the path of the
          profile file is:
          $profile.
          "@

      此命令的输出是：

      Even if you have not created a profile,
      the path of the profile file is:
      C:\Users\User01\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1.

      Here-string 通常用于将多行赋值给一个变量。例如，以下 here-string 将一页 XML 内容赋值给
      $page 变量。

        $page = [XML] @"
        <command:command xmlns:maml="http://schemas.microsoft.com/maml/2004/10"
        xmlns:command="http://schemas.microsoft.com/maml/dev/command/2004/10"
        xmlns:dev="http://schemas.microsoft.com/maml/dev/2004/10">
        <command:details>
                <command:name>
                       Format-Table
            </command:name>
            <maml:description>
            <maml:para>Formats the output as a table.</maml:para>
            </maml:description>
            <command:verb>format</command:verb>
            <command:noun>table</command:noun>
            <dev:version></dev:version>
         </command:details>
        ...
        </command:command>
        "@

      Here-string 也是 ConvertFrom-StringData cmdlet 的一种方便的输入格式，该 cmdlet 用于
      将 here-string 转换为哈希表。有关详细信息，请参阅 ConvertFrom-StringData。

另请参阅
    about_Escape_Characters
    ConvertFrom-StringData


about_Redirection

主题
    about_Redirection

简短说明
    介绍如何将 Windows PowerShell 输出重定向到文本文件。

详细说明
    默认情况下，Windows PowerShell 将其命令输出发送至 Windows PowerShell 控制台。但是，
    也可以将输出重定向至一个文本文件，或将错误输出重定向至常规输出流。

    可以使用以下方法重定向输出：

        - 使用 Out-File cmdlet，该 cmdlet 将命令输出发送至一个文本文件。通常在需要使用
          Out-File cmdlet 的参数（例如 Encoding、Force、Width 或 NoClobber 参数）时
          使用该 cmdlet。

        - 使用 Tee-Object cmdlet，该 cmdlet 将命令输出发送至一个文本文件，然后将其发送至
          管道。

        - 使用 Windows PowerShell 重定向运算符。

      Windows PowerShell 重定向运算符如下。

      运算符  	说明                	      示例
      --------  ----------------------        ------------------------------
      >         将输出发送到指定文件。	      get-process > process.txt

      >>        将输出追加到指定文件的内容。  dir *.ps1 >>  scripts.txt

      2>        将错误发送到指定文件。        get-process none 2> errors.txt

      2>>       将错误追加到指定文件的内容。  get-process none 2>> save-errors.txt

      2>&1      将错误发送到成功输出流。      get-process none, powershell 2>&1

    重定向运算符的语法如下：

       <input> <operator> [<path>\]<file>

    如果指定的文件已存在，则不追加数据的重定向运算符（> 和 2>）将在不发出警告的情况下覆盖文件
    当前内容。但是，如果该文件是只读、隐藏或系统文件，则重定向将会失败。追加重定向运算符（>>
    和 2>>）不会写入只读文件，但会在系统或隐藏文件中追加内容。

    要将内容强制重定向到只读、隐藏或系统文件，请带 Force 参数使用 Out-File cmdlet。当写入
    文件时，重定向运算符使用 Unicode 编码。如果文件采用的是不同的编码，可能无法正确设置输出的
    格式。要将内容重定向到非 Unicode 文件，请带 Encoding 参数使用 Out-File cmdlet。

另请参阅
    Out-File
    Tee-Object
    about_Operators
    about_Command_Syntax
    about_Path_Syntax


about_Ref

主题
    about_Ref

简短说明
    介绍如何创建和使用引用变量类型。

详细说明
    可以使用引用变量类型来允许方法更改传递给它的变量的值。

    当 [ref] 类型与对象关联时，它将返回对该对象的引用。如果引用与方法一起使用，则方法可以引用传
    递给它的对象。如果对象在方法中发生更改，则当控制权返回给发起调用的方法时，所做更改将反映在变
    量值中。

    若要使用引用，则参数必须是引用变量。如果参数不是引用变量，则引发 InvalidArgument 异常。

    在方法调用中使用的参数必须与方法需要的类型匹配。

    示例：

        PS> function swap([ref]$a,[ref]$b)
        >> {
        >>   $a.value,$b.value = $b.value,$a.value
        >> }

        PS> $a = 1
        PS> $b = 10
        PS> $a,$b
        1
        10
        PS> swap ([ref]$a) ([ref]$b)
        PS> $a,$b
        10
        1

        PS C:\ps-test> function double
        >> {
        >>   param ([ref]$x) $x.value = $x.value * 2
        >> }

        PS C:> $number = 8
        PS C:> $number
        8
        PS C> double ([ref]$number)
        PS C> $number
        16

        变量必须是引用变量。

        PS C:\ps-test> double $number
        double : Reference type is expected in argument.
        At line:1 char:7
        + double <<<< $number

另请参阅
    about_Variables
    about_Environment_Variables
    about_Functions
    about_Script_Blocks


about_Regular_Expressions

主题
    about_Regular_Expressions

简短说明
    介绍 Windows PowerShell 中的正则表达式。

详细说明
    Windows PowerShell 支持以下正则表达式字符。

        格式	 逻辑				    示例
        -------- -------------------------------    -----------------------
        值	 与原始值中任意位置的字符严格匹配。 "book" -match "oo"

        .        与任意一个字符匹配。		    "copy" -match "c..y"

        [值]	 与方括号中至少一个字符匹配。	    "big" -match "b[iou]g"

        [范围]	 与范围内至少一个字符匹配。	    "and" -match "[a-e]nd"
         范围内的多个字符。使用连字符 (-)
         可以指定相邻字符。

        [^]      与除方括号中的字符以外的	    "and" -match "[^brt]nd"
         所有字符匹配。

        ^        与开头的字符匹配。		    "book" -match "^bo"

        $        与结尾的字符匹配。		    "book" -match "ok$"

        *        与前导字符的所有实例匹配。	    "baggy" -match "g*"

        ?        与前导字符的一个实例匹配。	    "baggy" -match "g?"

        \        与后面作为转义字符的字符匹配。	    "Try$" -match "Try\$"

    Windows PowerShell 支持 Microsoft .NET Framework 正则表达式中可用的字符类。

        格式	  逻辑				          示例
        --------  -------------------------------         -----------------------
        \p{name}  与 {name} 所指定的命名字符类中的        "abcd defg" -match "\p{Ll}+"
          任意字符匹配。支持的名称包括
              Unicode 组和块范围，例如 Ll、Nd、
           Z、IsGreek 和 IsBoxDrawing。

        \P{name} 与未包括在 {name} 中指定的组和	          1234 -match "\P{Ll}+"
         块范围中的文本匹配。

        \w	与任意单词字符匹配。相当于 Unicode        "abcd defg" -match "\w+"
        字符类别 [\p{Ll}\p{Lu}\p{Lt}\p{Lo}        （这与 abcd 匹配）
        \p{Nd}\p{Pc}]。如果通过 ECMAScript
               选项指定符合 ECMAScript 的行为，
        则 \w 相当于 [a-zA-Z_0-9]。

        \W	与任意非单词字符匹配。相当于 Unicode      "abcd defg" -match "\W+"
        类别 [^\p{Ll}\p{Lu}\p{Lt}	          （这与空格匹配）
        \p{Lo}\p{Nd}\p{Pc}]。

        \s	与任意空格字符匹配。相当于 Unicode        "abcd defg" -match "\s+"
        字符类别 [\f\n\r\t\v\x85\p{Z}]。

        \S	与任意非空格字符匹配。相当于 Unicode      "abcd defg" -match "\S+"
        字符类别 [^\f\n\r\t\v\x85\p{Z}]。

        \d	与任意十进制数匹配。相当于用于 Unicode    12345 -match "\d+"
        的 \p{Nd} 和用于非 Unicode 行为的 [0-9]。

        \D	与任意非数字匹配。相当于用于 Unicode 	  "abcd" -match "\D+"
        的 \P{Nd} 和用于非 Unicode 行为的 [^0-9]。

    Windows PowerShell 支持 .NET Framework 正则表达式中可用的限定符。以下是限定符的一些
    示例。

        格式   	 逻辑                             示例
        -------- -------------------------------  -----------------------
        *        指定零或多个匹配项； 例如 \w*    "abc" -match "\w*"
         或 (abc)*。相当于 {0,}。

        +        与前导字符的重复实例匹配。	  "xyxyxy" -match "xy+"

        ?        指定零或一个匹配项；例如 \w?     "abc" -match "\w?"
         或 (abc)?。相当于 {0,1}。

        {n}	 严格指定 n 个匹配项；		  "abc" -match "\w{2}"
         例如 (pizza){2}。

        {n,}	 指定至少 n 个匹配项；		  "abc" -match "\w{2,}"
         例如 (abc){2,}。

        {n,m}	 指定至少 n 个但不		  "abc" -match "\w{2,3}"
         超过 m 个匹配项。

    上表中显示的所有比较的计算结果为 true。

    请注意，用于正则表达式的转义符反斜杠 (\) 不同于 Windows PowerShell 的转义符。Windows
    PowerShell 的转义符为倒引号字符 (`) (ASCII 96)。

    有关详细信息，请参阅 Microsoft Developer Network (MSDN) 库中的"正则表达式语言元素"
    主题，网址为 http://go.microsoft.com/fwlink/?LinkId=133231。

另请参阅
    about_Comparison_Operators
    about_Operators


about_Remote

主题
    about_Remote

简短说明
    说明如何在 Windows PowerShell 中运行远程命令。

详细说明
    可以使用临时或持续性连接在单台计算机或多台计算机上运行远程命令。也可启动与单台远程计算机的交互式会话。

    本主题提供了一系列示例，以说明如何运行不同类型的远程命令。在尝试这些基本命令之后，请阅读介绍在
    这些命令中使用的每个 cmdlet 的帮助主题。这些主题提供了相关详细信息，并说明了如何修改命令以满
    足您的需要。

    注意：若要使用 Windows PowerShell 远程处理，必须为本地和远程计算机配置远程处理。有关详细信
    息，请参阅 about_Remote_Requirements。

 如何启动交互式会话 (ENTER-PSSESSION)

     运行远程命令的最简单方式是启动与远程计算机的交互式会话。

     启动会话时，键入的命令会在远程计算机上运行，就像直接在远程计算机上键入这些命令一样。
     在每次交互式会话中，只能连接到一台计算机。

     若要启动交互式会话，请使用 Enter-PSSession cmdlet。以下命令可启动与 Server01 计算机的交
     互式会话：

    enter-pssession server01

     命令提示符会更改以指示已连接到 Server01 计算机。

    Server01\PS>

     现在，您可以在 Server01 计算机上键入命令。

     若要终止交互式会话，请键入：

    exit-pssession

     有关详细信息，请参阅 Enter-PSSession。

 如何使用具有 ComputerName 参数的 cmdlet 获取远程数据

    有几个 cmdlet 具有 ComputerName 参数，您可通过该参数从远程计算机获取对象。

    由于这些 cmdlet 不使用基于 WS 管理的 Windows PowerShell 远程功能，因此可在任何运行 Windows
    PowerShell 的计算机上使用这些 cmdlet 的 ComputerName 参数。
    无需为这些计算机配置 Windows PowerShell 远程处理，而且这些计算机也不一定要满足远程处理的系
    统要求。

    以下 cmdlet 具有 ComputerName 参数：

        Clear-EventLog    Limit-EventLog
        Get-Counter       New-EventLog
        Get-EventLog      Remove-EventLog
        Get-HotFix        Restart-Computer
        Get-Process       Show-EventLog
        Get-Service       Show-Service
        Get-WinEvent      Stop-Computer
        Get-WmiObject     Write-EventLog

    例如，以下命令可以获取 Server01 远程计算机上的服务：

    get-service -computername server01

    通常，不经过特殊配置即可支持远程功能的 cmdlet 都具有 ComputerName 参数，
    而没有 Session 参数。要在您的会话中查找这些 cmdlet，请键入：

       get-command | where { $_.parameters.keys -contains "ComputerName" -and $_.parameters.keys -notcontains "Session"}

 如何运行远程命令

    若要在远程计算机上运行其他命令，请使用 Invoke-Command cmdlet。

    若要运行单个命令或几个不相关的命令，请使用 Invoke-Command 的 ComputerName 参数来指定远程
    计算机。请使用 ScriptBlock 参数来指定命令。

    例如，以下命令在 Server01 计算机上运行 Get-Culture 命令。

    invoke-command -computername Server01 -scriptblock {get-culture}

    ComputerName 参数适用于在一台或多台计算机上运行单个命令或多个不相关命令的情况。
    若要建立与远程计算机的持续性连接，请使用 Session 参数。

 如何创建持续性连接 (PSSESSION)

    使用 Invoke-Command cmdlet 的 ComputerName 参数时，Windows PowerShell 将只为该命令
    建立连接。然后，当该命令完成后，Windows PowerShell 会关闭该连接。在该命令中定义的所有变量或
    函数都将丢失。

    若要创建与远程计算机的持续性连接，请使用 New-PSSession cmdlet。例如，以下命令在 Server01
    和 Server02 计算机上创建 PSSession，然后将 PSSession 保存在 $s 变量中。

    $s = new-pssession -computername Server01, Server02

 如何在 PSSession 中运行命令

    通过 PSSession 可以运行一系列共享数据（如函数、别名和变量值）的远程命令。
    若要在 PSSession 中运行命令，请使用 Invoke-Command cmdlet 的 Session 参数。

    例如，以下命令使用 Invoke-Command cmdlet 在 Server01 和 Server02 计算机上的
    PSSession 中运行 Get-Process 命令。该命令将进程保存在每个 PSSession 的 $p 变量中。

        invoke-command -session $s -scriptblock {$p = get-process}

    由于 PSSession 使用持续性连接，因此可在使用 $p 变量的同一个 PSSession 中运行其他命令。
    以下命令对保存在 $p 中的进程数量进行计数。

        invoke-command -session $s -scriptblock {$p.count}

 如何在多台计算机上运行远程命令

    若要在多台计算机上运行某个远程命令，请在 Invoke-Command 的 ComputerName 参数值中键入所有
    计算机名称。请使用逗号将命令分隔开。

    例如，以下命令在三台计算机上运行 Get-Culture 命令：

    invoke-command -computername S1, S2, S3 -scriptblock {get-culture}

    还可在多个 PSSession 中运行某个命令。以下命令在 Server01、Server02 和 Server03 计算机
    上创建 PSSession，然后在每个 PSSession 中运行 Get-Culture 命令。

        $s = new-pssession -computername S1, S2, S3
    invoke-command -session $s -scriptblock {get-culture}

    若要包括计算机的本地计算机列表，请键入本地计算机的名称，并键入一个圆点 (.)，或键入
    "localhost"。

    invoke-command -computername S1, S2, S3, localhost -scriptblock {get-culture}

 如何在远程计算机上运行脚本

    若要在远程计算机上运行本地脚本，请使用 Invoke-Command 的 FilePath 参数。

    例如，以下命令在 S1 和 S2 计算机上运行 Sample.ps1 脚本：

        invoke-command -computername S1, S2 -filepath C:\Test\Sample.ps1

    脚本的结果将返回到本地计算机。无需复制任何文件。

 如何停止远程命令

   若要中断命令，请按 Ctrl+C。中断请求将传递给远程计算机，在该计算机上终止远程命令。

有关详细信息

    -- 有关远程处理的系统要求的信息，请参阅 about_Remote_Requirements。

    -- 有关远程输出格式设置的帮助，请参阅 about_Remote_Output。

    -- 有关远程处理的工作方式、远程数据管理方法、特殊配置、安全问题和其他常见问题的信息，
       请参阅 about_Remote_FAQ。

    -- 有关解决远程处理错误的帮助，请参阅 about_Remote_Troubleshooting。

    -- 有关 PSSession 和持续性连接的信息，请参阅 about_PSSessions。

    -- 有关 Windows PowerShell 后台作业的信息，请参阅 about_Jobs。

关键字
    about_Remoting

另请参阅
    about_PSSessions
    about_Remote_Requirements
    about_Remote_FAQ
    about_Remote_TroubleShooting
    Enter-PSSession
    Invoke-Command
    New-PSSession


about_Remote_FAQ

主题
    about_Remote_FAQ

简短说明
    包括有关在 Windows PowerShell 中运行远程命令的问题和解答。

详细说明
   远程工作时，您会在一台计算机（称为"本地计算机"）上的 Windows PowerShell 中键入命令，而在另一台计
   算机（称为"远程计算机"）上运行这些命令。远程工作的体验应尽可能地接近于直接在远程计算机上工作的体验。

    注意：若要使用 Windows PowerShell 远程处理，必须为远程计算机配置远程处理。有关详细信息，请参阅
    about_Remote_Requirements。

 两台计算机都必须安装 Windows PowerShell 吗？

   是的。若要进行远程工作，本地和远程计算机都必须安装 Windows PowerShell、Microsoft .NET Framework 2.0
   以及 Web Services for Management (WS-Management) 协议。执行特定命令所需的所有文件和其他资源必须
   位于远程计算机上。

   您必须具有连接到远程计算机的权限和运行 Windows PowerShell 的权限，以及访问远程计算机上的数据存储
   （例如文件和文件夹）和注册表的权限。

   有关详细信息，请参阅 about_Remote_Requirements。

 远程处理如何工作？

   提交远程命令时，命令通过网络传输到远程计算机上的 Windows PowerShell 引擎，并在远程计算机上的
   Windows PowerShell 客户端中运行。
   命令的结果将发送回本地计算机，并在本地计算机上的 Windows PowerShell 会话中显示。

   为了传输命令和接收输出，Windows PowerShell 需要使用 WS-Management 协议。有关 WS-Management 协
   议的信息，请参阅 MSDN (Microsoft Developer Network) Library 中的"WS-Management
协议"，网址为 http://go.microsoft.com/fwlink/?LinkId=144634。

 Windows PowerShell 远程处理安全吗？

    当您连接到远程计算机时，系统会使用本地计算机上的用户名和密码凭据或您在命令中提供的凭据
    使您登录到远程计算机。凭据和其他传输内容是加密的。

    若要添加其他保护，可将远程计算机配置为使用安全套接字层 (SSL) 来侦听 Windows 远程管理 (WinRM) 请
    求，而不是使用 HTTP 来侦听。然后，用户在建立连接时可以使用 Invoke-Command、New-PSSession 和
    Enter-PSSession cmdlet 的 UseSSL 参数。此选项使用更加安全的 HTTPS 通道而不是 HTTP。

 所有的远程命令都需要 Windows PowerShell 远程处理吗？

   不是。有几个 cmdlet 具有 ComputerName 参数，您可通过该参数从远程计算机获取对象。

   这些 cmdlet 不使用 Windows PowerShell 远程处理。因此，即使没有为计算机配置 Windows PowerShell
   远程处理，或者计算机不符合 Windows PowerShell 远程处理的要求，您也可在任何运行 Windows
   PowerShell 的计算机上使用这些 cmdlet。

   这些 cmdlet 包括以下 cmdlet：

       Get-Process
       Get-Service
       Get-WinEvent
       Get-EventLog
       Get-WmiObject
       Test-Connection

   若要查找具有 ComputerName 参数的所有 cmdlet，请键入：

        get-help * -parameter ComputerName

   若要确定特定 cmdlet 的 ComputerName 参数是否需要 Windows PowerShell 远程处理，请参阅参数说明。
   若要显示参数说明，请键入：

    get-help <cmdlet-name> -parameter ComputerName

   例如：

        get-help get-process -parameter Computername

   对于所有其他命令，请使用 Invoke-Command cmdlet。

 如何在远程计算机上运行命令？

   若要在远程计算机上运行命令，请使用 Invoke-Command cmdlet。

   用大括号 ({}) 将命令括起来以形成脚本块。请使用 Invoke-Command 的 ScriptBlock 参数来指定命令。

   可以使用 Invoke-Command 的 ComputerName 参数指定远程计算机。也可以创建与远程计算机的持续性连接
   （一个会话），然后使用 Invoke-Command 的 Session 参数在会话中运行命令。

   例如，以下命令远程运行 Get-Process 命令。

      invoke-command -computername Server01, Server02 -scriptblock {get-process}

        - 或 -

      invoke-command -session $s -scriptblock {get-process}

   若要中断远程命令，请按 Ctrl+C。中断请求将传递给远程计算机，在该计算机上终止远程命令。

   有关远程命令的详细信息，请参阅 about_Remote 以及有关支持远程处理的 cmdlet 的帮助主题。

 可以通过 Telnet 方式连接到远程计算机吗？

    可以使用 Enter-PSSession cmdlet 启动与远程计算机的交互式会话。

    在 Windows Powershell 提示符下，键入：

    Enter-PSSession <ComputerName>

    命令提示符会更改以表明已连接到远程计算机。

        <ComputerName>\C:>

    现在，键入的命令会在远程计算机上运行，就像直接在远程计算机上键入这些命令一样。

    若要终止交互式会话，请键入：

        Exit-PSSession

    交互式会话是使用 WS-Management 协议的持续会话。它与使用 Telnet 并不相同，但提供相似的体验。

    有关详细信息，请参阅 Enter-PSSession。

 可以创建持续性连接吗？

    可以。可以通过指定远程计算机的名称、其 NetBIOS 名称或 IP 地址来运行远程命令。也可通过指定连接到远程
    计算机的 Windows PowerShell 会话 (PSSession) 来运行远程命令。

    使用 Invoke-Command 或 Enter-PSSession 的 ComputerName 参数时，Windows PowerShell 会建立
    临时连接。Windows PowerShell 仅将使用该连接运行当前命令，随后将关闭该连接。这是
    运行单个命令或多个不相关命令的非常高效的方法，即使是在很多远程计算机上运行也是如此。

    使用 New-PSSession cmdlet 创建 PSSession 时，Windows PowerShell 会为
    PSSession 建立持续性连接。然后，您即可在 PSSession 中运行多个命令，包括共享数据的命令。

    通常情况下，您创建 PSSession 的目的是运行一系列共享数据的相关命令。而在其他情况下，ComputerName
    参数创建的临时连接已经足以满足大多数命令的需求。

    有关会话的详细信息，请参阅 about_PSSessions。

 可以同时在多台计算机上运行命令吗？

   可以。Invoke-Command cmdlet 的 ComputerName 参数接受多个计算机名称，Session 参数接受多个
   PSSession。

   运行 Invoke-Command 命令时，Windows PowerShell 会在所有指定计算机上或所有指定 PSSession 中运行
   命令。

   Windows PowerShell 可以管理成百上千个并发远程连接。但是，您可以发送的远程命令的数量可能会受到计算机
   资源及其建立和维持多个网络连接的能力的限制。

   有关详细信息，请参阅 Invoke-Command 帮助主题中的示例。

 我的配置文件位于何处？

    Windows PowerShell 配置文件将不在远程会话中自动运行，因此配置文件添加的命令不在会话中。此外，
    $profile 自动变量将不在远程会话中填充。

    若要在会话中运行配置文件，请使用 Invoke-Command cmdlet。

    例如，下面的命令在 $s 中的会话中运行本地计算机上的 CurrentUserCurrentHost 配置文件。

        invoke-command -session $s -filepath $profile

    下面的命令在 $s 中的会话中运行远程计算机上的 CurrentUserCurrentHost 配置文件。由于 $profile 变
    量没有填充，因此该命令使用配置文件的显式路径。

        invoke-command -session $s {."$home\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1"}

    运行此命令后，配置文件添加到会话的命令可在 $s 中使用。

    还可使用会话配置中的启动脚本在使用该会话配置的每个远程会话中运行配置文件。

    有关 Windows PowerShell 配置文件的详细信息，请参阅 about_Profiles。有关会话配置的详细信息，
    请参阅 Register-PSSessionConfiguration。

 针对远程命令的限制功能如何起作用？

   为了帮助您管理本地计算机上的资源，Windows PowerShell 提供了一种每命令限制功能，用于限制为每个命令建
   立的并发远程连接的数量。

   默认值是 32 个并发连接，但您可以使用 cmdlet 的 ThrottleLimit 参数为特定命令设置自定义限制。

   使用限制功能时，请记住该功能应用于每个命令，而不是应用于整个会话或计算机。如果在多个会话或 PSSession
   中同时运行命令，则并发连接的数量是所有会话中的并发连接的总数。

   若要查找具有 ThrottleLimit 参数的 cmdlet，请键入：

    get-help * -parameter ThrottleLimit

 远程处理中是否存在系统特定的差异？

   在多台计算机上运行命令时，请注意远程计算机之间的差异，例如操作系统、文件系统结构和注册表方面的差异。

   如果连接到运行 Windows Vista 或 Windows Server 2003 的远程计算机上，则默认起始位置是当前用户的主
   目录，该位置存储在 %homepath% 环境变量 ($env:homepath) 和 Windows PowerShell $home 变量中。在
   Windows Vista 中，主目录通常是 C:\Users\<用户名>。在 Windows Server 2003 中，主目录通常是
   C:\Documents and Settings\<用户名>。

   如果连接到运行 Windows XP 的远程计算机上，则默认起始位置是默认用户的主目录，该位置存储在默认用户的
   %homepath% 环境变量 ($env:homepath) 中。主目录通常是 C:\Documents and Setting\Default User。

 远程命令的输出与本地输出是否有所不同？

   如果在本地使用 Windows PowerShell，您会发送和接收"活动".NET Framework 对象；"活动"对象是与实际程序
   或系统组件相关联的对象。当您调用活动对象的方法或更改其属性时，这些更改会影响实际的程序或组件。此
   外，当程序或组件的属性更改时，表示它们的对象的属性也会更改。

   但是，由于大多数活动对象无法通过网络传输，Windows PowerShell 将"序列化"在远程命令中发送的大多数对
   象，也就是说，它将每个对象转换为一系列 XML（XML 中的约束语言 [CLiXML]）数据元素以进行传输。

   当 Windows PowerShell 接收序列化对象时，它会将 XML 转换为反序列化对象类型。反序列化对象是程序或组
   件以往的属性的精确记录，但此对象不再是"活动"的，也就是说它不再与组件直接关联。此外，由于方法不再有效，
   它们会被删除。

   通常，可以像使用活动对象那样来使用反序列化对象，但必须认识到它们的局限性。此外，Invoke-Command
   cmdlet 返回的对象具有其他一些属性，可以帮助您确定命令的来源。

   在接收某些对象类型（例如 DirectoryInfo 对象和 GUID）时，会将它们重新转换为活动对象。这些对象不需要
   任何特殊的处理或格式设置。

   有关远程输出的解释和格式设置的信息，请参阅 about_Remote_Output。

 可以远程运行后台作业吗？

   可以。Windows PowerShell 后台作业是异步运行而不与会话交互的 Windows PowerShell 命令。启动后台作
   业时，命令提示符会立即返回，您可以在该作业运行的同时继续在会话中工作，即使作业运行时间延长也没关系。

   您甚至可以在其他命令正在运行时启动后台作业，因为后台作业始终在一个临时会话中异步运行。

   可在本地或远程计算机上运行后台作业。默认情况下，后台作业在本地计算机上运行。但是，可以使用 Invoke-
   Command cmdlet 的 AsJob 参数将任何远程命令作为后台作业运行。此外，还可以使用 Invoke-Command 远程
   运行 Start-Job 命令。

   有关 Windows PowerShell 中的后台作业的详细信息，请参阅 about_Jobs 和 about_Remote_Jobs。

 可以在远程计算机上运行 Windows 程序吗？

    可以使用 Windows PowerShell 远程命令在远程计算机上运行基于 Windows 的程序。例如，您可在远程计算
    机上运行 Shutdown.exe 或 Ipconfig。

    但是，不能使用 Windows PowerShell 命令打开远程计算机上的任何程序的用户界面。

    在远程计算机上启动 Windows 程序时，在程序完成或您按 Ctrl+C 以中断命令之前，命令将不会完成，
    Windows PowerShell 命令提示符也不会返回。例如，如果在远程计算机上运行 IpConfig 程序，则在
    IpConfig 完成之前命令提示符不会返回。

    如果使用远程命令启动具有用户界面的程序，则程序进程将启动，但用户界面不会显示。在您停止程序进程或按
    Ctrl+C 以中断命令并停止进程之前，Windows PowerShell 命令将不会完成，命令提示符不会返回。

    例如，如果使用 Windows PowerShell 命令在远程计算机上运行记事本，则记事本进程将在远程计算机上启动，
    但记事本的用户界面不会显示。若要中断命令并还原命令提示符，请按 Ctrl+C。

 可以限制用户能够在我的计算机上运程运行的命令吗？

    可以。每个远程会话必须使用远程计算机上的某一种会话配置。您可以管理计算机上的
    会话配置（以及对这些会话配置的权限），从而确定哪些用户可以在您的计算机上远程
    运行命令，以及他们可以运行哪些命令。

    会话配置用于配置会话的环境。可以使用实现新配置类的程序集或使用在会话中运行的脚本来定义配置。
    配置可以决定可在会话中使用的命令。此外，配置还可以包括一些保护计算机的设置，例如限制会话可在
    单个对象或命令中远程接收的数据量的设置。您还可以指定一个安全描述符，用于确定使用配置所需的权限。

    Enable-PSRemoting cmdlet 可在计算机上创建默认会话配置 Microsoft.PowerShell（在 64 位操作系统
    上为 Microsoft.PowerShell32）。Enable-PSRemoting 可为配置设置安全描述符，以便只允许计算机的
    Administrators 组的成员使用这些配置。

    可以使用会话配置 cmdlet 来编辑默认会话配置、创建新的会话配置以及更改所有会话配置的安全描述符。

    当用户使用 Invoke-Command、New-PSSession 或 Enter-PSSession cmdlet 时，他们可以使用
    ConfigurationName 参数指示用于会话的会话配置。此外，他们还可以通过更改会话中的
    $PSSessionConfigurationName 首选项变量的值，来更改其会话使用的默认配置。

    有关会话配置的详细信息，请参阅会话配置 cmdlet 的帮助。若要查找会话配置 cmdlet，请键入：

    get-command *pssessionconfiguration

 什么是扇入和扇出配置？

   最常见的涉及多台计算机的 Windows PowerShell 远程处理方案是一对多配置，在这种配置中，一台本地计算机
   （管理员的计算机）在多台远程计算机上运行 Windows PowerShell 命令。这称为"扇出"方案。

   但是，有些企业中采用多对一配置，在此种配置中，很多客户端计算机连接到一台运行 Windows PowerShell 的
   远程计算机，例如文件服务器或网亭。
   这称为"扇入"配置。

   Windows PowerShell 远程处理既支持扇出配置，也支持扇入配置。

   在扇出配置中，Windows PowerShell 使用 Web Services for Management (WS-Management)
   协议以及支持 WS-Management 的 Microsoft 实现的 WinRM 服务。当本地计算机连接到远程计算机时，
   WS-Management 会建立一个连接，并使用 Windows PowerShell 的插件在远程计算机上启动 Windows PowerShell
   主机进程 (Wsmprovhost.exe)。用户可以指定备用端口、备用会话配置和其他功能以自定义远程连接。

   为了支持"扇入"配置，Windows PowerShell 使用 Internet 信息服务 (IIS) 来承载 WS-Management、
   加载 Windows PowerShell 插件和启动 Windows PowerShell。在此种方案中，所有 Windows
   PowerShell 会话都在同一个主机进程中运行，而不是在单独进程中启动每个 Windows PowerShell 会话。

   Windows XP 或 Windows Server 2003 不支持 IIS 承载和扇入远程管理。

   在扇入配置中，用户可以指定连接 URI 和 HTTP 终结点，包括传输、计算机名称、端口和应用程序名称。IIS 将
   所有包含指定应用程序名称的请求转发给应用程序。默认值为 WS-Management，它可以承载 Windows PowerShell。

   您还可以指定身份验证机制，并禁止或允许从 HTTP 和 HTTPS 终结点进行的重定向。

 可以在单台计算机上（而不是在域中）测试远程处理吗？

    可以。即使本地计算机不在域中，也可使用 Windows PowerShell 远程处理。可以使用远程处理功能来连接到同
    一台计算机上的会话并在其上创建会话。该功能的工作方式与连接到远程计算机时相同。

    若要在工作组中的一台计算机上运行远程命令，请更改该计算机上的以下 Windows 设置。

    注意：这些设置会影响系统上的所有用户，还可导致系统更易于遭受恶意攻击。在进行这些更改时应十分谨慎。

    --  Windows XP SP2：

        使用本地安全设置 (Secpol.msc) 将"安全设置\本地策略\安全选项"下的"网络访问: 本地帐户的共享和
        安全模式"策略的设置更改为"经典"。

    --  Windows Vista：

        创建以下注册表条目，然后将其值设置为 1：
        LocalAccountTokenFilterPolicy，位于
        HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System 下

        可以使用以下 Windows PowerShell 命令添加此项：

        new-itemproperty `
        –path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System `
        –name LocalAccountTokenFilterPolicy –propertyType DWord –value 1

    --  Windows 2003：

        无需进行更改，因为"网络访问: 本地帐户的共享和安全模式"策略的默认设置为"经典"。为防止该设置已
        更改，请对其进行验证。

 可以在另一个域中的计算机上运行远程命令吗？

    可以。通常，命令可在不发生错误的情况下运行，但您可能需要使用 Invoke-Command、New-PSSession 或
    Enter-PSSession cmdlet 的 Credential 参数提供远程计算机上 Administrators 组成员的凭据。即使
    当前用户是本地和远程计算机上 Administrators 组的成员，有时也需要提供凭据。

    但是，如果远程计算机不在本地计算机信任的域中，该远程计算机可能无法对用户的凭据进行身份验证。

    若要启用身份验证，请使用以下命令将远程计算机添加到 WinRM 中的本地计算机受信任主机列表中。
    在 Windows PowerShell 命令提示符处键入命令。

        set-item WSMan:\localhost\Client\TrustedHosts -value <Remote-computer-name>

    例如，若要将 Server01 计算机添加到本地计算机上的受信任主机列表中，请在 Windows PowerShell 提示符
    处键入以下命令：

        set-item WSMan:\localhost\Client\TrustedHosts -value Server01

另请参阅
    about_Remote
    about_Profiles
    about_PSSessions
    about_Remote_Jobs
    Invoke-Command
    New-PSSession


about_Remote_Jobs

主题
    about_Remote_Jobs

简短说明
    说明如何在远程计算机上运行后台作业。

详细说明
    后台作业是异步运行而不与当前会话交互的命令。命令提示符会立即返回，您可以在作业运行的同时继续使用会话。

    默认情况下，后台作业在本地计算机上运行。但是，您可以使用多个不同过程在远程计算机上运行后台作业。

    本主题说明如何在远程计算机上运行后台作业。有关如何在本地计算机上运行后台作业的信息，请参阅
    about_Jobs。有关后台作业的详细信息，请参阅 about_Job_Details。

 远程后台作业

    可以使用三种不同方法在远程计算机上运行后台作业。

    -- 启动与远程计算机的交互式会话，并在交互式会话中启动作业。虽然所有操作都在远程计算机上执行，但这些过
       程和运行本地作业是相同的。

    -- 在远程计算机上运行将作业结果返回到本地计算机的远程作业。当您希望在本地计算机上的一个中心位置收集和
       维护后台作业的结果时，请使用此方法。

    -- 在远程计算机上运行在远程计算机上维护作业结果的后台作业。当您希望在源计算机上更加安全地维护作业数据
       时，请使用此方法。

 在交互式会话中启动后台作业

    可以启动与远程计算机的交互式会话，然后在进行该交互式会话的过程中启动后台作业。有关交互式会话的详细信
    息，请参阅 about_Remote 和 Enter-PSSession。

    在交互式会话中启动后台作业的过程与在本地计算机上启动后台作业的过程几乎相同。
    但是，所有的操作都在远程计算机上执行，而不是在本地计算机上执行。

    步骤 1：ENTER-PSSESSION

    使用 Enter-PSSession cmdlet 启动与远程计算机的交互式会话。可以使用 Enter-PSSession 的
    ComputerName 参数为交互式会话建立临时连接。也可以使用 Session 参数在 Windows PowerShell 会话
    (PSSession) 中运行交互式会话。

    以下命令在 Server01 计算机上启动交互式会话。

        C:\PS> Enter-PSSession -computername Server01

    命令提示符会更改以表明现在已连接到 Server01 计算机。

        Server01\C:>

    步骤 2：START-JOB

    若要在会话中启动后台作业，请使用 Start-Job cmdlet。

    以下命令运行获取 Server01 计算机上 Windows PowerShell 事件日志中的事件的后台作业。Start-Job
    cmdlet 返回一个表示该作业的对象。

    此命令将作业对象保存在 $job 变量中。

        Server01\C:> $job = start-job -scriptblock {get-eventlog
        "Windows PowerShell"}

    当作业运行时，可以使用交互式会话运行其他命令，包括其他后台作业。但是，
    在作业完成之前，必须使交互式会话保持打开状态。如果终止会话，作业将被中断，结果也会丢失。

    步骤 3：GET-JOB

    若要了解作业是否完成，请显示 $job 变量的值，或使用 Get-Job cmdlet 获取作业。以下命令使用 Get-Job
    cmdlet 显示作业。

        Server01\C:> get-job $job

        SessionId  Name  State      HasMoreData  Location   Command
        ---------  ----  -----      -----------  --------   -------
        1          Job1  Complete   True         localhost  get-eventlog "Windows PowerShell"

    Get-Job 输出表明作业正在"localhost"计算机上运行，因为作业在同一台计算机（在本例中为 Server01）
    上启动和运行。

    步骤 4：RECEIVE-JOB

    若要获取作业的结果，请使用 Receive-Job cmdlet。可以在交互式会话中显示结果，也可以将结果保存到远程
    计算机上的文件中。下面的命令在 $job 变量中获取作业的结果。该命令使用重定向运算符 (>) 将作业结果保存到
    Server01 计算机上的 PsLog.txt 文件中。

        Server01\C:> receive-job $job > c:\logs\PsLog.txt

    步骤 5：EXIT-PSSESSION

    若要终止交互式会话，请使用 Exit-PSSession cmdlet。命令提示符会更改以表明您返回到本地计算机上的原始
    会话中。

        Server01\C:> Exit-PSSession
        C:\PS>

    步骤 6：INVOKE-COMMAND: GET CONTENT

    若要随时查看 Server01 计算机上的 PsLog.txt 文件的内容，请启动另一个交互式会话或运行远程命令。如果
    您希望使用多个命令来调查和管理 PsLog.txt 文件中的数据，则此种类型的命令在 PSSession（持续性连接）中
    运行最好。有关 PSSession 的详细信息，请参阅 about_PSSessions。

    以下命令使用 New-PSSession cmdlet 创建连接到 Server01 计算机的 PSSession，并使用 Invoke-
    Command cmdlet 在 PSSession 中运行 Get-Content 命令以查看文件内容。

        C:\PS> $s = new-pssession -computername Server01
        C:\PS> invoke-command -session $s -scriptblock {get-content c:\logs\pslog.txt}

 启动将结果返回到本地计算机的远程作业 (ASJOB)

    若要在远程计算机上启动将命令结果返回到本地计算机的远程作业，请使用相应 cmdlet（例如 Invoke-Command
    cmdlet）的 AsJob 参数。

    使用 AsJob 参数时，即使作业在远程计算机上运行，作业对象实际上也是在本地计算机上创建。作业完成后，结果
    将返回到本地计算机。

    可以使用包含名词 Job 的 cmdlet (Job cmdlet) 管理由任何 cmdlet 创建的任何作业。很多具有 AsJob
    参数的 cmdlet 并不使用 Windows PowerShell 远程处理，因此即使在没有配置远程处理和没有达到远程处理
    要求的计算机上，也可以使用这些 cmdlet。

    步骤 1：INVOKE-COMMAND -ASJOB

    以下命令使用 Invoke-Command 的 AsJob 参数在 Server01 计算机上启动后台作业。该作业运行一个获取系
    统日志中的事件的 Get-Eventlog 命令。可以使用 JobName 参数为该作业分配显示名称。

       invoke-command -computername Server01 -scriptblock
       {get-eventlog system} -asjob

    该命令的结果类似于以下示例输出。

       SessionId   Name    State      HasMoreData     Location   Command
       ---------   ----    -----      -----------     --------   -------
       1           Job1    Running    True            Server01   get-eventlog system

    如果使用 AsJob 参数，则 Invoke-Command 会返回与 Start-Job 所返回的作业对象属于同一类型的作业对
    象。可以将该作业对象保存在变量中，也可以使用 Get-Job 命令获取作业。

    请注意，Location 属性的值表明作业在 Server01 计算机上运行。

    步骤 2：GET-JOB

    若要管理使用 Invoke-Command cmdlet 的 AsJob 参数启动的作业，请使用 Job cmdlet。由于表示远程作
    业的作业对象位于本地计算机上，因此无需运行远程命令来管理该作业。

    若要确定该作业是否完成，请使用 Get-Job 命令。以下命令获取在当前会话中启动的所有作业。

        get-job

    由于远程作业是在当前会话中启动的，因此本地 Get-Job 命令可以获取作业。该作业对象的 State
    属性说明命令已成功完成。

       SessionId   Name   State      HasMoreData     Location   Command
       ---------   ----   -----      -----------     --------   -------
       1           Job1   Completed  True            Server01   get-eventlog system

    步骤 3：RECEIVE-JOB

    若要获取作业的结果，请使用 Receive-Job cmdlet。由于作业结果会自动返回到作业对象驻留的计算机，因此可
    以使用本地 Receive-Job 命令获取结果。

    下面的命令使用 Receive-Job cmdlet 获取作业结果。它使用会话 ID 来标识该作业。此命令将作业结果保存在
    $results 变量中。您也可以将结果重定向到某个文件。

       $results = receive-job -id 1

 启动将结果保存在远程计算机上的远程作业

    若要在远程计算机上启动将命令结果保存在远程计算机上的后台作业，请使用 Invoke-Command cmdlet 在远程
    计算机上运行 Start-Job 命令。可以使用此方法在多台计算机上运行后台作业。

    远程运行 Start-Job 命令时，作业对象在远程计算机上创建，作业结果也在远程计算机上维护。
    从作业的角度来看，所有操作都是本地的。您只是在远程运行命令以在远程计算机上管理本地作业。

    步骤 1：INVOKE-COMMAND START-JOB

    请使用 Invoke-Command cmdlet 在远程计算机上运行 Start-Job 命令。

    此命令需要 PSSession（持续性连接）。如果使用 Invoke-Command 的 ComputerName 参数建立临时连接，
    则在返回作业对象时 Invoke-Command 命令将被视为完成。因此，临时连接将被关闭，作业也会被取消。

    以下命令使用 New-PSSession cmdlet 创建一个连接到 Server01 计算机的 PSSession。该命令将
    PSSession 保存在 $s 变量中。

        $s = new-pssession -computername Server01

    下一个命令使用 Invoke-Command cmdlet 在 PSSession 中运行 Start-Job
    命令。Start-Job 命令和 Get-Eventlog 命令括在大括号中。

       invoke-command -session $s -scriptblock {start-job -scriptblock {get-eventlog system}}

    结果类似于下面的示例输出。

       Id       Name    State      HasMoreData     Location   Command
       --       ----    -----      -----------     --------   -------
       2        Job2    Running    True            Localhost  get-eventlog system

    远程运行 Start-Job 命令时，Invoke-Command 会返回与该 Start-Job 所返回的作业对象属于同一类型的作
    业对象。可以将该作业对象保存在变量中，也可以使用 Get-Job 命令获取作业。

    请注意，即使作业在 Server01 计算机上运行，Location 属性的值也表明作业在本地计算机（名为
    "LocalHost"）上运行。由于作业对象在 Server01 计算机上创建，作业也在同一台计算机上运行，因此该作业
    被视为本地后台作业。

    步骤 2：INVOKE-COMMAND GET-JOB

    若要管理远程后台作业，请使用 Job cmdlet。由于作业对象位于远程计算机上，因此需要运行远程命令以获取、
    停止、等待或检索作业结果。

    若要查看作业是否完成，请使用 Invoke-Command 命令在连接到 Server01 计算机的 PSSession 中运行
    Get-Job 命令。

        invoke-command -session $s -scriptblock {get-job}

    该命令会返回一个作业对象。该作业对象的 State 属性说明命令已成功完成。

       SessionId       Name    State      HasMoreData     Location   Command
       ---------       ----    -----      -----------     --------   -------
       2               Job2    Completed  True            LocalHost   get-eventlog system

    步骤 3：INVOKE-COMMAND RECEIVE-JOB

    若要获取作业的结果，请使用 Invoke-Command cmdlet 在连接到 Server01 计算机的 PSSession 中运行
    Receive-Job 命令。

    下面的命令使用 Receive-Job cmdlet 获取作业结果。它使用会话 ID 来标识该作业。此命令将作业结果保存在
    $results 变量中。它使用 Receive-Job 的 Keep 参数将结果保存在远程计算机上的作业缓存中。

        $results = invoke-command -session $s -scriptblock {receive-job -sessionid 2 -keep}

    您也可以将结果重定向到本地或远程计算机上的某个文件。以下命令使用重定向运算符将结果保存在 Server01 计
    算机上的某个文件中。

        invoke-command -session $s -command {receive-job -sessionid 2 > c:\logs\pslog.txt}

另请参阅
    about_Jobs
    about_Job_Details
    about_Remote
    Invoke-Command
    Start-Job
    Get-Job
    Wait-Job
    Stop-Job
    Remove-Job
    New-PSSession
    Enter-PSSession
    Exit-PSSession


about_Remote_Output

主题
    about_Remote_Output

简短说明
    说明如何对远程命令的输出进行解释和格式设置。

详细说明
    在远程计算机上运行的命令的输出可能与在本地计算机上运行的相同命令的输出有些相似，
    但二者之间存在一些明显差异。

    本主题说明如何对远程计算机上运行的命令的输出进行解释、格式设置和显示。

 显示计算机名称

    使用 Invoke-Command cmdlet 在远程计算机上运行命令时，命令会返回一个对象，其中包含生成数据的计算机
    的名称。远程计算机的名称存储在 PSComputerName 属性中。

    对于很多命令，PSComputerName 在默认情况下都处于显示状态。例如，以下命令在 Server01 和 Server02
    这两台远程计算机上运行 Get-Culture 命令。下面显示的输出包括了在上面运行命令的远程计算机的名称。

        C:\PS> invoke-command -script {get-culture} -comp Server01,
        Server02

        LCID  Name    DisplayName                PSComputerName
        ----  ----    -----------                --------------
        1033  en-US   English (United States)    Server01
        1033  es-AR   Spanish (Argentina)        Server02

    可以使用 Invoke-Command 的 HideComputerName 参数隐藏 PSComputerName 属性。此参数适用于仅从一
    台远程计算机收集数据的命令。

    以下命令在 Server01 远程计算机上运行 Get-Culture 命令。它使用 HideComputerName 参数隐藏
    PSComputerName 属性和相关属性。

        C:\PS> invoke-command -scr {get-culture} -comp Server01 -HideComputerName

        LCID             Name             DisplayName
        ----             ----             -----------
        1033             en-US            English (United States)

     如果 PSComputerName 属性在默认情况下不显示，也可以显示该属性。

     例如，以下命令使用 Format-Table cmdlet 将 PSComputerName 属性添加到远程 Get-Date 命令的输出中。

        C:\PS> $dates = invoke-command -script {get-date} -computername Server01, Server02
        C:\PS> $dates | format-table DateTime, PSComputerName -auto

        DateTime                            PSComputerName
        --------                            --------------
        Monday, July 21, 2008 7:16:58 PM    Server01
        Monday, July 21, 2008 7:16:58 PM    Server02

 显示 MachineName 属性

    有几个 cmdlet（包括 Get-Process、Get-Service 和 Get-EventLog）具有 ComputerName 参数，
    该参数可获取远程计算机上的对象。这些 cmdlet 并不使用 Windows PowerShell 远程处理，
    因此即使在未配置为在 Windows PowerShell 中进行远程处理的计算机上，也可以使用这些 cmdlet。

    这些 cmdlet 返回的对象将远程计算机的名称存储在 MachineName 属性中。（这些对象不具有
    PSComputerName 属性。）

    例如，此命令获取 Server01 和 Server02 远程计算机上的 PowerShell 进程。默认显示不包括
    MachineName 属性。

        C:\PS> get-process powershell -computername server01, server02

        Handles  NPM(K)    PM(K)      WS(K) VM(M)   CPU(s)     Id ProcessName
        -------  ------    -----      ----- -----   ------     -- -----------
            920      38    97524     114504   575     9.66   2648 powershell
            194       6    24256      32384   142            3020 powershell
            352      27    63472      63520   577     3.84   4796 powershell

    可以使用 Format-Table cmdlet 显示进程对象的 MachineName 属性。

    例如，以下命令将进程保存在 $p 变量中，然后使用管道运算符 (|) 将 $p 中的进程发送给 Format-Table 命
    令。该命令使用 Format-Table 的 Property 参数将 MachineName 属性包含在显示中。

       C:\PS> $p = get-process powershell -comp Server01, Server02
        C:\PS> $P | format-table -property ID, ProcessName, MachineName -auto

        Id ProcessName MachineName
        -- ----------- -----------
        2648 powershell  Server02
        3020 powershell  Server01
        4796 powershell  Server02

    下面这个更为复杂的命令将 MachineName 属性添加到默认的进程显示中。它使用哈希表指定计算属性。幸运的
    是，您无需了解即可使用它。

    （请注意，倒引号 [`] 是继续符。）

        C:\PS> $p = get-process powershell -comp Server01, Server02

        C:\PS> $p | format-table -property Handles, `
                    @{Label="NPM(K)";Expression={[int]($_.NPM/1024)}}, `
                    @{Label="PM(K)";Expression={[int]($_.PM/1024)}}, `
                    @{Label="WS(K)";Expression={[int]($_.WS/1024)}}, `
                    @{Label="VM(M)";Expression={[int]($_.VM/1MB)}}, `
                    @{Label="CPU(s)";Expression={if ($_.CPU -ne $()){ $_.CPU.ToString("N")}}}, `
                    Id, ProcessName, MachineName -auto

        Handles NPM(K) PM(K)  WS(K) VM(M) CPU(s)   Id ProcessName MachineName
        ------- ------ -----  ----- ----- ------   -- ----------- -----------
            920     38 97560 114532   576        2648 powershell  Server02
            192      6 24132  32028   140        3020 powershell  Server01
            438     26 48436  59132   565        4796 powershell  Server02

 反序列化对象
    运行生成输出的远程命令时，命令输出会通过网络传输回本地计算机。

    由于大多数活动 Microsoft .NET Framework 对象（例如 Windows PowerShell cmdlet
    返回的对象）无法通过网络进行传输，因此要对活动对象进行"序列化"。换句话说，就是将活动对象转换为对象及
    其属性的 XML 表示形式。然后通过网络来传输基于 XML 的序列化对象。

    在本地计算机上，Windows PowerShell 接收基于 XML 的序列化对象，并对该对象进行"反序列化"，也就是
    将基于 XML 的对象转换为标准 .NET Framework 对象。

    但是，反序列化对象并非活动对象。它是对象在进行序列化时的快照，包括属性但不包括方法。可以在 Windows
    PowerShell 中使用和管理这些对象，包括通过管道传递对象、显示所选属性和设置对象的格式。

    大多数反序列化对象会自动设置格式，以便在 Types.ps1xml 或 Format.ps1xml 文件中按条目显示。但是，本
    地计算机可能没有在远程计算机上生成的所有反序列化对象的格式文件。如果对象没有设置格式，则每个对象的所有
    属性会以流列表方式显示在控制台中。

    如果对象没有自动设置格式，可以使用格式 cmdlet（例如 Format-Table 或 Format-List）设置所选属性的
    格式并显示这些属性。也可以使用 Out-GridView cmdlet 在表中显示对象。

    此外，如果在远程计算机上运行一个命令，而该命令使用了本地计算机上没有的 cmdlet，则该命令返回的对象可能
    无法正确设置格式，因为您的计算机上没有这些对象的格式文件。若要从另一台计算机获取格式数据，请使用 Get-
    FormatData 和 Export-FormatData cmdlet。

    在接收某些对象类型（例如 DirectoryInfo 对象和 GUID）时，会将它们重新转换为活动对象。这些对象不需要
    任何特殊的处理或格式设置。

 对结果进行排序
    cmdlet 的 ComputerName 参数中的计算机名称的顺序决定了 Windows PowerShell 连接到远程计算机的顺
    序。但是，结果的显示顺序是本地计算机接收这些结果的顺序，可能与上述顺序不同。

    若要更改结果的顺序，请使用 Sort-Object cmdlet。可以按 PSComputerName 或 MachineName 属性进行
    排序。也可以按对象的另一个属性进行排序，使得来自不同计算机的结果是交错的。

另请参阅
    about_Remote
    Invoke-Command
    Get-Process
    Get-Service
    Get-WmiObject
    Get-Event
    Format-Table
    Select-Object
    Out-GridView


about_Remote_Requirements

主题
    about_Remote_Requirements

简短说明
    介绍在 Windows PowerShell 中运行远程命令的系统要求和配置要求。

详细说明
    本主题介绍在 Windows PowerShell 中建立远程连接和运行远程命令的系统要求、用户要求和资源
    要求。它还提供关于配置远程操作的说明。

    注意：很多 cmdlet（包括 Get-Service、Get-Process、Get-WMIObject、Get-EventLog 和
          Get-WinEvent cmdlet）通过使用 Microsoft .NET Framework 方法检索对象来从远程计算机
          获取对象。这些 cmdlet 并不使用 Windows PowerShell 远程处理基础结构。本文档中的要求不适
          用于这些 cmdlet。

          若要查找具有 ComputerName 参数但不使用 Windows PowerShell 远程处理的
          cmdlet，请阅读 cmdlet 的 ComputerName 参数说明。

 系统要求

    本地和远程计算机必须安装：

        --  Windows PowerShell 2.0 或更高版本

        --  Microsoft .NET Framework 2.0 或更高版本

        --  Windows 远程管理 2.0

    若要查找已安装的 Windows PowerShell 版本的版本号，请使用 $PSVersionTable 自动变量。
    $PSVersionTable.Version.Major 属性的值必须等于或大于 2。

    Windows 远程管理 2.0 包括在 Windows 7 和 Windows Server 2008 R2 中。包括 Windows
    PowerShell 的 Windows 早期版本的集成安装包中也包括 Windows 远程管理 2.0。

    Windows PowerShell 集成脚本环境 (ISE) 和 Out-Gridview cmdlet 需要
    Microsoft .NET Framework 3.5 Service Pack 1。Get-WinEvent cmdlet 需要
    Microsoft .NET Framework 3.5 或更高版本。这些升级并不是远程处理所必需的。

 用户权限

    若要建立远程连接和运行远程命令，当前用户必须是远程计算机上 Administrators 组的成员。或
    者，当前用户必须能够提供管理员的凭据。

 以管理员身份运行

    在 Windows Vista、Windows Server 2008 和 Windows 的更高版本中，管理员特权是进行以
    下远程处理操作所必需的：

        -- 建立与本地计算机的远程连接。这通常称为"环回"方案。
        -- 管理本地计算机上的会话配置。

        -- 查看和更改本地计算机上的 WS-Management 设置。
           这些是 WSMAN: 驱动器的 LocalHost 节点中的设置。

    若要执行这些任务，必须使用"以管理员身份运行"选项启动 Windows PowerShell，即使您是本地
    计算机的 Administrators 组的成员也是如此。

    在 Windows 7 和 Windows Server 2008 R2 中，使用"以管理员身份运行"选项启动
    Windows PowerShell：

        1. 单击"开始"，单击"所有程序"，再单击"附件"，然后单击 Windows PowerShell 文件夹。

        2. 右键单击"Windows PowerShell"，然后单击"以管理员身份运行"。

    在 Windows Vista 和 Windows Server 2008 中，使用"以管理员身份运行"选项启动
    Windows PowerShell：

        1. 单击"开始"，单击"所有程序"，再单击"附件"，然后单击 Windows PowerShell 文件夹。

        2. 右键单击"Windows PowerShell"，然后单击"以管理员身份运行"。

    Windows PowerShell 的其他 Windows 资源管理器条目中也提供了"以管理员身份运行"选项，
    包括快捷方式。只需要右键单击该项目，然后单击"以管理员身份运行"。

    从 Cmd.exe 等其他程序启动 Windows PowerShell 时，请使用"以管理员身份运行"选项启动该程序。

 如何为进行远程处理而配置计算机

    WinRM 服务支持 Windows PowerShell 的远程处理功能，该服务是 Web Services for
    Management (WS-Management) 协议的 Microsoft 实现。若要使用远程处理功能，需要更改系
    统上 WS-Management 的默认配置。

    将 Windows PowerShell 配置为接收远程命令：

        1. 启动 Windows PowerShell。在 Windows Vista 和 Windows 的更高版本中，使用
           "以管理员身份运行"选项启动 Windows PowerShell。

    2. 在命令提示符处，键入：

       enable-psremoting

    通过此程序，其他计算机上的用户可以建立远程连接，并在本地计算机上运行远程命令。
    此程序还使您能够在本地计算机上创建"环回"连接。

    若要验证远程处理是否正确配置，请运行类似于以下命令的测试命令，在本地计算机上创建远程会话。

          new-pssession

    如果远程处理配置得当，该命令将在本地计算机上创建会话，并返回一个表示该会话的对象。输出应该类似于以下示例输出：

          C:\PS> new-pssession

          Id Name        ComputerName    State    ConfigurationName
          -- ----        ------------    -----    -----
          1  Session1    localhost       Opened   Microsoft.PowerShell

    如果命令失败，请参阅 about_Remote_Troubleshooting 获得帮助。

 了解策略

    远程工作时，您会使用 Windows PowerShell 的两个实例，一个位于本地计算机上，另一个位于远
    程计算机上。因此，您的工作会受到本地计算机和远程计算机上的 Windows 策略和 Windows
    PowerShell 策略的影响。

    通常，在进行连接之前和正在建立连接时，本地计算机上的策略生效。在使用连接时，远程计算机上的策略生效。

另请参阅
    about_Remote
    about_PSSessions
    Invoke-Command
    Enter-PSSession
    New-PSSession


about_Remote_Troubleshooting

主题
    about_Remote_Troubleshooting

简短说明
    说明如何解决 Windows PowerShell 中的远程操作的问题。

详细说明
    本节描述您在使用 Windows PowerShell 基于 WS-Management 技术的远程处理
    功能时可能遇到的一些问题，并提出这些问题的解决方案。

    在使用 Windows PowerShell 远程处理之前，请参阅 about_Remote
    和 about_Remote_Requirements 了解有关配置和基本用法的指南。另外，
    每个远程 cmdlet 的帮助主题（尤其是参数说明）提供了用于帮助您避免
    问题的有用信息。

    本主题的更新版本以及其他 Windows PowerShell 帮助主题可通过联机方式
    在 Microsoft TechNet Library 中找到。若要查看本帮助主题的联机版本，
    请将以下 URL 粘贴到 Internet浏览器中：

    http://go.microsoft.com/fwlink/?LinkID=135188

    注意：在 Windows Vista、Windows Server 2008 以及更高版本的 Windows 上，
    若要查看或更改 WSMan: 驱动器中关于本地计算机的设置（包括更改会话配置、
    受信任的主机、端口或侦听器），请使用"以管理员身份运行"选项
    启动 Windows PowerShell。

 权限和身份验证问题疑难解答

    本节讨论关于用户和计算机权限以及远程处理要求的远程处理问题。

    如何以管理员身份运行
    ---------------------------
        错误：访问被拒绝。您需要从提升的进程运行此 cmdlet。

    若要在本地计算机上启动远程会话，或要查看或更改 WSMan: 驱动器中关于
    本地计算机的设置（包括更改会话配置、受信任的主机、端口或侦听器），
    请使用"以管理员身份运行"选项启动 Windows PowerShell。

    使用"以管理员身份运行"选项启动 Windows PowerShell：

    -- 右键单击 Windows PowerShell（或 Windows PowerShell ISE）图标，然后
       单击"以管理员身份运行"。

    在 Windows 7 和 Windows Server 2008 R2 中，使用"以管理员身份运行"选项
    启动 Windows PowerShell。

    -- 在 Windows 任务栏中，右键单击"Windows PowerShell"图标，然后
       单击"以 admin 身份运行 Windows PowerShell"。

    注意：在 Windows Server 2008 R2 中，Windows PowerShell 图标默认固定在
    任务栏上。

    如何启用远程处理
    ----------------------
        错误：访问被拒绝
        - 或 -
        错误：到远程主机的连接被拒绝。请验证 WS-Management 服务正在远程主机上
        运行，且已配置为侦听正确端口和 HTTP URL 上的请求。

    计算机无需进行配置即可发送远程命令。但是，若要接收远程命令，
    必须为远程计算机配置远程处理。该配置包括启动 WinRM 服务、
    将 WinRM 服务的启动类型设置为"自动"、创建用于 HTTP 和 HTTPS 连接的
    侦听器，以及创建默认会话配置。

    若要配置计算机使其能接收远程命令，请使用 Enable-PSRemoting
    cmdlet。以下命令将启用所有要求的远程设置、启用会话配置并重新
    启动 WinRM 服务使更改生效。

        enable-psremoting

    若要禁止显示所有用户提示，请键入：

        enable-psremoting -force

    有关详细信息，请参阅 Enable-PSRemoting。

    如何启用企业中的远程处理
    ---------------------------------------
        错误：访问被拒绝
        - 或 -
        错误：到远程主机的连接被拒绝。请验证 WS-Management 服务正在远程主机上
        运行，且已配置为侦听正确端口和 HTTP URL 上的请求。

    若要使单台计算机接收远程 Windows PowerShell 命令并接受连接，请使用
    Enable-PSRemoting cmdlet。

    若要启用企业中多台计算机的远程处理，可以使用以下扩展选项。

    -- 若要配置用于远程处理的侦听器，请启用"允许自动配置侦听器"组策略。
       有关说明，请参阅"如何通过使用组策略启用侦听器"（如下所示）。

    -- 若要将多台计算机上 Windows 远程管理 (WinRM) 的启动类型设置为"自动"，
       请使用 Set-Service cmdlet。有关说明，请参阅"如何设置 WinRM 服务的
       启动类型"（如下所示）。

    -- 若要启用防火墙例外，请使用"Windows 防火墙：允许本地端口例外"组策略。
       有关说明，请参阅"如何通过使用组策略创建防火墙例外"（如下所示）。

    如何通过使用组策略启用侦听器
    ------------------------------------------------
        错误：访问被拒绝
        - 或 -
        错误：到远程主机的连接被拒绝。请验证 WS-Management 服务正在远程主机上
        运行，且已配置为侦听正确端口和 HTTP URL 上的请求。

    若要配置用于域中所有计算机的侦听器，请启用以下组策略路径中的"允许自动配置
    侦听器"策略：

        计算机配置\管理模板\Windows 组件\Windows 远程管理(WinRM)\WinRM 服务

    启用该策略并指定 IPv4 and IPv6 筛选器。允许使用通配符 (*)。

    如何通过使用组策略启用防火墙例外
    ----------------------------------------------------------
        错误：访问被拒绝
        - 或 -
        错误：到远程主机的连接被拒绝。请验证 WS-Management 服务正在远程主机上
        运行，且已配置为侦听正确端口和 HTTP URL 上的请求。

    若要启用域中所有计算机的防火墙例外，请启用
    以下组策略路径中的"Windows 防火墙：允许本地端口例外"
    策略：

        计算机配置\管理模板\网络\网络连接\Windows 防火墙\域配置文件

    此策略允许计算机上 Administrators 组的成员使用"控制面板"中的"Windows 防火墙"
    为 Windows 远程管理服务创建防火墙例外。

    如何设置 WinRM 服务的启动类型
    ------------------------------------------------
        错误：访问被拒绝

    Windows PowerShell 远程处理取决于 Windows 远程管理 (WinRM) 服务。
    必须运行此服务来支持远程命令。

    在 Windows Server 2003、Windows Server 2008 和 Windows Server 2008
    R2 上，Windows 远程管理 (WinRM) 服务的启动类型为
    "自动"。

    但是在 Windows XP、Windows Vista 和 Windows 7 上，WinRM 服务默认为禁用
    状态。

    若要设置远程计算机上服务的启动类型，请使用 Set-Service cmdlet。

    若要在多台计算机上运行此命令，可以创建一个包含这些计算机名称的文本
    文件或 CSV 文件。

    例如，以下命令从 Servers.txt 文件中获取一个计算机名称列表，
    然后将所有这些计算机上 WinRM 服务的启动类型设置为"自动"。

        C:\PS> $servers = get-content servers.txt

        C:\PS> set-service WinRM -computername $servers -startuptype Automatic

    若要查看结果，请对 Win32_Service 对象使用 Get-WMIObject cmdlet。
    有关详细信息，请参阅 Set-Service。

    如何重新创建默认会话配置
    --------------------------------------------------
        错误：访问被拒绝

    若要连接到本地计算机并远程运行命令，本地计算机必须包含远程命令的会话
    配置。

    使用 Enable-PSRemoting 时，它将在本地计算机上创建默认会话配置。
    当远程命令未包括 ConfigurationName 参数时，远程用户
    可使用这些会话配置。

    如果计算机上的默认配置已注销或删除，请使用 Enable-PSRemoting cmdlet
    重新创建这些配置。您可以多次使用此 cmdlet。如果某项功能已经配置，
    此 cmdlet 不会生成错误。

    如果更改了默认会话配置并想还原原来的默认会话配置，请使用
    Unregister-PSSessionConfiguration cmdlet 删除更改后的会话配置，
    然后使用 Enable-PSRemoting cmdlet 将它们还原。Enable-PSRemoting
    不会更改现有会话配置。

    注意：当 Enable-PSRemoting 还原默认会话配置时，它不会为这些配置创建显式
    安全描述符。实际上，这些配置会继承默认受保护的 RootSDDL 的安全描述符。

    若要查看 RootSDDL 安全描述符，请键入：

        get-item wsman:\localhost\Service\RootSDDL

    若要更改 RootSDDL，请在 WSMan: 驱动器中使用 Set-Item cmdlet。
    若要更改会话配置的安全描述符，请使用 Set-PSSessionConfiguration cmdlet
    并指定 SecurityDescriptorSDDL 或 ShowSecurityDescriptorUI 参数。

    有关 WSMan: 驱动器的详细信息，请参阅 WS-Management 提供程序的帮助
    主题（"get-help wsman"）。

    如何提供管理员凭据
    ----------------------------------------
        错误：访问被拒绝

    默认情况下，若要在远程计算机上创建 PSSession 或运行命令，当前用户必须是
    远程计算机上 Administrators 组的成员。即使当前用户登录到作为 Administrators
    组成员的帐户，有时也需要提供凭据。

    如果当前用户是远程计算机上 Administrators 组的成员，或可以提供
    Administrators 组某成员的凭据，请使用 New-PSSession、Enter-PSSession
    或 Invoke-Command cmdlet 的 Credential 参数进行远程连接。

    例如，以下命令提供管理员的凭据。

        Invoke-Command -ComputerName Server01 -Credential Domain01\Admin01

    有关 Credential 参数的详细信息，请参阅 New-PSSession、Enter-PSSession
    或 Invoke-Command。

    如何为非管理用户启用远程处理
    ---------------------------------------------------
        错误：访问被拒绝

    若要在远程计算机上建立 PSSession 或运行命令，用户必须有权使用远程
    计算机上的会话配置。

    默认情况下，只有计算机上 Administrators 组的成员有权使用默认会话配置。
    因此，只有 Administrators 组的成员才能远程连接到计算机。

    若要允许其他用户连接到本地计算机，请授予用户对于本地计算机上默认会话
    配置的"执行"权限。

    以下命令将打开一个属性表，您可以在其中更改本地计算机上
    Microsoft.PowerShell 默认会话配置的安全描述符。

        Set-PSSessionConfiguration Microsoft.Powershell -ShowSecurityDescriptorUI

    有关详细信息，请参阅 about_Session_Configurations。

    如何为其他域中的管理员启用远程处理
    ----------------------------------------------------------
        错误：访问被拒绝

    当另一个域中的用户是本地计算机上 Administrators 组的成员时，该用户不能
    使用管理员特权远程连接到本地计算机。默认情况下，来自其他域的远程连接
    只能通过标准用户特权令牌运行。

    但是，可以使用 LocalAccountTokenFilterPolicy 注册表条目来更改默认行为，
    允许作为 Administrators 组成员的远程用户通过管理员特权运行。

    注意：LocalAccountTokenFilterPolicy 条目会对所有受影响计算机的所有用户
          禁用用户帐户控制 (UAC) 远程限制。在更改这一策略之前，请仔细考虑
          该设置的含义。

    若要更改这一策略，请使用以下命令将 LocalAccountTokenFilterPolicy 注册表
    条目的值设置为 1。

        C:\PS> new-itemproperty -name LocalAccountTokenFilterPolicy -path `
            HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\
            Policies\System -propertyType `DWord -value 1

    如何在远程命令中使用 IP 地址
    -----------------------------------------------------
        错误：WinRM 客户端无法处理该请求。如果身份验证方案与 Kerberos
        不同，或者客户端计算机未加入到域中，则必须使用 HTTPS 传输
        或者必须将目标计算机添加到 TrustedHosts 配置设置。

    New-PSSession、Enter-PSSession 和 Invoke-Command cmdlet 的
    ComputerName 参数接受 IP 地址作为其有效值。但是，因为 Kerberos 身份
    验证不支持 IP 地址，所以每次指定 IP 地址时，都默认使用 NTLM 身份验证。

    使用 NTLM 身份验证时，需要执行以下远程处理过程。

    1. 为计算机配置 HTTPS 传输，或者将远程计算机的 IP 地址添加到本地
       计算机上的 TrustedHosts 列表中。

       有关说明，请参阅下面的"如何将计算机添加到 TrustedHosts 列表"。

    2. 在所有远程命令中使用 Credential 参数。

       即使是提交当前用户的凭据，此操作也是必需的。

    如何从基于工作组的计算机进行远程连接
    -------------------------------------------------------
        错误：WinRM 客户端无法处理该请求。如果身份验证方案与 Kerberos
        不同，或者客户端计算机未加入到域中，则必须使用 HTTPS 传输或者
        必须将目标计算机添加到 TrustedHosts 配置设置。

    当本地计算机不在域中时，需要执行以下远程处理过程。

    1. 为计算机配置 HTTPS 传输，或者将远程计算机的名称添加到本地
       计算机上的 TrustedHosts 列表中。

       有关说明，请参阅下面的"如何将计算机添加到 TrustedHosts 列表"。

    2. 验证基于工作组的计算机上是否设置了密码。如果未设置密码或密码值为空，
       则不能运行远程命令。

       若要为用户帐户设置密码，请使用"控制面板"中的"用户帐户"。

    3. 在所有远程命令中使用 Credential 参数。

       即使是提交当前用户的凭据，此操作也是必需的。

    如何将计算机添加到受信任主机列表
    -----------------------------------------------

    TrustedHosts 项可包含用逗号分隔的计算机名称、IP 地址以及完全
    限定的域名的列表。允许使用通配符。

    若要查看或更改受信任主机列表，请使用 WSMan: 驱动器。
    TrustedHost 项位于 WSMan:\localhost\Client 节点。

    只有计算机上 Administrators 组的成员有权更改计算机上的受信任主机列表。

     注意：为 TrustedHosts 项设置的值会影响计算机的所有用户。

    若要查看受信任主机列表，请使用以下命令：

        get-item wsman:\localhost\Client\TrustedHosts

    还可以使用 Set-Location cmdlet (alias = cd) 从 WSMan: 驱动器
    导航到这个位置。
    例如"cd WSMan:\localhost\Client; dir"。

    若要将所有计算机添加到受信任主机列表，请使用以下命令将 *（全部）值
    放入 ComputerName

        set-item wsman:localhost\client\trustedhosts -value *

    还可以使用通配符 (*) 将特定域中的所有计算机添加到受信任主机列表。
    例如，以下命令将 Fabrikam域中的所有计算机添加到受信任主机列表。

        set-item wsman:localhost\client\trustedhosts *.fabrikam.com

    若要将特定计算机的名称添加到受信任主机列表，请使用以下命令格式：

        set-item wsman:\localhost\Client\TrustedHosts -value <ComputerName>[,<ComputerName>]

    其中每个 <ComputerName> 值都必须具有以下格式：

        <Computer>.<Domain>.<Company>.<top-level-domain>

    例如：

        set-item wsman:\localhost\Client\TrustedHosts -value Server01.Domain01.Fabrikam.com

    若要将计算机名称添加到现有受信任主机列表，请首先将当前值保存到变量中，
    然后将该值设置到包含当前值和新值的以逗号分隔的列表中。

    例如，若要将 Server01 计算机添加到现有受信任主机列表，请使用以下命令

        $curValue = (get-item wsman:\localhost\Client\TrustedHosts).value

        set-item wsman:\localhost\Client\TrustedHosts -value "$curValue, Server01.Domain01.Fabrikam.com"

    若要将特定计算机的 IP 地址添加到受信任主机列表，请使用以下命令格式：

        set-item wsman:\localhost\Client\TrustedHosts -value <IP Address>

    例如：

        set-item wsman:\localhost\Client\TrustedHosts -value 172.16.0.0

    若要将计算机添加到远程计算机的 TrustedHosts 列表，请使用 Connect-WSMan cmdlet
    在本地计算机上的 WSMan: 驱动器中为远程计算机添加一个节点。然后使用 Set-Item
    命令添加该计算机。

    有关 Connect-WSMan cmdlet 的详细信息，请参阅 Connect-WSMan。

 计算机配置问题疑难解答
    本节讨论关于计算机、域或企业的特定配置的远程处理问题。

    如何配置备用端口上的远程处理
    --------------------------------------------
        错误：到指定远程主机的连接被拒绝。请验证 WS-Management 服务正在远程
        主机上运行，且已配置为侦听正确端口和 HTTP URL 上的请求。

    默认情况下，Windows PowerShell 远程处理使用端口 80 来进行 HTTP 传输。当用户
    未在远程命令中指定 ConnectionURI 或 Port 参数时，将使用此默认端口。

    若要更改 Windows PowerShell 使用的默认端口，请在 WSMan: 驱动器中使用
    Set-Item cmdlet 更改侦听器叶节点中的 Port 值。

    例如，以下命令将默认端口更改为 8080。

        set-item wsman:\localhost\listener\listener*\port -value 8080

    如何配置使用代理服务器的远程处理
    ---------------------------------------------
        错误：客户端无法连接到请求中指定的目标。请验证该目标上的服务是否
        正在运行以及是否正在接受请求。

    由于 Windows PowerShell 远程处理使用 HTTP 协议，因此它受 HTTP 代理设置的
    影响。在拥有代理服务器的企业中，用户无法直接访问 Windows PowerShell
    远程计算机。

    若要解决此问题，请使用远程命令中的代理设置选项。提供了以下设置：

        --  ProxyAccessType
        --  ProxyAuthentication
        --  ProxyCredential

    若要设置特定命令的这些选项，请使用以下过程：

        1. 使用 New-PSSessionOption cmdlet 的 ProxyAccessType、
           ProxyAuthentication 和 ProxyCredential 参数创建具有企业代理
           设置的会话选项对象。将该选项对象保存在变量中。

        2. 使用包含该选项对象的变量作为 New-PSSession、Enter-PSSession
           或 Invoke-Command 命令的 SessionOption 参数值。

    例如，以下命令创建一个包含代理会话选项的会话选项对象，然后使用该对象
    创建一个远程会话。

        C:\PS> $SessionOption = New-PSSessionOption -ProxyAccessType IEConfig `
                -ProxyAuthentication Negotiate -ProxyCredential Domain01\User01

        C:\PS> New-PSSession -ConnectionURI https://www.fabrikam.com

    有关 New-PSSessionOption cmdlet 的详细信息，请
    参阅 New-PSSessionOption。

    若要设置当前会话中所有远程命令的这些选项，请在 $PSSessionOption 首选项
    变量值中使用 New-PSSessionOption 创建的选项对象。有关 $PSSessionOption
    首选项变量的详细信息，请参阅 about_Preference_Variables。

    若要设置本地计算机上所有 Windows PowerShell 会话中所有远程命令的这些选项，
    请将 $PSSessionOption 首选项变量添加到 Windows PowerShell 配置文件中。
    有关 Windows PowerShell 配置文件的详细信息，请参阅 about_Profiles。

    如何在 64 位计算机上检测 32 位会话
    ---------------------------------------------------
        错误：无法将"<tool-name>"项识别为 cmdlet、函数、脚本文件或
        可运行程序的名称。请检查名称的拼写，如果包括路径，请确保
        路径正确，然后重试。

    如果远程计算机运行 64 位版本的 Windows，而远程命令使用 32 位会话
    配置（如 Microsoft.PowerShell32），则 Windows 远程管理 (WinRM) 将加载
    一个 WOW64 进程，Windows 会自动将所有对 %Windir%\System32 目录的引用
    重定向到 %windir%\SysWOW64 目录。

    因此，如果尝试使用 System32 目录中的工具，而这些工具在 SysWow64 目录中
    没有对应项（如 Defrag.exe），则无法在该目录中找到这些工具。

    若要查找会话中使用的处理器体系结构，请使用 PROCESSOR_ARCHITECTURE 环境
    变量的值。以下命令将查找 $s 变量中的会话的处理器体系结构。

        C:\PS> $s = new-pssession -computername Server01 -configurationName CustomShell

        C:\PS> invoke-command -session $s {$env:PROCESSOR_ARCHITECTURE}
        x86

    有关会话配置的详细信息，请
    参阅 about_session_configurations。

 策略和首选项问题疑难解答
    本节讨论关于本地和远程计算机上设置的策略和首选项的远程处理问题。

    如何更改 IMPORT-PSSESSION 和 IMPORT-MODULE 的执行策略
    -------------------------------------------------------------------------

        错误：Import-Module: 无法加载文件 <filename>，因为在此系统中禁止
        执行脚本。

    Import-PSSession 和 Export-PSSession cmdlet 创建包含未签名脚本文件和
    格式设置文件的模块。

    若要通过使用 Import-PSSession 或 Import-Module 导入由这些 cmdlet 创建的
    模块，则当前会话中的执行策略不能为 Restricted 或 AllSigned。有关
    Windows PowerShell 执行策略的信息，请参阅 about_Execution_Policies。

    若要在不更改本地计算机的执行策略（设置在注册表中）的情况下导入这些模块，
    请使用 Set-ExecutionPolicy 的 Scope 参数为单个进程设置限制性较弱的
    执行策略。

    例如，以下命令启动执行策略为 RemoteSigned 的进程。执行策略的更改仅影响
    当前进程，不会更改 Windows PowerShell ExecutionPolicy 注册表设置。

        set-executionpolicy -scope process -executionpolicy RemoteSigned

    还可以使用 PowerShell.exe 的 ExecutionPolicy 参数启动执行策略限制性较弱的
    单个会话。

        powershell.exe -executionpolicy RemoteSigned

    有关这些 cmdlet 的详细信息，请参阅 Import-PSSession、
    Export-PSSession 和 Import-Module。有关执行策略的详细信息，
    请参阅 about_Execution_Policies。有关 PowerShell.exe控制台
    帮助选项的详细信息，请键入"powershell.exe -?"。

    如何设置和更改配额
    ----------------------------
        错误：从远程客户端接收的总数据量超过了允许的最大值。

    可以使用配额来保护本地计算机和远程计算机的资源不被过度
    使用（无论是无意的还是恶意的）。

    基本配置中提供了以下配额。

    -- WS-Management 提供程序 (WSMan:) 提供了几种配额设置，如
       WSMan:\<ComputerName>节点中的 MaxEnvelopeSizeKB 和 MaxProviderRequests
       设置，以及 WSMan:\<ComputerName>\Service 节点中的
       MaxConcurrentOperations、MaxConcurrentOperationsPerUser
       和 MaxConnections 设置。

    -- 可以使用 New-PSSessionOption cmdlet 的
       MaximumReceivedDataSizePerCommandMB 和 MaximumReceivedObjectSizeMB
       参数以及 $PSSessionOption 首选项变量来保护本地计算机。

    -- 可以向会话配置添加限制（例如通过使用 Register-PSSessionConfiguration
       cmdlet 的 MaximumReceivedDataSizePerCommandMB 和
       MaximumReceivedObjectSizeMB 参数）来保护远程计算机。

    当配额与命令发生冲突时，Windows PowerShell 会生成错误。

    若要解决此错误，请更改远程命令以符合配额。或者，确定配额的来源，
    然后增加配额来允许完成命令。

    例如，以下命令将远程计算机上 Microsoft.PowerShell 会话配置中的对象
    大小配额从 10MB（默认值）增加为 11 MB。

       Set-PSSessionConfiguration -name microsoft.powershell `
            -MaximumReceivedObjectSizeMB 11 -Force

    有关 New-PSSsessionOption cmdlet 的详细信息，请
    参阅 New-PSSessionOption。

    有关 WS-Management 配额的详细信息，请参阅 WS-Management 提供程序的帮助
    主题（键入"get-help WSMan"）。

    如何解决超时错误
    -----------------------------
        错误：WS-Management 服务无法在 OperationTimeout 中指定的时间内完成操作。

    可以使用超时设置来保护本地计算机和远程计算机的资源不被过度使用（无论是
    无意的还是恶意的）。当在本地和远程计算机上都设置了超时设置时，
    Windows PowerShell 会使用其中最短的超时设置。

    基本配置中提供了以下超时设置。

    -- WS-Management 提供程序 (WSMan:) 提供了几种客户端和服务端超时设置，
       如 WSMan:\<ComputerName> 节点中的 MaxTimeoutms 设置，以及
       WSMan:\<ComputerName>\Service 节点中的 EnumerationTimeoutms 和
       MaxPacketRetrievalTimeSeconds 设置。

    -- 可以使用 New-PSSessionOption cmdlet 的 CancelTimeout、IdleTimeout、
       OpenTimeout 和 OperationTimeout 参数以及 $PSSessionOption 首选项
       变量来保护本地计算机。

    -- 还可以通过在会话的会话配置中以编程方式设置超时值来保护远程计算机。

    当超时值不允许完成操作时，Windows PowerShell 将终止该操作并生成错误。

    若要解决此错误，请更改命令以在超时间隔内完成命令；或确定超时限制的来源，
    并增大超时间隔来允许完成命令。

    例如，以下命令使用 New-PSSessionOption cmdlet 创建一个 OperationTimeout
    值为 4 分钟（以毫秒为单位）的会话选项对象，然后使用该会话选项对象创建
    一个远程会话。

        C:\PS> $pso = new-pssessionoption -operationtimeout 240000

        C:\PS> new-pssession -computername Server01 -sessionOption $pso

    有关 WS-Management 超时设置的详细信息，请参阅 WS-Management 提供程序的帮助
    主题（键入"get-help WSMan"）。

    有关 New-PSSsessionOption cmdlet 的详细信息，请
    参阅 New-PSSessionOption。

 无响应行为疑难解答

 本节讨论关于阻止命令完成以及阻止或延迟 Windows PowerShell 提示符返回的远程
 处理问题。

    如何中断命令
    --------------------------
    有些 Windows 本机程序（如具有用户界面的程序、可提示输入的控制台应用程序
    以及使用 Win32控制台 API 的控制台应用程序）在 Windows PowerShell 远程主机上
    不能正常工作。

    使用这些程序时，可能出现意外行为，例如没有输出、输出一部分或远程命令不能
    完成。

    若要结束无响应的程序，请按 CTRL + C。若要查看可能已报告的任何错误，
    请在本地主机和远程会话中键入"$error"。

另请参阅
    联机版本：http://go.microsoft.com/fwlink/?LinkID=135188
    about_remote
    about_remote_requirements


about_Requires

主题
    about_Requires

简短说明
    通过要求使用指定的管理单元和版本来阻止脚本运行。

详细说明
    除非满足 Windows PowerShell 版本、管理单元和管理单元版本先决条件，否则 #Requires 语句
    会阻止脚本运行。如果没有满足先决条件，Windows PowerShell 不会运行脚本。

    可在任何脚本中使用 #Requires 语句。但不能在函数、cmdlet 或管理单元中使用这些语句。

  语法

      使用以下语法可以指定您希望要求使用的管理单元和管理单元版本：

          #requires -PsSnapIn <PsSnapIn> [-Version <N>[.<n>]]

      使用以下语法可以指定您希望要求使用的最低 Windows PowerShell 版本：

          #requires -Version <N>[.<n>]

      使用以下语法可以指定您希望要求使用的 shell：

          #requires -ShellId <ShellId>

  使用规则

      - #Requires 语句必须是脚本中某一行上的第一项。

      - 一个脚本可以包括多个 #Requires 语句。

      - #Requires 语句可以出现在脚本中的任意一行。

  示例

      以下语句要求使用 Microsoft.PowerShell.Security 管理单元：

          #requires -PsSnapIn Microsoft.PowerShell.Security

      如果没有加载 Microsoft.PowerShell.Security 管理单元，则脚本不会运行，Windows
      PowerShell 将显示以下错误消息：

          "The script '<script-name>' cannot be run because the following
          Windows PowerShell snap-ins that are specified by its "#requires"
          statements are missing: Microsoft.PowerShell.Security."

      以下语句要求使用 Windows PowerShell 2.0 版本或 Microsoft.PowerShell.Security
      管理单元的任何更高版本：

          #requires -PsSnapIn Microsoft.PowerShell.Security -Version 2

      以下语句要求使用 Windows PowerShell 2.0 或更高版本：

          #requires -Version 2.0

      以下脚本包含两个 #Requires 语句。必须同时满足这两个语句中指定的要求。否则，脚本将不会
      运行。每个 #Requires 语句必须是行上的第一项：

          #requires –PsSnapIn Microsoft.PowerShell.Security –Version 2
          Get-WMIObject WIN32_LogicalDisk | out-file K:\status\DiskStatus.txt
          #requires –Version 2

      如果指定的 shell ID 与当前的 shell ID 不匹配，以下 #Requires 语句就会阻止脚本运行。
      当前的 shell ID 存储在 $ShellId 变量中：

          #requires -ShellId MyLocalShell

另请参阅
    about_Automatic_Variables
    about_Language_Keywords
    about_PSSnapins
    get-PSSnapin


about_Reserved_Words

主题
    about_Reserved_Words

简短说明
    列出 Windows PowerShell 中因具有特殊含义而不能用作标识符的保留字。

详细说明
    在 Windows PowerShell 中存在一些具有特殊含义的单词。当这些单词不在引号中出现时，
    Windows PowerShell 将尝试应用其特殊含义，而不是将其作为字符串处理。若要将这些
    单词用作命令或脚本中形式参数的实际参数，而不调用其特殊含义，请将保留字括在引号中。

    以下为 Windows PowerShell 中的保留字：

        Break
        Continue
        Do
        Else
        Elseif
        Filter
        For
        Foreach
        Function
        If
        In
        Local
        Private
        Return
        Switch
        Until
        Where
        While

    有关语言语句（例如 Foreach、If、For 和 While）的信息，请键入“get-help”，再键入前缀
    “about_”，然后键入语句的名称。例如，若要获取有关 Foreach 语句的信息，请键入：

    get-help about_foreach

    有关 Filter 语句或 Return 语句语法的信息，请键入：

        get-help about_functions

另请参阅
    about_Command_Syntax
    about_Escape_Characters
    about_Parsing
    about_Quoting_Rules
    about_Script_Blocks
    about_Special_Characters


about_Return

主题
    about_Return

简短说明
    退出当前作用域（可能是函数、脚本或脚本块）。

详细说明
    Return 关键字用于退出函数、脚本或脚本块。它可用于在某个特定点退出作用域、返回一个值或指示
    已到达作用域结尾。

    熟悉 C 或 C# 等语言的用户可能希望使用 Return 关键字使退出作用域的逻辑变得明确。

    在 Windows PowerShell 中，每个语句的结果将作为输出返回，即使在没有包含 Return 关键字
    的语句的情况下也是如此。C 或 C# 等语言只返回 Return 关键字指定的一个或多个值。

  语法

      Return 关键字的语法如下：

          return [<expression>]

      Return 关键字既可以单独出现，也可以在后面跟一个值或表达式，例如：

          return
          return $a
          return (2 + $a)

  示例

      下面的示例使用 Return 关键字在满足某个条件的情况下在某个特定点退出函数：

          function ScreenPassword($instance)
          {
              if (!($instance.screensaversecure)) {return $instance.name}
              <additional statements>
          }

          foreach ($a in @(get-wmiobject win32_desktop)) { ScreenPassword($a) }

      此脚本检查每个用户帐户。ScreenPassword 函数返回不具有受密码保护的屏幕保护程序的所有用
      户帐户的名称。如果屏幕保护程序受密码保护，则该函数会完成要运行的所有其他语句，而且
      Windows PowerShell 不会返回任何值。

      在 Windows PowerShell 中，即使没有使用 Return 关键字，也可以返回值。每个语句的结果
      会被返回。例如，以下语句返回 $a 变量的值：

          $a
          return

      以下语句也返回 $a 的值：

          return $a

      下面的示例包括一个语句，其目的是让用户知道函数正在执行计算：

          function calculation {
              param ($value)

              "Please wait. Working on calculation..."
              $value += 73
              return $value
              }

      运行此函数并将结果赋给变量会产生以下效果：

          C:\PS> $a = calculation 14
          C:\PS>

      "Please wait. Working on calculation..."字符串不会显示。相反，该字符串会被赋给
      $a 变量，如下面的示例中所示：

          C:\PS> $a
          Please wait. Working on calculation...
          87

      该函数会返回信息字符串和计算结果，并将其赋给 $a 变量。

另请参阅
    about_Functions
    about_Scopes
    about_Script_Blocks


about_Scopes

主题
    about_Scopes

简短说明
    介绍 Windows PowerShell 中的作用域的概念，并演示如何设置和更改元素的作用域。

详细说明
    Windows PowerShell 通过限制可以在哪些位置读取和更改变量、别名、函数和 Windows
    PowerShell 驱动器 (PSDrive)，来保护对它们的访问。通过实施一些简单的作用域规则，
    Windows PowerShell 来帮助确保不会在无意中更改不应更改的项。

    以下为作用域的基本规则：

        - 对于包括在某个作用域中的项，除非您明确将其指定为专用，否则它在创建它的作用域
          及其任何子作用域中都是可见的。可以将变量、别名、函数或 Windows PowerShell
          驱动器放在一个或多个作用域中。

        - 在作用域中创建的项只能在创建该项的作用域中更改，除非您明确指定了另一个作用域。

    如果在作用域中创建了一个项，该项与另一个作用域中的某个项名称相同，则原始项会隐藏在新项下。
    但是，原始项不会被覆盖或更改。

  Windows PowerShell 作用域

    Windows PowerShell 中的作用域既具有名称也具有编号。有名称的作用域指定一个绝对作用域。编号是相
    对的，并且反映了作用域之间的关系。

    全局：
        在 Windows PowerShell 启动时生效的作用域。当 Windows PowerShell 启动时已经存在一些
        变量和函数，它们都是在全局域中创建的。其中包括自动变量和首选项变量。另外还包括 Windows
        PowerShell 配置文件中的变量、别名和函数。

    本地：
        当前的作用域。本地作用域可以是全局作用域或任何其他作用域。

    脚本：
        当脚本文件运行时创建的作用域。只有脚本中的命令才在脚本作用域中运行。
        对于脚本中的命令而言，脚本作用域为本地作用域。

    私有：
        在当前作用域之外无法看到私有作用域中的项。可使用私有作用域来创建
        与另一作用域同名的项的私有版本。

    编号作用域：
        可以按名称或按编号来引用作用域，这些编号描述了某个作用域相对于另一个作用域的位置。
        Scope 0 表示当前作用域（即本地作用域）。Scope 1 表示直属的父作用域。Scope 2 表示
        父作用域的父作用域，依此类推。如果创建了很多递归作用域，则编号作用域就非常有用。

 父作用域和子作用域

    可以通过运行脚本或函数、创建会话或启动 Windows PowerShell 的新实例来创建新作用域。创建
    新作用域时，会形成一个父作用域（原始作用域）和一个子作用域（您所创建的作用域）。

    在 Windows PowerShell 中，所有的作用域都是全局作用域的子作用域，但您可以创建很多作用域
    和很多递归作用域。

    除非您将父作用域中的项指定为专用，否则这些项也可用于子作用域。但是，在子作用域中创建和更改的
    项不会影响父作用域，除非您在创建这些项时明确指定了作用域。

 继承

    子作用域不从父作用域继承变量、别名和函数。子作用域可以查看父作用域中的项，除非这个项是专用的。
    此外，通过明确指定父作用域，子作用域可以更改这些项，但这些项不属于子作用域的一部分。

    但是，在创建子作用域时，它已经包括了一组项。通常，它包括所有具有 AllScope 选项的别名。此
    选项将在本主题后面部分进行讨论。子作用域还包括所有具有 AllScope 选项的变量，以及一些可用于
    自定义作用域的变量（如 MaximumFunctionCount）。

    若要查找特定作用域中的项，请使用 Get-Variable 或 Get-Alias 的 Scope 参数。

    例如，若要获取本地作用域中的所有变量，请键入：

    get-variable -scope local

    若要获取全局作用域中的所有变量，请键入：

    get-variable -scope global

 作用域修饰符

    若要指定新的变量、别名或函数的作用域，请使用作用域修饰符。修饰符的有效值是 Global 和 Script。

    变量中的作用域修饰符的语法如下：

        $[<scope-modifier>]:<name> = <value>

    函数中的作用域修饰符的语法如下：

        function [<scope-modifier>]:<name> {<function-body>}

    脚本的默认作用域是脚本作用域。函数和别名的默认作用域是本地作用域，即使它们是在脚本中定义的也不例外。

    以下命令在当前作用域（即本地作用域）中创建一个变量，而不使用作用域修饰符：

       $a = "one"

    若要在全局作用域中创建相同变量，请使用 Global 作用域修饰符：

       $global:a = "one"

    若要在脚本作用域中创建相同变量，请使用 script 作用域修饰符：

       $script:a = "one"

    也可以在函数中使用作用域修饰符。以下函数定义在全局作用域中创建函数：

       function global:Hello
       {
        write-host "Hello, World"
       }

    还可以使用作用域修饰符引用不同作用域中的变量。以下命令引用 $test 变量，首先引用本地作用域
    中的该变量，然后引用全局作用域中的该变量：

      $test

      $global:test

 AllScope 选项

    变量和别名具有 Option 属性，该属性的取值可以是 AllScope。具有 AllScope 属性的项成为您
    创建的任何子作用域的一部分，但它们不会反过来由父作用域继承。

    具有 AllScope 属性的项在子作用域中是可见的，并且是该作用域的一部分。对任何作用域中的项的
    更改会影响所有定义了该变量的作用域。

 管理作用域

    有几个 cmdlet 具有 Scope 参数，您可通过该参数获取或设置（创建和更改）特定作用域中的项。
    使用以下命令可查找会话中所有具有 Scope 参数的 cmdlet：

         get-help * -parameter scope

    若要查找在特定作用域中可见的变量，请使用 Get-Variable 的 Scope 参数。可见参数包括全局参
    数、父作用域中的参数以及当前作用域中的参数。

    例如，以下命令获取本地作用域中可见的变量：

        get-variable -scope local

    若要在特定作用域中创建变量，请使用作用域修饰符或使用 Set-Variable 的 Scope 参数。以下命
    令在全局作用域中创建一个变量：

    new-variable -scope global -name a -value "One"

    也可以使用 New-Alias、Set-Alias 或 Get-Alias cmdlet 的 Scope 参数指定作用域。以下
    命令在全局作用域中创建一个别名：

    new-alias -scope global -name np -value Notepad.exe

    若要获取特定作用域中的函数，请在该作用域中使用 Get-Item cmdlet。Get-Item cmdlet 没有
    Scope 参数。

 将使用点"."获得来源表示法用于作用域

    脚本和函数遵循所有作用域规则。您在特定作用域中创建脚本和函数，除非使用 cmdlet 参数或作用
    域修饰符来更改该作用域，否则这些脚本和函数只会影响该作用域。

    但是，可以使用"使用点'.'获得来源"表示法将脚本或函数添加到当前作用域。然后，当脚本在当前作用
    域中运行时，脚本创建的所有函数、别名和变量在当前作用域中都可用。

    若要将函数添加到当前作用域中，请在函数调用中的函数路径和名称之前键入一个圆点 (.) 和一个空格。

    例如，若要在脚本作用域中运行 C:\Scripts 目录下的 Sample.ps1 脚本（脚本的默认值），请使
    用以下命令：

        c:\scripts\sample.ps1

    若要在本地作用域中运行 Sample.ps1 脚本，请使用以下命令：

        . c:\scripts.sample.ps1

    使用调用运算符 (&) 运行函数或脚本时，不会将其添加到当前作用域中。下面的示例使用了调用运算
    符：

        & c:\scripts.sample.ps1

    Sample.ps1 脚本创建的所有别名、函数或变量在当前作用域中都不可用。

 不使用作用域进行限制

    有一些 Windows PowerShell 概念与作用域非常相似，或者与作用域有共通之处。这些概念可能会
    与作用域或作用域行为混淆。

    会话、模块和嵌套提示是自包含的环境，但它们不是会话中全局作用域的子作用域。

    会话：
        会话是 Windows PowerShell 的运行环境。
        在远程计算机上创建会话时，Windows PowerShell 会建立与远程计算机的持续性连接。通过
        持续性连接，您可以使用会话运行多个相关命令。

        由于会话是自包含的环境，因此它具有自己的作用域，但会话并不是创建它的那个会话的子作用域。
        会话在启动时具有自己的全局作用域。此作用域独立于会话的全局作用域。可以在会话中创建子作用域。
        例如，可以在会话中运行一个脚本以创建子作用域。

    模块：
        可以使用 Windows PowerShell 模块共享和传送 Windows PowerShell 工具。模块是一个
        可以包含 cmdlet、脚本、函数、变量、别名和其他有用项的单元。除非明确定义，否则在模块之
        外无法访问模块中的项。因此，您可将模块添加到会话中并使用公用项，而无需担心其他项会重写会
        话中的 cmdlet、脚本、函数和其他项。

        模块的隐私性行为与作用域相似，但将模块添加到会话中不会更改作用域。此外，虽然模块中的脚
        本和所有 Windows PowerShell 脚本一样，也具有自己的作用域，但模块并没有自己的作用域。

    嵌套提示：
        同样，嵌套提示也没有自己的作用域。在进入嵌套提示时，嵌套提示是环境的子集。但您仍然在本地作用域内。

        脚本确实有它们自己的作用域。如果正在对脚本进行调试，当到达脚本中的断点时，则会进入脚本作用域。

    Private 选项：
        别名和变量具有 Option 属性，该属性的取值可以是 Private。具有 Private 选项的项可以
        在创建它们的作用域中查看和更改，但不能在该作用域之外查看和更改。

        例如，如果在全局作用域中创建具有 private 选项的变量，然后运行脚本，则脚本中的 Get-
        Variable 命令不会显示专用变量。即使使用全局作用域修饰符也是如此。

        可以使用 New-Variable、Set-Variable、New-Alias 和 Set-Alias cmdlet 的
        Option 参数将 Option 属性的值设置为 Private。

    Visibility：
        变量或别名的 Visibility 属性决定了您是否可以在创建某个项的容器（例如一个模块）之外看
        到该项。正如 Option 属性的 Private 值是针对作用域设计的那样，Visibility 属性是针对
        容器设计的。

        Visibility 属性的取值可以是 Public 和 Private。Visibility 属性值为 Private 的
        项只能在创建该项的容器中查看和更改。如果容器是添加或导入的，则无法查看或更改
        Visibility 属性值为 Private 的项。

        由于 Visibility 属性是针对容器设计的，因此它在作用域中的使用方式有所不同。如果在全局
        作用域中创建一个 Visibility 属性值为 Private 的项，则无法在任何作用域中查看或更改该
        项。如果试图查看或更改 Visibility 属性值为 Private 的变量的值，则 Windows
        PowerShell 会返回错误消息。

        可以使用 New-Variable 和 Set-Variable cmdlet 创建 Visibility 属性值为
        Private 的变量。

示例

  示例 1：仅在脚本中更改变量值

      以下命令在脚本中更改 $ConfirmPreference 变量的值。该更改不会影响全局作用域。

      首先，为了显示 $ConfirmPreference 变量在本地作用域中的值，请使用以下命令：

          C:\PS> $ConfirmPreference
          High

      创建包含以下命令的 Scope.ps1 脚本：

          $ConfirmPreference = "Low"
          "The value of `$ConfirmPreference is $ConfirmPreference."

      运行该脚本。该脚本更改 $ConfirmPreference 变量的值，然后报告该变量在脚本作用域中的
      值。输出应该类似于以下输出：

          The value of $ConfirmPreference is Low.

      接下来，测试 $ConfirmPreference 变量在当前作用域中的当前值。

          C:\PS> $ConfirmPreference
          High

      此示例表明，在脚本作用域中更改某个变量的值不会影响该变量在父作用域中的值。

  示例 2：查看不同作用域中的变量值
      可以使用作用域修饰符查看变量在本地作用域和父作用域中的值。

      首先，在全局作用域中定义 $test 变量。

      $test = "Global"

      接下来，创建定义 $test 变量的 Sample.ps1 脚本。在该脚本中，使用作用域修饰符引用
      $test 变量的全局或本地版本。

          # In Sample.ps1

          $test = "Local"
          "The local value of `$test is $test." "The global value of
          `$test is $global:test."

      运行 Sample.ps1 时，输出应该类似于以下输出：

          The local value of $test is Local.
          The global value of $test is Global.

      脚本完成时，仅在会话中定义了 $test 的全局值。

          C:\PS> $test
          Global

  示例 3：更改变量在父作用域中的值

      除非您使用 Private 选项或其他方法来保护某个项，否则就可以查看和更改变量在父作用域中的值。

      首先，在全局作用域中定义 $test 变量。

      $test = "Global"

      接下来，创建定义 $test 变量的 Sample.ps1 脚本。在该脚本中，使用作用域修饰符引用
      $test 变量的全局或本地版本。

          # In Sample.ps1

          $global:test = "Local"
          "The global value of `$test is $global:test."

      脚本完成时，$test 的全局值已更改。

          C:\PS> $test
          Local

  例 4：创建专用变量

      专用变量是 Option 属性值为 Private 的变量。子作用域继承专用变量，但这些变量只能在创建
      它们的作用域中查看或更改。

      以下命令在本地作用域中创建一个名为 $ptest 的专用变量。

      new-variable -name ptest -value 1 -option private

      可以在本地作用域中显示和更改 $ptest 的值。

      C:\PS> $ptest
          1
          C:\PS> $ptest = 2
          C:\PS> $ptest
      2

      接下来，创建包含以下命令的 Sample.ps1 脚本。
      该命令尝试显示和更改 $ptest 的值。

          # In Sample.ps1

          "The value of `$Ptest is $Ptest."
            "The value of `$Ptest is $global:Ptest."

      由于 $ptest 变量在脚本作用域中是不可见的，因此输出为空。

          "The value of $Ptest is ."
            "The value of $Ptest is ."

另请参阅
    about_Variables
    about_Environment_Variables
    about_Functions
    about_Script_Blocks


about_Script_Blocks

主题
    about_Script_Blocks

简短说明
    定义什么是脚本块，并说明在 Windows PowerShell 编程语言中如何使用脚本块。

详细说明
    在 Windows PowerShell 编程语言中，脚本块是语句或表达式的集合，可以作为一个单元使用。
    脚本块可以接受参数并返回值。

    从语法上来讲，脚本块是大括号中的语句列表，如以下语法所示：

        {<statement list>}

    脚本块会以单个对象或数组的形式返回脚本块中所有命令的输出。

    与函数相似，脚本块可以包括参数。使用 Param 关键字可以分配命名参数，如以下语法所示：

        {
            param ([type]$parameter1 [,[type]$parameter2])
            <statement list>
        }

    与函数不同，在脚本块中，不能在大括号之外指定参数。

    与函数相似，脚本块可以包括 DynamicParam、Begin、Process 和 End 关键字。有关详细信息，
    请参阅 about_Functions 和 about_Functions_Advanced。

  使用脚本块

      脚本块是 Microsoft .NET Framework 类型
      (System.Management.Automation.ScriptBlock) 的实例。命令可以具有脚本块参数值。例
      如，Invoke-Command cmdlet 的 ScriptBlock 参数的取值是脚本块，如下面的示例中所示：

          C:\PS> invoke-command -scriptblock  { get-process }
          Handles  NPM(K)    PM(K)     WS(K) VM(M)   CPU(s)     Id ProcessName
          -------  ------    -----     ----- -----   ------     -- -----------
              999      28    39100     45020   262    15.88   1844 communicator
              721      28    32696     36536   222    20.84   4028 explorer
          . . .

      作为值使用的脚本块可能比较复杂，如下面的示例中所示：

          C:\PS> invoke-command -scriptblock { param ($uu = "Parameter");
              "$uu assigned."}
          Parameter assigned.

      上一示例中的脚本块使用 Param 关键字来创建一个具有默认值的参数。下面的示例
      使用 Invoke-Command cmdlet 的 Args 参数为该参数赋予不同的值：

          C:\PS> invoke-command -scriptblock {param ($uu = "Parameter");
              "$uu assigned."} -args "Other value"
          Other value assigned.

      可以将脚本块赋给变量，如下面的示例所示：

          C:\PS> $a = {param ($uu = "Parameter"); "$uu assigned."}

      可以将变量用于 cmdlet（例如 Invoke-Command），如下面的示例所示：

          C:\PS> invoke-command -scriptblock $a -args "Other value"
          Other value assigned.

      可以使用调用运算符 (&) 运行赋给变量的脚本块，如下面的示例所示：

          C:\PS> &$a
          Parameter assigned.

      还可为脚本块提供参数，如下面的示例所示：

          C:\PS> &$a "Other value"
          Other value assigned.

      如果要将脚本块创建的值赋给变量，请使用调用运算符直接运行脚本块，如下面的示例所示：

          C:\PS> $a = &{param ($uu = "Parameter"); "$uu assigned."}
          C:\PS> $a
          Parameter assigned.

      有关调用运算符的详细信息，请参阅 about_Operators。

另请参阅
    about_Functions
    about_Functions_Advanced
    about_Operators


about_Script_Internationalization

主题
    about_Script_Internationalization

简短说明
    介绍 Windows PowerShell 2.0 的脚本国际化功能。利用该功能，脚本可以轻松地使用其用户界面 (UI) 语
    言向用户显示消息和说明。

详细说明
    借助 Windows PowerShell 的脚本国际化功能，您可以使用用户的 UI 语言来显示脚本和函数的帮助和用户
    消息，从而更好地服务于全球用户。

    脚本国际化功能可在执行过程中查询操作系统的 UI 区域性，导入相应的已翻译文本字符串，并向用户显示这些
    字符串。使用 Data 节，您可将文本字符串与代码分开存储，以便可以轻松地对它们进行标识和提取。
    ConvertFrom-StringData 是一个新增的 cmdlet，它可将文本字符串转换为类似于字典的哈希表以使转换过
    程更加容易。

    Windows PowerShell 1.0 不支持 Windows PowerShell 2.0 的脚本国际化功能。在未经修改的情况
    下，包括这些功能的脚本将无法在 Windows PowerShell 1.0 中运行。

    为了支持国际帮助文本，Windows PowerShell 2.0 包括了以下功能：

       -- Data 节，用于将文本字符串与代码说明分隔开。有关 Data 节的详细信息，请参阅
          about_Data_Sections。

       -- 新增的自动变量 $PSCulture 和 $PSUICulture。$PSCulture 存储在系统上使用的用于显示日
          期、时间和货币等元素的 UI 语言的名称。$PSUICulture 变量存储在系统上使用的用于显示用户界面元
          素（例如菜单和文本字符串）的 UI 语言的名称。

       -- ConvertFrom-StringData cmdlet，可将文本字符串转换为类似于字典的哈希表以使转换过程更加容
          易。有关详细信息，请参阅 ConvertFrom-StringData。

       -- 新文件类型 .psd1，可存储已翻译的文本字符串。.psd1 文件存储在脚本目录的语言特定子目录中。

       -- Import-LocalizedData cmdlet，可在运行时将指定语言的已翻译文本字符串导入到脚本中。此
          cmdlet 可以识别和导入 Windows 支持的任何语言的字符串。有关详细信息，请参阅 Import-
          LocalizedData。

 Data 节：存储默认字符串

     在脚本中使用 Data 节可以存储使用默认语言的文本字符串。
     将字符串排列在 here-string 中的键值对中。每个键值对必须在单独的一行上。如果还包括注释，则注释必
     须在单独的行上。

     ConvertFrom-StringData cmdlet 将 here-string 中的键值对转换为类似于字典的哈希表，并将其存
     储在 Data 节变量的值中。

     在下面的示例中，World.ps1 脚本的 Data 节包括脚本提示消息的英语-美国 (en-US) 组。
     ConvertFrom-StringData cmdlet 将字符串转换为哈希表，并将它们存储在 $msgtable 变量中。

    $msgTable = Data {
        # culture="en-US"
        ConvertFrom-StringData @'
        helloWorld = Hello, World.
            errorMsg1 = You cannot leave the user name field blank.
             promptMsg = Please enter your user name.
    '@
    }

    有关 here-strings 的详细信息，请参阅 about_Quoting_Rules。

 PSD1 文件：存储已翻译字符串

    将每种 UI 语言的脚本消息保存在单独的文本文件中，并使这些文件与脚本同名且采用 .psd1 文件扩展名。
    将这些文件存储在脚本目录的子目录中，这些子目录使用区域性的名称作为目录名称，格式如下：

    <语言>-<区域>

    示例：de-DE、ar-SA 和 zh-Hans

    例如，如果将 World.ps1 脚本存储在 C:\Scripts 目录中，则会创建类似于以下的文件目录结构：

    C:\Scripts
    C:\Scripts\World.ps1
        C:\Scripts\de-DE\World.psd1
            C:\Scripts\ar-SA\World.psd1
            C:\Scripts\zh-CN\World.psd1
        ...

    脚本目录的 de-DE 子目录中的 World.psd1 文件可能包括以下语句：

        ConvertFrom-StringData @'
        helloWorld = Hello, World (in German).
        errorMsg1 = You cannot leave the user name field blank (in German).
            promptMsg = Please enter your user name (in German).
    '@

    同样，脚本目录的 ar-SA 子目录中的 World.psd1 文件可能包括以下语句：

        ConvertFrom-StringData @'
        helloWorld = Hello, World (in Arabic).
        errorMsg1 = You cannot leave the user name field blank (in Arabic).
            promptMsg = Please enter your user name (in Arabic).
    '@

 IMPORT-LOCALIZEDDATA：已翻译字符串的动态检索

    若要检索使用当前用户的 UI 语言的字符串，请使用 Import-LocalizedData cmdlet。

    Import-LocalizedData 查找 $PSUICulture 自动变量的值以及子目录中与 $PSUICulture 值匹配的 <
    脚本名称>.psd1 文件的内容。然后，它将导入的内容保存在由 BindingVariable 参数的值指定的变量中。

    import-localizeddata -bindingVariable msgTable

    例如，如果 Import-LocalizedData 命令出现在 C:\Scripts\World.ps1 脚本中，并且
    $PSUICulture 的值为"ar-SA"，则 Import-LocalizedData 会查找以下文件：

         C:\Scripts\ar-SA\World.psd1

    然后，它将该文件中的阿拉伯语文本字符串导入到 $msgTable 变量中，替换所有的默认字符串，这些默认字符
    串可以在 World.ps1 脚本的 Data 节中定义。

    因此，当脚本使用 $msgTable 变量显示用户消息时，这些消息会以阿拉伯语显示。

    例如，以下脚本以阿拉伯语显示"请输入用户名"消息：

    if (!($username)) { $msgTable.promptMsg }

    如果 Import-LocalizedData 无法找到与 $PSUIculture 的值匹配的 .psd1 文件，则不会替换
    $msgTable 的值，而且对 $msgTable.promptMsg 的调用会显示回退 en-US 字符串。

 示例

    此示例说明如何在脚本中使用脚本国际化功能以计算机上设置的语言向用户显示今天是星期几。

    以下是 Sample1.ps1 脚本文件的完整列表。

    脚本开头是一个名为 Day ($Day) 的 Data 节，其中包含 ConvertFrom-StringData 命令。提交到
    ConvertFrom-StringData 的表达式是一个 here-string，其中的键值对包含了按照默认的 UI 区域性
    (en-US) 显示的星期几名称。ConvertFrom-StringData cmdlet 将 here-string 中的键值对转换为哈
    希表，然后将其保存在 $Day 变量的值中。

    Import-LocalizedData 命令导入与 $PSUICulture 自动变量的值匹配的目录中的 .psd1 文件的内容，
    然后将其保存在 $Day 变量中，替换在 Data 节中定义的 $Day 的值。

    其余命令将字符串加载到一个数组中并显示这些字符串。

         $Day = DATA {
         # culture="en-US"
         ConvertFrom-StringData @'
            messageDate = Today is
            d1 = Monday
            d2 = Tuesday
            d3 = Wednesday
            d4 = Thursday
            d5 = Friday
            d6 = Saturday
            d7 = Sunday
         '@
         }

    Import-LocalizedData -BindingVariable Day

    # Build an array of weekdays.
    $a = $Day.d1, $Day.d2, $Day.d3, $Day.d4, $Day.d5, $Day.d6, $Day.d7

        # Get the day of the week as a number (Monday = 1).
        # Index into $a to get the name of the day.
        # Use string formatting to build a sentence.

        "{0} {1}" -f $Day.messageDate, $a[(get-date -uformat %u)] |
        Out-Host

    支持脚本的 .psd1 文件保存在脚本目录中名称与 $PSUICulture 值匹配的子目录中。

    以下是 .\de-DE\sample1.psd1 的完整列表：

            # culture="en-US"
        ConvertFrom-StringData @'
        messageDate = Today is
        d1 = Monday (in German)
        d2 = Tuesday (in German)
        d3 = Wednesday (in German)
        d4 = Thursday (in German)
        d5 = Friday (in German)
        d6 = Saturday (in German)
        d7 = Sunday (in German)
        '@

    因此，当您在 PSUICulture 值为 de-DE 的系统上运行 Sample.ps1 时，脚本的输出为：

    Today is Friday (in German)

另请参阅
    about_Data_Sections
    about_Automatic_Variables
    about_Hash_Tables
    about_Quoting_Rules
    ConvertFrom-StringData
    Import-LocalizedData


about_Scripts

主题
    about_Scripts

简短说明
    说明如何在 Windows PowerShell 中编写和运行脚本。

详细说明
    脚本是包含一个或多个 Windows PowerShell 命令的纯文本文件。Windows PowerShell 脚本的文件扩展
    名为 .ps1。

    编写脚本可以保存命令以备将来使用并轻松地与他人共享。更为重要的是，编写脚本后，您只需键入脚本
    路径和文件名即可运行命令。脚本既可以像文件中的单个命令那样简单，也可以像复杂应用程序那样错综复杂。

    脚本具有其他一些功能，例如 #Requires 特殊注释、参数使用、支持 Data 节，以及确保安全的数字签名。
    您还可以为脚本以及脚本中的任何函数编写帮助主题。

 如何编写脚本

    脚本可以包含任何有效的 Windows PowerShell 命令，包括单个命令以及使用管道、函数和控制结构（例如
    If 语句和 For 循环）的命令。

    若要编写脚本，请打开记事本等文本编辑器或 Windows PowerShell 集成脚本环境 (ISE) 等脚本编辑器。
    请键入命令，并将命令保存在一个具有有效的文件名和 .ps1 文件扩展名的文件中。

    下面的示例是一个简单脚本，可以获取在当前系统上运行的服务，并将其保存到日志文件中。日志文件名根据当前日期创建。

        $date = (get-date).dayofyear
        get-service | out-file "$date.log"

    若要创建此脚本，请打开一个文本编辑器或脚本编辑器，键入这些命令，并将它们保存在一个
    名为"ServiceLog.ps1"的文件中。

 如何运行脚本

    在能够运行脚本之前，需要更改默认的 Windows PowerShell 执行策略。默认的执行策略"Restricted"
    会阻止所有脚本运行，包括在本地计算机上编写的脚本。有关详细信息，请参阅
    about_Execution_Policies。

    若要运行脚本，请键入脚本文件的全名和完整路径。

    例如，若要运行 C:\Scripts 目录中的 ServicesLog 脚本，请键入：

        c:\scripts\ServicesLog.ps1

    若要运行当前目录中的脚本，请键入当前目录的路径，或者使用一个圆点表示当前目录，在后面键入路径反斜杠
    (.\)。

    例如，若要运行本地目录中的 ServicesLog.ps1 脚本，请键入：

        .\ServicesLog.ps1

    作为一种安全功能，当您在 Windows 资源管理器中双击脚本图标时，或键入不带完整路径的脚本名时（即使脚
    本位于当前目录中），Windows PowerShell 不会运行脚本。有关在 Windows PowerShell 中运行命令和
    脚本的详细信息，请参阅 about_Command_Precedence。

 远程运行脚本

    若要在远程计算机上运行脚本，请使用 Invoke-Command cmdlet 的 FilePath 参数。

    将脚本的路径和文件名输入到 Invoke-Command。该脚本必须位于本地计算机上或者本地计算机能够访问的目
    录中。

    以下命令在 Server01 远程计算机上运行 ServicesLog.ps1 脚本。

        invoke-command -computername Server01 -filepath C:\scripts\servicesLog.ps1

 脚本中的参数

    若要在脚本中定义参数，请使用 Param 语句。除了注释和所有的 #requires 语句之外，Param 语句必须是
    脚本中的第一个语句。

    脚本参数的作用类似于函数参数。参数值可供脚本中的所有命令使用。函数形式参数的所有功能（包括
    Parameter 属性及其命名实际参数）在脚本中也是有效的。

    运行脚本时，脚本用户在脚本名后键入参数。

    下面的示例显示了具有 ComputerName 参数的 Test-Remote.ps1 脚本。两个脚本函数都可以访问
    ComputerName 参数值。

        param ($ComputerName = $(throw "ComputerName parameter is required."))

        function CanPing {
           $error.clear()
           $tmp = test-connection $computername -erroraction SilentlyContinue

           if (!$?)
               {write-host "Ping failed: $ComputerName."; return $false}
           else
               {write-host "Ping succeeded: $ComputerName"; return $true}
        }

        function CanRemote {
            $s = new-pssession $computername -erroraction SilentlyContinue

            if ($s -is [System.Management.Automation.Runspaces.PSSession])
                {write-host "Remote test succeeded: $ComputerName."}
            else
                {write-host "Remote test failed: $ComputerName."}
        }

        if (CanPing $computername) {CanRemote $computername}

    若要运行此脚本，请在脚本名后键入参数名。例如：

    C:\PS> .\test-remote.ps1 -computername Server01

    Ping succeeded: Server01
    Remote test failed: Server01

    有关 Param 语句和函数参数的详细信息，请参阅 about_Functions 和
    about_Functions_Advanced_Parameters。

 脚本帮助

    Get-Help cmdlet 可获取脚本、cmdlet、提供程序和函数的帮助。若要获取脚本的帮助，请键入 Get-Help
    和脚本的路径与文件名。如果脚本路径在 Path 环境变量中，则可以省略路径。

    例如，若要获取 ServicesLog.ps1 脚本的帮助，请键入：

        get-help C:\admin\scripts\ServicesLog.ps1

    可使用以下两种方法当中的任意一种来编写脚本帮助：

    --  基于注释的脚本帮助

        通过在注释中使用特殊关键字来创建帮助主题。若要创建基于注释的脚本帮助，注释必须放在脚本
        文件的开头或末尾。有关基于注释的帮助的详细信息，请参阅 about_Comment_Based_Help。

    --  基于 XML 的脚本帮助

        创建基于 XML 的帮助主题，例如通常为 cmdlet 创建的类型。如果要将帮助主题本地化为多种语言，
        则需要使用基于 XML 的帮助。

        若要将脚本与基于 XML 的帮助主题相关联，请使用 .ExternalHelp 帮助注释关键字。有关
        ExternalHelp 关键字的详细信息，请参阅 about_Comment_Based_Help。有关基于 XML 的帮助的详
        细信息，请参阅 MSDN (Microsoft Developer Network) 库中的“如何编写 Cmdlet 帮助”。

 脚本作用域和使用点“.”获得来源

    每个脚本都在自己的作用域中运行。在脚本中创建的函数、变量、别名和驱动器仅存在于脚本作用域中，
    不能在运行脚本的作用域中访问这些项或它们的值。

    若要在不同的作用域中运行脚本，可以指定一个作用域（例如全局或本地），或者使用点“.”获得脚本来源。

    借助使用点“.”获得来源这一功能，您可以在当前作用域中（而不是在脚本作用域中）运行脚本。
    运行使用点“.”获得来源的脚本时，脚本中命令的运行方式与您在命令提示符处键入命令时相同。
    脚本所创建的函数、变量、别名和驱动器也将在您正在使用的作用域中创建。脚本运行后，
    可以在会话中使用已创建的项并访问它们的值。

    若要使用点“.”获得脚本来源，请在脚本路径前键入一个圆点 (.) 和一个空格。

    例如：

        . C:\scripts\UtilityFunctions.ps1

    -或 -

        . .\UtilityFunctions.ps1

    UtilityFunctions 脚本运行后，该脚本创建的函数和变量会添加到当前作用域。
    例如，UtilityFunctions.ps1 脚本创建 New-Profile 函数和 $ProfileName 变量。

        #In UtilityFunctions.ps1

        function New-Profile
        {
            Write-Host "Running New-Profile function"
            $profileName = split-path $profile -leaf

            if (test-path $profile)
               {write-error "There is already a $profileName profile on this computer."}
            else
           {new-item -type file -path $profile -force }
        }

    如果在 UtilityFunctions.ps1 脚本自己的脚本作用域中运行该脚本，则 New-Profile 函数和
    $ProfileName 变量仅在该脚本运行时存在。该脚本退出时，该函数和变量将被删除，如下面的示例中所示。

        C:\PS> .\UtilityFunctions.ps1

        C:\PS> New-Profile
        The term 'new-profile' is not recognized as a cmdlet, function, operable
        program, or script file. Verify the term and try again.
        At line:1 char:12
        + new-profile <<<<
           + CategoryInfo          : ObjectNotFound: (new-profile:String) [],
           + FullyQualifiedErrorId : CommandNotFoundException

        C:\PS> $profileName
        C:\PS>

    当使用点“.”获得脚本来源并运行脚本时，该脚本在您进行会话时所在的作用域中创建 New-Profile 函数和
    $ProfileName 变量。该脚本运行后，可以在会话中使用 New-Profile 函数，如下面的示例中所示。

        C:\PS> ..\UtilityFunctions.ps1

        C:\PS> New-Profile

           Directory: C:\Users\juneb\Documents\WindowsPowerShell

            Mode    LastWriteTime     Length Name
            ----    -------------     ------ ----
            -a---   1/14/2009 3:08 PM      0 Microsoft.PowerShellISE_profile.ps1

        C:\PS> $profileName
        Microsoft.PowerShellISE_profile.ps1

    有关作用域的详细信息，请参阅 about_Scopes。

 模块中的脚本

    模块是可以作为一个单元分发的相关 Windows PowerShell 资源的集合。可以使用模块来组织脚本、函数和
    其他资源。还可以使用模块将代码分发给其他人，并从可靠来源获取代码。

    可以将脚本包括在模块中，或者创建一个脚本模块，也就是完全或主要由脚本和支持资源组成的模块。脚本模块
    只是具有 .psm1 文件扩展名的脚本。

    有关模块的详细信息，请参阅 about_modules。

 其他脚本功能

    Windows PowerShell 具有很多可在脚本中使用的有用功能。

    #Requires
        可以使用 #requires 语句以阻止脚本在没有指定的模块或管理单元和指定的 Windows PowerShell
        版本的情况下运行。有关详细信息，请参阅 about_Requires。

    $MyInvocation
        $MyInvocation 自动变量包含有关当前命令的信息，包括当前脚本。可以使用此变量及其属性在脚本运行
        时获取有关脚本的信息。例如，$MyInvocation.MyCommand.Path 变量包含脚本的路径和文件名。

    Data 节
        在脚本中，可以使用 Data 关键字将数据与逻辑分隔开。
        Data 节还可使本地化变得更加容易。有关详细信息，请参阅 about_Data_Sections 和
        about_Script_Localization。

    脚本签名
        可以为脚本添加数字签名。根据执行策略，可以使用数字签名来限制可能包括不安全命令的脚本的运行。
        有关详细信息，请参阅 about_Execution_Policies 和 about_Signing。

另请参阅
about_Command_Precedence
about_Comment_Based_Help
about_Execution_Policies
about_Functions
about_Modules
about_Profiles
about_Requires
about_Scopes
about_Script_Blocks
about_Signing
Invoke-Command


about_Session_Configurations

主题
    about_Session_Configurations

简短说明
    描述确定可远程连接到计算机的用户及其可运行的命令的会话配置。

详细说明
    会话配置是本地计算机上的一组设置，这些设置为远程用户连接到本地计算机时创建的 Windows PowerShell
    会话定义环境。

    计算机管理员可以使用会话配置以保护计算机，并为连接到计算机的用户定义自定义环境。

    管理员还可以使用会话配置来确定远程连接到计算机所需的权限。默认情况下，仅 Administrators 组的成员有
    权使用会话配置进行远程连接，但您可以更改默认设置以允许所有用户或所选用户远程连接到您的计算机。

    会话配置是一种基于“用于管理的 Web 服务”（WS 管理）的 Windows PowerShell 远程处理功能。仅当使用 New-
    PSSession、Invoke-Command 或 Enter-PSSession cmdlet 连接到远程计算机时，才使用会话配置。

    注意：要在运行 Windows Vista、Windows Server 2008 或更高版本 Windows 的计算机上管理会话配置，
    请使用"以管理员身份运行"选项启动 Windows PowerShell。

 关于会话配置
    每个 Windows PowerShell 会话都使用一个会话配置。这包括使用 New-PSSession 或
    Enter-PSSession cmdlet 创建的永久会话，以及在您使用采用 WS-Management 远程处理技术的 cmdlet
    （如 Invoke-Command）的 ComputerName 参数时 Windows PowerShell 创建的临时会话。

    管理员可以使用会话配置以保护计算机资源，并为连接到计算机的用户创建自定义环境。例如，
    您可以使用会话配置来限制计算机在会话中接收的对象大小，定义会话的语言模式以及指定会话中
    可用的 cmdlet、提供程序和函数。

    通过配置会话配置的安全描述符，您可以确定可使用会话配置连接到计算机的用户。用户必须具有
    会话配置的"执行"权限，才能在会话中使用会话配置。

    如果用户没有使用计算机上任何会话配置所需的权限，他们就不能远程连接到计算机。默认情况下，
    仅计算机管理员有权使用默认会话配置，但您可以更改安全描述符以允许所有用户或所选用户在您的
    计算机上使用会话配置，或者不允许任何用户执行此操作。

 默认会话配置。
    Windows PowerShell 提供一种名为 Microsoft.PowerShell 的内置会话配置。在运行 64 位版本
    Windows 的计算机上，Windows PowerShell 还提供一种 32 位会话配置 Microsoft.PowerShell32。

    这些会话配置默认用于会话，即当创建会话的命令不包含 New-PSSession、Enter-PSSession 或 Invoke-
    Command cmdlet 的 ConfigurationName 参数时应用。

    默认会话配置的安全描述符只允许本地计算机上 Administrators 组的成员使用这些会话配置。因此，除非您更
    改默认设置，否则只有 Administrators 组的成员才能远程连接到计算机。

    可以使用 $PSSessionConfigurationName 首选项变量更改默认会话配置。有关详细信息，请参阅
    about_Preference_Variables。

 查看本地计算机上的会话配置 要获取本地计算机上的会话配置，请使用 Get-PSSessionConfiguration cmdlet。

    例如，键入：

        C:\PS> get-pssessionconfiguration | format-list -property
        name, permission

        Name       : microsoft.powershell
        Permission : BUILTIN\Administrators AccessAllowed

        Name       : microsoft.powershell32
        Permission : BUILTIN\Administrators AccessAllowed

    还可以在 Windows PowerShell 中使用 WS-Management 提供程序查看会话配置。WS-Management 提供程
    序会在您的会话中创建一个 WSMAN: 驱动器。

    在 WSMAN: 驱动器中，会话配置位于 Plugin 节点中。（所有会话配置都位于 Plugin 节点中，但该节点中也包
    含其他非会话配置项。）

    例如，要查看本地计算机上的会话配置，请键入：

         C:\PS> dir wsman:\localhost\plugin\microsoft*

                    WSManConfig: Microsoft.WSMan.Management\WSMan::localhost\Plugin

         Name                      Type                 Keys
         ----                      ----                 ----
         microsoft.powershell      Container            {Name=microsoft.powershell}
         microsoft.powershell32    Container            {Name=microsoft.powershell}

 查看远程计算机上的会话配置 要查看远程计算机上的会话配置，请使用 Connect-WSMan cmdlet 在本地计算机上的
 WSMan: 驱动器中为远程计算机添加一个节点，然后使用 WSMan: 驱动器查看会话配置。

    例如，以下命令在本地计算机上的 WSMAN: 驱动器中为远程计算机 Server01 添加一个节点。

        C:\PS> connect-wsman server01.corp.fabrikam.com

    此命令执行完后，您可以导航到 Server01 计算机的节点，然后查看会话配置。

    例如：

        C:\PS> cd wsman:

        PS WSMan:\> dir

        ComputerName                                  Type
        ------------                                  ----
        localhost                                     Container
        server01.corp.fabrikam.com                    Container

        PS WSMan:\> dir server01*\plugin\*

               WSManConfig: Microsoft.WSMan.Management\WSMan::server01.corp.fabrikam.com\Plugin

        Name                      Type                 Keys
        ----                      ----                 ----
        microsoft.powershell      Container            {Name=microsoft.powershell}
        microsoft.powershell32    Container            {Name=microsoft.powershell32}

    更改会话配置的安全描述符 默认情况下，计算机上 Administrators 组的成员具有默认会话配置的"执行"权限，
    但您可以更改默认会话配置及任何自建会话配置上的安全描述符。

    要向其他用户赋予远程连接到计算机的权限，请使用 Set-PSSessionConfiguration cmdlet 将这些用户的
    "执行"权限添加到 Microsoft.PowerShell 和 Microsoft.Powershell32 会话配置的安全描述符。

    例如，以下命令将打开一个属性页，您可以在其中更改 Microsoft.PowerShell 默认会话配置的安全描述符。

        C:\PS> set-pssessionConfiguration -name Microsoft.PowerShell -showSecurityDescriptorUI

    要拒绝所有用户对计算机上所有会话配置的权限，请使用 Disable-PSRemoting 函数或 Disable-
    PSSessionConfiguration cmdlet。例如，以下命令可以将"全部拒绝"条目添加到计算机上的所有会话配置。

        C:\PS> disable-psremoting

    要将"全部拒绝"条目添加到特定会话配置，请使用 Disable-PSSessionConfiguration cmdlet。例如，以
    下命令可以将"全部拒绝"条目添加到 Microsoft.PowerShell 会话配置。

        C:\PS> disable-pssessionConfiguration -name Microsoft.PowerShell

    要从所有会话配置中删除"全部拒绝"条目，请使用 Enable-PSRemoting 或 Enable-
    PSSessionConfiguration cmdlet。例如，以下命令可以从默认会话配置中删除"全部拒绝"条目。

        C:\PS> enable-pssessionConfiguration -name Microsoft.Power*

    要对会话配置的安全描述符进行其他更改，请使用 Set-PSSessionConfiguration cmdlet。可以使用
    SecurityDescriptorSDDL 参数提交一个 SDDL 字符串值。可以使用 ShowSecurityDescriptorUI 参数显
    示一个用户界面属性表，您可以借助该属性表创建新的 SDDL。

    例如：

        C:\PS> set-pssessionConfiguration -name Microsoft.PowerShell -showSecurityDescriptorUI

 创建新会话配置
    要在本地计算机上创建新会话配置，请使用 Register-PSSessionConfiguration cmdlet。要定义新会话配
    置，可以使用 C# 程序集、Window PowerShell 脚本和 Register-PSSessionConfiguration cmdlet 的参数。

    例如，以下命令可以创建一种与 Microsoft.PowerShell 会话配置基本相同的会话配置，唯一区别是该会话配置
    会将从远程命令接收的数据限制在 20 MB（默认值是 50 MB）。

        c:\PS> register-psSessionConfiguration -name NewConfig --MaximumReceivedDataSizePerCommandMB 20

    在创建会话配置时，可以使用其他会话配置 cmdlet 管理该会话配置，该会话配置将显示在 WSMan: 驱动器中。

    有关详细信息，请参阅 Register-PSSessionConfiguration。

 删除会话配置
    要从本地计算机中删除会话配置，请使用 Unregister-PSSessionConfiguration cmdlet。例如，以下命令
    可以从计算机中删除 NewConfig 会话配置。

        c:\PS> unregister-psSessionConfiguration -name NewConfig

    有关详细信息，请参阅 Unregister-PSSessionConfiguration。

 选择会话配置
    要为会话选择特定的会话配置，请使用 New-PSSession、Enter-PSSession 或 Invoke-Command 的
    ConfigurationName 参数。

    例如，以下命令使用 New-PSSession cmdlet 启动 Server01 计算机上的 PSSession。该命令使用
    ConfigurationName 参数选择 Server01 计算机上的 WithProfile 配置。

        C:\PS> new-pssession -computername Server01 -configurationName WithProfile

    仅在当前用户有权使用 WithProfile 会话配置或者可提供具有所需权限的用户凭据时，才能成功执行此命令。

    您还可以使用 $PSSessionConfigurationName 首选项变量更改计算机上的默认会话配置。有关
    $PSSessionConfigurationName 首选项变量的详细信息，请参阅 about_Preference_Variables。

另请参阅
    about_Preference_Variables
    about_PSSession
    about_Remote
    New-PSSession
    Disable-PSSessionConfiguration
    Enable-PSSessionConfiguration
    Get-PSSessionConfiguration
    Register-PSSessionConfiguration
    Set-PSSessionConfiguration
    Unregister-PSSessionConfiguration


about_Signing

主题
    about_signing

简短说明
    说明如何对脚本进行签名以使其符合 Windows PowerShell 执行策略。

详细说明
    Restricted 执行策略不允许任何脚本运行。
    AllSigned 和 RemoteSigned 执行策略可防止 Windows PowerShell 运行没有数字签名的脚本。

    本主题说明如何运行所选未签名脚本（即使在执行策略为 RemoteSigned 的情况下），还说明如何对
    脚本进行签名以便您自己使用。

    有关 Windows PowerShell 执行策略的详细信息，请参阅 about_Execution_Policy。

 允许运行签名脚本
 -------------------------------
    首次在计算机上启动 Windows PowerShell 时，现用执行策略很可能是 Restricted（默认设置）。

    Restricted 策略不允许任何脚本运行。

    若要了解计算机上的现用执行策略，请键入：

        get-executionpolicy

    若要在本地计算机上运行您编写的未签名脚本和来自其他用户的签名脚本，请使用以下命令将计算机上的
    执行策略更改为 RemoteSigned：

    set-executionpolicy remotesigned

    有关详细信息，请参阅 Set-ExecutionPolicy。

 运行未签名脚本（REMOTESIGNED 执行策略）如果 Windows PowerShell 执行策略是
 RemoteSigned，Windows PowerShell 不会运行从 Internet 下载的未签名脚本，包括您通过电子邮
 件和即时消息传递程序接收到的未签名脚本。

    如果您试图运行下载的脚本，则 Windows PowerShell 将显示以下错误消息：

        无法加载文件 <file-name>。文件
        <file-name> 未经数字签名。系统将
        不执行该脚本。有关详细信息，请参阅"Get-Help about_signing"。

    在运行该脚本前，请检查其代码以确保该脚本可信。
    脚本与任何可执行程序具有同样的效用。

    若要运行未签名脚本，请执行以下操作：

        1. 将脚本文件保存在计算机中。
    2. 依次单击"开始"和"我的电脑"，然后找到保存的脚本文件。
    3. 右键单击该脚本文件，然后单击"属性"。
    4. 单击"取消阻止"。

    如果从 Internet 下载的脚本具有数字签名，而您尚未选择信任其发布者，则 Windows PowerShell
    将显示以下消息：

        是否要运行来自此不可信发布者的软件?文件 <file-name> 由 CN=<publisher-name> 发布。
        此发布者在您的系统上不受信任。请只运行来自可信发布者的脚本。

        [V] 从不运行 [D] 不运行 [R] 运行一次 [A] 始终运行 [?] 帮助(默认值为"D")：

        如果您信任发布者，请选择"运行一次"或"始终运行"。如果您不信任发布者，
        则请选择"从不运行"或"不运行"。如果选择"从不运行"或"始终运行"，Windows PowerShell
        不会再次提示您对来自此发布者的脚本作出选择。

 对脚本进行签名的方法
 --------------------------
    可以对您编写的脚本以及从其他来源获得的脚本进行签名。在对任何脚本进行签名前，
    请检查每条命令以验证运行此脚本是否安全。

    有关对代码进行签名的最佳做法，请参阅 http://go.microsoft.com/fwlink/?LinkId=119096
    上的"代码签名最佳做法"。

    有关如何对脚本文件进行签名的详细信息，请参阅 Set-AuthenticodeSignature。

    若要为脚本添加数字签名，则必须使用代码签名证书对其进行签名。可使用以下两种类型的证书对脚本文件进行签名：

        -- -- 由证书颁发机构创建的证书：

           公共证书颁发机构可验证您的身份并向您颁发代码签名证书，但要收取费用。在从可信的证书颁
           发机构购买证书之后，您就可以与运行 Windows 的其他计算机上的用户共享脚本，这是因为这些
           计算机信任该证书颁发机构。

        -- -- 您创建的证书：

           您可以创建自签名证书，而您的计算机就是创建该证书的颁发机构。
           此证书是免费的，有了此证书，您便可在自己的计算机上编写脚本、对脚本进行签名以及运行脚本。
           但是，自签名证书所签名的脚本在其他计算机上不会运行。

    通常，您只使用自签名证书对以下两类脚本进行签名：一种是您自编自用的脚本，另一种是您
    从其他来源获取的已确认安全的脚本。自签名证书不适用于将与他人共享的脚本，甚至在企业范围
    内共享的脚本。

    如果您创建了自签名证书，请确保为您的证书启用强私钥保护。这样可防止恶意程序以您的名义对脚本进行签名。
    本主题的最后提供了相关说明。

 创建自签名证书
 --------------------------------
    若要创建自签名证书，请使用证书创建工具 (MakeCert.exe)。在 Microsoft .NET Framework SDK
    （版本 1.1 和更高版本）以及 Microsoft Windows SDK 中包含了此工具。

    有关 MakeCert.exe 工具语法的详细信息及其参数说明，请参阅 MSDN（Microsoft Developer Network）
    Library 中的"证书创建工具 (MakeCert.exe)"，网址为
    http://go.microsoft.com/fwlink/?LinkId=119097。

    若要使用 MakeCert.exe 工具创建证书，请在 SDK 命令提示符窗口中运行以下命令。

    注意：第一条命令将为计算机创建本地证书颁发机构。第二条命令从该证书颁发机构生成个人证书。

    注意：您可以按原样复制或键入显示的命令。
          不必进行任何替换，不过可更改证书名称。

            makecert -n "CN=PowerShell Local Certificate Root" -a sha1 `
                -eku 1.3.6.1.5.5.7.3.3 -r -sv root.pvk root.cer `
                -ss Root -sr localMachine

            makecert -pe -n "CN=PowerShell User" -ss MY -a sha1 `
                -eku 1.3.6.1.5.5.7.3.3 -iv root.pvk -ic root.cer

    MakeCert.exe 工具将提示您输入私钥密码。该密码可确保无人能够不经您的同意就使用或访问该证
    书。应创建并输入您可以记住的密码。您将在以后使用此密码检索该证书。

    要验证是否正确生成了证书，请使用以下命令从计算机上的证书存储区中获取该证书。
    （在文件系统目录中找不到证书文件。）

    在 Windows Powershell 提示符下，键入：

            get-childitem cert:\CurrentUser\my -codesigning

    此命令使用 Windows PowerShell 证书提供程序来查看该证书的相关信息。

    如果该证书已创建完成，则输出将显示标识该证书的指纹，如下所示：

        Directory: Microsoft.PowerShell.Security\Certificate::CurrentUser\My

        Thumbprint                                Subject
        ----------                                -------
        4D4917CB140714BA5B81B96E0B18AAF2C4564FDF  CN=PowerShell User ]

 对脚本进行签名
 -------------

    如果创建了自签名证书，则可对脚本进行签名。如果使用 AllSigned 执行策略，则对脚本进行签名后，
    您就可在计算机上运行该脚本。

    以下示例脚本 Add-Signature.ps1 对一个脚本进行签名。但如果使用的是 AllSigned 执行策略，则
    必须先对 Add-Signature.ps1 脚本进行签名，然后才能运行该脚本。

    若要使用此脚本，请将以下文本复制到一个文本文件中并将该文件命名为 Add-Signature.ps1。

    注意：请确保该脚本文件没有 .txt 文件扩展名。如果文本编辑器向文件名追加".txt"，则请将文件名
    括在引号中："add-signature.ps1"。

            ## add-signature.ps1
            ## Signs a file
            param([string] $file=$(throw "Please specify a
            filename.")) $cert = @(Get-ChildItem cert:\CurrentUser\My -
            codesigning)[0] Set-AuthenticodeSignature $file $cert

    若要对 Add-Signature.ps1 脚本文件进行签名，请在 Windows PowerShell 命令提示符下键入以
    下命令：

        $cert = @(Get-ChildItem cert:\CurrentUser\My -codesigning)[0]

        Set-AuthenticodeSignature add-signature.ps1 $cert

    在对脚本进行签名之后，即可在本地计算机上运行该脚本。
    但是，如果计算机上的 Windows PowerShell 执行策略要求来自可信证书颁发机构的数字签名，则此脚
    本将无法在该计算机上运行。如果试图运行此脚本，Windows PowerShell 将显示以下错误消息：

        无法加载文件 C:\remote_file.ps1。无法验证该证书的签名。
        所在行:1 字符:15
        + .\ remote_file.ps1 <<<<

    如果在运行非自编脚本时 Windows PowerShell 显示此消息，请按照处理任何未签名脚本的方式来处理
    该文件。请检查脚本代码以确定该脚本是否可信。

 为证书启用强私钥保护
---------------------------------------------------------

    如果您的计算机上具有私有证书，则恶意程序可能会以您的名义对脚本进行签名，从而授权 Windows
    PowerShell 运行这些脚本。

    若要防止以您的名义进行的自动签名，请使用证书管理器 (Certmgr.exe) 将您的签名证书导出到一
    个 .pfx 文件中。证书管理器包含在 Microsoft .NET Framework SDK、Microsoft Windows SDK，以及
    Internet Explorer 5.0 及更高版本中。

    若要导出证书，请执行以下操作：

        1. 启动证书管理器。

        2. 选择由"PowerShell Local Certificate Root"颁发的证书。

        3. 单击"导出"以启动证书导出向导。

        4. 选中"是，导出私钥"，然后单击"下一步"。

        5. 选中"启用加强保护"。

        6. 键入密码，然后再次键入密码进行确认。

        7. 键入文件扩展名为 .pfx 的文件名。

        8. 单击"完成"。

    若要重新导入证书，请执行以下操作：

        1. 启动证书管理器。

        2. 单击"导入"以启动证书导入向导。

        3. 转到您在导出过程中创建的 .pfx 文件所在的位置。

        4. 在"密码"页上选中"启用强私钥保护"，然后输入在导出过程中所指定的密码。

        5. 选择"个人"证书存储区。

        6. 单击"完成"。

 防止签名过期
 -----------------------------------
     脚本中的数字签名在签名证书过期前一直有效；或者，只要时间戳服务器可验证该脚本是
     在签名证书有效时进行签名的，则该数字签名就有效。

     因为大多数签名证书的有效期只有一年，所以使用时间戳服务器可确保用户在未来许多年内都可使用您的脚本。

另请参阅
    about_Execution_Policies
    about_Profiles
    Get-ExecutionPolicy
    Set-ExecutionPolicy
    Set-AuthenticodeSignature
    "代码签名简介"(http://go.microsoft.com/fwlink/?LinkId=106296)


about_Special_Characters

主题
    about_Special_Characters

简短说明
    说明可用于控制 Windows PowerShell 对命令或参数中下一字符的解释方式的特殊字符。

详细说明
    Windows PowerShell 支持可用于表示标准字符集之外的字符的一组特殊字符。

    Windows PowerShell 中的这些特殊字符以倒引号（也称抑音符 (ASCII 96)）开头。

    以下为 Windows PowerShell 能够识别的特殊字符：

        `0  Null
        `a  警报
        `b  退格
        `f  换页
        `n  换行
        `r  回车
        `t  水平制表
        `v  垂直制表

    这些字符区分大小写。

NULL (`0)
    Windows PowerShell 可识别 null 特殊字符 (`0) 并用字符代码 0 来表示该特殊字符。该特殊
    字符在 Windows PowerShell 输出中显示为空白。这样您就可使用 Windows PowerShell 来读取
    和处理使用 null 字符（如字符串终止或记录终止指示符）的文本文件。null 特殊字符并不等同于
    $null 变量，后者存储 NULL 值。

警报 (`a)
    警报 (`a) 符向计算机的扬声器发送蜂鸣信号。
    可用此字符向用户发出有关危险操作的警告。以下命令将向本地计算机的扬声器发送两个蜂鸣信号：

        for ($i = 0; $i -le 1; $i++){"`a"}

退格 (`b)
    退格符 (`b) 将光标后退一个字符，但不删除任何字符。以下命令写出单词"backup"，将光标后退两
    次，然后写出单词"out"（前面有一个空格并在新位置开始）：

        "backup`b`b out"

    此命令的输出如下所示：

        back out

换页 (`f)
   换页符 (`f) 是一种打印指示，它退出当前页面并在下一页继续打印。此字符只影响打印的文档，并不影
   响屏幕输出。

换行 (`n)
    换行符 (`n) 用于在其后紧跟着插入换行符。

    以下示例显示如何在 Write-Host 命令中使用换行符：

        "There are two line breaks`n`nhere."

    此命令的输出如下所示：

        There are two line breaks

        here.

回车 (`r)
    回车符 (`r) 会删除它之前的一整行内容，就像前面的文本是在另外一行上一样。

    例如：

        Write-Host "Let's not move`rDelete everything before this point."

    此命令的输出是：

        Delete everything before this point.

水平制表 (`t)
    水平制表符 (`t) 使光标前进到下一个制表位并在该处继续写入。默认情况下，Windows
    PowerShell 控制台每过 7 个空格设置一个制表位。例如，下面的命令在每两列之间
    插入两个制表符。

        "Column1`t`tColumn2`t`tColumn3"

    此命令的输出是：

        Column1         Column2         Column3

垂直制表 (`v)
    垂直制表符 (`t) 使光标前进到下一个垂直制表位并从该处开始写入后面的所有输出。
    此字符仅影响打印的文档，不影响屏幕输出。

另请参阅
    about_Quoting_Rules
    about_Escape_Characters


about_Split

主题
    about_Split

简短说明
    说明如何使用拆分运算符将一个或多个字符串拆分为多个子字符串。

详细说明
    拆分运算符用于将一个或多个字符串拆分为多个子字符串。可更改拆分操作的以下元素：

    -- 定界符。默认为空白，但是可指定字符、字符串、模式或用于设置定界符的脚本块。

    -- 子字符串的最大数目。默认设置为返回所有子字符串。如果指定的数字小于子字符串数，
       则其余子字符串将合并到最后一个子字符串中。

    -- 用于指定定界符匹配条件的选项，如 SimpleMatch 和 Multiline。

  语法

   下图显示了 -split 运算符的语法。

   命令中没有包含参数名称，只包含了参数值。参数值必须按语法图中指定的顺序出现。

    -Split <String>

    <String> -Split <Delimiter>[,<Max-substrings>[,"<Options>"]]

    <String> -Split {<ScriptBlock>} [,<Max-substrings>]

   在任何拆分语句中，都可用 -iSplit 或 -cSplit 替换 -split。
   -iSplit 和 -split 运算符不区分大小写。-cSplit 运算符区分大小写，这意味着应用定界符规则时会考虑大小写。

  参数

   <String>
        指定要拆分的一个或多个字符串。如果提交多个字符串，则将使用相同的定界符规则来拆分所有字符串。
        示例：

        -split "red yellow blue green"
        red
            yellow
        blue
        green

   <Delimiter>
        用于标识子字符串结束位置的字符。默认定界符是空白，包括空格以及如换行符 (`n) 和制表符 (`t) 等不可
        打印字符。拆分字符串时，将从所有子字符串中省略定界符。示例：

        "Lastname:FirstName:Address" -split ":"
        Lastname
        FirstName
        Address

    <Max-substrings>
        指定返回的子字符串的最大数目。默认设置为通过定界符拆分出的所有子字符串。
        如果子字符串数目大于最大数目，多出的子字符串将合并到最后一个子字符串中。如果子字符串数目
        小于最大数目，将返回所有子字符串。使用 0 值或负值时将返回所有子字符串。

        如果向拆分运算符提交多个字符串（一组字符串），Max-substrings 限制将单独应用于每个字符串。示例：

        $c = "Mercury,Venus,Earth,Mars,Jupiter,Saturn,Uranus,Neptune" $c
        -split ",", 5
        Mercury
        Venus
        Earth
        Mars
        Jupiter,Saturn,Uranus,Neptune

    <ScriptBlock>
        用于指定定界符应用规则的表达式。该表达式的计算结果必须是 $true 或 $false。脚本块需放在大括号
        中。示例：

            $c = "Mercury,Venus,Earth,Mars,Jupiter,Saturn,Uranus,Neptu
            ne" $c -split {$_ -eq "e" -or $_ -eq "p"}
        M
        rcury,V
        nus,Earth,Mars,Ju
        it
        r,Saturn,Uranus,N

        tun

    <Options>
        请将选项名称括在引号内。仅当语句中使用 <Max-substrings> 参数时选项才有效。

        Options 参数的语法为：

        "SimpleMatch [,IgnoreCase]"

            "[RegexMatch] [,IgnoreCase] [,CultureInvariant]
            [,IgnorePatternWhitespace] [,ExplicitCapture]
            [,Singleline | ,Multiline]"

        SimpleMatch 选项为：

          -- SimpleMatch：计算定界符时使用简单字符串比较。不可与 RegexMatch 一起使用。

          -- IgnoreCase：强制进行不区分大小写的匹配，即使指定 -cSplit 运算符也如此。

        RegexMatch 选项为：

          -- RegexMatch：使用正则表达式匹配来计算定界符。这是默认行为。不可与 SimpleMatch 一起使用。

          -- IgnoreCase：强制进行不区分大小写的匹配，即使指定 -cSplit 运算符也如此。

          -- CultureInvariant：在计算定界符时忽略语言上的区域性差异。仅当与 RegexMatch 一起使用时有效。

          -- IgnorePatternWhitespace：忽略未转义空白以及使用井号 (#) 标记的注释。仅当与
             RegexMatch 一起使用时有效。

          -- Multiline：使用 Multiline 模式可识别行和字符串的开头和结尾。仅当与 RegexMatch 一起使
             用时有效。默认设置为 Singleline。

          -- Singleline：使用 Singleline 模式只识别字符串的开头和结尾。仅当与 RegexMatch 一起使用
             时有效。默认设置为 Singleline。

          -- ExplicitCapture：忽略未命名的匹配组，以便仅在结果列表中返回显式捕获组。仅当与
             RegexMatch 一起使用时有效。

  一元和二元拆分运算符

    一元拆分运算符 (-split <string>) 的优先级高于
    逗号。因此，如果向一元拆分运算符提交逗号分隔的字符串列表，将只拆分第一个字符串（第一个逗号之前的部分）。

    要拆分多个字符串，请使用二元拆分运算符 (<string> -split <delimiter>)。可将所有字符串都括在圆括号
    内，
    或在变量中存储这些字符串，然后向拆分运算符提交该变量。

    请看以下示例：

    -split "1 2", "a b"
    1
    2
     a b

    "1 2", "a b" -split " "
    1
    2
     a
    b

    -split ("1 2", "a b")
    1
    2
     a
    b

    $a = "1 2", "a b"
    -split $a
    1
    2
     a
    b

  示例

    以下语句按空白拆分字符串：

    C:\PS> -split "Windows PowerShell 2.0`nWindows PowerShell with remoting"

    Windows
    PowerShell
    2.0
    Windows
    PowerShell
    with
    remoting

    以下语句按逗号拆分字符串：

    C:\PS> "Mercury,Venus,Earth,Mars,Jupiter,Saturn,Uranus,Neptune" -split ','

        Mercury
        Venus
        Earth
        Mars
        Jupiter
        Saturn
        Uranus
        Neptune

    以下语句按模式"er"拆分字符串：

    C:\PS>"Mercury,Venus,Earth,Mars,Jupiter,Saturn,Uranus,Neptune" -split 'er'

    M
    cury,Venus,Earth,Mars,Jupit
    ,Saturn,Uranus,Neptune

    以下语句按字母"N"执行区分大小写的拆分：

    C:\PS> "Mercury,Venus,Earth,Mars,Jupiter,Saturn,Uranus,Neptune" -cSplit 'N'

    Mercury,Venus,Earth,Mars,Jupiter,Saturn,Uranus,
    eptune

    以下语句按"e"和"t"拆分字符串：

        C:\PS> "Mercury,Venus,Earth,Mars,Jupiter,Saturn,Uranus,Neptune" -split '[et]'

        M
        rcury,V
        nus,
        ar
        h,Mars,Jupi

        r,Sa
        urn,Uranus,N
        p
        un

    以下语句按"e"和"r"拆分字符串，但将生成的子字符串数限制为 6 个。

        C:\PS> "Mercury,Venus,Earth,Mars,Jupiter,Saturn,Uranus,Neptune" -split '[er]', 6

    M

    cu
    y,V
    nus,
    arth,Mars,Jupiter,Saturn,Uranus,Neptune

    以下语句将一个字符串拆分为三个子字符串。
        C:\PS> "a,b,c,d,e,f,g,h" -split ",", 3

    a
    b
    c,d,e,f,g,h

    以下语句将两个字符串分别拆分为三个子字符串。（该限制单独应用于每个字符串。）
        C:\PS> "a,b,c,d", "e,f,g,h" -split ",", 3

    a
    b
    c,d
    e
    f
    g,h

    以下语句按第一个数字拆分 here-string 中的每一行。该语句使用 Multiline 选项来识别每一行和每一个字符
    串的开头。

    0 值表示 Max-substrings 参数的"全部返回"值。仅当指定 Max-substrings 值时才能使用如 Multiline
    等选项。

        C:\PS> $a = @'
    1The first line.
    2The second line.
    3The third of three lines.
    '@

        C:\PS> $a -split "^\d", 0, "multiline"

    The first line.

    The second line.

    The third of three lines.

    以下语句使用 SimpleMatch 选项让 -split 运算符从字面上解释点 (.)定界符。

    使用默认设置 RegexMatch 时，括在引号中的点（"."）被解释为与除换行符以外的其他任何字符匹配。因此，
    拆分语句会对除换行符之外的每个字符都返回一个空白行。

    0 值表示 Max-substrings 参数的"全部返回"值。仅当指定 Max-substrings 值时才能使用如
    SimpleMatch 等选项。

        C:\PS> "This.is.a.test" -split ".", 0, "simplematch"

    This
        is
        a
    test

    以下语句根据变量的值按两个定界符中的一个拆分字符串。

        C:\PS>	$i = 1
        C:\PS>	$c = "LastName, FirstName; Address, City, State, Zip"
        C:\PS>	$c -split {if ($i -lt 1) {$_ -eq ","} else {$_ -eq ";"}}

    LastName, FirstName
     Address, City, State, Zip

    以下拆分语句先按尖括号，然后按分号拆分一个 XML 文件。结果为该 XML 文件的可读版本。

        C:\PS>	get-process powershell | export-clixml ps.xml
        C:\PS>	$x = import-clixml ps.xml
        C:\PS>	$x = $x -split "<"
        C:\PS>	$x = $x -split ";"

    若要显示结果，请键入"$x"。

    C:\PS> $x

        @{__NounName=Process
    Name=powershell
    Handles=428
    VM=150081536
    WS=34840576
    PM=36253696
    ...

另请参阅
    Split-Path
    about_Operators
    about_Comparison_Operators
    about_Join


about_Switch

主题
    about_Switch

简短说明
    说明如何使用 switch 来处理多个 IF 语句。

详细说明
    您可以在脚本或程序中使用 If 语句来作出决定。实质上，它表示："如果此条件存在，则执行此操作。否
    则执行另一操作。"您可以无限次执行这样的条件运算，但如果条件列表过长，If 语句用起来会非常不
    便。可以将很长的条件列表组合到一个 switch 语句中。与在所有分支语句中一样，必须用大括号 ({}) 将
    脚本块括起来。

    一条 switch 语句实际上等效于一系列 If 语句。它将表达式与每个条件逐一进行匹配。如果找到匹配
    项，即执行与该条件相关联的操作。基本的 switch 语句形式如下：

        PS> $a = 3
        PS> switch ($a) {
            1 {"It is one."}
            2 {"It is two."}
            3 {"It is three."}
            4 {"It is four."}
            }

        It is three.

    这一简单的示例获取一个值，并将该值与列表中的每个条件进行比较。执行的操作是根据匹配情况
    回显一个字符串。但是，如果每个条件都检查，可能会遇到问题。例如：

        PS> $day = "day5"
        PS> switch ($day){
            day1 {"Monday"; break}
            day2 {"Tuesday"; break}
            day3 {"Wednesday"; break}
            day4 {"Thursday"; break}
            day5 {"Friday"; break}
            day6 {"Saturday"; break}
            day7 {"Sunday"; break}
            day5 {"Too many days"; break}
            }

        Friday

    此列表中有两个 day5 条件。但是每个条件最后的 break 指示 switch 停止进一步查找，并执行所找到的
    操作。如果没有 break 语句，那么两个 day5 操作都将执行。

    如果要通过 switch 获取的值是一个数组，那么将从元素 0 开始按顺序计算该数组中的每个元素。至少必
    须存在满足至少一个条件的元素，否则将发生错误。如果存在多个默认子句，将发生错误。

    完整的 switch 语法如下：

        switch [-regex|-wildcard|-exact][-casesensitive] ( pipeline )
    或

        switch [-regex|-wildcard|-exact][-casesensitive] -file filename

    后跟

        {
            "string"|number|variable|{ expression } { statementlist }
            default { statementlist }
        }

    默认情况下，如果未使用任何参数，那么 Switch 按采用"不区分大小写的精确匹配"进行操作。如果
    "pipeline"的结果为数组，那么将从 0（零）开始按偏移升序依次对数组中的每个元素进行计算。

    Switch 代码块中必须至少存在一个条件元素，并且只能存在一个 default 子句。如果存在多个
    default 子句，将引发 ParseException 异常。

    Switch 具有以下参数：

        Regex	        指示如果匹配子句为字符串，则将其视为正则表达式字符串。使用
                此参数将禁用 Wildcard 和 Exact。如果匹配子句不是字符串，将忽略此参数。

        Wildcard	指示如果匹配子句为字符串，则将其视为通配符字符串。使用此参数将禁用 Regex 和
                Exact。如果匹配子句不是字符串，将忽略此参数。

        Exact	        指示如果匹配子句为字符串，则必须精确匹配。使用此参数将禁用 Wildcard 和 Regex。
            如果匹配子句不是字符串，将忽略此参数。

        CaseSensitive	如果匹配子句为字符串，则将它修改为区分大小写。如果匹配子句不是字符串，将忽略此参数。

        File	        从文件（或样本）而不是从语句获取输入。如果使用了多个 File 参数，
            则使用最后一个参数。读取文件中的每一行，并对其执行 switch 块。

    允许多次使用 Regex、Wildcard 或 Exact。但是，只有使用的最后一个参数控制 Switch 的行为。

    关键字 Break 指示不再执行任何处理，Switch 语句将退出。

    关键字 Continue 指示在当前令牌下将不再继续执行任何处理，而将计算条件中的下一个令牌。如果没有
    可用的令牌，Switch 语句将退出。

    "{ expression }"块可以是将在比较时进行计算的代码块。当前对象绑定到自动变量"$_"，且在计
    算表达式时可用。如果表达式计算结果为"True"，则比较将被视为匹配。此表达式在新作用域中进行计算。

    Switch 语句中的"Default"关键字指示如果未找到匹配项，则计算该关键字之后的代码块。块与块之
    间不允许存在程序流，因为复合列表中的右括号 (}) 就是一个显式的 break。

    如果找到多个匹配项，每个匹配项都会导致表达式被执行。为避免发生这种情况，可以使用 Break 或
    Continue 关键字停止进一步的比较。

另请参阅
    about_Break
    about_Continue
    about_If
    about_Script_Blocks


about_Throw

主题
    about_Throw

简短说明
    介绍用于生成终止错误 Throw 关键字。

详细说明
    Throw 关键字可生成终止错误。可以使用 Throw 关键字来停止命令、函数或脚本的执行。

    例如，可在 If 语句的脚本块中使用 Throw 关键字对某个条件做出响应，也可在 Try-Catch-Finally 语句的
    Catch 块中使用该关键字。另外，还可在参数声明中使用 Throw 关键字将某个函数参数设为必需参数。

    Throw 关键字可引发任何对象，如用户消息字符串或导致错误的对象。

 语法
    Throw 关键字的语法如下：

        throw [<expression>]

    Throw 语法中的表达式为可选项。如果 Throw 语句并不是在 Catch 块中出现，并且不包括表达式，那么它将生
    成 ScriptHalted 错误。

        C:\PS> throw

        ScriptHalted
        At line:1 char:6
        + throw <<<<
            + CategoryInfo          : OperationStopped: (:) [], RuntimeException
            + FullyQualifiedErrorId : ScriptHalted

    如果在 Catch 块中使用 Throw 关键字且不带表达式，它将再次引发当前 RuntimeException。有关详细信
    息，请参阅 about_Try_Catch_Finally。

 引发字符串
    Throw 语句中的可选表达式可以是一个字符串，如以下示例所示：

        C:\PS> throw "This is an error."

        This is an error.
        At line:1 char:6
        + throw <<<<  "This is an error."
            + CategoryInfo          : OperationStopped: (This is an error.:String) [], RuntimeException
            + FullyQualifiedErrorId : This is an error.

 引发其他对象
    该表达式也可以是对象，如以下示例所示，它引发表示 PowerShell 进程的对象。

        C:\PS> throw (get-process powershell)

        System.Diagnostics.Process (powershell)
        At line:1 char:6
        + throw <<<<  (get-process powershell)
            + CategoryInfo          : OperationStopped: (System.Diagnostics.Process (powershell):Process) [],
                        RuntimeException
            + FullyQualifiedErrorId : System.Diagnostics.Process (powershell)

    可使用自动变量 $error 中 ErrorRecord 对象的 TargetObject 属性来检查错误。

        C:\PS> $error[0].targetobject

        Handles  NPM(K)    PM(K)      WS(K) VM(M)   CPU(s)     Id ProcessName
        -------  ------    -----      ----- -----   ------     -- -----------
            319      26    61016      70864   568     3.28   5548 powershell

    还可引发 ErrorRecord 对象或 .NET Framework 异常。以下示例使用 Throw 关键字引发一个
    System.FormatException 对象。

        C:\PS> $formatError = new-object system.formatexception

        C:\PS> throw $formatError

        One of the identified items was in an invalid format.
        At line:1 char:6
        + throw <<<<  $formatError
            + CategoryInfo          : OperationStopped: (:) [], FormatException
            + FullyQualifiedErrorId : One of the identified items was in an invalid format.

 产生的错误
    Throw 关键字可生成 ErrorRecord 对象。ErrorRecord 对象的 Exception 属性包含一个
    RuntimeException 对象。ErrorRecord 对象和 RuntimeException 对象的其余属性随 Throw 关键字所
    引发对象的不同而有所区别。

    RunTimeException 对象包装在 ErrorRecord 对象中，ErrorRecord 对象自动保存在 $Error 自动变量中。

 使用 Throw 创建必需参数
    可使用 Throw 关键字将某个函数参数设为必需参数。

    这是使用 Parameter 关键字的 Mandatory 参数的替代方法。使用 Mandatory 参数时，系统会提示用户输入
    必需的参数值。使用 Throw 关键字时，该命令会停止并会显示错误记录。

    例如，参数子表达式中的 Throw 关键字将使 Path 参数成为函数中的必需参数。

    在下面的例子中，Throw 关键字引发一个消息字符串，但正是因为存在 Throw 关键字，才会在未指定 Path 参数
    时生成终止错误。Throw 后的表达式为可选项。

        function Get-XMLFiles
        {
            param ($path = $(throw "The Path parameter is required."))
            dir -path $path\* -include *.xml -recurse | sort lastwritetime | ft lastwritetime, attributes, name  -auto
        }

另请参阅
    about_Break
    about_Continue
    about_Scope
    about_Trap
    about_Try_Catch_Finally


about_Transactions

主题
    about_Transactions

简短说明
    介绍如何管理 Windows PowerShell 中的事务处理操作。

详细说明
    Windows PowerShell 从 Windows PowerShell 2.0 开始支持事务。利用此功能，您可以启动事
    务，指示哪些命令包含在事务中，以及提交或回滚事务。

  关于事务

      在 Windows PowerShell 中，事务是作为一个逻辑单元进行管理的一个或多个命令的集合。可以完
      成（"提交"）一个事务，此操作将更改受事务影响的数据。也可以完全撤消（"回滚"）一个事务，这
      样受影响的数据不会被事务更改。

      由于事务中的命令作为一个单元进行管理，因此所有命令不是全部提交就是全部回滚。

      事务广泛用于数据处理中，特别是数据库操作中的处理和财务交易记录处理。事务最常用于以下这种情况：
      一组命令的最坏情形并非所有命令都失败，而是部分命令成功而其他命令失败，从而使系统处于难以修复的
      损坏、错误或无法解释的状态。

  事务 CMDLET

      Windows PowerShell 包括几个为管理事务而设计的 cmdlet。

      Cmdlet                 说明
      --------------         ---------------------------------
      Start-Transaction      启动一个新事务。

      Use-Transaction        向事务中添加命令或表达式。添加的命令必须使用支持事务的对象。

      Undo-Transaction       回滚事务，以便任何数据都不会被事务更改。

      Complete-Transaction   提交事务。受事务影响的数据将被更改。

      Get-Transaction        获取有关活动事务的信息。

      要获取事务 cmdlet 的列表，请键入：

          get-command *transaction

      有关 cmdlet 的详细信息，请键入：

      get-help <cmdlet-name> -detailed

      例如：

      get-help use-transaction -detailed

  支持事务的元素

      若要参与一个事务，cmdlet 和提供程序必须都支持该事务。此功能内置于受事务影响的对象中。

      Windows PowerShell Registry 提供程序支持 Windows Vista 中的事务。
      TransactedString 对象 (Microsoft.PowerShell.Commands.Management.TransactedString)
      可用于运行 Windows PowerShell 的任何操作系统。

      其他 Windows PowerShell 提供程序可以支持事务。若要查找会话中支持事务的 Windows PowerShell
      提供程序，请使用下面的命令在提供程序的 Capabilities 属性中查找"Transactions"值：

      get-psprovider | where {$_.Capabilities -like "*transactions*"}

      有关提供程序的详细信息，请参阅该提供程序的帮助。
      若要获取提供程序帮助，请键入：

      get-help <provider-name>

      例如，若要获取 Registry 提供程序的帮助，请键入：

      get-help registry

  USETRANSACTION 参数

      可以支持事务的 cmdlet 具有 UseTransaction 参数。此参数将命令包含在活动事务中。可以使用完整参数
      名称或其别名"usetx"。

      仅当会话包含活动事务时才能使用该参数。如果在没有活动事务时使用 UseTransaction 参数输入一
      个命令，则该命令将失败。

      若要查找带 UseTransaction 参数的 cmdlet，请键入：

      get-help * -parameter UseTransaction

      在 Windows PowerShell 核心中，为 Windows PowerShell 提供程序设计的所有 cmdlet 都支
      持事务。因此可以使用提供程序 cmdlet 来管理事务。

      有关 Windows PowerShell 提供程序的详细信息，请参阅 about_Providers。

  事务对象

      事务在 Windows PowerShell 中由事务对象 System.Management.Automation.Transaction 表示。

      该对象具有以下属性：

      RollbackPreference：
          包含当前事务的回滚首选项设置。可以在使用 Start-Transaction 启动事务时设置回滚首选项。

          回滚首选项确定自动回滚事务的条件。有效值为 Error、TerminatingError 和 Never。默认值为 Error。

      Status：
         包含事务的当前状态。有效值为 Active、Committed 和 RolledBack。

      SubscriberCount：
         包含事务的订阅者数目。如果启动一个事务时另一个事务正在进行，则会向事务添加一个订阅者。
         当订阅者提交事务时，订阅者计数会递减。

  活动事务

      在 Windows PowerShell 中，每次只能有一个事务处于活动状态，并且您只能管理活动事务。可以
      在同一个会话中同时运行多个事务，但只有最近启动的事务才处于活动状态。

      因此，不能在使用事务 cmdlet 时指定特定事务。命令始终应用于活动事务。

      在 Get-Transaction cmdlet 的行为中，这一点最明显。在输入 Get-Transaction 命令时，
      Get-Transaction 始终仅获取一个事务对象。此对象就是表示活动事务的对象。

      若要管理其他事务，必须首先完成活动事务，可以通过提交或回滚该事务来完成它。在完成该事务后，
      上一个事务将自动成为活动事务。事务变为活动事务的顺序与启动这些事务的顺序相反，因此最近启动的
      事务始终处于活动状态。

  订阅者和独立事务

      如果在启动一个事务时另一个事务正在进行，默认情况下，Windows PowerShell 不会启动新事务，
      而是将一个"订阅者"添加到当前事务中。

      如果事务包含多个订阅者，则无论在哪个环节，只需一个 Undo-Transaction 命令即可为所有订阅者
      回滚整个事务。但是，要提交该事务，必须为每个订阅者都输入一个 Complete-Transaction 命令。

      若要获取事务订阅者的数目，请检查事务对象的 SubscriberCount 属性。例如，下面的命令使用
      Get-Transaction cmdlet 获取活动事务的 SubscriberCount 属性的值：

          (Get-Transaction).SubscriberCount

      添加订阅者是默认行为，因为多数事务都会与在启动时已经存在的原始事务相关。在典型模型中，
      包含事务的脚本将调用包含自己的事务的帮助程序脚本。由于这些事务是相关的，因此应作为一个
      单元回滚或提交。

      但是，可以使用 Start-Transaction cmdlet 的 Independent 参数启动独立于当前事务的事务。

      在启动独立事务时，Start-Transaction 会创建一个新的事务对象，然后这个新事务将成为活动事
      务。可以提交或回滚独立事务，而不会影响原始事务。

      当完成（已提交或已回滚）独立事务时，原始事务将恢复为活动事务。

  更改数据

      在使用事务更改数据时，受事务影响的数据在提交该事务后才会发生更改。
      但是，相同数据可由不包含在事务中的命令进行更改。

      在使用事务管理共享数据时，请牢记这一点。通常情况下，数据库包含的一些机制可在您使用
      数据时锁定该数据，从而防止其他用户以及其他命令、脚本和函数更改该数据。

      但是，锁定是数据库的一种功能，与事务无关。如果正在处理支持事务的文件系统或其他数据存储，
      则数据可能在事务正在进行时发生更改。

示例
    本节中的示例使用 Windows PowerShell Registry 提供程序，并假定您熟悉该提供程序。有关
    Registry 提供程序的信息，请键入"get-help registry"。

  示例 1：提交事务

    若要创建事务，请使用 Start-Transaction cmdlet。下面的命令使用默认设置启动事务。

     start-transaction

    若要在事务中包含命令，请使用 cmdlet 的 UseTransaction 参数。默认情况下，命令不包含在事务
    中。

    例如，下面的命令（用于将当前位置设置到 HKCU: 驱动器的 Software 项中）不包含在事务中。

        cd hkcu:\Software

    下面的命令（用于创建 MyCompany 项）使用 New-Item cmdlet 的 UseTransaction 参数将该命
    令包含在活动事务中。

        new-item MyCompany -UseTransaction

    该命令返回一个表示新建项的对象，但由于该命令包含在事务中，因此尚未更改注册表。

        Hive: HKEY_CURRENT_USER\Software

        SKC  VC Name                           Property
        ---  -- ----                           --------
          0   0 MyCompany                      {}

    若要提交该事务，请使用 Complete-Transaction cmdlet。
    由于该 cmdlet 总是对活动事务起作用，因此不能指定该事务。

    complete-transaction

    结果是，MyCompany 项将添加到注册表中。

    dir m*

        Hive: HKEY_CURRENT_USER\software

        SKC  VC Name                           Property
        ---  -- ----                           --------
         83   1 Microsoft                      {(default)}
          0   0 MyCompany                      {}

  示例 2：回滚事务

    若要创建事务，请使用 Start-Transaction cmdlet。下面的命令使用默认设置启动事务。

     start-transaction

    下面的命令（用于创建 MyOtherCompany 项）使用 New-Item cmdlet 的 UseTransaction 参数
    将该命令包含在活动事务中。

        new-item MyOtherCompany -UseTransaction

    该命令返回一个表示新建项的对象，但由于该命令包含在事务中，因此尚未更改注册表。

        Hive: HKEY_CURRENT_USER\Software

        SKC  VC Name                           Property
        ---  -- ----                           --------
          0   0 MyOtherCompany                 {}

    若要回滚该事务，请使用 Undo-Transaction cmdlet。
    由于该 cmdlet 总是对活动事务起作用，因此不要指定该事务。

    Undo-transaction

    结果是，MyOtherCompany 项未添加到注册表中。

    dir m*

        Hive: HKEY_CURRENT_USER\software

        SKC  VC Name                           Property
        ---  -- ----                           --------
         83   1 Microsoft                      {(default)}
          0   0 MyCompany                      {}

  示例 3：预览事务

    在事务中使用的命令通常会更改数据。但是，在事务中使用获取数据的命令也有用处。
    因为这些命令在事务内获取数据，所以可使您预览提交事务将会导致的更改。

    下面的示例演示如何使用 Get-ChildItem 命令（别名为"dir"）预览事务中所做的更改。

    下面的命令启动一个事务。

    start-transaction

    下面的命令使用 New-ItemProperty cmdlet 将 MyKey 注册表条目添加到 MyCompany 项中。该命令使用
    UseTransaction 参数将自身包括在事务中。

        new-itemproperty -path MyCompany -Name MyKey -value 123 -UseTransaction

    该命令会返回一个表示新注册表条目的对象，但该注册表条目未被更改。

        MyKey
        -----
        123

    若要获取当前位于注册表中的项，请使用不带 UseTransaction 参数的 Get-ChildItem 命令
    （"dir"）。下面的命令获取以"M"开头的项。

    dir m*

    结果显示，尚未向 MyCompany 项中添加任何项目。

        Hive: HKEY_CURRENT_USER\Software

        SKC  VC Name                           Property
        ---  -- ----                           --------
        83   1 Microsoft                      {(default)}
         0   0 MyCompany                      {}

    若要预览提交事务的效果，请带 UseTransaction 参数输入 Get-ChildItem（"dir"）命令。此命
    令可显示从事务内获取的数据。

    dir m* -useTransaction

    结果显示，如果提交事务，MyKey 项将添加到 MyCompany 项中。

        Hive: HKEY_CURRENT_USER\Software

        SKC  VC Name                           Property
        ---  -- ----                           --------
        83   1 Microsoft                      {(default)}
         0   1 MyCompany                      {MyKey}

  示例 4：合用事务处理命令和非事务处理命令

    可以在事务过程中输入非事务处理命令。非事务处理命令会立即影响数据，但不会影响事务。

    下面的命令在 HKCU:\Software 注册表项中启动一个事务。

    start-transaction

    下面三个命令使用 New-Item cmdlet 将项添加到注册表中。第一个和第三个命令使用
    UseTransaction 参数将自身包含在事务中。第二个命令省略了该参数。由于第二个命令不包含在事务
    中，因此它会立即生效。

        new-item MyCompany1 -UseTransaction

        new-item MyCompany2

        new-item MyCompany3 -UseTransaction

    若要查看注册表的当前状态，请使用不带 UseTransaction 参数的 Get-ChildItem（"dir"）命
    令。以下命令获取以"M"开头的项。

    dir m*

    结果显示 MyCompany2 项已添加到注册表中，但作为事务一部分的 MyCompany1 和 MyCompany3 项
    未添加到注册表中。

        Hive: HKEY_CURRENT_USER\Software

        SKC  VC Name                           Property
        ---  -- ----                           --------
        83   1 Microsoft                      {(default)}
        0    0 MyCompany2                     {}

    下面的命令提交该事务。

        complete-transaction

    现在，作为事务一部分添加的项将出现在注册表中。

    dir m*

        Hive: HKEY_CURRENT_USER\Software

        SKC  VC Name                           Property
        ---  -- ----                           --------
        83   1 Microsoft                      {(default)}
        0    0 MyCompany1                     {}
        0    0 MyCompany2                     {}
        0    0 MyCompany3                     {}

  示例 5：使用自动回滚

    如果事务中的命令发生任何错误，事务都会自动回滚。

    此默认行为是为运行事务的脚本而设计的。通常情况下，脚本都经过良好的测试并且包括错误处理逻辑，
    因此错误是意外错误并且应终止事务。

    第一个命令在 HKCU:\Software 注册表项中启动一个事务。

    start-transaction

    下一个命令使用 New-Item cmdlet 将 MyCompany 项添加到注册表中。该命令使用 UseTransaction 参
    数（别名是"usetx"）将自身包含在事务中。

    New-Item MyCompany -UseTX

    由于注册表中已存在 MyCompany 项，该命令将失败，事务将回滚。

        New-Item : A key at this path already exists
        At line:1 char:9
        + new-item <<<<  MyCompany -usetx

    Get-Transaction 命令确认事务已回滚并且 SubscriberCount 为 0。

        RollbackPreference   SubscriberCount   Status
        ------------------   ---------------   ------
        Error                0                 RolledBack

  示例 6：更改回滚首选项

    如果希望提高事务的容错性，可以使用 Start-Transaction 的 RollbackPreference 参数更改首
    选项。

    下面的命令使用回滚首选项"Never"启动事务。

         start-transaction -rollbackpreference Never

    在此情况下，当命令失败时，该事务不会自动回滚。

    New-Item MyCompany -UseTX

        New-Item : A key at this path already exists
        At line:1 char:9
        + new-item <<<<  MyCompany -usetx

    由于该事务仍处于活动状态，因此可以作为事务的一部分重新提交该命令。

    New-Item MyOtherCompany -UseTX

  示例 7：使用 USE-TRANSACTION CMDLET

    利用 Use-Transaction cmdlet 可以针对支持事务的 Microsoft .NET Framework 对象直接编写脚本。
    Use-Transaction 采用的脚本块只能包含使用支持事务的 .NET Framework 对象（例如
    Microsoft.PowerShell.Commands.Management.TransactedString 类的实例）的命令和表达式。

    下面的命令启动一个事务。

         start-transaction

    下面的 New-Object 命令将创建 TransactedString 类的实例并将其保存在 $t 变量中。

         $t = New-Object Microsoft.PowerShell.Commands.Management.TransactedString

    下面的命令使用 TransactedString 对象的 Append 方法将文本添加到字符串中。由于该命令未包含在事务
    中，因此所做更改会立即生效。

     $t.append("Windows")

    下面的命令使用同一 Append 方法添加文本，但在事务中进行添加。该命令括在大括号中，并且它设置为
    Use-Transaction 的 ScriptBlock 参数的值。UseTransaction 参数 (UseTx) 是必需的。

     use-transaction {$t.append(" PowerShell")} -usetx

    若要查看 $t 中事务处理字符串的当前内容，请使用 TransactedString 对象的 ToString 方法。

     $t.tostring()

    输出显示只有非事务处理更改生效。

     Windows

    若要在事务内查看 $t 中事务处理字符串的当前内容，请在 Use-Transaction 命令中嵌入以下表达式。

     use-transaction {$s.tostring()} -usetx

    输出将显示事务视图。

     Windows PowerShell

    下面的命令提交该事务。

     complete-transaction

    若要查看最终字符串：

     $t.tostring()

     Windows PowerShell

  示例 7：管理多订阅者事务

    如果在启动一个事务时另一个事务正在进行，则在默认情况下 Windows PowerShell 不会再创建一个事
    务，而是将一个订阅者添加到当前事务中。

    以下示例演示如何查看和管理多订阅者事务。

    首先在 HKCU:\Software 项中启动一个事务。

        start-transaction

    下面的命令使用 Get-Transaction 命令获取活动事务。

    get-transaction

    结果会显示表示活动事务的对象。

        RollbackPreference   SubscriberCount   Status
        ------------------   ---------------   ------
        Error                1                 Active

    下面的命令将 MyCompany 项添加到注册表中。
    该命令使用 UseTransaction 参数将自身包括在事务中。

        new-item MyCompany -UseTransaction

    下面的命令使用 Start-Transaction 命令启动一个事务。虽然此命令是在命令提示符下键入的，但在
    运行包含事务的脚本时更可能出现这种情形。

        start-transaction

    Get-Transaction 命令显示事务对象的订阅者计数增加。现在的值为 2。

        RollbackPreference   SubscriberCount   Status
        ------------------   ---------------   ------
        Error                2                 Active

    下面的命令使用 New-ItemProperty cmdlet 将 MyKey 注册表条目添加到 MyCompany 项中。该命令使用
    UseTransaction 参数将自身包括在事务中。

        new-itemproperty -path MyCompany -name MyKey -UseTransaction

    MyCompany 项在注册表中不存在，但此命令会成功，因为这两个命令包含在同一事务中。

    下面的命令提交该事务。如果它回滚该事务，则会为所有订阅者回滚该事务。

    complete-transaction

    Get-Transaction 命令显示事务对象的订阅者计数为 1，但 Status 的值仍为 Active（未提交）。

        RollbackPreference   SubscriberCount   Status
        ------------------   ---------------   ------
        Error                1                 Active

    若要完成事务的提交，请再输入一个 Complete-Transaction 命令。若要提交多订阅者事务，必须为
    每个 Complete-Transaction 命令都输入一个 Start-Transaction 命令。

         complete-transaction

    再运行 Get-Transaction 命令会显示该事务已提交。

        RollbackPreference   SubscriberCount   Status
        ------------------   ---------------   ------
        Error                0                 Committed

  示例 8：管理独立事务

    如果在启动一个事务时另一个事务正在进行，可以使用 Start-Transaction 的 Independent 参数
    使新事务独立于原始事务。

    这样，Start-Transaction 会创建一个新的事务对象，然后使这个新事务成为活动事务。

    首先在 HKCU:\Software 项中启动一个事务。

        start-transaction

    下面的命令使用 Get-Transaction 命令获取活动事务。

    get-transaction

    结果会显示表示活动事务的对象。

        RollbackPreference   SubscriberCount   Status
        ------------------   ---------------   ------
        Error                1                 Active

    下面的命令在事务中添加 MyCompany 注册表项。该命令使用 UseTransaction 参数 (UseTx) 将自身包含在
    活动事务中。

    new-item MyCompany -usetx

    下面的命令启动一个新事务。该命令使用 Independent 参数指示此事务并非活动事务的订阅者。

         start-transaction -independent

    在创建独立事务时，新事务（即最近创建的事务）将成为活动事务。可以使用 Get-Transaction 命令
    获取活动事务。

    get-transaction

    请注意，事务的 SubscriberCount 为 1，指示没有其他订阅者并且事务为新事务。

        RollbackPreference   SubscriberCount   Status
        ------------------   ---------------   ------
        Error                1                 Active

    必须完成（已提交或已回滚）新事务才能管理原始事务。

    下面的命令将 MyOtherCompany 项添加到注册表中。
    该命令使用 UseTransaction 参数 (UseTx) 将自身包含在活动事务中。

        new-item MyOtherCompany -usetx

    现在回滚该事务。如果一个事务有两个订阅者，则回滚该事务将会为所有订阅者回滚整个事务。

    但是，由于现在这些事务是彼此独立的，因此回滚最新事务将会取消其中的注册表更改并使原始事务成为活动事务。

        undo-transaction

    Get-Transaction 命令确认原始事务在会话中仍处于活动状态。

    get-transaction

        RollbackPreference   SubscriberCount   Status
        ------------------   ---------------   ------
        Error                1                 Active

    下面的命令提交活动事务。

        complete-transaction

    Get-ChildItem 命令显示注册表已发生更改。

    dir m*

        Hive: HKEY_CURRENT_USER\Software

        SKC  VC Name                           Property
        ---  -- ----                           --------
        83   1 Microsoft                      {(default)}
         0   0 MyCompany                      {}

另请参阅
    Start-Transaction
    Get-Transaction
    Complete-Transaction
    Undo-Transaction
    Use-Transaction
    Registry（提供程序）
    about_Providers
    Get-PSProvider
    Get-ChildItem


about_Trap

主题
    about_Trap

简短说明
    介绍用于处理终止错误的关键字。

详细说明
    终止错误会停止语句运行。如果 Windows PowerShell 不以某些方式处理终止错误，Windows PowerShell
    还会停止运行当前管道中的函数或脚本。在其他语言（如 C#）中，将终止错误称为异常。

    Trap 关键字指定在出现终止错误时要运行的语句列表。Trap 语句用于处理终止错误并允许继续而不是
    停止执行脚本或函数。

  语法

      Trap 语句的语法如下：

          trap [[<error type>]] {<statement list>}

      Trap 语句中包含在出现终止错误时要运行的语句列表。Trap 关键字可以选择指定错误类型。
      错误类型需要用方括号括起。

      一个脚本或命令可具有多个 Trap 语句。Trap 语句可出现在脚本或命令中的任何位置。

  捕获所有终止错误

      当脚本或命令中出现未另作处理的终止错误时，Windows PowerShell 会检查是否存在可处理该错误的 Trap
      语句。如果存在 Trap 语句，Windows PowerShell 会继续运行 Trap 语句中的脚本或命令。

      以下示例是一个非常简单的 Trap 语句：

          trap {"Error found."}

      此 Trap 语句可捕获任何终止错误。以下示例是包含此 Trap 语句的一个函数：

          function TrapTest {
              trap {"Error found."}
              nonsenseString
              }

      此函数包含一个会导致错误的无用字符串。运行此函数会返回以下结果：

          C:\PS> TrapTest
          Error found.

      以下示例包含一个 Trap 语句，该语句使用 $_ 自动变量显示错误：

          function TrapTest {
              trap {"Error found: $_"}
              nonsenseString
              }

      运行此版本的函数会返回以下结果：

          C:\PS> TrapTest
          Error found: The term 'nonsenseString' is not recognized as the name
          of a cmdlet, function, script file, or operable program. Check the
          spelling of the name, or if a path was included verify that the path
          is correct, and then try again.

      Trap 语句还可以更复杂。Trap 语句可包含多个条件或函数调用。它可以记录、测试甚至运行其他程序。

   捕获指定的终止错误

      下例所示 Trap 语句可捕获 CommandNotFoundException 错误类型：

          trap [System.Management.Automation.CommandNotFoundException]
              {"Command error trapped"}

      当函数或脚本遇到与已知命令不匹配的字符串时，此 Trap 语句会显示"Command error trapped"字符
      串。在运行 Trap 语句列表中的所有语句之后，Windows PowerShell 会将错误对象写入错误流然后继续运行
      脚本。

      Windows PowerShell 使用 Microsoft .NET Framework 异常类型。以下示例指定
      System.Exception 错误类型：

          trap [System.Exception] {"An error trapped"}

      CommandNotFoundException 错误类型继承自 System.Exception 类型。此语句捕获由未知命令产生的错
      误，还捕获其他类型的错误。

      一个脚本中可以有多个 Trap 语句。每个错误只能由一个 Trap 语句捕获。如果出现错误，并且有多个 Trap
      语句可用，则 Windows PowerShell 会使用包含与该错误最精确匹配的错误类型的 Trap 语句。

      下面的脚本示例包含一个错误。该脚本包含一个可捕获任何终止错误的常规 Trap 语句，以及一个指定了
      CommandNotFoundException 类型的特定 Trap 语句。

          trap {"Other terminating error trapped" }
          trap [System.Management.Automation.CommandNotFoundException] {"Command error trapped"}
          nonsenseString

      运行此脚本将产生以下结果：

          Command  error trapped
          The term 'nonsenseString' is not recognized as the name of a cmdlet,
          function, script file, or operable program. Check the spelling of
          the name, or if a path was included verify that the path is correct,
          and then try again.
          At C:\PS>testScript1.ps1:3 char:19
          +     nonsenseString <<<<

      由于 Windows PowerShell 不会将"nonsenseString"识别为 cmdlet 或其他项目，因此它会返回
      CommandNotFoundException 错误。此终止错误被特定 Trap 语句捕获。

      以下脚本示例包含相同的 Trap 语句但指定了不同的错误：

          trap {"Other terminating error trapped" }
          trap [System.Management.Automation.CommandNotFoundException]
              {"Command error trapped"}
          1/$null

      运行此脚本将产生以下结果：

          Other terminating error trapped
          Attempted to divide by zero.
          At C:PS> errorX.ps1:3 char:7
          +   1/ <<<< $null

      除以零操作不产生 CommandNotFoundException 错误。该错误由另一可捕获任何终止错误的 Trap 语句捕获。

  捕获错误和作用域

      如果终止错误出现的作用域与 Trap 语句的作用域相同，则在运行 Trap 语句后，Windows PowerShell 会
      继续执行错误后的语句。如果 Trap 语句与错误处在不同的作用域中，则会继续执行与 Trap 语句处在同一作用
      域的下一条语句。

      例如，如果函数中出现一个错误，并且 Trap 语句也在该函数中，则脚本会继续执行下一条语句。例如，下面的
      脚本包含一个错误和一条 Trap 语句：

          function function1 {
              trap { "An error: " }
              NonsenseString
              "function1 was completed"
              }

      以后在该脚本中运行 Function1 函数将产生以下结果：

          function1
          An error:
          The term 'NonsenseString' is not recognized as the name of a cmdlet,
          function, script file, or operable program. Check the spelling of the
          name, or if a path was included verify that the path is correct, and
          then try again.
          At C:\PS>TestScript1.ps1:3 char:19
          +     NonsenseString <<<<

          function1 was completed

      该函数中的 Trap 语句捕获错误。在显示该消息后，Windows PowerShell 会继续运行该函数。请注意，
      Function1 已完成。

      请比较上一示例与下面的示例，下面的示例具有与上一示例相同的错误和 Trap 语句。但在下面的示例中，Trap
      语句出现在函数之外：

          function function2 {
              NonsenseString
              "function2 was completed"
              }

          trap { "An error: " }
              . . .
          function2

      以后在该脚本中运行 Function2 函数将产生以下结果：

          An error:
          The term 'NonsenseString' is not recognized as the name of a cmdlet,
          function, script file, or operable program. Check the spelling of the
          name, or if a path was included verify that the path is correct, and
          then try again.
          At C:\PS>TestScript2.ps1:4 char:19
          +     NonsenseString <<<<

      在此示例中，"function2 was completed"命令没有运行。虽然两个终止错误都出现在函数之内，但如果
      Trap 语句在函数之外，则在 Trap 语句运行后 Windows PowerShell 不会返回到函数中。

  使用 Break 和 Continue 关键字

      可以在 Trap 语句中使用 Break 和 Continue 关键字来确定在发生终止错误后脚本或命令是否继续运行。

      如果在 Trap 语句列表中包括 Break 语句，Windows PowerShell 会停止函数或脚本。下面的示例函数在
      Trap 语句中使用 Break 关键字：

          C:\PS> function break_example {
              trap {"Error trapped"; break;}
              1/$null
              "Function completed."
              }

          C:\PS> break_example
          Error trapped
          Attempted to divide by zero.
          At line:4 char:7

      由于该 Trap 语句包含了 Break 关键字，因此该函数不会继续运行，"Function completed"行没有运行。

      如果在 Trap 语句中包括 Continue 语句，Windows PowerShell 会在导致错误的语句之后继续运行，就像
      没有使用 Break 或 Continue 一样。但是，如果使用 Continue 关键字，Windows PowerShell 不会将错
      误写入错误流。

      下面的示例函数在 Trap 语句中使用 Continue 关键字：

          C:\PS> function continue_example {
              trap {"Error trapped"; continue;} 1/$null
              "Function completed."}

          C:\PS> continue_example
          Error trapped
          Function completed.

      该函数会在捕获错误后继续运行，并且"Function completed"语句会运行。任何错误都不会被写入错误流。

另请参阅
    about_Break
    about_Continue
    about_Throw
    about_Try_Catch_Finally
    about_Scopes


about_Try_Catch_Finally

主题
    about_Try_Catch_Finally

简短说明
    说明如何使用 Try、Catch 和 Finally 块处理终止错误。

详细说明
    在脚本中，可用 Try、Catch 和 Finally 块来响应或处理终止错误。在脚本中也可用 Trap 语句来
    处理终止错误。有关详细信息，请参阅 about_Trap。

    终止错误会停止语句运行。如果 Windows PowerShell 不以某些方式处理终止错误，Windows
    PowerShell 还会停止运行当前管道中的函数或脚本。在其他语言（如 C#）中，将终止错误称为异
    常。有关错误的详细信息，请参阅 about_Errors。

    使用 Try 块可定义一段脚本，让 Windows PowerShell 监视错误。如果 Try 块内发生错误，则
    首先将错误保存到 $Error 自动变量中。然后，Windows PowerShell 搜索 Catch 块来处理这一
    错误。如果 Try 语句没有匹配的 Catch 块，则 Windows PowerShell 继续在父作用域中搜索适当
    的 Catch 块或 Trap 语句。完成 Catch 块后，或者未找到适当的 Catch 块或 Trap 语句，则运
    行 Finally 块。如果错误无法处理，则将错误写入错误流。

    Catch 块可以包含用于跟踪故障或恢复预期脚本流的命令。Catch 块可以指定要捕捉的错误类型。
    Try 语句可以包含多个 Catch 块，分别用于不同类型的错误。

    Finally 块可用来释放脚本不再需要的所有资源。

    Try、Catch 和 Finally 与 C# 编程语言中的 Try、Catch 和 Finally 关键字相似。

  语法
      Try 语句包含一个 Try 块，零个或多个 Catch 块，以及零个或一个 Finally 块。Try 语句必
      须至少包含一个 Catch 块或一个 Finally 块。

      下面说明 Try 块的语法：

          try {<statement list>}

      Try 关键字后紧跟用大括号括起来的语句列表。如果语句列表中的语句在运行时发生终止错误，则脚
      本将错误对象从 Try 块传递到适当的 Catch 块。

      下面说明 Catch 块的语法：

          catch [[<error type>][',' <error type>]*] {<statement list>}

      错误类型用方括号括起。最外层的方括号表明该元素是可选的。

      Catch 关键字后面是可选的错误类型列表和语句列表。如果 Try 块中发生终止错误，Windows
      PowerShell 就会搜索适当的 Catch 块。假如找到，则运行该 Catch 块中的语句。

      Catch 块可以指定一个或多个错误类型。错误类型是 Microsoft .NET Framework 异常或者
      从 .NET Framework 异常派生的异常。Catch 块处理指定的 .NET Framework 异常类的错误或
      任何从指定类派生的类的错误。

      如果 Catch 块指定一个错误类型，则该 Catch 块处理这一类型的错误。如果 Catch 块没有指
      定错误类型，则该 Catch 块处理 Try 块中发生的所有错误。Try 语句可以包含多个 Catch 块，
      分别用于不同的指定错误类型。

      下面说明 Finally 块的语法：

          finally {<statement list>}

      Finally 关键字后面是语句列表，在每次运行脚本时，即使运行 Try 语句时没有发生错误或者
      Catch 语句中捕捉到错误，都会运行该语句列表。

      注意，按 Ctrl+C 可停止管道。发送到管道的对象不会显示为输出。因此，如果要显示一句话（如
      "Finally block has run"），即使 Finally 块运行，按 Ctrl+C 后也不会显示这句话。

  捕捉错误
      以下示例脚本说明带有 Catch 块的 Try 块：

          try { NonsenseString }
          catch { "An error occurred."}

      Catch 关键字必须紧跟在 Try 块或另一个 Catch 块之后。

      Windows PowerShell 不会将"NonsenseString"识别为 cmdlet 或其他项目。在运行此脚本后，
      将返回以下结果：

          An error occurred.

      当脚本遇到"NonsenseString"时，会产生终止错误。Catch 块通过运行块内的语句列表处理这
      一错误。

  使用多个 Catch 语句
      一条 Try 语句可以有任意数量的 Catch 块。例如，下面的脚本有一个 Try 块，用于下载
      MyFile.doc，它包含两个 Catch 块：

          try
          {
             $wc = new-object System.Net.WebClient
             $wc.DownloadFile("http://www.contoso.com/MyDoc.doc")
          }
          catch [System.Net.WebException],[System.IO.IOException]
          {
              "Unable to download MyDoc.doc from http://www.contoso.com."
          }
          catch
          {
              "An error occurred that could not be resolved."
          }

      第一个 Catch 块处理 System.Net.WebException 和 System.IO.IOException 类型的错
      误。第二个 Catch 块没有指定错误类型。第二个 Catch 块处理发生的所有其他终止错误。

      Windows PowerShell 通过继承匹配错误类型。Catch 块处理指定的 .NET Framework 异常类的
      错误或任何从指定类派生的类的错误。下面的示例包含一个 Catch 块，用于捕捉"Command Not
      Found"错误：

          catch [System.Management.Automation.CommandNotFoundException]
              {"Inherited Exception" }

      指定的错误类型 CommandNotFoundException 是从 System.SystemException 类型继承而
      来。下面的示例也捕捉"Command Not Found"错误：

          catch [System.SystemException] {"Base Exception" }

      该 Catch 块处理"Command Not Found"错误以及其他从 SystemException 类型继承的错误。

      如果要指定错误类及其一个派生类，请将该派生类的 Catch 块放在常规类的 Catch 块之前。

  使用 Finally 释放资源
      要释放脚本使用的资源，请在 Try 和 Catch 块之后添加一个 Finally 块。无论 Try 块是否遇到
      终止错误，Finally 块语句都会运行。Windows PowerShell 在脚本终止之前或当前块超出作用
      域之前运行 Finally 块。

      即使按 Ctrl+C 停止脚本，Finally 块也会运行。如果 Catch 块内的 Exit 关键字停止脚本，
      Finally 块还是会运行。

另请参阅
    about_Errors
    about_Trap


about_Type_Operators

主题
    about_Type_Operators

简短说明
    说明运算符如何与 Microsoft .NET Framework 类型协同使用。

详细说明
    布尔类型运算符（-is 和 -isnot）用来判断一个对象是否是指定的 .NET Framework 类型的一个实例。如果类
    型匹配，-is 返回值为 True；否则返回值为 False。如果类型匹配，-isnot 返回值为 False；否则返回值为
    True。

    -as 运算符会尝试将输入对象转换为指定的 .NET Framework 类型。如果成功，那么返回转换后的对象。如果失
    败，则什么也不返回。也不返回错误。

    以下表格列出了 Windows PowerShell 支持的类型运算符。

    运算符  	说明                	    示例
    --------  	------------------------    --------------
    -is		当输入是一个指定的	    C:\PS> (get-date) -is [datetime]True
        .NET Framework 类型
        实例时返回 True。

    -isnot	当输入不是一个指定的	    C:\PS> (get-date) -isnot [datetime]False
         .NET Framework 类型
        实例时返回 True。

    -as		将输入转换为指定的	    C:\PS> 12/31/07 -as [datetime]Monday,
         .NET Framework 类型。	    December 31, 2007 12:00:00 AM

    类型运算符的语法如下：

        <input> <operator> [.NET type]

    也可以使用以下语法：

        <input> <operator> ".NET type"

    要指定 .NET Framework 类型，可用中括号 ([ ]) 将类型名字括起来，或者以字符串方式输入类型。例如：
    对于 System.DateTime 类型，可以输入 [DateTime] 或"datetime"。如果某个类型不在系统的根命名空间
    中，那么就要指定该对象类型的全名。"System."部分可以省略。例如，若要指定 System.Diagnostics.Process，
    可以输入 [System.Diagnostics.Process]、[Diagnostics.Process] 或者"diagnostics.process"。

    类型运算符始终返回一个布尔值，即使输入是一个对象的集合时也是如此。但是，如果输入是一个集合，那么类型运
    算符会匹配这一集合的 .NET Framework 类型。类型运算符不会匹配每个对象的类型，即使所有对象的类型完全一样
    时也是如此。

    要查找对象的 .NET Framework 类型，请使用 Get-Member cmdlet。另外，也可以结合使用所有对象的
    GetType 方法以及该方法的 FullName 属性。例如，下面的语句可以获取 Get-Culture 命令返回值的类型：

        C:\PS> (get-culture).gettype().fullname
        System.Globalization.CultureInfo

示例
    以下示例演示类型运算符的一些用法：

        C:\PS> 32 -is [Float]
        False

        C:\PS> 32 -is "int"
        True

        C:\PS> (get-date) -is [DateTime]
        True

        C:\PS> "12/31/2007" -is [DateTime]
        False

        C:\PS> "12/31/2007" -is [String]
        True

        C:\PS> (get-process powershell)[0] -is [System.Diagnostics.Pro
        cess]
        True

        C:\PS> (get-command get-member) -is [System.Management.Automat
        ion.CmdletInfo]
        True

    以下示例演示的是当输入是一个对象集合时，匹配的类型是该集合的 .NET Framework 类型，而非集合中单个对
    象的类型。

    本例中，虽然 Get-Culture 和 Get-UICulture cmdlet 都返回 System.Globalization
    .CultureInfo 对象，但是这些对象的集合却是一个 System.Object 数组。

        C:\PS> (get-culture) -is [System.Globalization.CultureInfo]
        True

        C:\PS> (get-uiculture) -is [System.Globalization.CultureInfo]
        True

        C:\PS> (get-culture), (get-uiculture) -is [System.Globalization.CultureInfo]
        False

        C:\PS> (get-culture), (get-uiculture) -is [Array]
        True

        C:\PS> (get-culture), (get-uiculture) | foreach {$_ -is [System.Globalization.CultureInfo])
        True
        True

        C:\PS> (get-culture), (get-uiculture) -is [Object]
        True

    以下示例说明如何使用 -as 运算符。

        C:\PS> "12/31/07" -is [datetime]
        False

        C:\PS> "12/31/07" -as [datetime]
        Monday, December 31, 2007 12:00:00 AM

        C:\PS> $date = "12/31/07" -as [datetime]

        C:\PS>$a -is [datetime]
        True

        C:\PS> 1031 -as [System.Globalization.CultureInfo]

        LCID             Name             DisplayName
        ----             ----             -----------
        1031             de-DE            German (Germany)

    以下示例演示了当 -as 运算符无法将输入对象转换为 .NET Framework 类型时，它什么也不会返回。

        C:\PS> 1031 -as [System.Diagnostic.Process]
        C:\PS>

另请参阅
    about_Operators


about_Types.ps1xml

主题
    about_Types.ps1xml

简短说明
    说明如何通过 Types.ps1xml 文件扩展 Windows PowerShell 中所用的 Microsoft .NET
    Framework 类型的对象。

详细说明
    Windows PowerShell 安装目录 ($pshome) 中的 Types.ps1xml 文件是基于 XML 的文本文件，通过该文件
    可以将属性和方法添加到 Windows PowerShell 中的对象中。Windows PowerShell 有一个内置
    Types.ps1xml 文件，该文件将多个元素添加到 Microsoft .NET Framework 类型中，不过，您可以创建其
    他 Types.ps1xml 文件进一步扩展这些类型。

    例如，默认情况下，数组对象 (System.Array) 有一个 Length 属性，用于列出数组中的对象数。但是，因为名
    称"length"不能清楚描述该属性，所以 Windows PowerShell 添加了一个名为"Count"的别名属性来显示该
    属性值。以下 XML 代码将 Count 属性添加到 System.Array 类型中：

<Type>
            <Name>System.Array</Name>
            <Members>
                <AliasProperty>
                    <Name>Count</Name>
                    <ReferencedMemberName>
                        Length
                    </ReferencedMemberName>
                </AliasProperty>
            </Members>
        </Type>

    要获取新 AliasProperty，请对任意数组使用 Get-Member 命令，如下面的示例所示。

        Get-Member -inputobject (1,2,3,4)

    该命令返回以下结果。

    Name           MemberType    Definition
    ----           ----------    ----------
    Count          AliasProperty Count = Length
    Address        Method        System.Object& Address(Int32 )
    Clone          Method        System.Object Clone()
    CopyTo         Method        System.Void CopyTo(Array array, Int32 index):
    Equals         Method        System.Boolean Equals(Object obj)
    Get            Method        System.Object Get(Int32 )
    ...

    这样，即可在 Windows PowerShell 中使用数组的 Count 属性或 Length 属性。例如：

    C:\PS> (1, 2, 3, 4).count
    4

    C:\PS> (1, 2, 3, 4).length
    4

  创建新的 Types.ps1xml 文件

      与 Windows PowerShell 一起安装的 .ps1xml 文件经过了数字签名以防篡改（因为格式设置中可能包含脚
      本块）。因此，若要将属性或方法添加到 .NET Framework 类型，请创建自己的 Types.ps1xml 文件，然后将这
      些文件添加到 Windows PowerShell 控制台。

      若要创建新文件，请从复制现有的 Types.ps1xml 文件入手。新文件可以使用任何名称，但其文件扩展名必须
      为 .ps1xml。您可以将新文件放在 Windows PowerShell 可访问的任何目录中，但最好将这些文件放在
      Windows PowerShell 安装目录 ($pshome) 或该安装目录的子目录中。

      保存这些新文件之后，使用 Update-TypeData cmdlet 将新文件添加到 Windows PowerShell 控制台。
      如果希望您的类型优先于内置文件中定义的类型，请使用 Update-TypeData cmdlet 的 PrependData 参数。
      Update-TypeData 只影响当前控制台。要使更改应用于以后所有的控制台，请导出当前控制台，或者将
      Update-TypeData 命令添加到 Windows PowerShell 配置文件。

  Types.ps1xml 和 Add-Member

      Types.ps1xml 文件在受影响的 Windows PowerShell 控制台中将属性和方法添加到具有指定 .NET
      Framework 类型的对象的所有实例。不过，如果只需要将属性或方法添加到某个对象的一个实例，请使用 Add-
      Member cmdlet。

      有关详细信息，请参阅 Add-Member。

  示例：向 FileInfo 对象添加 Age 成员

      此示例说明如何将 Age 属性添加到文件对象 (System.IO.FileInfo)。文件的存在时间指当前时间与创建时间
      之差（以天为单位）。

      最简单的方法是将原始 Types.ps1xml 文件用作新文件的模板。以下命令将原始文件复制到 $pshome 目录中名
      为 MyTypes.ps1xml 的文件中。

          copy-item Types.ps1xml MyTypes.ps1xml

      然后，使用任何 XML 或文本编辑器（如记事本）打开 Types.ps1xml 文件。因为 Age 属性是用脚本块计算
      的，请找到 <ScriptProperty> 标记以用作新 Age 属性的模型。

      复制代码中 <Type> 与 </Type> 标记之间的 XML，以创建脚本属性。然后，删除该文件的其余部分，但不要删
      除 <?xml> 和 <Types> 起始标记以及 </Types> 结束标记。为防止出现错误，还必须删除数字签名。

      首先处理模型脚本属性，如从原始 Types.ps1xml 文件中复制的以下脚本属性。

          <?xml version="1.0" encoding="utf-8" ?>
          <Types>
              <Type>
                 <Name>System.Guid</Name>
                    <Members>
                        <ScriptProperty>
                            <Name>Guid</Name>
                            <GetScriptBlock>$this.ToString()</GetScrip
                            tBlock>
                        </ScriptProperty>
                    </Members>
              </Type>
          </Types>

      然后，更改 .NET Framework 类型名、属性名、以及脚本块的值，以创建文件对象的 Age 属性。

          <?xml version="1.0" encoding="utf-8" ?>
          <Types>
              <Type>
                 <Name>System.IO.FileInfo</Name>
                    <Members>
                        <ScriptProperty>
                            <Name>Age</Name>
                            <GetScriptBlock>
                               ((get-date) - ($this.creationtime)).days
                            </GetScriptBlock>
                        </ScriptProperty>
                    </Members>
              </Type>
          </Types>

      在保存并关闭该文件后，使用 Update-TypeData 命令（如以下命令）将新的 Types.ps1xml 文件添加到当
      前控制台。该命令使用 PrependData 参数以高于原始文件的优先级顺序放入新文件。（有关 Update-
      TypeData 的详细信息，请参阅 Update-TypeData。）

          update-typedata -prependpath $pshome\MyTypes.ps1xml

      要测试更改，请使用 Get-ChildItem 命令获取 $pshome 目录中的 PowerShell.exe 文件，然后通过管道
      将该文件传送到 Format-List cmdlet，以列出文件的所有属性。作为更改的结果，Age 属性出现在列表中。

        get-childitem $pshome\powershell.exe | format-list -property *

        PSPath            : Microsoft.PowerShell.Core\FileSystem::C:\WINDOWS...
        PSParentPath      : Microsoft.PowerShell.Core\FileSystem::C:\WINDOWS...
        PSChildName       : powershell.exe
        PSDrive           : C
        PSProvider        : Microsoft.PowerShell.Core\FileSystem
        PSIsContainer     : False
        Age               : 16
        VersionInfo       : File:             C:\WINDOWS\system32\WindowsPow...
                    InternalName:     POWERSHELL
                    OriginalFilename: PowerShell.EXE
    ...

      此外，还可以使用以下命令显示文件的 Age 属性。

      (get-childitem $pshome\powershell.exe).age
          16

  Types.ps1xml 文件中的 XML

      文件中定义的所有类型都括在 <Types> 标记中。
      只应有一对 <Types> 标记。

      文件中提到的每个 .NET Framework 类型都应由 <Type> 标记对表示。

      类型标记必须包含以下标记：

          <Name>：一对 <Name> 标记，用于将受影响的
                  .NET Framework 类型的名称括起。

          <Members>：一对 <Members> 标记，用于将
                     为 .NET Framework 类型定义的新属性和新方法的标记括起。

      以下任一成员标记都可以放在 <Members> 标记内。

      <AliasProperty>：为现有属性定义新名称。

         <AliasProperty> 标记必须有一对 <Name> 标记，用于指定新属性的名称，还必须有一对
         <ReferencedMemberName> 标记，用于指定现有属性。
         例如，别名属性 Count 是数组对象的 Length 属性的别名。

             <Type>
                 <Name>System.Array</Name>
                 <Members>
                     <AliasProperty>
                         <Name>Count</Name>
                         <ReferencedMemberName>Length</ReferencedMembe
                         rName>
                     </AliasProperty>
                 </Members>
             </Type>

      <CodeMethod>：引用 .NET Framework 类的静态方法。

         <CodeMethod> 标记必须有一对 <Name> 标记，用于指定新方法的名称，还必须有一对
         <GetCodeReference> 标记，用于指定定义该方法的代码。
         例如，目录（System.IO.DirectoryInfo 对象）的 Mode 属性是在 Windows PowerShell
         FileSystem 提供程序中定义的代码属性。

             <Type>
                 <Name>System.IO.DirectoryInfo</Name>
                 <Members>
                     <CodeProperty>
                        <Name>Mode</Name>
                        <GetCodeReference>
                           <TypeName>Microsoft.PowerShell.Commands.FileSystemProvider</TypeName>
                           <MethodName>Mode</MethodName>
                        </GetCodeReference>
                     </CodeProperty>
                 </Members>
             </Type>

      <CodeProperty>：引用 .NET Framework 类的静态方法。

         <CodeProperty> 标记必须有一对 <Name> 标记，用于指定新属性的名称，还必须有一对
         <GetCodeReference> 标记，用于指定定义该属性的代码。
         例如，目录（System.IO.DirectoryInfo 对象）的 Mode 属性是在 Windows PowerShell
         FileSystem 提供程序中定义的代码属性。
             <Type>
                 <Name>System.IO.DirectoryInfo</Name>
                 <Members>
                     <CodeProperty>
                        <Name>Mode</Name>
                        <GetCodeReference>
                           <TypeName>Microsoft.PowerShell.Commands.FileSystemProvider</TypeName>
                           <MethodName>Mode</MethodName>
                        </GetCodeReference>
                     </CodeProperty>
                 </Members>
             </Type>

      <MemberSet>：定义成员（属性和方法）的集合。

         <MemberSet> 标记在一级 <Members> 标记之内。这些标记必须包含一对 <Name> 标记，用于括起成员
         集的名称，还必须包含一对二级 <Members> 标记，用于括起成员集中的成员（属性和方法）。任何创建属性
         （如 <NoteProperty> 或 <ScriptProperty>）或方法（如 <Method> 或 <ScriptMethod>）的标记都
     可以是集的成员。

         在 Types.ps1xml 文件中，<MemberSet> 标记用于定义.NET Framework 对象在 Windows PowerShell
     中的默认视图。这种情况下，成员集的名称（<Name> 标记内的值）始终是"PsStandardMembers"，
     属性的名称（<Name> 标记的值）为以下之一：

        - DefaultDisplayProperty：对象的单个属性。

            - DefaultDisplayPropertySet：对象的一个或多个属性。

            - DefaultKeyPropertySet：对象的一个或多个键属性。键属性标识属性值的实例，如会话历史记录
              中的项目的 ID 号等。

         例如：以下 XML 定义 Get-Service cmdlet 所返回的服务（System.ServiceProcess.ServiceController
     对象）的默认显示。它定义一个名为"PsStandardMembers"的成员集，该集由包含 Status、Name 和
     DisplayName 属性的默认属性集构成。

             <Type>
                <Name>System.ServiceProcess.ServiceController</Name>
                <Members>
                   <MemberSet>
                       <Name>PSStandardMembers</Name>
                       <Members>
                           <PropertySet>
                             <Name>DefaultDisplayPropertySet</Name>
                             <ReferencedProperties>
                                <Name>Status</Name>
                                <Name>Name</Name>
                                <Name>DisplayName</Name>
                             </ReferencedProperties>
                           </PropertySet>
                       </Members>
                   </MemberSet>
                </Members>
             </Type>

      <Method>：引用基础对象的本机方法。

      <Methods>：对象的方法集合。

      <NoteProperty>：定义具有静态值的属性。

         <NoteProperty> 标记必须有一对 <Name> 标记，用于指定新属性的名称，还必须有一对 <Value> 标
         记，用于指定该属性的值。

         例如，以下 XML 创建目录（System.IO.DirectoryInfo 对象）的 Status 属性。Status 属性的值始
         终为"Success"。

             <Type>
                 <Name>System.IO.DirectoryInfo</Name>
                 <Members>
                     <NoteProperty>
                        <Name>Status</Name>
                    <Value>Success</Value>
                     </NoteProperty>
                 </Members>
             </Type>

      <ParameterizedProperty>：接受参数并返回一个值的属性。

      <Properties>：对象的属性集合。

      <Property>：基对象的属性。

      <PropertySet>：定义对象的属性集合。

         <PropertySet> 标记必须有一对 <Name> 标记，用于指定属性集的名称，还必须有一对
         <ReferencedProperty> 标记，用于指定属性。属性的名称包含在 <Name> 标记对中。

         在 Types.ps1xml 中，<PropertySet> 标记用于为对象的默认显示定义属性集。在 <MemberSet> 标
         记的 <Name> 标记中，可以通过值"PsStandardMembers"标识默认显示。

         例如，以下 XML 创建目录（System.IO.DirectoryInfo 对象）的 Status 属性。Status 属性的值始
         终为"Success"。

             <Type>
                 <Name>System.ServiceProcess.ServiceController</Name>
                 <Members>
                     <MemberSet>
                         <Name>PSStandardMembers</Name>
                         <Members>
                             <PropertySet>
                                 <Name>DefaultDisplayPropertySet</Name>
                                 <ReferencedProperties>
                                     <Name>Status</Name
                                     <Name>Name</Name>
                                     <Name>DisplayName</Name>
                                 </ReferencedProperties>
                             </PropertySet>
                         <Members>
                     <MemberSet>
                 <Members>
             <Type>

     <ScriptMethod>：定义其值是脚本输出的方法。

         <ScriptMethod> 标记必须有一对 <Name> 标记，用于指定新方法的名称，还必须有一对 <Script> 标
         记，该标记中包含返回方法结果的脚本块。

         例如，管理对象 (System.System.Management.ManagementObject) 的
         ConvertToDateTime 和 ConvertFromDateTime 方法是脚本方法，这些方法使用
         System.Management.ManagementDateTimeConverter 类的 ToDateTime 和
     ToDmtfDateTime 静态方法。

             <Type>
                 <Name>System.Management.ManagementObject</Name>
                 <Members>
                     <ScriptMethod>
                         <Name>ConvertToDateTime</Name>
                         <Script>
                             [System.Management.ManagementDateTimeConverter]::ToDateTime($args[0])
                         </Script>
                     </ScriptMethod>
                     <ScriptMethod>
                         <Name>ConvertFromDateTime</Name>
                         <Script>
                             [System.Management.ManagementDateTimeConverter]::ToDmtfDateTime($args[0])
                         </Script>
                     </ScriptMethod>
                 </Members>
             </Type>

      <ScriptProperty>：定义其值是脚本输出的属性。

         <ScriptProperty> 标记必须有一对 <Name> 标记，用于指定新属性的名称，还必须有一对
         <GetScriptBlock> 标记，用于包含返回属性值的脚本块。

         例如，文件（System.IO.FileInfo 对象）的 VersionInfo 属性是一个脚本属性，它是通过
         System.Diagnostics.FileVersionInfo 对象的 GetVersionInfo 静态方法的 FullName
     属性获取的。

             <Type>
                <Name>System.IO.FileInfo</Name>
                <Members>
                    <ScriptProperty>
                       <Name>VersionInfo</Name>
                       <GetScriptBlock>
                           [System.Diagnostics.FileVersionInfo]::GetVersionInfo($this.FullName)
                       </GetScriptBlock>
                    </ScriptProperty>
                </Members>
             </Type>

      有关详细信息，请参阅 MSDN (Microsoft Developer Network) 库中的 Windows
      PowerShell 软件开发工具包 (SDK)，网址是 http://go.microsoft.com/fwlink/?LinkId=144538。

  Update-TypeData

      若要将 Types.ps1xml 文件加载到 Windows PowerShell 控制台，请使用 Update-TypeData cmdlet。
      如果希望您文件中的类型优先于内置文件 Types.ps1xml 中的类型，请使用 Update-TypeData 的
      PrependData 参数。Update-TypeData 仅影响当前控制台。要使更改应用于以后所有的控制
      台，请导出当前控制台，或者将 Update-TypeData 命令添加到 Windows PowerShell 配置文件。

  对 Types.ps1xml 文件进行签名

      若要对您的 Types.ps1xml 文件的用户提供保护，请使用数字签名对该文件进行签名。有关详细信息，
      请参阅 about_Signing。

另请参阅
    about_Signing
    Copy-Item
    Get-Member
    Update-TypeData


about_Variables

主题
    about_Variables

简短说明
    说明变量如何存储可用于 Windows PowerShell 的值。

详细说明
    变量是存储值的内存单元。在 Windows PowerShell 中，变量用以美元符号 ($) 开头的单字文本字符串表示，
    例如 $a、$process 或 $my_var。

    在 Windows PowerShell 中，有几种不同类型的变量。

    -- 用户创建的变量：用户创建的变量由用户创建和维护。默认情况下，在 Windows PowerShell 命令行中创建
       的变量只在 Windows PowerShell 窗口打开时存在。关闭该窗口后，变量也不再存在。
       若要保存变量，请将其添加到 Windows PowerShell 配置文件中。此外，还可以在脚本中创建具有全局、脚
       本或局部作用域的变量。

    -- 自动变量：自动变量存储 Windows PowerShell 的状态。这些变量由 Windows PowerShell 创建，
       Windows PowerShell 根据需要更改变量值以保持其准确性。用户不能更改这些变量的值。
       例如，$PSHome 变量存储 Windows PowerShell 安装目录的路径。有关自动变量的详细信息、列表和说明，
       请参阅 about_Automatic_Variables。

    -- 首选项变量：首选项变量存储 Windows PowerShell 的用户首选项。这些变量由 Windows PowerShell
       创建，并以默认值填充。用户可以更改这些变量的值。例如，MaximumHistoryCount 可确定会话历史记录中的
       最大条目数。有关首选项变量的详细信息、列表和说明，请参阅 about_Preference_Variables。

 使用变量

    若要列出 Windows PowerShell 会话中的全部变量，请键入：

       get-variable

    若要显示任意变量的值，请键入该变量的名称（以美元符号 ($) 开头）。Windows PowerShell 通过显示其值进
    行响应。

       $<variable-name>

    例如：

        PS> $pshome
        C:\Windows\System32\WindowsPowerShell\v1.0

    若要创建新变量或更改变量的值，请使用以下格式的赋值语句：

        $<variable> = <value>

    例如：

        PS> $my-variable = 1, 2, 3

        或

        PS> $VerbosePreference = "Continue"

    若要获取表示变量的对象，请使用 Get-Variable 命令，例如：

        PS> get-variable pid

    若要使用变量，请在命令或表达式中键入变量名称（包括美元符号 ($)）。如果命令或表达式没有用引号引起，或
    者是用双引号 (") 引起的，则变量的值用于命令或表达式。如果命令是用单引号 (') 引起的，则变量名称用于表
    达式。

    例如，第一条命令获取 $profile 变量的值，该值是 Windows PowerShell 用户配置文件的路径。第二条命令
    在记事本中打开该文件。

        PS> $profile
        C:\Documents and Settings\User01\My Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1

        PS> Notepad $profile

    可以在变量中存储任何类型的对象，包括表示进程、服务、事件日记和计算机的整数、字符串、数组和哈希表。

  保存变量
      您创建的变量只在创建该变量的会话中可用。关闭会话时变量将丢失。

      若要保存变量，请将其添加到 Windows PowerShell 配置文件中。
      配置文件中的变量将添加到打开的所有 Windows PowerShell 会话中。

      例如，若要在每个 Windows PowerShell 会话中更改 $VerbosePreference 变量的值，请将以下命令添加
      到 Windows PowerShell 配置文件中。

      $VerbosePreference = "Continue"

      可以通过在文本编辑器（如记事本）中打开配置文件添加此命令，也可以使用 Add-Content 命令将此命令添加
      到配置文件中，如下所示。

      以下命令将 $VerbosePreference 变量的新值添加到"CurrentUser,AllHosts"配置文件中。

      add-content -path $profile.CurrentUserAllHosts -value '$VerbosePreference = "Continue"'

      有关 Windows PowerShell 配置文件的详细信息，请参阅 about_profiles。

 含特殊字符的变量名称

    可以使用大括号强制 Windows PowerShell 按字面解释变量名称。在创建或引用包含特殊字符（如短划线、句
    点、冒号或圆括号）的变量名称时，这尤其有用。

    若要创建包含连字符的变量名称，请用大括号将变量名称括起来。以下命令创建名称为"save-items"的变量。

        C:\PS> ${save-items} = "a", "b", "c"
        C:\PS>${save-items}
        a
        b
        c

    若要引用包含圆括号的变量名称，请用大括号将变量名称括起来。

    例如，以下命令获取"ProgramFiles(x86)"环境变量的目录存储中的子项。

        C:\PS> Get-childitem ${env:ProgramFiles(x86)}

    若要引用包含大括号的变量名称，请用大括号将变量名称括起来，并使用倒引号（转义）字符转义
    大括号。例如，若要创建名称为"this{value}is"、值为 1 的变量，请键入：

        C:\PS> ${this`{value`}is} = 1
        C:\PS> ${this`{value`}is}
        1

 VARIABLE: 驱动器

     Windows PowerShell 包含 Variable: 驱动器，其形式和功能都与文件系统驱动器相似，不过它包含的是会话
     中的变量。

     若要转到变量驱动器，请键入：

        set-location variable:

         （或"cd variable:"）

     在 Variable 驱动器中时，若要列出该驱动器中的项目（变量），请使用 Get-ChildItem cmdlet。例如：

         get-childitem

         （或者，"dir"或"ls"）

     有关 Variable: 驱动器和 Windows PowerShell Variable 提供程序的详细信息，请键入：

         get-help variable

另请参阅
    about_Automatic_Variables
    about_Environment_Variables
    about_Preference_Variables
    about_Scopes


about_While

主题
    about_While

简短说明
    说明一条语句，该语句可用于根据条件测试的结果运行命令块。

详细说明
    While 语句（亦称为 While 循环）是一种语言结构，用于创建在条件测试的计算结果为 true 时运
    行命令块中的命令的循环。While 语句比 For 语句更易于构造，这是因为它的语法结构没那么复杂。
    此外，While 语句比 Foreach 语句更为灵活，这是因为在 While 语句中可以指定条件测试来控制循环
    的运行次数。

    下面说明 While 语句的语法：

        while (<condition>){<statement list>}

    运行 While 语句时，Windows PowerShell 在进入 <statement list> 节之前计算该语句的
    <condition> 节。该语句的条件部分解析为
    true 或 false。只要条件保持为 true，则 Windows PowerShell 重新运行 <statement
    list> 节。

    语句的 <statement list> 节包含一条和多条命令，
    这些命令在每次进入或重复循环时运行。

    例如，如果 $val 变量尚未创建，或已创建且已初始化为 0，则以下 While 语句将显示从 1 到 3 的数字。

        while($val -ne 3)
        {
            $val++
            Write-Host $val
        }

    在此示例中，当 $val = 0、1、2 时，条件（$val 不等于 3）为 True。每次通过循环时，$val 都将使
    用一元递增运算符递增 1 ($val++)。最后一次通过此循环时，$val = 3。当 $val 等于 3 时，条件语句
    的计算结果为 false，因此退出循环。

    若要方便地在 Windows PowerShell 命令提示符下写入此命令，请按以下方法输入该命令：

        while($val -ne 3){$val++; Write-Host $val}

    请注意，分号将第一条命令（对 $val 加 1）与第二条命令（将 $val 的值写入控制台）分隔开。

另请参阅
    about_Comparison_Operators
    about_Foreach
    about_For


about_Wildcards

主题
    about_Wildcards

简短说明
    说明如何在 Windows PowerShell 中使用通配符。

详细说明
    在许多情况下，您可能希望对一组项（而不是单个项）运行 cmdlet。例如，您可能希望查找
    C:\Techdocs 目录中所有文件扩展名为 .ppt 的文件。如果运行以下命令，将返回该目录中的所有项：
        Get-ChildItem c:\techdocs

    此命令的问题在于，您将不得不实际检查该目录中列出的所有文档，以确定哪些文件使用了 .ppt 文件
    扩展名。不过，您可以通过在 cmdlet 的参数中使用通配符来限制返回的项。通配符是一种占位符，用于
    搜索未知值以返回特定结果。使用通配符的过程有时称为"通配"。例如，您可以重新执行前一示例，以
    便只返回 .ppt 文件：

        Get-ChildItem c:\techdocs\*.ppt

    在此示例中，将星号 (*) 用作通配符，用于指定 .ppt 文件扩展名之前可以存在任意字符。因为命令
    中包含文件扩展名，所以该命令返回的所有文件都必须带有该扩展名，但不限文件名。因此，只会返回您
    要查找的文件。

    除了星号通配符外，Windows PowerShell 还支持几种其他通配符。

        通配符	  说明		      示例      匹配	           无匹配
        --------  ------------------  --------  -----------------  --------
        *         与零或多个字符匹配  a*	A、ag、Apple       banana

        ?         与指定位置中的      ?n	an、in、on	   ran
          一个字符严格匹配

        [ ]      与一组字符匹配	      [a-l]ook	book、cook、look   took

        [ ]      与指定的字符匹配     [bc]ook	book、cook	   hook

    大多数 cmdlet 的某些参数都接受通配符。每个 cmdlet 的帮助主题都说明了哪些参数（如果有）允许
    使用通配符。对于接受通配符的参数，它们的用法是不区分大小写的。例如，?n 将返回 An、an、In、
    in、On、和 on。

    也可以在单个参数中混合使用通配符。例如，假设要显示 C:\Techdocs 目录下所有以字母 a 到 l 开
    头的 .txt 文件，则可使用以下命令：

        Get-ChildItem c:\techdocs\[a-l]*.txt

    该命令使用范围通配符 ([a-l]) 来指定文件名应以字母 a 到 l 开头。然后，该命令使用星号通配符为
    第一个字母和文件扩展名之间的所有字符提供占位符。

另请参阅
        about_Language_Keywords


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 网站
         http://go.microsoft.com/fwlink/?LinkID=106031

      -- Windows PowerShell 团队博客：
         http://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


about_Windows_PowerShell_ISE

主题
    about_Windows_PowerShell_ISE

简短说明
    说明 Windows PowerShell 集成脚本环境 (ISE) 的功能和系统要求。

详细说明
    Windows PowerShell ISE 是 Windows PowerShell 的主机应用程序。
    在 Windows PowerShell ISE 中，可以在基于 Windows 的单一图形用户界面中运行命令以及编
    写、测试和调试脚本。该环境中的功能包括多行编辑、Tab 补齐、语法着色、选择性执行、
    上下文相关帮助以及对从右到左书写语言的支持。

    注意：因为这些功能需要用户界面，所以无法在 Windows Server 的 Server Core 安装上运行。

          Windows PowerShell ISE 基于 Windows Presentation Foundation
          (WPF) 构建。如果 Windows PowerShell ISE 的图形元素未在您的系统上正确显示，可通
          过添加或调整系统上的图形显示设置来解决。如果计算机视频驱动程序较旧或您使用了虚
          拟化软件，则可能需要这样操作。有关详细信息，请参阅 MSDN 库中的“图形显示注册表
          设置”，网址是 http://go.microsoft.com/fwlink/?LinkId=144711。

 运行交互式命令

    在 Windows PowerShell ISE 中可运行任何 Windows PowerShell 表达式或命令。您可以像在
    Windows PowerShell 控制台中一样使用 cmdlet、提供程序、管理单元和模块。

    可以在"命令"窗格中键入或粘贴交互式命令。要运行这些命令，可使用按钮、菜单项和键盘快捷方式。

    可以使用多行编辑功能将多行代码一次性键入或粘贴到"命令"窗格中。当按向上键恢复上一命令时，
    将恢复该命令中的所有行。键入命令时，按 Shift+Enter 可在当前行下显示新的空白行。

 查看输出

    命令和脚本的结果显示在"输出"窗格中。可以使用键盘快捷方式或"输出"工具栏从"输出"窗格中
    移动或复制结果，然后将其粘贴到其他程序中。还可以单击"清除输出"按钮或键入下列某个命令
    来清除"输出"窗格：

        clear-host

        cls

 编写脚本和函数

    在"脚本"窗格中，可以打开、编写、编辑和运行脚本。通过"脚本"窗格，可以使用按钮和键盘快捷方式来编辑脚本。
    还可以在"脚本"窗格和"命令"窗格中之间复制、剪切和粘贴文本。

    可以使用选择性运行功能来运行整个或一部分脚本。要运行一部分脚本，请选择要运行的文本，然后单
    击"运行脚本"按钮。或者，可以按 F5。

 调试脚本

    可以使用 Windows PowerShell ISE 调试程序来调试 Windows PowerShell 脚本或函数。调试
    脚本时，可使用菜单项和快捷键来执行在 Windows PowerShell 控制台中可执行的许多相同任务。
    例如，要在脚本中设置行断点，可右键单击代码行，然后单击"切换断点"。

    还可以在"命令"窗格中使用 Windows PowerShell 调试程序 cmdlet，就像在控制台中使用它们一样。

 Tab 补齐功能

    Windows PowerShell ISE 具有对 cmdlet 名称、参数名称和 Microsoft .NET Framework
    静态类型的 Tab 补齐功能。要使用 Tab 补齐功能，请键入名称的开头，然后按 Tab 键。

 获取帮助

    Windows PowerShell ISE 中提供一个可搜索的已编译帮助文件，该文件中包含对 Windows
    PowerShell ISE 和 Windows PowerShell 的说明。该帮助文件中包含使用 Get-Help cmdlet
    可获取的所有帮助。要在 Windows PowerShell ISE 中查看帮助文件，请使用"帮助"菜单。或
    者，可按 F1。

    该帮助属于上下文相关帮助。例如，键入 Invoke-Item 并按 F1 时，帮助文件会打开 Invoke-
    Item cmdlet 的帮助主题。

    可以像在 Windows PowerShell 控制台中一样在 Windows PowerShell 中使用 Get-Help cmdlet。

 自定义视图

    可以使用 Windows PowerShell ISE 功能来移动"命令"窗格、"输出"窗格和"脚本"窗格，以
    及调整这些窗格的大小。可以显示和隐藏"脚本"窗格，以及更改所有窗格中的文本大小。

    还可以使用 $Host 变量更改 Windows PowerShell ISE 的某些外观，例如窗口标题以及"输出"
    窗格中的前景色和背景色。此外，Windows PowerShell ISE 还拥有自己的自定义主机变量
    $psgHost。您可以使用该变量来自定义 Windows PowerShell ISE，如添加菜单和菜单项。

 Windows PowerShell ISE 配置文件

    Windows PowerShell ISE 拥有自己的 Windows PowerShell 配置文件
    Microsoft.PowerShellISE_profile.ps1。您可以在此配置文件中存储在 Windows
    PowerShell ISE 中使用的函数、别名、变量和命令。

    与在任何 Windows PowerShell 主机程序中一样，在 Windows PowerShell ISE 中也可以使用
    Windows PowerShell AllHosts 配置文件（CurrentUser\AllHosts 和 AllUsers\AllHosts）
    中的项目。但是，在 Windows PowerShell ISE 中不可使用 Windows PowerShell 控制台配置
    文件中的项目。

    有关移动和重新配置您的配置文件的说明，可参考 Windows PowerShell ISE 帮助和
    about_Profiles。

 系统要求

    -操作系统：
         - Windows 7
         - Windows Server 2008
         - Windows Server 2003 Service Pack 2
         - Windows Vista Service Pack 1
         - Windows XP Service Pack 2

    - Microsoft .NET Framework 3.0

    - Windows PowerShell 远程处理需要 Windows 远程管理 2.0。

 说明

    - Get-WinEvent cmdlet 需要 Windows Vista 或更高版本的 Windows 以及
      Microsoft .NET Framework 3.5。

    - Export-Counter cmdlet 只能在 Windows 7 中运行。

 启动 Windows PowerShell ISE

    - 要启动 Windows PowerShell ISE，请单击"开始"，依次指向"所有程序"、"Windows
      PowerShell"，然后单击"Windows PowerShell ISE"。

    - 在 Windows PowerShell 控制台、Cmd.exe 或"运行"框中，键入
      "powershell_ise.exe"。

另请参阅
    about_Profiles
    Get-Help


about_WMI_Cmdlets

主题
    about_WMI_cmdlets

简短说明
    提供有关 Windows Management Instrumentation (WMI) 和 Windows
    PowerShell 的背景信息。

详细说明
    本主题提供有关以下内容的信息：WMI 技术、用于 Windows PowerShell 的
    WMI cmdlet、基于 WMI 的远程处理、WMI 加速器和 WMI 故障诊断。本主题
    还提供了有关 WMI 的详细信息的链接。

  关于 WMI

      Windows Management Instrumentation (WMI) 是 Microsoft 对“基于 Web
      的企业管理”(WBEM) 的实现，WBEM 是一项业界倡议，用于为访问企业环境中的管
      理信息开发一项标准技术。WMI 使用通用信息模型 (CIM) 行业标准来表示系统、
      应用程序、网络、设备和其他托管组件。CIM 由分布式管理任务组 (DMTF) 进行开
      发和维护。可以使用 WMI 来管理本地和远程计算机。例如，可以使用 WMI 执行以
      下任务：

          -- 在远程计算机上启动进程。

          -- 远程重新启动计算机。

          -- 获取在本地或远程计算机上安装的应用程序的列表。

          -- 查询本地或远程计算机上的 Windows 事件日志。

  适用于 Windows PowerShell 的 WMI Cmdlet

      Windows PowerShell 通过一组在 Windows PowerShell 中默认可用的 cmdlet
      实现 WMI 功能。可以使用这些 cmdlet 来完成管理本地和远程计算机所必需的
      端到端任务。

      其中包括以下 WMI cmdlet。

      Cmdlet                 说明
      ------------------     ----------------------------------------------

      Get-WmiObject          获取 WMI 类的实例或有关这些可用类的信息。

      Invoke-WmiMethod       调用 WMI 方法。

      Register-WmiEvent      订阅 WMI 事件。

      Remove-WmiObject       删除 WMI 类和实例。

      Set-WmiInstance        创建或修改 WMI 类的实例。

  示例命令

      下面的命令显示本地计算机的 BIOS 信息。

          C:\PS> get-wmiobject win32_bios | format-list *

      下面的命令显示有关三台远程计算机的 WinRM 服务的信息。

          C:\PS> get-wmiobject -query "select * from win32_service where name='WinRM'" -computername server01, server01, server03

      下面的命令更加复杂，它将退出某个程序的所有实例。

          C:\PS> notepad.exe
          C:\PS> $np = get-wmiobject -query "select * from win32_process where name='notepad.exe'"
          C:\PS> $np | remove-wmiobject

  基于 WMI 的远程处理

      虽然通过 WMI 管理本地系统的功能非常有用，但是真正使 WMI 成为强大管理
      工具的功能却是远程处理功能。WMI 使用 Microsoft 的分布式组件对象
      模型 (DCOM) 来连接并管理系统。某些系统可能必须经过配置才允许 DCOM 连接。
      防火墙设置和锁定的 DCOM 权限可能阻止 WMI 远程管理系统的能力。

  WMI 类型加速器

      Windows PowerShell 包含 WMI 类型加速器。这些 WMI 类型
      加速器（快捷方式）与非类型加速器方式相比，可更直接地
      访问 WMI 对象。

      对于 WMI，支持下面的类型加速器：

          [WMISEARCHER] - 搜索 WMI 对象的快捷方式。

          [WMICLASS] - 访问类的静态属性和方法的快捷方式。

          [WMI] - 获取类的单个实例的快捷方式。

      [WMISEARCHER] 是 ManagementObjectSearcher 的类型加速器。
      它可接受一个字符串构造函数来创建搜索器，然后可以基于该搜索器执行 GET()。

      例如：

      PS> $s = [WmiSearcher]'Select * from Win32_Process where Handlecount > 1000'
      PS> $s.Get() |sort handlecount |ft handlecount,__path,name -auto

      handlecount  __PATH                                              name
      -----------  ------                                              ----
      1105         \\SERVER01\root\cimv2:Win32_Process.Handle="3724"   powershell...
      1132         \\SERVER01\root\cimv2:Win32_Process.Handle="1388"   winlogon.exe
      1495         \\SERVER01\root\cimv2:Win32_Process.Handle="2852"   iexplore.exe
      1699         \\SERVER01\root\cimv2:Win32_Process.Handle="1204"   OUTLOOK.EXE
      1719         \\SERVER01\root\cimv2:Win32_Process.Handle="1912"   iexplore.exe
      2579         \\SERVER01\root\cimv2:Win32_Process.Handle="1768"   svchost.exe

      [WMICLASS] 是 ManagementClass 的类型加速器。它有一个
      字符串构造函数，该构造函数接受 WMI 类的本地或绝对 WMI 路径，
      并返回绑定到该类的对象。

      例如：

      PS> $c = [WMICLASS]"root\cimv2:WIn32_Process"
      PS> $c |fl *
      Name             : Win32_Process
      __GENUS          : 1
      __CLASS          : Win32_Process
      __SUPERCLASS     : CIM_Process
      __DYNASTY        : CIM_ManagedSystemElement
      __RELPATH        : Win32_Process
      __PROPERTY_COUNT : 45
      __DERIVATION     : {CIM_Process, CIM_LogicalElement, CIM_ManagedSystemElement}
      __SERVER         : SERVER01
      __NAMESPACE      : ROOT\cimv2
      __PATH           : \\SERVER01\ROOT\cimv2:Win32_Process

      [WMI] 是 ManagementObject 的类型加速器。它有一个字符串构造函数，
      该构造函数接受 WMI 实例的本地或绝对 WMI 路径，并返回绑定到该
      实例的对象。

      例如：

      PS> $p = [WMI]'\\SERVER01\root\cimv2:Win32_Process.Handle="1204"'
      PS> $p.Name
      OUTLOOK.EXE

  WMI 故障诊断

      下面的问题是在您尝试连接到远程计算机时可能出现的最常见问题。

    问题 1：远程计算机未联机。

      如果计算机脱机，您将无法使用 WMI 连接该计算机。您可能收到以下
      错误消息：

          "远程服务器计算机不存在或不可用"

      如果收到此错误消息，请验证该计算机是否联机。
      尝试对远程计算机执行 ping 操作。

    问题 2：您没有远程计算机上的本地管理员权限。

      为了远程使用 WMI，您必须有远程计算机上的本地管理员权限。如果没有，
      则将拒绝访问该计算机。

      验证命名空间安全性：

          a. 单击"开始"，右键单击"我的电脑"，然后单击"管理"。

          b. 在"计算机管理"中，展开"服务和应用程序"，右键单击"WMI 控件"，
             然后单击"属性"。

          c. 在"WMI 控件属性"对话框中，单击"安全"选项卡。

    问题 3：防火墙阻止访问远程计算机。

      WMI 使用 DCOM（分布式 COM）和 RPC（远程过程调用）协议来遍历网络。
      默认情况下，很多防火墙会阻止 DCOM 和 RPC 通信。
      如果防火墙阻止这些协议，那么连接将失败。例如，Microsoft Windows
      XP Service Pack 2 中的 Windows 防火墙配置为自动阻止所有未经请求的
      网络通信，包括 DCOM 和 WMI。在其默认配置中，Windows 防火墙拒绝
      传入的 WMI 请求，并且您将收到以下错误消息：

          “远程服务器计算机不存在或不可用”

  有关 WMI 的详细信息

      有关 WMI 的详细信息，请参阅 MSDN (Microsoft Developer Network)
      Library 中的下列主题：

          "关于 WMI："
          http://go.microsoft.com/fwlink/?LinkId=142212

          "WMI 故障诊断"
          http://go.microsoft.com/fwlink/?LinkId=142213

      此外，请参阅 Microsoft TechNet 脚本中心的"Windows Management
      Instrumentation的秘密 - 疑难解答和提示"：

          http://go.microsoft.com/fwlink/?LinkId=142214

另请参阅
    联机版本：http://go.microsoft.com/fwlink/?LinkId=142219
    Get-WmiObject
    Invoke-WmiMethod
    Register-WmiEvent
    Remove-WmiObject
    Set-WmiInstance


about_WS-Management_Cmdlets

主题
    about_WS-Management_Cmdlets

简短说明
    提供 Web Services for Management (WS-Management) 的概述，作为在
    Windows PowerShell 中使用 WS-Management cmdlet 时需了解的背景信息。

详细说明
    本主题提供 Web Services for Management (WS-Management) 的概述，
    作为在 Windows PowerShell 中使用 WS-Management cmdlet 时需了解的
    背景信息。本主题还提供了有关 WS-Management 的详细信息的链接。
    WS-Management 的 Microsoft 实现也称为 Windows 远程管理 (WinRM)。

  关于 WS-Management

      Windows 远程管理是 WS-Management 协议的 Microsoft 实现，该协议是
      基于 SOAP 的、防火墙友好的标准协议，它允许来自不同供应商的硬件和
      操作系统进行互操作。WS-Management 协议规范为不同的系统提供了一种
      通用方式，便于它们在整个信息技术 (IT) 基础结构中访问和交换管理信息。
      WS-Management 和智能平台管理接口 (IPMI)，以及事件收集器是 Windows
      硬件管理功能的组件。

      WS-Management 协议基于下列标准 Web 服务规范：HTTPS、SOAP over HTTP (WS-I
      profile)、SOAP 1.2、WS-Addressing、WS-Transfer、WS-Enumeration
      和 WS-Eventing。

  WS-Management 和 WMI

      WS-Management 可用于检索 Windows Management Instrumentation (WMI)
      公开的数据。通过采用 WS-Management Scripting API 的脚本或应用程序，
      或者通过 WinRM 命令行工具，可获得 WMI 数据。WS-Management 支持大多数
      常见的 WMI 类和操作，包括嵌入式对象。WS-Management 可利用 WMI 来收集
      有关资源的数据，或者管理基于 Windows 的计算机上的资源。这意味着，可以
      通过现有 WMI 类的集合，获得有关企业中的磁盘、网络适配器、服务或进程等
      对象的数据。您还可以访问可从标准 WMI IPMI 提供程序获得的硬件数据。

  WS-Management Windows PowerShell 提供程序

      WS-Management 提供程序为可用的 WS-Management 配置设置提供了一个分层视图。
      该提供程序可用于浏览和设置各种 WS-Management 配置选项。

  WS-Management 配置

      如果尚未安装和配置 WS-Management，则 Windows PowerShell 远程处理功能
      将不可用，WS-Management cmdlet 和 WS-Management 脚本将不会运行，并且
      WS-Management 提供程序将无法执行数据操作。WS-Management 命令行工具
      WinRM 以及事件转发也依赖于 WS-Management 配置。

  WS-Management Cmdlet

      WS-Management 功能在 Windows PowerShell 中是通过一个模块实现的，该模块
      中包含一组 cmdlet 以及 WS-Management 提供程序。可以使用这些 cmdlet 来
      完成管理本地和远程计算机上的 WS-Management 设置所必需的端到端任务。

      可用的 WS-Management cmdlet 如下。

     连接 Cmdlet

     -- Connect-WSMan：将本地计算机连接到远程计算机上的 WS-Management
        (WinRM) 服务。

     -- Disconnect-WSMan：将本地计算机与远程计算机上的 WS-Management
        (WinRM) 服务断开。

     数据管理 Cmdlet

     -- Get-WSManInstance：显示由资源 URI 指定的资源实例的管理信息。

     -- Invoke-WSManAction：对资源 URI 和选择器指定的目标对象调用操作。

     -- New-WSManInstance：创建新的管理资源实例。

     -- Remove-WSManInstance：删除管理资源实例。

     -- Set-WSManInstance：修改与资源相关的管理信息。

     设置和配置 Cmdlet

     -- Set-WSManQuickConfig：配置本地计算机，以便进行远程管理。
        可以使用 Set-WSManQuickConfig cmdlet 配置 WS-Management，以允许远程
        连接到 WS-Management (WinRM) 服务。Set-WSManQuickConfig cmdlet 可
        执行以下操作：

    - 确定 WS-Management (WinRM) 服务是否正在运行。如果 WinRM 服务未在运行，
          则 Set-WSManQuickConfig cmdlet 将启动该服务。

    - 将 WS-Management (WinRM) 服务启动类型设置为自动。

    - 创建接受来自任何 IP 地址的请求的侦听器。默认传输协议为 HTTP。

    - 对 WS-Management 通信启用防火墙例外。

    注意：若要在 Windows Vista、Windows Server 2008 以及更高版本的
              Windows 上运行此 cmdlet，必须使用"以管理员身份运行"选项
              启动 Windows PowerShell。

     -- Test-WSMan：验证是否安装并配置了 WS-Management。Test-WSMan cmdlet
        测试本地或远程计算机上是否配置了 WS-Management (WinRM) 服务，
        并且该服务是否正在运行。

     -- Disable-WSManCredSSP：禁用客户端计算机上的 CredSSP 身份验证。

     -- Enable-WSManCredSSP：启用客户端计算机上的 CredSSP 身份验证。

     -- Get-WSManCredSSP：获取客户端计算机的 CredSSP 相关配置。

     特定于 WS-Management 的 Cmdlet

     -- New-WSManSessionOption：创建 WSManSessionOption 对象，以用作
        WS-Management cmdlet 的一个或多个参数的输入。

  其他 WS-Management 信息

    有关 WS-Management 的详细信息，请参阅 MSDN (Microsoft Developer Network)
    Library 中的下列主题。

      “Windows 远程管理”
      http://go.microsoft.com/fwlink/?LinkId=142321

      “关于 Windows 远程管理”
      http://go.microsoft.com/fwlink/?LinkId=142322

      “Windows 远程管理的安装和配置”
      http://go.microsoft.com/fwlink/?LinkId=142323

      “Windows 远程管理体系结构”
      http://go.microsoft.com/fwlink/?LinkId=142324

      “WS-Management 协议”
      http://go.microsoft.com/fwlink/?LinkId=142325

     “Windows 远程管理和 WMI”
      http://go.microsoft.com/fwlink/?LinkId=142326

      “资源 URI”
      http://go.microsoft.com/fwlink/?LinkId=142327

      “远程硬件管理”
      http://go.microsoft.com/fwlink/?LinkId=142328

     “事件”
      http://go.microsoft.com/fwlink/?LinkId=142329

另请参阅
    联机版本：http://go.microsoft.com/fwlink/?LinkId=142331
    Connect-WSMan
    Disable-WSManCredSSP
    Disconnect-WSMan
    Enable-WSManCredSSP
    Get-WSManCredSSP
    Get-WSManInstance
    Invoke-WSManAction
    New-WSManInstance
    Remove-WSManInstance
    Set-WSManInstance
    Set-WSManQuickConfig
    Set-WSManSessionOption
    Test-WSMan

关键字
    about_WSMAN about_WinRM


Windows PowerShell Cmdlet 帮助主题

本节包含有关随 Windows PowerShell 一起安装的 cmdlet 的帮助主题。

Display in verb order

Display in noun order

Cmdlet（按动词顺序排列）

名称 | 说明
Add-Computer | 向域或工作组中添加计算机。
Add-Content | 向指定的项中添加内容，如向文件中添加字词。
Add-History | 向会话历史记录追加条目。
Add-Member | 向 Windows PowerShell 对象的实例中添加用户定义的自定义成员。
Add-PSSnapin | 将一个或多个 Windows PowerShell 管理单元添加到当前会话。
Add-Type | 向 Windows PowerShell 会话中添加 .NET 类型（一种类）。
Checkpoint-Computer | 在本地计算机上创建系统还原点。
Clear-Content | 删除项的内容（例如从文件中删除文本），但不删除该项。
Clear-EventLog | 删除本地或远程计算机上指定事件日志中的所有条目。
Clear-History | 删除命令历史记录中的条目。
Clear-Item | 删除项的值，但不删除该项。
Clear-ItemProperty | 删除属性的值，但不删除该属性。
Clear-Variable | 删除变量的值。
Compare-Object | 比较两组对象。
Complete-Transaction | 提交活动事务。
Connect-WSMan | 连接到远程计算机上的 WinRM 服务。
ConvertFrom-CSV | 将 CSV 格式的对象属性转换为原始对象的 CSV 版本。
ConvertFrom-SecureString | 将安全字符串转换为加密的标准字符串。
ConvertFrom-StringData | 将包含一个或多个“名称=值”对的字符串转换为哈希表。
Convert-Path | 将路径从 Windows PowerShell 路径转换为 Windows PowerShell 提供程序路径。
ConvertTo-CSV | 将 .NET 对象转换为一系列以逗号分隔的、长度可变的 (CSV) 字符串。
ConvertTo-Html | 将 .NET 对象转换为可在 Web 浏览器中显示的 HTML。
ConvertTo-SecureString | 将加密的标准字符串转换为安全字符串。它还可以将纯文本转换为安全字符串。此 Cmdlet 与 ConvertFrom-SecureString 和 Read-Host 一起使用。
ConvertTo-XML | 创建对象的基于 XML 的表示形式。
Copy-Item | 将项从一个位置复制到命名空间内的另一个位置。
Copy-ItemProperty | 将属性和值从指定的位置复制到另一个位置。
Debug-Process | 调试在本地计算机上运行的一个或多个进程。
Disable-ComputerRestore | 在指定的文件系统驱动器上禁用系统还原功能。
Disable-PSBreakpoint | 禁用当前控制台中的断点。
Disable-PSRemoting | 阻止计算机接收远程 Windows PowerShell 命令。
Disable-PSSessionConfiguration | 拒绝访问本地计算机上的会话配置。
Disable-WSManCredSSP | 在客户端计算机上禁用凭据安全服务提供程序 (CredSSP) 身份验证。
Disconnect-WSMan | 断开客户端与远程计算机上的 WinRM 服务的连接。
Enable-ComputerRestore | 在指定的文件系统驱动器上启用系统还原功能。
Enable-PSBreakpoint | 启用当前控制台中的断点。
Enable-PSRemoting | 将计算机配置为接收远程命令。
Enable-PSSessionConfiguration | 将计算机配置为接收远程命令。
Enable-WSManCredSSP | 在客户端计算机上启用凭据安全服务提供程序 (CredSSP) 身份验证。
Enter-PSSession | 启动与远程计算机的交互式会话。
Exit-PSSession | 结束与远程计算机的交互式会话。
Export-Alias | 将当前定义的别名的相关信息导出到文件中。
Export-Clixml | 创建对象的基于 XML 的表示形式并将其存储在文件中。
Export-Console | 将当前会话中管理单元的名称导出到一个控制台文件中。
Export-Counter | Export-Counter cmdlet 可将性能计数器数据导出至日志文件。
Export-CSV | 将 .NET 对象转换为一系列以逗号分隔的、长度可变的 (CSV) 字符串，并将这些字符串保存在一个 CSV 文件中。
Export-FormatData | 将当前会话中的格式数据保存在一个格式文件中。
Export-ModuleMember | 指定要导出的模块成员。
Export-PSSession | 将来自其他会话的命令保存在模块文件中。
ForEach-Object | 针对每一组输入对象执行操作。
Format-Custom | 使用自定义视图来设置输出的格式。
Format-List | 将输出的格式设置为属性列表，其中每个属性均各占一行显示。
Format-Table | 将输出的格式设置为表。
Format-Wide | 将对象的格式设置为只能显示每个对象的一个属性的宽表。
Get-Acl | 获取资源（例如文件或注册表项）的安全描述符。
Get-Alias | 获取当前会话的别名。
Get-AuthenticodeSignature | 获取文件中有关 Authenticode 签名的信息。
Get-ChildItem | 获取一个或多个指定位置中的项和子项。（例如“dir”。）
Get-Command | 获取有关 cmdlet 的基本信息，以及有关 Windows PowerShell 命令的其他元素的基本信息。
Get-ComputerRestorePoint | 获取本地计算机上的还原点。
Get-Content | 获取位于指定位置的项的内容。
Get-Counter | 从本地和远程计算机上获取性能计数器数据。
Get-Credential | 获取基于用户名和密码的凭据对象。
Get-Culture | 获取操作系统中当前设置的区域性。
Get-Date | 获取当前日期和时间。
Get-Event | 获取事件队列中的事件。
Get-EventLog | 获取计算机上指定的事件日志或事件日志列表中的事件。
Get-EventSubscriber | 获取当前会话中的事件订阅程序。
Get-ExecutionPolicy | 获取当前会话中的执行策略。
Get-FormatData | 获取当前会话中的格式数据。
Get-Help | 显示有关 Windows PowerShell cmdlet 和概念的信息。
Get-History | 获取在当前会话中输入的命令的列表。
Get-Host | 获取对当前控制台主机对象的引用。默认情况下，显示 Windows Powershell 的版本和区域信息。
Get-HotFix | 获取已应用于本地和远程计算机的修补程序。
Get-Item | 获取位于指定位置的项。
Get-ItemProperty | 获取指定项的属性。
Get-Location | 获取当前工作位置的相关信息。
Get-Member | 获取对象的属性和方法。
Get-Module | 获取已导入或可以导入到当前会话中的模块。
Get-PfxCertificate | 获取计算机上 .pfx 证书文件的相关信息。
Get-Process | 获取在本地或远程计算机上运行的进程。
Get-PSBreakpoint | 获取当前控制台中设置的断点。
Get-PSCallStack | 显示当前调用堆栈。
Get-PSDrive | 获取当前控制台中的 Windows PowerShell 驱动器。
Get-Job | 获取在当前控制台中运行的 Windows PowerShell 后台作业 (PsJob)。
Get-PSProvider | 获取有关指定的 Windows PowerShell 提供程序的信息。
Get-PSSession | 获取当前会话中的 Windows PowerShell 会话 (PSSession)。
Get-PSSessionConfiguration | 获取在计算机上注册的会话配置。
Get-PSSnapin | 获取计算机上的 Windows PowerShell 管理单元。
Get-Transaction | 获取当前（活动）事务。
Get-Random | 从集合中获取随机数或随机选择对象。
Get-Service | 获取本地或远程计算机上的服务。
Get-TraceSource | 获取用于跟踪的 Windows PowerShell 组件。
Get-UICulture | 获取操作系统中设置的当前用户界面区域性。
Get-Unique | 从排序列表返回唯一项目。
Get-Variable | 获取当前控制台中的变量。
Get-WinEvent | 从本地和远程计算机上的事件日志和事件跟踪日志文件中获取事件。
Get-WmiObject | 获取 WMI 类的实例或可用类的相关信息。
Get-WSManCredSSP | 获取客户端的与凭据安全服务提供程序相关的配置。
Get-WSManInstance | 显示由资源 URI 指定的资源实例的管理信息。
Group-Object | 指定的属性包含相同值的组对象。
Import-Alias | 从文件导入别名列表。
Import-Clixml | 导入 CLIXML 文件，并在 Windows PowerShell 中创建相应的对象。
Import-Counter | 导入性能计数器日志文件（.blg、.csv、.tsv）并创建表示日志中的每个计数器样本的对象。
Import-CSV | 将 CSV 文件中的对象属性转换为原始对象的 CSV 版本。
Import-LocalizedData | 基于操作系统的当前区域性设置，将语言特定的数据导入到脚本和函数中。
Import-Module | 向当前会话中添加模块。
Import-PSSession | 将 cmdlet、别名、函数和其他命令类型从本地或远程计算机上的其他会话导入到当前会话中。
Invoke-Command | 在本地和远程计算机上运行命令。
Invoke-Expression | 在本地计算机上运行命令或表达式。
Invoke-History | 从会话历史记录中运行命令。
Invoke-Item | 对指定项执行默认操作。
Invoke-WmiMethod | 调用 WMI 方法。
Invoke-WSManAction | 对资源 URI 和选择器指定的对象调用操作。
Join-Path | 将路径和子路径合并到单个路径中。
Limit-EventLog | 设置限制事件日志大小及其条目存在时间的事件日志属性。
Measure-Command | 度量运行脚本块和 cmdlet 所用的时间。
Measure-Object | 计算对象的数字属性以及字符串对象（如文件中的文本）中的字符数、单词数和行数。
Move-Item | 将项从一个位置移动到另一个位置。
Move-ItemProperty | 将属性从一个位置移动到另一个位置。
New-Alias | 创建新别名。
New-Event | 创建新事件。
New-EventLog | 在本地或远程计算机上创建新事件日志和新事件源。
New-Item | 创建新项。
New-ItemProperty | 为项创建新属性并设置该属性的值。例如，可以使用 New-ItemProperty 创建和更改注册表值和数据，它们是注册表项的属性。
New-Module | 创建一个仅存在于内存中的新动态模块。
New-ModuleManifest | 创建一个新的模块清单。
New-Object | 创建 .Net 或 COM 对象的实例。
New-PSDrive | 在当前控制台中创建 Windows PowerShell 驱动器。
New-PSSession | 建立与本地或远程计算机的持续性连接。
New-PSSessionOption | 创建包含会话高级选项的对象。
New-Service | 创建新的 Windows 服务。
New-TimeSpan | 创建表示时间间隔的对象。
New-Variable | 创建新变量
New-WebServiceProxy | 创建一个 Web 服务代理对象，用于在 Windows PowerShell 中使用和管理 Web 服务。
New-WSManInstance | 创建管理资源的新实例。
New-WSManSessionOption | 创建 WSMan 会话选项哈希表以用作以下 WSMan cmdlet 的输入参数：Connect-WSMan、Get-WSManInstance、Invoke-WSManAction、Set-WSManInstance。
Out-Default | 将输出发送到默认的格式化程序和默认的输出 cmdlet。它是一个占位符，用于编写您自己的 Out-Default 函数或 cmdlet。
Out-File | 将输出发送到文件。
Out-GridView | 将输出发送到单独窗口中的交互表。
Out-Host | 将输出发送到控制台。
Out-Null | 删除输出，不将其发送到控制台。
Out-Printer | 将输出发送到打印机。
Out-String | 将对象作为一列字符串发送到主机。
Pop-Location | 更改为最近由 Push-Location 推入到堆栈中的位置。
Push-Location | 将当前位置添加到位置列表（“堆栈”）的顶部。
Read-Host | 从控制台读取一行输入。
Receive-Job | 获取在当前控制台中运行的后台作业 (PsJob) 的输出和错误。
Register-EngineEvent | 订阅由 Windows PowerShell 引擎以及由 New-Event cmdlet 生成的事件。
Register-ObjectEvent | 订阅由 .NET 对象生成的事件。
Register-PSSessionConfiguration | 创建并注册新的会话配置。
Register-WmiEvent | 订阅由 WMI 对象生成的事件。
Remove-Computer | 删除工作组或域中的计算机。
Remove-Event | 删除事件队列中的事件。
Remove-EventLog | 删除事件日志或注销事件源。
Remove-Item | 删除指定项。
Remove-ItemProperty | 从注册表项中删除属性及其值。
Remove-Job | 删除 Windows PowerShell 后台作业。
Remove-Module | 删除当前会话中的模块。
Remove-PSBreakpoint | 删除当前控制台中的断点。
Remove-PSDrive | 从所在位置删除 Windows PowerShell 驱动器。
Remove-PSSession | 关闭一个或多个 Windows PowerShell 会话 (PSSession)。
Remove-PSSnapin | 将 Windows PowerShell 管理单元从当前会话中删除。
Remove-Variable | 删除变量及其值。
Remove-WmiObject | 删除 WMI 类和实例。
Remove-WSManInstance | 删除管理资源实例。
Rename-Item | 重命名 Windows PowerShell 提供程序命名空间中的一个项。
Rename-ItemProperty | 重命名项的属性。
Reset-ComputerMachinePassword | 重置计算机的计算机帐户密码。
Resolve-Path | 解析路径中的通配符并显示路径内容。
Restart-Computer | 重新启动（“重新引导”）本地和远程计算机上的操作系统。
Restart-Service | 停止并接着启动一个或更多服务。
Restore-Computer | 在本地计算机上启动系统还原。
Resume-Service | 恢复一项或多项挂起（暂停的）服务。
Select-Object | 选择一个对象或一组对象的指定属性。它还可以从对象的数组中选择唯一对象，也可以从对象数组的开头或末尾选择指定个数的对象。
Select-String | 查找字符串和文件中的文本。
Select-XML | 在 XML 文档中查找文本。
Send-MailMessage | 发送电子邮件。
Set-Acl | 更改指定资源（例如文件或注册表项）的安全描述符。
Set-Alias | 创建或更改 cmdlet 或命令元素的别名（替代名称）。
Set-AuthenticodeSignature | 为 Windows PowerShell 脚本或其他文件添加 Authenticode 签名。
Set-Content | 在项中写入内容或用新内容替换其中的内容。
Set-Date | 将计算机上的系统时间更改为指定的时间。
Set-ExecutionPolicy | 更改 shell 执行策略的用户首选项。
Set-Item | 将项的值更改为命令中指定的值。
Set-ItemProperty | 创建或更改某一项的属性值。
Set-Location | 将当前工作位置设置为指定的位置。
Set-PSBreakpoint | 在行、命令或变量上设置断点。
Set-PSDebug | 打开和关闭脚本调试功能，设置跟踪级别并切换 strict 模式。
Set-PSSessionConfiguration | 更改已注册会话配置的属性。
Set-Service | 启动、停止和挂起服务并更改服务的属性。
Set-StrictMode | 建立和强制执行表达式、脚本和脚本块中的编码规则。
Set-TraceSource | 配置、启动和停止对 Windows PowerShell 组件的跟踪。
Set-Variable | 设置变量的值。如果不存在具有所请求名称的变量，则创建该变量。
Set-WmiInstance | 创建或修改 WMI 类的实例。
Set-WSManInstance | 修改与资源相关的管理信息。
Set-WSManQuickConfig | 配置本地计算机的远程管理。
Show-EventLog | 在事件查看器中显示本地或远程计算机的事件日志。
Sort-Object | 按属性值对对象进行排序。
Split-Path | 返回指定的路径部分。
Start-Process | 启动本地计算机上的一个或多个进程。
Start-Job | 启动 Windows PowerShell 后台作业 (PsJob)。
Start-Transaction | 启动事务。
Start-Service | 启动一个或多个已停止的服务。
Start-Sleep | 在指定的时间段内挂起 shell、脚本或运行空间活动。
Start-Transcript | 在文本文件中创建全部或部分 Windows PowerShell 会话的记录。
Stop-Computer | 关闭本地和远程计算机。
Stop-Process | 停止一个或多个正在运行的进程。
Stop-Job | 停止 Windows PowerShell 后台作业 (PsJob)。
Stop-Service | 停止一个或多个正在运行的服务。
Stop-Transcript | 停止脚本。
Suspend-Service | 挂起（暂停）一个或多个正在运行的服务。
Tee-Object | 将命令输出保存在文件或变量中，同时显示在控制台中。
Test-ComputerSecureChannel | 测试并修复本地计算机与其域之间的安全通道。
Test-Connection | 将 ICMP 回显请求数据包（“ping”）发送给一台或多台计算机。
Test-ModuleManifest | 验证模块清单是否准确描述了模块的内容。
Test-Path | 确定路径的所有元素是否存在。
Test-WSMan | 测试 WinRM 服务是否正在本地或远程计算机上运行。
Trace-Command | 配置并启动对指定表达式或命令的跟踪。
Undo-Transaction | 回滚活动事务。
Unregister-Event | 取消事件订阅。
Unregister-PSSessionConfiguration | 从计算机上删除已注册的会话配置。
Update-FormatData | 更新并追加格式数据文件。
Update-List | 在包含对象集合的属性值中添加和删除项。
Update-TypeData | 通过重新加载 *.types.ps1xml 文件来更新当前的扩展类型配置。
Use-Transaction | 将脚本块添加到活动事务中。
Wait-Event | 等到引发特定事件后再继续运行。
Wait-Process | 等到进程停止后再接受更多输入。
Wait-Job | 取消命令提示符，直至一个或所有 Windows PowerShell 后台作业 (PsJob) 完成为止。
Where-Object | 创建控制哪些对象沿着命令管道传递的筛选器。
Write-Debug | 将调试消息写入控制台。
Write-Error | 将对象写入错误管道。
Write-EventLog | 将事件写入事件日志。
Write-Host | 将自定义输出写入主机。
Write-Output | 将对象发送到管道中的下一个命令。如果该命令是管道中的最后一个命令，则会在控制台上显示对象。
Write-Progress | 在 Windows PowerShell 命令窗口内显示进度栏。
Write-Verbose | 将文本写入 Windows PowerShell 中的详细消息流。
Write-Warning | 写入警告消息。

Cmdlet（按名词顺序排列）

Display in verb order

名称 | 说明
Get-Acl | 获取资源（例如文件或注册表项）的安全描述符。
Set-Acl | 更改指定资源（例如文件或注册表项）的安全描述符。
Export-Alias | 将当前定义的别名的相关信息导出到文件中。
Get-Alias | 获取当前会话的别名。
Import-Alias | 从文件导入别名列表。
New-Alias | 创建新别名。
Set-Alias | 创建或更改 cmdlet 或命令元素的别名（替代名称）。
Get-AuthenticodeSignature | 获取文件中有关 Authenticode 签名的信息。
Set-AuthenticodeSignature | 为 Windows PowerShell 脚本或其他文件添加 Authenticode 签名。
Get-ChildItem | 获取一个或多个指定位置中的项和子项。（例如“dir”。）
Export-Clixml | 创建对象的基于 XML 的表示形式并将其存储在文件中。
Import-Clixml | 导入 CLIXML 文件，并在 Windows PowerShell 中创建相应的对象。
Get-Command | 获取有关 cmdlet 的基本信息，以及有关 Windows PowerShell 命令的其他元素的基本信息。
Invoke-Command | 在本地和远程计算机上运行命令。
Measure-Command | 度量运行脚本块和 cmdlet 所用的时间。
Trace-Command | 配置并启动对指定表达式或命令的跟踪。
Add-Computer | 向域或工作组中添加计算机。
Checkpoint-Computer | 在本地计算机上创建系统还原点。
Remove-Computer | 删除工作组或域中的计算机。
Restart-Computer | 重新启动（“重新引导”）本地和远程计算机上的操作系统。
Restore-Computer | 在本地计算机上启动系统还原。
Stop-Computer | 关闭本地和远程计算机。
Reset-ComputerMachinePassword | 重置计算机的计算机帐户密码。
Disable-ComputerRestore | 在指定的文件系统驱动器上禁用系统还原功能。
Enable-ComputerRestore | 在指定的文件系统驱动器上启用系统还原功能。
Get-ComputerRestorePoint | 获取本地计算机上的还原点。
Test-ComputerSecureChannel | 测试并修复本地计算机与其域之间的安全通道。
Test-Connection | 将 ICMP 回显请求数据包（“ping”）发送给一台或多台计算机。
Export-Console | 将当前控制台的配置导出到文件中，以便对其进行重用或共享。
Add-Content | 向指定的项中添加内容，如向文件中添加字词。
Clear-Content | 删除项的内容（例如从文件中删除文本），但不删除该项。
Get-Content | 获取位于指定位置的项的内容。
Set-Content | 在项中写入内容或用新内容替换其中的内容。
Export-Counter | Export-Counter cmdlet 可将性能计数器数据导出至日志文件。
Get-Counter | 从本地和远程计算机上获取性能计数器数据。
Import-Counter | 导入性能计数器日志文件（.blg、.csv、.tsv）并创建表示日志中的每个计数器样本的对象。
Get-Credential | 获取基于用户名和密码的凭据对象。
ConvertFrom-CSV | 将 CSV 格式的对象属性转换为原始对象的 CSV 版本。
ConvertTo-CSV | 将 .NET 对象转换为一系列以逗号分隔的、长度可变的 (CSV) 字符串。
Export-CSV | 将 .NET 对象转换为一系列以逗号分隔的、长度可变的 (CSV) 字符串，并将这些字符串保存在一个 CSV 文件中。
Import-CSV | 将 CSV 文件中的对象属性转换为原始对象的 CSV 版本。
Get-Culture | 获取操作系统中当前设置的区域性。
Format-Custom | 使用自定义视图来设置输出的格式。
Get-Date | 获取当前日期和时间。
Set-Date | 将计算机上的系统时间更改为指定的时间。
Write-Debug | 将调试消息写入控制台。
Out-Default | 将输出发送到默认的格式化程序和默认的输出 cmdlet。它是一个占位符，用于编写您自己的 Out-Default 函数或 cmdlet。
Register-EngineEvent | 订阅由 Windows PowerShell 引擎以及由 New-Event cmdlet 生成的事件。
Write-Error | 将对象写入错误管道。
Get-Event | 获取事件队列中的事件。
New-Event | 创建新事件。
Remove-Event | 删除事件队列中的事件。
Unregister-Event | 取消事件订阅。
Wait-Event | 等到引发特定事件后再继续运行。
Clear-EventLog | 删除本地或远程计算机上指定事件日志中的所有条目。
Get-EventLog | 获取计算机上指定的事件日志或事件日志列表中的事件。
Limit-EventLog | 设置限制事件日志大小及其条目存在时间的事件日志属性。
New-EventLog | 在本地或远程计算机上创建新事件日志和新事件源。
Remove-EventLog | 删除事件日志或注销事件源。
Show-EventLog | 在事件查看器中显示本地或远程计算机的事件日志。
Write-EventLog | 将事件写入事件日志。
Get-EventSubscriber | 获取当前会话中的事件订阅程序。
Get-ExecutionPolicy | 获取当前会话中的当前执行策略。
Set-ExecutionPolicy | 更改 shell 执行策略的用户首选项。
Invoke-Expression | 在本地或远程计算机上运行命令。
Out-File | 将输出发送到文件。
Export-FormatData | 将当前会话中的格式数据保存在一个格式文件中。
Get-FormatData | 获取当前会话中的格式数据。
Update-FormatData | 更新并追加格式数据文件。
Out-GridView | 将输出发送到单独窗口中的交互表。
Get-Help | 显示有关 Windows PowerShell cmdlet 和概念的信息。
Add-History | 向会话历史记录追加条目。
Clear-History | 删除命令历史记录中的条目。
Get-History | 获取在当前会话中输入的命令的列表。
Invoke-History | 从会话历史记录中运行命令。
Get-Host | 获取对当前控制台主机对象的引用。默认情况下，显示 Windows Powershell 的版本和区域信息。
Out-Host | 将输出发送到控制台。
Read-Host | 从控制台读取一行输入。
Write-Host | 将自定义输出写入主机。
Get-HotFix | 获取已应用于本地和远程计算机的修补程序。
ConvertTo-Html | 将 .NET 对象转换为可在 Web 浏览器中显示的 HTML。
Clear-Item | 删除项的值，但不删除该项。
Copy-Item | 将项从一个位置复制到命名空间内的另一个位置。
Get-Item | 获取位于指定位置的项。
Invoke-Item | 对指定项执行默认操作。
Move-Item | 将项从一个位置移动到另一个位置。
New-Item | 创建新项。
Remove-Item | 删除指定项。
Rename-Item | 重命名 Windows PowerShell 提供程序命名空间中的一个项。
Set-Item | 将项的值更改为命令中指定的值。
Clear-ItemProperty | 创建或更改某一项的属性值。
Copy-ItemProperty | 将属性和值从指定的位置复制到另一个位置。
Get-ItemProperty | 获取指定项的属性。
Move-ItemProperty | 将属性从一个位置移动到另一个位置。
New-ItemProperty | 为项创建新属性并设置该属性的值。例如，可以使用 New-ItemProperty 创建和更改注册表值和数据，它们是注册表项的属性。
Remove-ItemProperty | 从注册表项中删除属性及其值。
Rename-ItemProperty | 重命名项的属性。
Set-ItemProperty | 创建或更改某一项的属性值。
Format-List | 将输出的格式设置为属性列表，其中每个属性均各占一行显示。
Update-List | 在包含对象集合的属性值中添加和删除项。
Import-LocalizedData | 基于操作系统的当前区域性设置，将语言特定的数据导入到脚本和函数中。
Get-Location | 获取当前工作位置的相关信息。
Pop-Location | 更改为最近由 Push-Location 推入到堆栈中的位置。
Push-Location | 将当前位置添加到位置列表（“堆栈”）的顶部。
Set-Location | 将当前工作位置设置为指定的位置。
Send-MailMessage | 发送电子邮件。
Add-Member | 向 Windows PowerShell 对象的实例中添加用户定义的自定义成员。
Get-Member | 获取对象的属性和方法。
Export-ModuleMember | 指定要导出的模块成员。
Get-Module | 获取已导入或可以导入到当前会话中的模块。
Import-Module | 创建一个仅存在于内存中的新动态模块。
New-Module | 创建一个仅存在于内存中的新动态模块。
New-ModuleManifest | 创建一个新的模块清单。
Remove-Module | 删除当前会话中的模块。
Test-ModuleManifest | 验证模块清单是否准确描述了模块的内容。
Out-Null | 删除输出，不将其发送到控制台。
Compare-Object | 比较两组对象。
ForEach-Object | 针对每一组输入对象执行操作。
Group-Object | 指定的属性包含相同值的组对象。
Measure-Object | 计算对象的数字属性以及字符串对象（如文件中的文本）中的字符数、单词数和行数。
New-Object | 创建 .Net 或 COM 对象的实例。
Select-Object | 选择一个对象或一组对象的指定属性。它还可以从对象的数组中选择唯一对象，也可以从对象数组的开头或末尾选择指定个数的对象。
Sort-Object | 按属性值对对象进行排序。
Tee-Object | 将命令输出保存在文件或变量中，同时显示在控制台中。
Where-Object | 创建控制哪些对象沿着命令管道传递的筛选器。
Register-ObjectEvent | 订阅由 .NET 对象生成的事件。
Write-Output | 将对象发送到管道中的下一个命令。如果该命令是管道中的最后一个命令，则会在控制台上显示对象。
Convert-Path | 将路径从 Windows PowerShell 路径转换为 Windows PowerShell 提供程序路径。
Join-Path | 将路径和子路径合并到单个路径中。
Resolve-Path | 解析路径中的通配符并显示路径内容。
Split-Path | 返回指定的路径部分。
Test-Path | 确定路径的所有元素是否存在。
Get-PfxCertificate | 获取计算机上 .pfx 证书文件的相关信息。
Out-Printer | 将输出发送到打印机。
Debug-Process | 调试在本地计算机上运行的一个或多个进程。
Get-Process | 获取在本地或远程计算机上运行的进程。
Start-Process | 启动本地计算机上的一个或多个进程。
Stop-Process | 停止一个或多个正在运行的进程。
Wait-Process | 等到进程停止后再接受更多输入。
Write-Progress | 在 Windows PowerShell 命令窗口内显示进度栏。
Disable-PSBreakpoint | 禁用当前控制台中的断点。
Enable-PSBreakpoint | 启用当前控制台中的断点。
Get-PSBreakpoint | 获取当前控制台中设置的断点。
Remove-PSBreakpoint | 删除当前控制台中的断点。
Set-PSBreakpoint | 在行、命令或变量上设置断点。
Get-PSCallStack | 显示当前调用堆栈。
Set-PSDebug | 打开和关闭脚本调试功能，设置跟踪级别并切换 strict 模式。
Get-PSDrive | 获取当前控制台中的 Windows PowerShell 驱动器。
New-PSDrive | 在当前控制台中创建 Windows PowerShell 驱动器。
Remove-PSDrive | 从所在位置删除 Windows PowerShell 驱动器。
Get-Job | 获取在当前控制台中运行的 Windows PowerShell 后台作业 (PsJob)。
Receive-Job | 获取在当前控制台中运行的后台作业 (PsJob) 的输出和错误。
Remove-Job | 删除 Windows PowerShell 后台作业 (PsJob)。
Start-Job | 启动 Windows PowerShell 后台作业 (PsJob)。
Stop-Job | 停止 Windows PowerShell 后台作业 (PsJob)。
Wait-Job | 取消命令提示符，直至一个或所有 Windows PowerShell 后台作业 (PsJob) 完成为止。
Get-PSProvider | 获取有关指定的 Windows PowerShell 提供程序的信息。
Disable-PSRemoting | 阻止计算机接收远程 Windows PowerShell 命令。
Enable-PSRemoting | 将计算机配置为接收远程命令。
Enter-PSSession | 启动与远程计算机的交互式会话。
Exit-PSSession | 结束与远程计算机的交互式会话。
Export-PSSession | 将来自其他会话的命令保存在模块文件中。
Get-PSSession | 获取当前会话中的 Windows PowerShell 会话 (PSSession)。
Import-PSSession | 将 cmdlet、别名、函数和其他命令类型从本地或远程计算机上的其他会话导入到当前会话中。
New-PSSession | 建立与本地或远程计算机的持续性连接。
Remove-PSSession | 关闭一个或多个 Windows PowerShell 会话 (PSSession)。
Disable-PSSessionConfiguration | 拒绝访问本地计算机上的会话配置。
Enable-PSSessionConfiguration | 将计算机配置为接收远程命令。
Get-PSSessionConfiguration | 获取在计算机上注册的会话配置。
Register-PSSessionConfiguration | 创建并注册新的会话配置。
Set-PSSessionConfiguration | 更改已注册会话配置的属性。
Unregister-PSSessionConfiguration | 从计算机上删除已注册的会话配置。
New-PSSessionOption | 创建包含会话高级选项的对象。
Add-PSSnapin | 将一个或多个 Windows PowerShell 管理单元添加到当前会话。
Get-PSSnapin | 获取计算机上的 Windows PowerShell 管理单元。
Remove-PSSnapin | 将 Windows PowerShell 管理单元从当前会话中删除。
Complete-Transaction | 提交活动事务。
Get-Transaction | 获取当前（活动）事务。
Start-Transaction | 启动事务。
Undo-Transaction | 回滚活动事务。
Use-Transaction | 将脚本块添加到活动事务中。
Get-Random | 从集合中获取随机数或随机选择对象。
ConvertFrom-SecureString | 将安全字符串转换为加密的标准字符串。
ConvertTo-SecureString | 将加密的标准字符串转换为安全字符串。它还可以将纯文本转换为安全字符串。此 Cmdlet 与 ConvertFrom-SecureString 和 Read-Host 一起使用。
Get-Service | 获取本地或远程计算机上的服务。
New-Service | 在注册表和服务数据库中为 Windows 服务创建新项。
Restart-Service | 停止并接着启动一个或更多服务。
Resume-Service | 恢复一项或多项挂起（暂停的）服务。
Set-Service | 启动、停止和挂起服务并更改服务的属性。
Start-Service | 启动一个或多个已停止的服务。
Stop-Service | 停止一个或多个正在运行的服务。
Suspend-Service | 挂起（暂停）一个或多个正在运行的服务。
Start-Sleep | 在指定的时间段内挂起 shell、脚本或运行空间活动。
Set-StrictMode | 建立和强制执行表达式、脚本和脚本块中的编码规则。
Out-String | 将对象作为一列字符串发送到主机。
Select-String | 查找字符串和文件中的文本。
ConvertFrom-StringData | 将包含一个或多个“名称=值”对的字符串转换为哈希表。
Format-Table | 将输出的格式设置为表。
New-TimeSpan | 创建表示时间间隔的对象。
Get-TraceSource | 获取用于跟踪的 Windows PowerShell 组件。
Set-TraceSource | 配置、启动和停止对 Windows PowerShell 组件的跟踪。
Start-Transcript | 在文本文件中创建全部或部分 Windows PowerShell 会话的记录。
Stop-Transcript | 停止脚本。
Add-Type | 向 Windows PowerShell 会话中添加 .NET 类型（一种类）。
Update-TypeData | 通过重新加载 *.types.ps1xml 文件来更新当前的扩展类型配置。
Get-UICulture | 获取操作系统中设置的当前用户界面区域性。
Get-Unique | 从排序列表返回唯一项目。
Clear-Variable | 删除变量的值。
Get-Variable | 获取当前控制台中的变量。
New-Variable | 创建新变量
Remove-Variable | 删除变量及其值。
Set-Variable | 设置变量的值。如果不存在具有所请求名称的变量，则创建该变量。
Write-Verbose | 将文本写入 Windows PowerShell 中的详细消息流。
Write-Warning | 写入警告消息。
New-WebServiceProxy | 创建一个 Web 服务代理对象，用于在 Windows PowerShell 中使用和管理 Web 服务。
Format-Wide | 将对象的格式设置为只能显示每个对象的一个属性的宽表。
Get-WinEvent | 从本地和远程计算机上的事件日志和事件跟踪日志文件中获取事件。
Register-WmiEvent | 订阅由 WMI 对象生成的事件。
Set-WmiInstance | 创建或修改 WMI 类的实例。
Invoke-WmiMethod | 调用 WMI 方法。
Get-WmiObject | 获取 WMI 类的实例或可用类的相关信息。
Remove-WmiObject | 删除 WMI 类和实例。
Connect-WSMan | 连接到远程计算机上的 WinRM 服务。
Disable-WSManCredSSP | 在客户端计算机上禁用凭据安全服务提供程序 (CredSSP) 身份验证。
Disconnect-WSMan | 断开客户端与远程计算机上的 WinRM 服务的连接。
Enable-WSManCredSSP | 在客户端计算机上启用凭据安全服务提供程序 (CredSSP) 身份验证。
Get-WSManCredSSP | 获取客户端的与凭据安全服务提供程序相关的配置。
Get-WSManInstance | 显示由资源 URI 指定的资源实例的管理信息。
Invoke-WSManAction | 对资源 URI 和选择器指定的对象调用操作。
New-WSManInstance | 创建管理资源的新实例。
New-WSManSessionOption | 创建 WSMan 会话选项哈希表以用作以下 WSMan cmdlet 的输入参数：Connect-WSMan、Get-WSManInstance、Invoke-WSManAction、Set-WSManInstance。
Remove-WSManInstance | 删除管理资源实例。
Set-WSManInstance | 修改与资源相关的管理信息。
Set-WSManQuickConfig | 配置本地计算机的远程管理。
Test-WSMan | 测试 WinRM 服务是否正在本地或远程计算机上运行。
ConvertTo-XML | 创建对象的基于 XML 的表示形式。
Select-XML | 在 XML 文档中查找文本。

另请参阅

  • Windows PowerShell About 帮助主题
  • Windows PowerShell 提供程序帮助主题
  • PowerShell.exe 控制台帮助
  • Windows PowerShell SDK


Add-Computer

将本地计算机添加到域或工作组中。

语法

Add-Computer [-DomainName] <string> [-Credential <PSCredential>] [-OUPath <string>] [-Server <string>] [-Unsecure] [-PassThru] [-Confirm] [-WhatIf] [<CommonParameters>]

Add-Computer [-WorkGroupName] <string> [-Credential <PSCredential>] [-PassThru] [-Confirm] [-WhatIf] [<CommonParameters>]

说明

Add-Computer cmdlet 将本地计算机添加到域或工作组中，或将其从一个域移至另一个域。它还为添加到域中的无帐户计算机创建域帐户。

可以使用此 cmdlet 的参数来指定组织单位 (OU) 和域控制器，或执行不安全的加入。

要获取此命令的结果，请使用 Verbose 和 PassThru 参数。

参数

-Credential <PSCredential>

指定有权执行此操作的用户帐户。默认值为当前用户。

键入用户名，如“User01”或“Domain01\User01”；或输入 PSCredential 对象，如 Get-Credential cmdlet 生成的一个 PSCredential 对象。如果键入用户名，则将提示您输入密码。

是否为必需？ | false
位置？ | named
默认值 | Current User Account Credentials
是否接受管道输入？ | false
是否接受通配符？ | false

-DomainName <string>

为计算机帐户指定域。此参数是必需的。

是否为必需？ | true
位置？ | 2
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-OUPath <string>

为域帐户指定组织单位 (OU)。输入 OU 的完全可分辨名称。默认值为域中计算机对象的默认 OU。

是否为必需？ | false
位置？ | named
默认值 | The default OU for machine objects for in the domain
是否接受管道输入？ | false
是否接受通配符？ | false

-PassThru

返回命令的结果。默认情况下，此 cmdlet 将不产生任何输出。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Server <string>

指定向域中添加计算机的域控制器的名称。以 DomainName\ComputerName 格式输入该名称。默认值为本地计算机。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Unsecure

执行不安全的加入。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-WorkGroupName <string>

指定计算机的工作组名称。如果省略此参数，则计算机将加入到域中。

是否为必需？ | true
位置？ | 3
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Confirm

在执行命令之前提示您进行确认。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-WhatIf

描述如果执行该命令会发生什么情况（无需实际执行该命令）。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

<CommonParameters>

此 cmdlet 支持通用参数：-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。有关详细信息，请参阅 about_Commonparameters.

输入和输出

输入类型是指可通过管道传递给 cmdlet 的对象的类型。返回类型是指 Cmdlet 所返回对象的类型。

输入 | None 不能通过管道将对象传递给 Add-Computer。
输出 | Microsoft.PowerShell.Commands.ComputerChangeInfo 如果使用 PassThru 参数，则 Add-Computer 返回 ComputerChangeInfo 对象。否则，此 cmdlet 将不产生任何输出。

示例 1

C:\PS>add-computer -domainname Domain01; restart-computer

说明
-----------
这些命令使用当前用户的凭据将本地计算机添加到 Domain01 域中。

第一条命令将计算机添加到域中。第二条命令使用 Restart-Computer cmdlet 重新启动计算机，这样将完成加入操作。这两条命令用分号 (;) 分隔。

示例 2

C:\PS>add-computer -workgroupname WORKGROUP-A

说明
-----------
此命令将本地计算机添加到 Workgroup-A 工作组中。

示例 3

C:\PS>add-computer -DomainName Domain01 -Server Domain01\DC01 -passthru -verbose

说明
-----------
此命令使用 Domain01\DC01 域控制器将本地计算机添加到 Domain01 域中。

此命令使用 PassThru 和 Verbose 参数来获取有关命令结果的详细信息。

示例 4

C:\PS>Add-Computer -domainname Domain02 -OUPath OU=testOU,DC=domain,DC=Domain,DC=com

说明
-----------
此命令将 Server01 和 Server02 计算机添加到 Domain02 域中。它使用 OUPath 命令为新帐户指定组织单位。

示例 5

C:\PS>Add-Computer -domainname Domain02 -cred Domain02\Admin02 -passthru

说明
-----------
此命令使用域管理员的凭据将本地计算机添加到 Domain02 域中。此命令使用 PassThru 参数生成有关命令结果的简要报告。

另请参阅

  • Checkpoint-Computer
  • Remove-Computer
  • Restart-Computer
  • Restore-Computer
  • Stop-Computer
  • Test-Connection


Add-Content

向指定的项中添加内容，如向文件中添加字词。

语法

Add-Content [-LiteralPath] <string[]> [-Value] <Object[]> [-Credential <PSCredential>] [-Exclude <string[]>] [-Filter <string>] [-Force] [-Include <string[]>] [-PassThru] [-Confirm] [-WhatIf] [-UseTransaction] [<CommonParameters>]

Add-Content [-Path] <string[]> [-Value] <Object[]> [-Credential <PSCredential>] [-Exclude <string[]>] [-Filter <string>] [-Force] [-Include <string[]>] [-PassThru] [-Confirm] [-WhatIf] [-UseTransaction] [<CommonParameters>]

说明

Add-Content cmdlet 将内容追加到指定项或指定的文件中。可以通过在命令中键入内容或通过指定包含内容的对象来指定内容。

参数

-Credential <PSCredential>

指定有权执行此操作的用户帐户。默认值为当前用户。

键入用户名，如“User01”或“Domain01\User01”；或输入 PSCredential 对象，如 Get-Credential cmdlet 生成的一个 PSCredential 对象。如果键入用户名，则将提示您输入密码。

随同 Windows PowerShell 一起安装的任何提供程序都不支持此参数。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | true (ByPropertyName)
是否接受通配符？ | false

-Exclude <string[]>

忽略指定项。此参数的值对 Path 参数进行限定。请输入路径元素或模式，例如“*.txt”。允许使用通配符。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Filter <string>

以提供程序的格式或语言指定筛选器。此参数的值对 Path 参数进行限定。筛选器的语法（包括通配符的使用）取决于提供程序。筛选器比其他参数更有效，因为提供程序是在检索对象时应用筛选器，而不是在检索对象后再由 Windows PowerShell 筛选对象。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Force

覆盖只读属性，从而允许您向只读文件中添加内容。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Include <string[]>

只添加指定项。此参数的值对 Path 参数进行限定。请输入路径元素或模式，例如“*.txt”。允许使用通配符。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-LiteralPath <string[]>

指定用于接收其他内容的项的路径。与 Path 不同，LiteralPath 的值严格按照所键入的形式使用。不会将任何字符解释为通配符。如果路径包括转义符，请将其括在单引号中。单引号会告知 Windows PowerShell 不要将所有字符都解释为转义序列。

是否为必需？ | true
位置？ | 1
默认值 |
是否接受管道输入？ | true (ByPropertyName)
是否接受通配符？ | false

-PassThru

返回一个表示所添加内容的对象。默认情况下，此 cmdlet 将不产生任何输出。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Path <string[]>

指定用于接收其他内容的项的路径。允许使用通配符。如果指定多个路径，请使用逗号分隔这些路径。

是否为必需？ | true
位置？ | 1
默认值 |
是否接受管道输入？ | true (ByPropertyName)
是否接受通配符？ | false

-Value <Object[]>

指定要添加的内容。键入用引号引起来的字符串，例如 "This data is for internal use only"；或指定包含内容的对象，例如 Get-Date 生成的 DateTime 对象。

无法通过键入文件路径来指定文件内容，因为路径只是一个字符串，但可以使用 Get-Content 命令来获取内容并将其传递给 Value 参数。

是否为必需？ | true
位置？ | 2
默认值 |
是否接受管道输入？ | true (ByValue, ByPropertyName)
是否接受通配符？ | false

-Confirm

在执行命令之前提示您进行确认。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-WhatIf

描述如果执行该命令会发生什么情况（无需实际执行该命令）。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-UseTransaction

将命令包含在活动事务中。仅当正在执行事务时，此参数才有效。有关详细信息，请参阅 about_Transactions。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

<CommonParameters>

此 cmdlet 支持通用参数：-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。有关详细信息，请参阅 about_Commonparameters.

输入和输出

输入类型是指可通过管道传递给 cmdlet 的对象的类型。返回类型是指 Cmdlet 所返回对象的类型。

输入 | System.Object 可以通过管道将要添加的对象 (Value) 传递给 Add-Content。
输出 | None 或 System.String 如果使用 Passthru 参数，则 Add-Content 生成一个表示内容的 System.String 对象。否则，此 cmdlet 将不产生任何输出。

说明

在将对象通过管道传送给 Add-Content 时，该对象将先转换为字符串，然后再添加到项目。对象类型决定字符串格式，但该格式可能不同于该对象的默认显示。要控制字符串格式，请使用发送 cmdlet 的格式设置参数。

还可以使用 Add-Content 的内置别名“ac”来对其进行引用。有关详细信息，请参阅 about_Aliases。

Add-Content cmdlet 用于处理由任何提供程序公开的数据。要列出会话中可用的提供程序，请键入“Get-PsProvider”。有关详细信息，请参阅 about_Providers。

示例 1

C:\PS>add-content -path *.txt -exclude help* -value "END"

说明
-----------
此命令将“END”添加到当前目录内的所有文本文件中，但文件名以“help”开头的文本文件除外。

示例 2

C:\PS>add-content -Path file1.log, file2.log -Value (get-date) -passthru

说明
-----------
此命令将日期添加到 File1.log 和 File2.log 文件的末尾，然后在命令行中显示该日期。此命令使用 Get-Date cmdlet 来获取日期，并使用 Value 参数将该日期传递给 Add-Content。PassThru 参数通过管道传递表示所添加内容的对象。由于没有其他任何 cmdlet 接收所传递的对象，因此该对象将显示在命令行中。

示例 3

C:\PS>add-content -path monthly.txt -value (get-content c:\rec1\weekly.txt)

说明
-----------
此命令将 Weekly.txt 文件的内容添加到 Monthly.txt 文件的末尾。此命令使用 Get-Content cmdlet 获取 Weekly.txt 文件的内容，并使用 Value 参数将 weekly.txt 的内容传递给 Add-Content。括号可确保 Get-Content 命令在 Add-Content 命令开始之前已完成。

还可以将 Weekly.txt 的内容复制为变量（例如，$w），然后使用 Value 参数将该变量传递给 Add-Content。在这种情况下，命令将为“add-content -path monthly.txt -value $w”。

示例 4

C:\PS>add-content -value (get-content test.log) -path C:\tests\test134\logs\test134.log

说明
-----------
此命令将创建一个新目录和文件，并将现有文件的内容复制到新创建的文件中。

此命令使用 Add-Content cmdlet 来添加内容。Value 参数的值是从现有文件 Test.log 获取内容的 Get-Content 命令。

path 参数的值是此命令运行时不存在的路径。在此示例中，只存在 C:\Tests 目录。此命令将创建剩余的目录和 Test134.log 文件。

Force 参数不是此命令的必需参数。即使没有 Force 参数，Add-Content 也会创建目录来完成路径。

另请参阅

  • about_Providers
  • Get-Content
  • Set-Content
  • Clear-Content
  • Get-Item


Add-History

向会话历史记录追加条目。

语法

Add-History [[-InputObject] <PSObject[]>] [-PassThru] [<CommonParameters>]

说明

Add-History cmdlet 用于在会话历史记录（即当前会话期间输入的命令的列表）的末尾添加条目。

可以使用 Get-History cmdlet 先获取命令，然后将命令传递给 Add-History，也可将获取的命令导出到 CSV 或 XML 文件中，再导入命令，随后将所导入的文件传递给 Add-History。可以使用此 cmdlet 向历史记录添加特定命令，或创建单个历史记录文件以保存来自多个会话的命令。

参数

-InputObject <PSObject[]>

将指定的 HistoryInfo 对象添加到会话历史记录中。可以通过此参数将使用 Get-History、Import-Clixml 或 Import-CSV 获取的 HistoryInfo 对象提交到 Add-History。

是否为必需？ | false
位置？ | 1
默认值 |
是否接受管道输入？ | true (ByValue)
是否接受通配符？ | false

-PassThru

对每个历史记录条目返回一个历史记录对象。默认情况下，此 cmdlet 将不产生任何输出。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

<CommonParameters>

此 cmdlet 支持通用参数：-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。有关详细信息，请参阅 about_Commonparameters.

输入和输出

输入类型是指可通过管道传递给 cmdlet 的对象的类型。返回类型是指 Cmdlet 所返回对象的类型。

输入 | Microsoft.PowerShell.Commands.HistoryInfo 可以通过管道将 HistoryInfo 对象传递给 Add-History。
输出 | None 或 Microsoft.PowerShell.Commands.HistoryInfo 如果使用 PassThru 参数，则 Add-History 生成 HistoryInfo 对象。否则，此 cmdlet 将不产生任何输出。

说明

会话历史记录是会话期间输入的命令（包含 ID）的列表。会话历史记录表示命令的执行顺序、状态以及开始和结束时间。输入每条命令时，Windows PowerShell 会将其添加到历史记录中，以便对其进行重复利用。有关会话历史记录的详细信息，请参阅 about_History。

若要指定要添加到历史记录中的命令，请使用 InputObject 参数。Add-History 命令只接受 HistoryInfo 对象，例如那些由 Get-History 为每条命令所生成的对象。不能向其传递路径和文件名，也不能传递命令列表。

可以使用 -InputObject 参数来向 Add-History 传递 HistoryInfo 对象的文件。为此，请使用 Export-CSV 或 Export-Clixml 将 Get-History 命令的结果导出到文件中，然后使用 Import-CSV 或 Import-Clixml 导入该文件。随后，可将所导入的 HistoryInfo 对象的文件通过管道或以变量形式传递给 Add-History。有关详细信息，请参阅示例。

传递给 Add-History 的 HistoryInfo 对象文件必须包括 HistoryInfo 对象的类型信息、列标题以及所有属性。若要将该对象传递回 Add-History，请不要使用 Export-CSV 的 NoTypeInformation 参数，并且不要删除文件中的类型信息、列标题或任何字段。

若要编辑会话历史记录，请将会话导出到 CSV 或 XML 文件中，在编辑该文件后，导入该文件，并使用 Add-History 将其追加到当前会话历史记录。

示例 1

C:\PS>get-history | export-csv c:\testing\history.csv

C:\PS>import-csv history.csv | add-history

说明
-----------
这些命令将在一个 Windows PowerShell 会话中键入的命令添加到另一个 Windows PowerShell 会话的历史记录中。第一条命令获取表示历史记录中的命令的对象，并将它们导出到 History.csv 文件中。第二条命令是在另一个会话的命令行中键入的。该命令使用 Import-Csv cmdlet 导入 History.csv 文件中的对象。管道运算符将对象传递给 Add-History cmdlet，后者将表示 History.csv 文件中的命令的对象添加到当前会话历史记录中。

示例 2

C:\PS>import-clixml c:\temp\history.xml | add-history -passthru | foreach-object {invoke-history}

说明
-----------
此命令先导入 History.xml 文件中的命令，接着将它们添加到当前会话历史记录中，然后执行合并后的历史记录中的命令。

第一条命令使用 Import-Clixml 命令来导入被导出到 History.xml 文件中的命令历史记录。管道运算符 (|) 将命令传递给 Add-History 参数，该参数将命令添加到当前会话历史记录中。PassThru 参数将表示所添加命令的对象传入管道。

然后该命令使用 ForEach-Object cmdlet 将 Invoke-History 命令应用于合并后的历史记录中的每个命令。Invoke-History 命令设置为脚本块格式（括在大括号 ({}) 中），这是因为即使在只应用一个命令的情况下，ForEach-Object 也要求以脚本块的形式提供命令。

示例 3

C:\PS>get-history -id 5 -count 5 | add-history

说明
-----------
此命令将历史记录中前五条命令添加到历史记录列表的末尾。它使用 Get-History cmdlet 来获取包含最后一条命令 5 在内的五条命令。管道运算符 (|) 将这些命令传递给 Add-History cmdlet，后者将它们追加到当前历史记录中。Add-History 命令不包含任何参数，但 Windows PowerShell 将通过管道传递的对象与 InputObject 参数相关联。

示例 4

C:\PS>$a = import-csv c:\testing\history.csv

C:\PS>add-history -inputobject $a -passthru

说明
-----------
这些命令会将 History.csv 文件中的命令添加到当前会话历史记录。第一条命令使用 Import-Csv cmdlet 导入 History.csv 文件中的命令，将该文件的内容存储在变量 $a 中。第二条命令使用 Add-History cmdlet 将 History.csv 中的命令添加到当前会话历史记录中。它使用 InputObject 参数指定 $a 变量，并使用 PassThru 参数生成要在命令行中显示的对象。如果没有 PassThru 参数，则 Add-History 不会产生任何要显示的输出。

示例 5

C:\PS>add-history -inputobject (import-clixml c:\temp\history01.xml)

说明
-----------
此命令将 History01.xml 文件中的命令添加到当前会话历史记录中。它使用 InputObject 参数来将圆括号中命令的结果传递给 Add-History。圆括号中的命令首先执行，该命令将 History01.xml 文件导入到 Windows PowerShell 中。然后，Add-History 将该文件中的命令添加到会话历史记录中。

另请参阅

  • about_History
  • Get-History
  • Invoke-History
  • Clear-History


Add-Member

向 Windows PowerShell 对象的实例中添加用户定义的自定义成员。

语法

Add-Member [-MemberType] {<AliasProperty> | <CodeProperty> | <Property> | <NoteProperty> | <ScriptProperty> | <Properties> | <PropertySet> | <Method> | <CodeMethod> | <ScriptMethod> | <Methods> | <ParameterizedProperty> | <MemberSet> | <Event> | <All>} [-Name] <string> -InputObject <psobject> [[-Value] <Object>] [[-SecondValue] <Object>] [-Force] [-PassThru] [<CommonParameters>]

说明

Add-Member cmdlet 可向 Windows PowerShell 对象的实例中添加用户定义的自定义成员。允许添加的成员类型包括：AliasProperty、CodeProperty、NoteProperty、ScriptProperty、PropertySet、CodeMethod、MemberSet 和 ScriptMethod。通过使用 Value 参数可设置成员的初始值。在成员的类型为 AliasProperty、ScriptProperty、CodeProperty 和 CodeMethod 的情况下，可以使用 SecondValue 参数来提供附加信息。

附加成员将添加到通过管道传递给 Add-Member 或使用 InputObject 参数指定的对象的特定实例中。只有在该实例存在时，附加成员才可用。可使用 Export-Clixml cmdlet 将该实例（包括附加成员）保存到文件中。Import-Clixml cmdlet 可以使用该文件中存储的信息来重新创建相应对象的实例。

参数

-Force

添加新成员，即使与其同名的成员已存在。但不适用于核心成员类型。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-InputObject <psobject>

指定要向其添加新成员的对象。输入一个包含对象的变量，或键入可获取对象的命令或表达式。

是否为必需？ | true
位置？ | named
默认值 |
是否接受管道输入？ | true (ByValue)
是否接受通配符？ | false

-MemberType <PSMemberTypes>

指定要添加的成员类型。此参数是强制参数。

此参数的有效值为：

-- AliasProperty：一种可为现有属性定义新名称的属性。

-- CodeMethod：一种可引用 Microsoft .NET Framework 类的静态方法的方法。

-- CodeProperty：一种可引用 .NET Framework 类的静态属性的属性。

-- MemberSet：属性和方法的预定义集合，如 PSBase、PSObject 和 PSTypeNames。

-- Method：基础 .NET Framework 对象的方法。

-- NoteProperty：具有静态值的属性。

-- ParameterizedProperty：具有参数和参数值的属性。

-- Property：基础 .NET Framework 对象的属性。

-- PropertySet：对象属性的预定义集合。

-- ScriptMethod：其值是脚本输出的方法。

-- ScriptProperty：其值是脚本输出的属性。

-- All：获取全部成员类型。

-- Methods：获取对象的所有类型的方法（如 method、codemethod、scriptmethod）

-- Properties：获取对象的所有类型的属性（如 property、codeproperty、aliasproperty、scriptproperty）。

并非所有对象都具有成员的全部类型。如果您指定的成员类型不是对象所具有的，则 Windows PowerShell 会返回错误。

Event 成员类型对 Add-Member 无效。

是否为必需？ | true
位置？ | 1
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | true

-Name <string>

指定要添加的成员名称。

如果省略“Name”参数名称，则 -Name 参数的值必须为命令中第二个未命名的参数值。如果包含参数名称，则该参数可以以任何顺序出现。

是否为必需？ | true
位置？ | 2
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-PassThru

将新扩展的对象传递至管道。默认情况下，此 cmdlet 将不产生任何输出。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-SecondValue <Object>

指定有关 AliasProperty、ScriptProperty、CodeProperty 或 CodeMethod 成员的可选附加信息。如果在添加 AliasProperty 时使用此参数，则此参数必须为数据类型。向指定数据类型的转换将添加到 AliasProperty 的值中。例如，如果添加了为字符串属性提供替代名称的 AliasProperty，则也可指定 System.Int32 的 SecondValue 参数来指示该字符串属性的值在使用对应的 AliasProperty 进行访问时应转换为整数。

在添加 ScriptProperty 成员时，可以使用 SecondValue 参数来指定附加的 ScriptBlock。这种情况下，将使用 Value 参数中指定的第一个 ScriptBlock 来获取变量的值。SecondValue 参数中指定的第二个 ScriptBlock 可用于设置变量的值。

是否为必需？ | false
位置？ | 4
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Value <Object>

指定添加成员的初始值。若要添加 AliasProperty、CodeProperty 或 CodeMethod 成员，则可通过使用 SecondValue 参数提供可选的附加信息。

是否为必需？ | false
位置？ | 3
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

<CommonParameters>

此 cmdlet 支持通用参数：-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。有关详细信息，请参阅 about_Commonparameters.

输入和输出

输入类型是指可通过管道传递给 cmdlet 的对象的类型。返回类型是指 Cmdlet 所返回对象的类型。

输入 | System.Management.Automation.PSObject 可将任何对象类型通过管道传递至 Add-Member。
输出 | None 或 System.Object 如果使用 PassThru 参数，则 Add-Member 返回新扩展的对象。否则，此 cmdlet 将不产生任何输出。

说明

只能向 PSObject 对象添加成员。若要确定对象是否为 PSObject 对象，请使用“is”运算符。例如，若要测试 $obj 变量中存储的对象，请键入“$obj -is [PSObject]”。

MemberType、Name、Value 和 SecondValue 参数的名称为可选项。如果省略参数名称，则未命名参数的值必须按以下顺序出现：MemberType、Name、Value、SecondValue。如果包括参数名称，则参数能够以任何顺序出现

示例 1

C:\PS>$a = (get-childitem)[0]

C:\PS> $a | add-member -membertype noteproperty -name Status -value done

C:\PS> $a | get-member -type noteproperty

   TypeName: System.IO.DirectoryInfo

Name          MemberType   Definition
----          ----------   ----------
PSChildName   NoteProperty System.String PSChildName=Co
PSDrive       NoteProperty System.Management.Automation
PSIsContainer NoteProperty System.Boolean PSIsContainer
PSParentPath  NoteProperty System.String PSParentPath=M
PSPath        NoteProperty System.String PSPath=Microso
PSProvider    NoteProperty System.Management.Automation
Status        NoteProperty System.String Status=done

说明
-----------
这些命令将状态注释属性添加到 Get-ChildItem 返回的 DirectoryInfo 对象，并向该对象赋予一个“done”值。

第一个命令获取 Get-Childitem 返回的第一个对象（索引 0）。

第二个命令用于添加注释属性。

第三个命令使用管道运算符 (|) 将更新后的对象发送到 Get-Member cmdlet。输出显示已添加属性。

示例 2

C:\PS>$a = (get-childitem)[0]

C:\PS> $a | add-member -membertype aliasproperty -name FileLength -value Length

C:\PS> $a.filelength

说明
-----------
这些命令将向 Get-ChildItem 返回的 DirectoryInfo 对象添加 FileLength 别名属性。新属性是 Length 属性的别名。

第一个命令获取 Get-Childitem 返回的第一个对象（索引 0）。

第二个命令用于添加别名属性。

第三个命令将返回新 FileLength 属性的值。

示例 3

C:\PS>$a = "a string"

C:\PS> $a = $a | add-member -membertype noteproperty -name StringUse -value Display -passthru

C:\PS> $a.StringUse

说明
-----------
这些命令用于将 StringUse 属性添加到字符串。由于字符串不是 PSObject 对象，因此必须将 PassThru 参数包括在命令中，以将扩展的字符串保存到变量中。示例中的最后一个命令用于显示新属性。

示例 4

C:\PS>$a = "this is a string"

C:\PS> $a = add-member -inputobject $a -membertype scriptmethod -name words `
-value {$this.split()} -passthru

C:\PS> $a.words()

说明
-----------
这些命令将向字符串对象添加脚本方法。脚本方法公开了 .NET Framework 类库类 System.String 的 Split() 方法，以便于通过对字符串对象调用名为“Words”的方法来返回字符串中的各个单词。请注意，指定 PassThru 参数可强制 Add-Member 返回扩展的字符串对象作为将存储在 $a 变量中的输出。

示例 5

C:\PS>$event = get-eventlog -logname system -newest 1

C:\PS> $event.TimeWritten | get-member

C:\PS> add-member -inputobject $event -membertype aliasproperty -name When `
-value TimeWritten -secondvalue System.String

C:\PS> $event.When | get-member

说明
-----------
这些命令将向由 Get-EventLog cmdlet 返回的 EventLogEntry 对象添加 AliasProperty。AliasProperty 将命名为“When”，且此属性是该对象的 TimeWritten 属性的别名。SecondValue 参数用于指定在使用 AliasProperty 进行访问时属性值应转换为类型 System.String；TimeWritten 属性为 DateTime 对象。

第一个命令使用 Get-EventLog cmdlet 从 System 事件日志中检索最近发生的事件，并将其存储在 $event 变量中。

第二个命令用于访问该事件的 TimeWritten 属性，并通过管道将其传递给 Get-Member cmdlet 以表明该属性是 DateTime 类型。然后使用 Add-Member 向存储在 $event 变量中的 EventLogEntry 对象的实例添加 AliasProperty 成员。Name 参数用于将新成员的名称设置为“When”，而 Value 参数用于指定该新成员名称为 TimeWritten 属性的别名。SecondValue 参数用于指示，在使用此新成员时，它所返回的值应从其原来的 System.DateTime 类型转换为 System.String 类型。

第三个命令用于访问新成员，并通过管道将其传递给 Get-Member cmdlet 以确认它属于 System.String 类型。

示例 6

C:\PS>function Copy-Property ($From, $To)

{
  foreach ($p in Get-Member -InputObject $From -MemberType Property)
  {
     Add-Member -InputObject $To -MemberType NoteProperty -Name $p.Name
     -Value $From.$($p.Name) -Force

     $To.$($p.Name) = $From.$($p.Name)
   }
}

说明
-----------
此函数将一个对象的所有属性复制到另一个对象中。

函数中的第一个命令声明了函数名称并列出其参数。

Foreach 循环使用 Get-Member cmdlet 来获取 From 对象的每个属性。将针对每个属性依次执行 Foreach 循环中的命令。

Add-Member 命令将该 From 对象的属性当作 NoteProperty 添加到 To 对象中。它采用 Force 参数以便该命令可以添加同名的成员。

函数中的最后一个命令为新属性指定的名称与原属性的名称相同。

另请参阅

  • Get-Member
  • Export-Clixml
  • Import-Clixml


Add-PSSnapin

将一个或多个 Windows PowerShell 管理单元添加到当前会话。

语法

Add-PSSnapin [-Name] <string[]> [-PassThru] [<CommonParameters>]

说明

Add-PSSnapin cmdlet 将已注册的 Windows PowerShell 管理单元添加到当前会话。添加管理单元后，可以在当前会话中使用添加的管理单元所支持的 cmdlet 和提供程序。

若要将管理单元添加到以后所有的 Windows PowerShell 会话中，请在 Windows PowerShell 配置文件中添加 Add-PSSnapin 命令。有关详细信息，请参阅 about_Profiles。

参数

-Name <string[]>

指定管理单元的名称。（这是 Name，而不是 AssemblyName 或 ModuleName。）

要查找系统中已注册的管理单元的名称，请键入：“get-pssnapin –registered”。

是否为必需？ | true
位置？ | 1
默认值 |
是否接受管道输入？ | true (ByPropertyName)
是否接受通配符？ | false

-PassThru

返回表示每个已添加的管理单元的对象。默认情况下，此 cmdlet 将不产生任何输出。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

<CommonParameters>

此 cmdlet 支持通用参数：-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。有关详细信息，请参阅 about_Commonparameters.

输入和输出

输入类型是指可通过管道传递给 cmdlet 的对象的类型。返回类型是指 Cmdlet 所返回对象的类型。

输入 | None 不能通过管道将对象传递给 Add-PSSnapin。
输出 | None or System.Management.Automation.PSSnapInInfo 如果使用 PassThru 参数，则 Add-PSSnapin 返回一个表示管理单元的 PSSnapInInfo 对象。否则，此 cmdlet 将不产生任何输出。

说明

有关 Windows PowerShell 中的管理单元的详细信息，请参阅 about_PSSnapins。有关如何创建 Windows PowerShell 管理单元的信息，请参阅 MSDN (Microsoft Developer Network) Library 中的“如何创建 Windows PowerShell 管理单元”，网址是 http://go.microsoft.com/fwlink/?LinkId=144762。

Add-PSSnapin 仅用于向当前的会话添加管理单元。要将管理单元添加到所有的 Windows PowerShell 会话中，请将它添加到 Windows PowerShell 配置文件中。有关详细信息，请参阅 about_Profiles。

可以添加已使用 Microsoft .NET Framework 安装实用工具进行注册的任何 Windows PowerShell 管理单元。有关详细信息，请参阅 MSDN Library 中的“如何注册 Cmdlet、提供程序和主机应用程序”，网址是 http://go.microsoft.com/fwlink/?LinkID=143619。

若要获取计算机上注册的管理单元列表，请键入“get-pssnapin -registered”。

添加管理单元之前，Add-PSSnapin 会检查该管理单元的版本，验证它是否与当前版本的 Windows PowerShell 兼容。如果管理单元未通过版本检查，则 Windows PowerShell 将报告错误。

示例 1

C:\PS>add-PSSnapIn Microsoft.Exchange, Microsoft.Windows.AD

说明
-----------
此命令向当前的会话添加 Microsoft Exchange 和 Active Directory 管理单元。

示例 2

C:\PS>get-pssnapin -registered | add-pssnapin -passthru

说明
-----------
此命令向会话添加所有已注册的 Windows PowerShell 管理单元。它使用 Get-PSSnapin cmdlet（带 Registered 参数）来获取表示每个已注册管理单元的对象。管道运算符 (|) 将结果传递给 Add-PSSnapin，后者将这些结果添加到会话中。PassThru 参数返回表示每个已添加的管理单元的对象。

示例 3

C:\PS>get-pssnapin

说明
-----------
此示例演示了在系统中注册一个管理单元，然后将其添加到会话的过程。它使用了 ManagementFeatures，这是在名为 ManagementCmdlets.dll 的文件中实现的一个虚拟管理单元。

第一条命令获取已添加到当前会话的管理单元，其中包括随同 Windows PowerShell 安装的管理单元。在此示例中，不返回 ManagementFeatures。这表示 ManagementFeatures 尚未添加到会话中。

    get-pssnapin

第二条命令获取已在系统中注册的管理单元，其中包括已添加到会话的那些管理单元。随同 Windows PowerShell 一起安装的管理单元不包括在内。

    get-pssnapin -registered

在本例中，该命令不返回任何管理单元。这表示 ManagementFeatures 管理单元尚未在系统上注册。

第三条命令为 .NET Framework 中 InstallUtil 工具的路径创建一个别名“installutil”。

    set-alias installutil $env:windir\Microsoft.NET\Framework\v2.0.50727\installutil.exe

第四条命令使用 InstallUtil 工具来注册管理单元。该命令指定了 ManagementCmdlets.dll 的路径、文件名或管理单元的“模块名称”。

    installutil C:\Dev\Management\ManagementCmdlets.dll

第五条命令与第二条命令相同。这次，使用该命令来验证是否已注册 ManagementCmdlets 管理单元。

    get-pssnapin -registered

第六条命令使用 Add-PSSnapin cmdlet 将 ManagementFeatures 管理单元添加到会话。该命令指定了管理单元名称 ManagementFeatures，而不是文件名。

    add-pssnapin ManagementFeatures

为了验证是否已将管理单元添加到会话中，第七条命令使用 Get-Command cmdlet 的 Module 参数。该命令显示由管理单元或模块添加到会话中的项。

    get-command -module ManagementFeatures

也可以使用 Get-Command 返回的对象的 PSSnapin 属性来查找 cmdlet 源自的管理单元或模块。第八条命令使用点表示法来查找 Set-Alias 命令的 PSSnapin 属性的值。

    (get-command set-alias).pssnapin

另请参阅

  • Get-PSSnapin
  • Remove-PSSnapin
  • about_Profiles


Add-Type

向 Windows PowerShell 会话中添加 Microsoft .NET Framework 类型（一种类）。

语法

Add-Type -AssemblyName <string[]> [-IgnoreWarnings] [-PassThru] [<CommonParameters>]

Add-Type [-Name] <string> [-MemberDefinition] <string[]> [-CodeDomProvider <CodeDomProvider>] [-CompilerParameters <CompilerParameters>] [-语言 {<CSharp> | <CSharpVersion3> | <VisualBasic> | <JScript>}] [-命名空间 <string>] [-OutputAssembly <string>] [-OutputType <OutputAssemblyType>] [-ReferencedAssemblies <string[]>] [-UsingNamespace <string[]>] [-IgnoreWarnings] [-PassThru] [<CommonParameters>]

Add-Type [-Path] <string[]> [-CompilerParameters <CompilerParameters>] [-OutputAssembly <string>] [-OutputType <OutputAssemblyType>] [-ReferencedAssemblies <string[]>] [-IgnoreWarnings] [-PassThru] [<CommonParameters>]

Add-Type [-TypeDefinition] <string> [-CodeDomProvider <CodeDomProvider>] [-CompilerParameters <CompilerParameters>] [-语言 {<CSharp> | <CSharpVersion3> | <VisualBasic> | <JScript>}] [-OutputAssembly <string>] [-OutputType <OutputAssemblyType>] [-ReferencedAssemblies <string[]>] [-IgnoreWarnings] [-PassThru] [<CommonParameters>]

说明

使用 Add-Type cmdlet，可以在 Windows PowerShell 会话中定义 .NET Framework 类。然后可将对象实例化（通过使用 New-Object cmdlet）并使用这些对象，就像使用任何 .NET Framework 对象一样。如果将 Add-Type 命令添加到 Windows PowerShell 配置文件中，则在所有 Windows PowerShell 会话中都可使用该类。

可通过指定现有的程序集或源代码文件来指定类型，也可通过内联方式指定源代码或将源代码保存在变量中。甚至可以仅指定一种方法，此时，Add-Type 便可以定义并生成该类。可使用该功能来执行 Platform Invoke (P/Invoke) 以调用 Windows PowerShell 中的非托管函数。如果指定源代码，Add-Type 将编译所指定的源代码并生成包含新 .NET Framework 类型的内存中程序集。

可使用 Add-Type 的参数来指定替代语言、编译器（默认为 CSharp）、编译器选项、程序集依赖关系、类命名空间，以及该类型和所获得的程序集的名称。

参数

-AssemblyName <string[]>

指定包括相应类型的程序集的名称。Add-Type 从所指定的程序集中获取相应类型。在基于程序集名称创建类型时需要此参数。

输入程序集的全称或简称（也称为“部分名称”）。在程序集名称中允许使用通配符。如果输入简称（即部分名称），Add-Type 会将其解析为全称，然后使用全称来加载程序集。

此参数不接受路径或文件名。若要输入程序集动态链接库 (DLL) 文件的路径，请使用 Path 参数。

是否为必需？ | true
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | true

-CodeDomProvider <CodeDomProvider>

指定代码生成器或编译器。Add-Type 使用指定的编译器来编译源代码。默认为 CSharp 编译器。如果无法通过 Language 参数来指定所使用的语言，请使用此参数。所指定的 CodeDomProvider 必须可基于源代码生成程序集。

是否为必需？ | false
位置？ | named
默认值 | CSharp compiler
是否接受管道输入？ | false
是否接受通配符？ | false

-CompilerParameters <CompilerParameters>

指定用于源代码编译器的选项。这些选项未经修改就发送至编译器。

使用此参数，可以指示编译器生成可执行文件、嵌入资源或设置命令行选项，如“/unsafe”选项。此参数可实现 CompilerParameters 类 (System.CodeDom.Compiler.CompilerParameters)。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-IgnoreWarnings

忽略编译器警告。使用此参数可阻止 Add-Type 将编译器警告作为错误处理。

是否为必需？ | false
位置？ | named
默认值 | False
是否接受管道输入？ | false
是否接受通配符？ | false

-语言 <Language>

指定在源代码中使用的语言。Add-Type 使用该语言来选择正确的代码编译器。

有效值为：“CSharp”、“CSharpVersion3”、“VisualBasic”和“JScript”。默认值为“CSharp”。

是否为必需？ | false
位置？ | named
默认值 | CSharp
是否接受管道输入？ | false
是否接受通配符？ | false

-MemberDefinition <string[]>

指定类的新属性或方法。Add-Type 可生成支持属性或方法所需的模板代码。

可使用该功能来执行 Platform Invoke (P/Invoke) 以调用 Windows PowerShell 中的非托管函数。有关详细信息，请参阅示例。

是否为必需？ | true
位置？ | 2
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Name <string>

指定要创建的类的名称。基于成员定义生成类型时需要此参数。

类型名称和命名空间在一个会话中必须是唯一的。无法对类型进行卸载或更改。如果需要更改类型的代码，则必须更改名称或启动新的 Windows PowerShell 会话。否则，命令将失败。

是否为必需？ | true
位置？ | 1
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-命名空间 <string>

指定类型的命名空间。

如果命令中没有包括此参数，则在 Microsoft.PowerShell.Commands.AddType.AutoGeneratedTypes 命名空间中创建该类型。如果在含有空字符串值或 $null 值的命令中包括此参数，则在全局命名空间中生成该类型。

是否为必需？ | false
位置？ | named
默认值 | Microsoft.PowerShell.Commands.AddType.AutoGeneratedTypes
是否接受管道输入？ | false
是否接受通配符？ | false

-OutputAssembly <string>

在该位置为具有指定名称的程序集生成 DLL 文件。输入路径（可选）和文件名。允许使用通配符。默认情况下，Add-Type 仅在内存中生成程序集。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | true

-OutputType <OutputAssemblyType>

指定输出程序集的输出类型。有效值为 Library、ConsoleApplication 和 WindowsApplication。

默认情况下，将不指定输出类型。

仅当该命令中指定了输出程序集时，此参数才有效。

是否为必需？ | false
位置？ | named
默认值 | 无
是否接受管道输入？ | false
是否接受通配符？ | false

-PassThru

返回表示添加的类型的 System.Runtime 对象。默认情况下，此 cmdlet 将不产生任何输出。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Path <string[]>

指定包含相应类型的源代码文件或程序集 DLL 文件的路径。

如果提交源代码文件，则 Add-Type 会编译这些文件中的代码并在内存中创建相应类型的程序集。在 Path 值中所指定的文件扩展名确定 Add-Type 使用的编译器。

如果提交程序集文件，Add-Type 将从该程序集中获取相应类型。若要指定内存中程序集或全局程序集缓存，请使用 AssemblyName 参数。

是否为必需？ | true
位置？ | 1
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-ReferencedAssemblies <string[]>

指定类型所依赖的程序集。默认情况下，Add-Type 引用 System.dll 和 System.Management.Automation.dll。除默认程序集以外，还会引用使用此参数指定的程序集。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-TypeDefinition <string>

指定包含类型定义的源代码。输入字符串或 here-string 格式的源代码，或输入包含源代码的变量。有关 here-string 的详细信息，请参阅 about_Quoting_Rules。

在类型定义中需包括命名空间声明。如果省略命名空间声明，您的类型可能会与其他类型或其他类型的快捷方式同名，从而导致意外覆盖。例如，如果定义的类型名为“Exception”，则使用“Exception”作为 System.Exception 的快捷方式的脚本将失败。

是否为必需？ | true
位置？ | 1
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-UsingNamespace <string[]>

指定类所需的其他命名空间。这与 C# 中的 Using 关键字很相似。

默认情况下，Add-Type 引用 System 命名空间。在使用 MemberDefinition 参数时，Add-Type 默认情况下还引用 System.Runtime.InteropServices 命名空间。除默认命名空间以外，还会引用使用 UsingNamespace 参数添加的命名空间。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

<CommonParameters>

此 cmdlet 支持通用参数：-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。有关详细信息，请参阅 about_Commonparameters.

输入和输出

输入类型是指可通过管道传递给 cmdlet 的对象的类型。返回类型是指 Cmdlet 所返回对象的类型。

输入 | None 不能通过管道将对象传递到 Add-Type。
输出 | None 或 System.RuntimeType 如果使用 PassThru 参数，则 Add-Type 返回表示新类型的 System.RuntimeType 对象。否则，此 cmdlet 将不产生任何输出。

说明

添加的类型仅存在于当前会话中。要在所有会话中使用这些类型，请将其添加到 Windows PowerShell 配置文件中。有关配置文件的详细信息，请参阅 about_Profiles。

类型名称（和命名空间）在一个会话中必须是唯一的。无法对类型进行卸载或更改。如果需要更改类型的代码，则必须更改名称或启动新的 Windows PowerShell 会话。否则，命令将失败。

某些语言的 CodeDomProvider 类（如 IronPython 和 JSharp）不会生成输出。因此，使用这些语言编写的类型将无法与 Add-Type 一起使用。

此 cmdlet 基于 CodeDomProvider 类。有关该类的详细信息，请参阅 Microsoft .NET Framework SDK。

示例 1

C:\PS>$source = @"
public class BasicTest
{
    public static int Add(int a, int b)
    {
        return (a + b);
    }

    public int Multiply(int a, int b)
    {
        return (a * b);
    }
}
"@

C:\PS> Add-Type -TypeDefinition $source

C:\PS> [BasicTest]::Add(4, 3)

C:\PS> $basicTestObject = New-Object BasicTest
C:\PS> $basicTestObject.Multiply(5, 2)

说明
-----------
这些命令通过指定存储在变量中的源代码，将 BasicTest 类添加到会话中。该类型具有一个名为 Add 的静态方法和一个名为 Multiply 的非静态方法。

第一条命令在 $source 变量中存储该类的源代码。

第二条命令使用 Add-Type cmdlet 将该类添加到会话中。由于它使用的是内联源代码，所以该命令使用 TypeDefinition 参数来指定 $source 变量中的代码。

其余命令使用新类。

第三条命令调用 BasicTest 类的 Add 的静态方法。它使用双冒号字符 (::) 来指定类的静态成员。

第四条命令使用 New-Object cmdlet 来实例化 BasicTest 类的实例。它将新对象保存在 $basicTestObject 变量中。

第五条命令使用 $basicTestObject 的 Multiply 方法。

示例 2

C:\PS>[BasicTest] | get-member

C:\PS> [BasicTest] | get-member -static

C:\PS> $basicTestObject | get-member

C:\PS> [BasicTest] | get-member

   TypeName: System.RuntimeType

Name                           MemberType Definition
----                           ---------- ----------
Clone                          Method     System.Object Clone()
Equals                         Method     System.Boolean Equals
FindInterfaces                 Method     System.Type[] FindInt
...

C:\PS> [BasicTest] | get-member -static

   TypeName: BasicTest

Name            MemberType Definition
----            ---------- ----------
Add             Method     static System.Int32 Add(Int32 a, Int32 b)
Equals          Method     static System.Boolean Equals(Object objA,
ReferenceEquals Method     static System.Boolean ReferenceEquals(Obj

C:\PS> $basicTestObject | get-member

   TypeName: BasicTest

Name        MemberType Definition
----        ---------- ----------
Equals      Method     System.Boolean Equals(Object obj)
GetHashCode Method     System.Int32 GetHashCode()
GetType     Method     System.Type GetType()
Multiply    Method     System.Int32 Multiply(Int32 a, Int32 b)
ToString    Method     System.String ToString()

说明
-----------
这些命令使用 Get-Member cmdlet 来检查 Add-Type 和 New-Object cmdlet 在上一个示例中创建的对象。

第一条命令使用 Get-Member cmdlet 来获取 Add-Type 添加到会话中的 BasicTest 类的类型和成员。Get-Member 命令表明它是从 System.Object 类派生的 System.RuntimeType 对象。

第二条命令使用 Get-Member 的 Static 参数来获取 BasicTest 类的静态属性和方法。输出显示已包含了 Add 方法。

第三条命令使用 Get-Member 来获取 $BasicTestObject 变量中存储的对象成员。这是使用具有 $BasicType 类的 New-Object cmdlet 创建的对象实例。

输出内容表明 $basicTestObject 变量的值是 BasicTest 类的实例，并且它包括名为 Multiply 的成员。

示例 3

C:\PS>$accType = add-type -assemblyname accessib* -passthru

说明
-----------
该命令将类从 Accessibility 程序集添加到当前会话中。此命令使用 AssemblyName 参数来指定程序集的名称。甚至在您不能确定程序集名称或其拼写时，可以使用通配符来获取正确的程序集。

该命令使用 PassThru 参数来生成可表示已添加到会话中的类的对象，并在 $accType 变量中保存这些对象。

示例 4

C:\PS>add-type -path c:\ps-test\Hello.vb

[VBFromFile]::SayHello(", World")

# From Hello.vb
Public Class VBFromFile

Public Shared Function SayHello(sourceName As String) As String
Dim myValue As String = "Hello"

return myValue + sourceName
End Function
End Class

C:\PS> [VBFromFile]::SayHello(", World")
Hello, World

说明
-----------
该示例使用 Add-Type cmdlet 来向当前会话中添加在 Hello.vb 文件中定义的 VBFromFile 类。在该命令的输出中会显示 Hello.vb 文件的文本。

第一条命令使用 Add-Type cmdlet 将 Hello.vb 文件中定义的类型添加到当前会话中。该命令使用 path 参数来指定源文件。

第二条命令将 SayHello 函数作为 VBFromFile 类的静态方法进行调用。

示例 5

C:\PS>$signature = @"
[DllImport("user32.dll")]
public static extern bool ShowWindowAsync(IntPtr hWnd, int nCmdShow);
"@

$showWindowAsync = Add-Type -memberDefinition $signature -name "Win32ShowWindowAsync" -namespace Win32Functions -passThru

# Minimize the Windows PowerShell console
$showWindowAsync::ShowWindowAsync((Get-Process -id $pid).MainWindowHandle, 2)

# Restore it
$showWindowAsync::ShowWindowAsync((Get-Process -id $pid).MainWindowHandle, 4)

说明
-----------
此示例中的命令演示了如何在 Windows PowerShell 中调用本机的 Windows API。Add-Type 使用 Platform Invoke (P/Invoke) 机制来从 Windows PowerShell 调用 User32.dll 中的函数。

第一条命令在 $signature 变量中存储 ShowWindowAsync 函数的 C# 签名。（有关详细信息，请参阅 MSDN Library 中的“ShowWindowAsync 函数”，网址为 http://go.microsoft.com/fwlink/?LinkId=143643。）要确保所得到的方法在 Windows PowerShell 会话中可见，请将“public”关键字添加到标准签名中。

第二条命令使用 Add-Type cmdlet 将 ShowWindowAsync 函数作为 Add-Type 创建的类的静态方法添加到 Windows PowerShell 会话中。该命令使用 MemberDefinition 参数来指定保存在 $signature 变量中的方法定义。

该命令使用 Name 和 Namespace 参数来指定类的名称和命名空间。它使用 PassThru 参数来生成表示类型的对象，并将该对象保存在 $showWindowAsync 变量中。

第三条和第四条命令使用新的 ShowWindowAsync 静态方法。该方法采用两个参数：窗口句柄和指定如何显示窗口的整数。

第三个命令调用 ShowWindowAsync。它使用具有 $pid 自动变量的 Get-Process cmdlet 来获取承载当前 Windows PowerShell 会话的进程。然后使用当前进程的 MainWindowHandle 属性和值“2”（表示 SW_MINIMIZE 值）。

为了还原窗口，第四条命令使用窗口位置的值“4”，它表示 SW_RESTORE 值。（SW_MAXIMIZE 是 3。）

示例 6

C:\PS>Add-Type -MemberDefinition $jsMethod -Name "PrintInfo" -Language JScript

说明
-----------
此命令使用 Add-Type cmdlet 将方法从内联 JScript 代码添加到 Windows PowerShell 会话中。它使用 MemberDefinition 参数来提交存储在 $jsMethod 变量中的源代码。它使用 Name 变量来指定 Add-Type 为该方法创建的类的名称，使用 Language 参数来指定 JScript 语言。

示例 7

C:\PS>Add-Type -Path FSharp.Compiler.CodeDom.dll

C:\PS> Add-Type -Path FSharp.Compiler.CodeDom.dll
C:\PS> $provider = New-Object Microsoft.FSharp.Compiler.CodeDom.FSharpCodeProvider

C:\PS> $fSharpCode = @"
let rec loop n =
if n <= 0 then () else begin
print_endline (string_of_int n);
loop (n-1)
end
"@

C:\PS> $fsharpType = Add-Type -TypeDefinition $fSharpCode -CodeDomProvider $provider -PassThru | where { $_.IsPublic }
C:\PS> $fsharpType::loop(4)
4
3
2
1

说明
-----------
此示例演示了如何使用 Add-Type cmdlet 将 FSharp 代码编译器添加到 Windows PowerShell 会话中。要在 Windows PowerShell 中运行此示例，必须具有使用 FSharp 语言安装的 FSharp.Compiler.CodeDom.dll。

示例中的第一条命令使用具有 Path 参数的 Add-Type cmdlet 来指定程序集。Add-Type 可获取程序集中的类型。

第二条命令使用 New-Object cmdlet 来创建 FSharp 代码提供程序的实例，并将结果保存在 $provider 变量中。

第三个命令保存 FSharp 代码，该代码在 $FSharpCode 变量中定义了 Loop 方法。

第四条命令使用 Add-Type cmdlet 将 $fSharpCode 中定义的公共类型保存在 $fSharpType 变量中。TypeDefinition 参数指定用于定义类型的源代码。CodeDomProvider 参数指定源代码编译器。

PassThru 参数指示 Add-Type 返回表示类型的 Runtime 对象，管道运算符 (|) 将 Runtime 对象发送到仅返回公共类型的 Where-Object cmdlet。由于 FSharp 提供程序生成非公共类型以支持所得到的公共类型，所以需使用 Where-Object 筛选器。

第五条命令将 Loop 方法作为存储在 $fSharpType 变量中的类型的静态方法进行调用。

另请参阅

  • Add-Member
  • New-Object


Checkpoint-Computer

在本地计算机上创建系统还原点。

语法

Checkpoint-Computer [-Description] <string> [[-RestorePointType] <string>] [<CommonParameters>]

说明

Checkpoint-Computer cmdlet 将在本地计算机上创建系统还原点。此 cmdlet 仅在 Windows Vista 和 Windows XP 上运行。

参数

-Description <string>

指定还原点的描述性名称。此参数是必需的。

是否为必需？ | true
位置？ | 1
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-RestorePointType <string>

指定还原点的类型。默认值为 APPLICATION_INSTALL。

有效值为 APPLICATION_INSTALL、APPLICATION_UNINSTALL、DEVICE_DRIVER_INSTALL、MODIFY_SETTINGS 和 CANCELLED_OPERATION。

是否为必需？ | false
位置？ | 2
默认值 | APPLICATION_INSTALL
是否接受管道输入？ | false
是否接受通配符？ | false

<CommonParameters>

此 cmdlet 支持通用参数：-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。有关详细信息，请参阅 about_Commonparameters.

输入和输出

输入类型是指可通过管道传递给 cmdlet 的对象的类型。返回类型是指 Cmdlet 所返回对象的类型。

输入 | None 不能通过管道将对象传递给 Checkpoint-Computer。
输出 | None 此 cmdlet 将不产生任何输出。

说明

此 cmdlet 对 BEGIN_SYSTEM_CHANGE 事件使用 SystemRestore 类的 CreateRestorePoint 方法。

示例 1

C:\PS>checkpoint-computer -description "Install MyApp"

说明
-----------
此命令将创建一个名为“Install MyApp”的系统还原点。它使用默认的 APPLICATION_INSTALL 还原点类型。

示例 2

C:\PS>checkpoint-computer -description "ChangeNetSettings" -RestorePointType MODIFY_SETTINGS

说明
-----------
此命令将创建一个名为“ChangeNetSettings”的 MODIFY_SETTINGS 系统还原点。

另请参阅

  • Add-Computer
  • Remove-Computer
  • Restart-Computer
  • Restore-Computer
  • Stop-Computer
  • Test-Connection


Clear-Content

删除项的内容（例如从文件中删除文本），但不删除该项。

语法

Clear-Content [-LiteralPath] <string[]> [-Credential <PSCredential>] [-Exclude <string[]>] [-Filter <string>] [-Force] [-Include <string[]>] [-Confirm] [-WhatIf] [-UseTransaction] [<CommonParameters>]

Clear-Content [-Path] <string[]> [-Credential <PSCredential>] [-Exclude <string[]>] [-Filter <string>] [-Force] [-Include <string[]>] [-Confirm] [-WhatIf] [-UseTransaction] [<CommonParameters>]

说明

Clear-Content cmdlet 删除项的内容（例如从文件中删除文本），但不删除该项。因此，项存在，但没有内容。Clear-Content 与 Clear-Item 相类似，但前者用于处理文件，而不是别名和变量。

参数

-Credential <PSCredential>

指定有权执行此操作的用户帐户。默认值为当前用户。

键入用户名，如“User01”或“Domain01\User01”；或输入 PSCredential 对象，如 Get-Credential cmdlet 生成的一个 PSCredential 对象。如果键入用户名，则将提示您输入密码。

随同 Windows PowerShell 一起安装的任何提供程序都不支持此参数。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | true (ByPropertyName)
是否接受通配符？ | false

-Exclude <string[]>

忽略指定项。此参数的值对 Path 参数进行限定。请输入路径元素或模式，例如“*.txt”。允许使用通配符。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Filter <string>

以提供程序的格式或语言指定筛选器。此参数的值对 Path 参数进行限定。筛选器的语法（包括通配符的使用）取决于提供程序。筛选器比其他参数更有效，因为提供程序是在检索对象时应用筛选器，而不是在检索对象后再由 Windows PowerShell 筛选对象。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Force

允许 cmdlet 清除文件内容（即使该文件是只读的）。不同提供程序有不同的实现。有关详细信息，请参阅 about_Providers。即使使用 Force 参数，该 cmdlet 也无法覆盖安全限制。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Include <string[]>

只清除指定项。此参数的值对 Path 参数进行限定。请输入路径元素或模式，例如“*.txt”。允许使用通配符。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-LiteralPath <string[]>

指定要删除其内容的项的路径。与 Path 不同，LiteralPath 的值严格按照所键入的形式使用。不会将任何字符解释为通配符。如果路径包括转义符，请将其括在单引号中。单引号会告知 Windows PowerShell 不要将所有字符都解释为转义序列。

是否为必需？ | true
位置？ | 1
默认值 |
是否接受管道输入？ | true (ByPropertyName)
是否接受通配符？ | false

-Path <string[]>

指定要删除其内容的项的路径。允许使用通配符。此路径必须是指向该项的路径，而不是容器的路径。例如，必须指定一个或多个文件的路径，而不是目录的路径。允许使用通配符。此参数为必需参数，但参数名（“Path”）为可选项。

是否为必需？ | true
位置？ | 1
默认值 |
是否接受管道输入？ | true (ByPropertyName)
是否接受通配符？ | false

-Confirm

在执行命令之前提示您进行确认。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-WhatIf

描述如果执行该命令会发生什么情况（无需实际执行该命令）。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-UseTransaction

将命令包含在活动事务中。仅当正在执行事务时，此参数才有效。有关详细信息，请参阅 about_Transactions。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

<CommonParameters>

此 cmdlet 支持通用参数：-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。有关详细信息，请参阅 about_Commonparameters.

输入和输出

输入类型是指可通过管道传递给 cmdlet 的对象的类型。返回类型是指 Cmdlet 所返回对象的类型。

输入 | None 不能通过管道将对象传递给 Clear-Content。
输出 | None 此 cmdlet 不返回任何对象。

说明

还可以使用 Clear-Content 的内置别名“clc”来对其进行引用。有关详细信息，请参阅 about_Aliases。

如果省略 -Path 参数名称，则 Path 的值必须为命令中的第一个参数。例如“clear-content c:\mydir\*.txt”。如果包含参数名称，则可以以任何顺序列出参数。

可以将 Clear-Content 与 Windows PowerShell FileSystem 提供程序和可操作内容的其他提供程序一起使用。若要清除不视为内容的项（例如 Windows PowerShell Certificate 或 Registry 提供程序所管理的项），请使用 Clear-Item。

Clear-Content cmdlet 用于处理由任何提供程序公开的数据。要列出会话中可用的提供程序，请键入“Get-PsProvider”。有关详细信息，请参阅 about_Providers。

示例 1

C:\PS>clear-content ..\SmpUsers\*\init.txt

说明
-----------
此命令删除 SmpUsers 目录的所有子目录内的“init.txt”文件中的所有内容。不删除这些文件，但它们为空。

示例 2

C:\PS>clear-content -path * -filter *.log -force

说明
-----------
此命令删除当前目录中所有扩展名为“.log”的文件（包括具有只读属性的文件）的内容。路径中的星号 (*) 表示当前目录中的所有项。Force 参数使该命令可对只读文件生效。使用筛选器将该命令限定于扩展名为“.log”的文件，而不是在路径中指定“*.log”，这样可以加快操作的速度。

示例 3

C:\PS>clear-content c:\Temp\* -Include Smp* -Exclude *2* -whatif

说明
-----------
此命令请求对提交命令“clear-content c:\temp\* -include smp* -exclude *2*”后所产生结果的预测。结果将列出会清除的文件；在此示例中，即 Temp 目录中名称以“Smp”开头的文件，但文件名中包括“2”的文件除外。若要执行该命令，请在不带 Whatif 参数的情况下重新运行该命令。

另请参阅

  • about_Providers
  • Get-Content
  • Set-Content
  • Add-Content
  • Get-Item


Clear-EventLog

删除本地或远程计算机上的指定事件日志中的所有条目。

语法

Clear-EventLog [-LogName] <string[]> [[-ComputerName] <string[]>] [-Confirm] [-WhatIf] [<CommonParameters>]

说明

Clear-EventLog cmdlet 将删除本地计算机或远程计算机上的指定事件日志中的所有条目。要使用 Clear-EventLog，您必须是受影响的计算机上的 Administrators 组的成员。

包含 EventLog 名词的 cmdlet (EventLog cmdlet) 仅适用于传统事件日志。要从使用 Windows Vista 以及 Windows 更高版本中的 Windows 事件日志技术的日志中获取事件，请使用 Get-WinEvent。

参数

-ComputerName <string[]>

指定远程计算机。默认值为本地计算机。

键入远程计算机的 NetBIOS 名称、Internet 协议 (IP) 地址或完全限定的域名。要指定本地计算机，请键入计算机名称、句点 (.) 或“localhost”。

此参数不依赖于 Windows PowerShell 远程处理。即使您的计算机未配置为运行远程命令，您也可以使用 Get-EventLog 的 ComputerName 参数。

是否为必需？ | false
位置？ | 2
默认值 | Local computer
是否接受管道输入？ | true (ByPropertyName)
是否接受通配符？ | false

-LogName <string[]>

指定事件日志。输入一个或多个事件日志的日志名称（Log 属性的值，而不是 LogDisplayName），名称之间用逗号分隔。不允许使用通配符。此参数是必需的。

是否为必需？ | true
位置？ | 1
默认值 |
是否接受管道输入？ | true (ByPropertyName)
是否接受通配符？ | false

-Confirm

在执行命令之前提示您进行确认。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-WhatIf

描述如果执行该命令会发生什么情况（无需实际执行该命令）。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

<CommonParameters>

此 cmdlet 支持通用参数：-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。有关详细信息，请参阅 about_Commonparameters.

输入和输出

输入类型是指可通过管道传递给 cmdlet 的对象的类型。返回类型是指 Cmdlet 所返回对象的类型。

输入 | None 不能通过管道将对象传递给 Clear-EventLog。
输出 | None 此 cmdlet 将不产生任何输出。

说明

要在 Windows Vista 以及 Windows 的更高版本上使用 Clear-EventLog，请使用“以管理员身份运行”选项启动 Windows PowerShell。

示例 1

C:\PS>clear-eventlog "Windows PowerShell"

说明
-----------
此命令将删除本地计算机上的“Windows PowerShell”事件日志中的条目。

示例 2

C:\PS>clear-eventlog -logname ODiag, OSession -computername localhost, Server02

说明
-----------
此命令将删除本地计算机和 Server02 远程计算机上的 Microsoft Office 诊断 (ODiag) 和 Microsoft Office 会话 (OSession) 日志中的所有条目。

示例 3

C:\PS>clear-eventlog -log application, system -confirm

说明
-----------
此命令将在删除指定事件日志中的条目之前提示您进行确认。

示例 4

C:\PS>function clear-all-event-logs ($computerName="localhost")
{
    $logs = get-eventlog -computername $computername -list | foreach {$_.Log}
    $logs | foreach {clear-eventlog -comp $computername -log $_ }
    get-eventlog -computername $computername -list
}

C:\PS> clear-all-event-logs -comp Server01

  Max(K) Retain OverflowAction        Entries Log
  ------ ------ --------------        ------- ---
  15,168      0 OverwriteAsNeeded           0 Application
  15,168      0 OverwriteAsNeeded           0 DFS Replication
     512      7 OverwriteOlder              0 DxStudio
  20,480      0 OverwriteAsNeeded           0 Hardware Events
     512      7 OverwriteOlder              0 Internet Explorer
  20,480      0 OverwriteAsNeeded           0 Key Management Service
  16,384      0 OverwriteAsNeeded           0 Microsoft Office Diagnostics
  16,384      0 OverwriteAsNeeded           0 Microsoft Office Sessions
  30,016      0 OverwriteAsNeeded           1 Security
  15,168      0 OverwriteAsNeeded           2 System
  15,360      0 OverwriteAsNeeded           0 Windows PowerShell

说明
-----------
此函数将清除指定计算机上的所有事件日志，然后显示生成的事件日志列表。

请注意，在清除系统和安全日志之后但在显示它们之前，向其中添加了几个条目。

另请参阅

  • Get-EventLog
  • Limit-EventLog
  • New-EventLog
  • Remove-EventLog
  • Show-EventLog
  • Write-EventLog
  • Get-WinEvent


Clear-History

删除命令历史记录中的条目。

语法

Clear-History [[-Id] <Int32[]>] [[-Count] <int>] [-Newest] [-Confirm] [-WhatIf] [<CommonParameters>]

Clear-History [[-Count] <int>] [-CommandLine <string[]>] [-Newest] [-Confirm] [-WhatIf] [<CommonParameters>]

说明

Clear-History cmdlet 删除命令历史记录中的命令（即当前会话期间输入的命令的列表）。

如果不使用参数，Clear-History 会删除会话历史记录中的所有命令，但可以使用 Clear-History 的参数来删除选定的命令。

参数

-CommandLine <string[]>

删除具有指定文本字符串的命令。如果输入了多个字符串，则 Clear-History 会删除具有其中任意字符串的命令。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | true

-Count <int>

从历史记录中最旧的条目开始，清除指定数量的历史记录条目。

如果在同一命令中使用了 Count 和 Id 参数，该 cmdlet 会自 Id 参数所指定的条目开始，清除 Count 参数所指定数量的条目。例如，如果 Count 和 Id 分别为 10 和 30，Clear-History 将清除 21 到 30 项（包括 21 和 30 项）。

如果在同一命令中使用了 Count 和 CommandLine 参数，则 Clear-History 会自 CommandLine 参数所指定的条目开始，清除 Count 参数所指定数量的条目。

是否为必需？ | false
位置？ | 2
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Id <Int32[]>

删除具有指定历史记录 ID 的命令。

要查找命令的历史记录 ID，请使用 Get-History。

是否为必需？ | false
位置？ | 1
默认值 | 无
是否接受管道输入？ | false
是否接受通配符？ | false

-Newest

删除历史记录中最新的条目。默认情况下，Clear-History 删除历史记录中最旧的条目。

是否为必需？ | false
位置？ | named
默认值 | False
是否接受管道输入？ | false
是否接受通配符？ | false

-Confirm

在执行命令之前提示您进行确认。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-WhatIf

描述如果执行该命令会发生什么情况（无需实际执行该命令）。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

<CommonParameters>

此 cmdlet 支持通用参数：-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。有关详细信息，请参阅 about_Commonparameters.

输入和输出

输入类型是指可通过管道传递给 cmdlet 的对象的类型。返回类型是指 Cmdlet 所返回对象的类型。

输入 | None 不能通过管道将对象传递给 Clear-History。
输出 | None 此 cmdlet 将不产生任何输出。

说明

会话历史记录是会话期间输入的命令的列表。可以查看历史记录、添加和删除命令以及运行历史记录中的命令。有关详细信息，请参阅 about_History。

删除历史记录中的命令不会更改命令历史记录中剩余项的历史记录 ID。

示例 1

C:\PS>clear-history

说明
-----------
删除会话历史记录中的所有命令。

示例 2

C:\PS>clear-history -id 23, 25

说明
-----------
删除历史记录 ID 分别为 23 和 25 的命令。

示例 3

C:\PS>clear-history -command *help*, *command

说明
-----------
删除包含“help”或以“command”结尾的命令。

示例 4

C:\PS>clear-history -count 10 -newest

说明
-----------
删除历史记录中最新的 10 个命令。

示例 5

C:\PS>clear-history -id 10 -count 3

说明
-----------
删除自 ID 为 10 的条目开始最旧的三个命令。

另请参阅

  • about_History
  • Get-History
  • Add-History
  • Invoke-History


Clear-Item

删除项的内容，但不删除该项。

语法

Clear-Item [-LiteralPath] <string[]> [-Credential <PSCredential>] [-Exclude <string[]>] [-Filter <string>] [-Force] [-Include <string[]>] [-Confirm] [-WhatIf] [-UseTransaction] [<CommonParameters>]

Clear-Item [-Path] <string[]> [-Credential <PSCredential>] [-Exclude <string[]>] [-Filter <string>] [-Force] [-Include <string[]>] [-Confirm] [-WhatIf] [-UseTransaction] [<CommonParameters>]

说明

Clear-Item cmdlet 删除项的值，但不删除该项。例如，Clear-Item 可以删除变量的值，但不会删除该变量。用于表示清除的项的值是由每个 Windows PowerShell 提供程序定义的。Clear-Item 与 Clear-Content 相类似，但前者用于处理别名和变量，而不是文件。

参数

-Credential <PSCredential>

指定有权执行此操作的用户帐户。默认值为当前用户。

键入用户名，如“User01”或“Domain01\User01”；或输入 PSCredential 对象，如 Get-Credential cmdlet 生成的一个 PSCredential 对象。如果键入用户名，则将提示您输入密码。

随同 Windows PowerShell 一起安装的任何提供程序都不支持此参数。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | true (ByPropertyName)
是否接受通配符？ | false

-Exclude <string[]>

忽略指定项。此参数的值对 Path 参数进行限定。请输入路径元素或模式，例如“*.txt”。允许使用通配符。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Filter <string>

以提供程序的格式或语言指定筛选器。此参数的值对 Path 参数进行限定。筛选器的语法（包括通配符的使用）取决于提供程序。筛选器比其他参数更有效，因为提供程序是在检索对象时应用筛选器，而不是在检索对象后再由 Windows PowerShell 筛选对象。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Force

允许 cmdlet 清除非此不能更改的项（如只读别名）。此 cmdlet 不能清除常量。不同提供程序有不同的实现。有关详细信息，请参阅 about_Providers。即使使用 Force 参数，该 cmdlet 也无法覆盖安全限制。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Include <string[]>

只清除指定项。此参数的值对 Path 参数进行限定。请输入路径元素或模式，例如“*.txt”。允许使用通配符。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-LiteralPath <string[]>

指定要清除的项的路径。与 Path 不同，LiteralPath 的值严格按照所键入的形式使用。不会将任何字符解释为通配符。如果路径包括转义符，请将其括在单引号中。单引号会告知 Windows PowerShell 不要将所有字符都解释为转义序列。

是否为必需？ | true
位置？ | 1
默认值 |
是否接受管道输入？ | true (ByPropertyName)
是否接受通配符？ | false

-Path <string[]>

指定要清除的项的路径。允许使用通配符。此参数为必需参数，但参数名（“Path”）为可选项。

是否为必需？ | true
位置？ | 1
默认值 |
是否接受管道输入？ | true (ByValue, ByPropertyName)
是否接受通配符？ | false

-Confirm

在执行命令之前提示您进行确认。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-WhatIf

描述如果执行该命令会发生什么情况（无需实际执行该命令）。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-UseTransaction

将命令包含在活动事务中。仅当正在执行事务时，此参数才有效。有关详细信息，请参阅 about_Transactions。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

<CommonParameters>

此 cmdlet 支持通用参数：-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。有关详细信息，请参阅 about_Commonparameters.

输入和输出

输入类型是指可通过管道传递给 cmdlet 的对象的类型。返回类型是指 Cmdlet 所返回对象的类型。

输入 | System.String 可以通过管道将路径字符串传递给 Clear-Item。
输出 | None 此 cmdlet 不返回任何对象。

说明

只有某些 Windows PowerShell 提供程序（包括 Alias、Environment、Function、Registry 和 Variable 提供程序）支持 Clear-Item cmdlet。因此，可以使用 Clear-Item 删除提供程序命名空间中的各项的内容。

无法使用 Clear-Item 来删除文件的内容，因为 Windows PowerShell FileSystem 提供程序不支持此 cmdlet。若要清除文件，请使用 Clear-Content。

还可以使用 Clear-Item 的内置别名“cli”来对其进行引用。有关详细信息，请键入“get-help about_Aliases”。

Clear-Item cmdlet 用于处理由任何提供程序公开的数据。要列出会话中可用的提供程序，请键入“Get-PsProvider”。有关详细信息，请参阅 about_Providers。

示例 1

C:\PS>clear-item Variable:TestVar1

说明
-----------
此命令删除变量 Testvar1 的值。该变量仍将保留并且有效，但其值设置为空。

该变量名加有前缀“Variable:”以指示 Windows PowerShell Variable 提供程序。要获取相同结果，可以先切换到 Windows PowerShell Variable 提供程序命名空间，然后执行 Clear-Item 命令。

    PS C:> Set-location Variable:
    PS Variable:\> clear-item Testvar1

示例 2

C:\PS>clear-item Alias:log* -include *1* -exclude *3* -whatif

What if: Performing operation "Clear Item" on Target "Item: log1".

说明
-----------
此命令向 Windows PowerShell 询问执行命令“clear-item alias:log* -include *1* -exclude *3”会发生什么。在回答中，Windows PowerShell 解释它会删除 log1 别名的值。

此命令对 log、log2 或 log13 别名不会有任何影响。因为 Alias 提供程序不允许别名没有值，所以在清除别名时还会删除该别名。

示例 3

C:\PS>clear-item registry::HKLM\Software\MyCompany\MyKey -confirm

说明
-----------
此命令删除 MyKey 子项中的所有注册表项，但仅在提示您确认您的意图后才会删除。此命令不会删除 MyKey 子项，也不会影响其他任何注册表项。可以使用 Include 和 Exclude 参数来标识特定的注册表键，但不能使用这些参数来标识注册表项。要删除特定注册表条目，请使用 Remove-ItemProperty。要删除注册表条目的值，请使用 Clear-ItemProperty。

另请参阅

  • about_Providers
  • Copy-Item
  • Get-Item
  • Invoke-Item
  • Move-Item
  • Set-Item
  • New-Item
  • Remove-Item
  • Rename-Item


Clear-ItemProperty

删除属性的值，但不删除该属性。

语法

Clear-ItemProperty [-LiteralPath] <string[]> [-Name] <string> [-Credential <PSCredential>] [-Exclude <string[]>] [-Filter <string>] [-Force] [-Include <string[]>] [-PassThru] [-Confirm] [-WhatIf] [-UseTransaction] [<CommonParameters>]

Clear-ItemProperty [-Path] <string[]> [-Name] <string> [-Credential <PSCredential>] [-Exclude <string[]>] [-Filter <string>] [-Force] [-Include <string[]>] [-PassThru] [-Confirm] [-WhatIf] [-UseTransaction] [<CommonParameters>]

说明

Clear-ItemProperty cmdlet 删除属性的值，但不删除该属性。可以使用此 cmdlet 从注册表值中删除数据。

参数

-Credential <PSCredential>

指定有权执行此操作的用户帐户。默认值为当前用户。

键入用户名，如“User01”或“Domain01\User01”；或输入 PSCredential 对象，如 Get-Credential cmdlet 生成的一个 PSCredential 对象。如果键入用户名，则将提示您输入密码。

随同 Windows PowerShell 一起安装的任何提供程序都不支持此参数。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | true (ByPropertyName)
是否接受通配符？ | false

-Exclude <string[]>

忽略指定项。此参数的值对 Path 参数进行限定。请输入路径元素或模式，例如，“*.txt”或“s*”。允许使用通配符。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Filter <string>

以提供程序的格式或语言指定筛选器。此参数的值对 Path 参数进行限定。筛选器的语法（包括通配符的使用）取决于提供程序。筛选器比其他参数更有效，因为提供程序是在检索对象时应用筛选器，而不是在检索对象后再由 Windows PowerShell 筛选对象。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Force

允许 cmdlet 删除用户非此不能访问的项的属性。不同提供程序有不同的实现。有关详细信息，请参阅 about_Providers。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Include <string[]>

只清除指定项。此参数的值对 Path 参数进行限定。请输入路径元素或模式，例如“*.txt”。允许使用通配符。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-LiteralPath <string[]>

指定要清除的属性的路径。与 Path 不同，LiteralPath 的值严格按照所键入的形式使用。不会将任何字符解释为通配符。如果路径包括转义符，请将其括在单引号中。单引号会告知 Windows PowerShell 不要将所有字符都解释为转义序列。

是否为必需？ | true
位置？ | 1
默认值 |
是否接受管道输入？ | true (ByPropertyName)
是否接受通配符？ | false

-Name <string>

指定要清除的属性的名称，例如，注册表值的名称。不允许使用通配符。

是否为必需？ | true
位置？ | 2
默认值 |
是否接受管道输入？ | true (ByPropertyName)
是否接受通配符？ | false

-PassThru

返回一个表示已清除的项属性的对象。默认情况下，此 cmdlet 将不产生任何输出。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Path <string[]>

指定要清除的属性的路径。允许使用通配符。

是否为必需？ | true
位置？ | 1
默认值 |
是否接受管道输入？ | true (ByValue, ByPropertyName)
是否接受通配符？ | false

-Confirm

在执行命令之前提示您进行确认。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-WhatIf

描述如果执行该命令会发生什么情况（无需实际执行该命令）。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-UseTransaction

将命令包含在活动事务中。仅当正在执行事务时，此参数才有效。有关详细信息，请参阅 about_Transactions。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

<CommonParameters>

此 cmdlet 支持通用参数：-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。有关详细信息，请参阅 about_Commonparameters.

输入和输出

输入类型是指可通过管道传递给 cmdlet 的对象的类型。返回类型是指 Cmdlet 所返回对象的类型。

输入 | System.String 可以通过管道将路径字符串传递给 Clear-ItemProperty。
输出 | None 或 System.Management.Automation.PSCustomObject 如果使用 PassThru 参数，则 Clear-ItemProperty 生成一个 PSCustomObject 对象，该对象表示已清除的项属性。否则，此 cmdlet 将不产生任何输出。

说明

可以使用 Clear-ItemProperty 来删除注册表值中的数据，而不会删除该值。如果该值的数据类型为 Binary 或 DWORD，则清除数据会将该值设置为零。否则，该值为空。

还可以使用 Clear-ItemProperty 的内置别名“clp”来对其进行引用。有关详细信息，请参阅 about_Aliases。

Clear-ItemProperty cmdlet 用于处理由任何提供程序公开的数据。要列出会话中可用的提供程序，请键入“Get-PSProvider”。有关详细信息，请参阅 about_Providers。

示例 1

C:\PS>clear-itemproperty -path HKLM:\Software\MyCompany\MyApp -name Options

说明
-----------
此命令删除 HKEY_LOCAL_MACHINE\Software\MyCompany 的 MyApp 子项中 Options 注册表值中的数据。

因为此命令将从文件系统驱动器 (C:) 发出，所以它使用 HKLM: 驱动器和 Software\MyCompany\MyApp 子项的完全限定路径。此命令使用 Name 参数来指定 Options 值。

另请参阅

  • about_Providers
  • Copy-ItemProperty
  • New-ItemProperty
  • Move-ItemProperty
  • Rename-ItemProperty
  • Get-ItemProperty
  • New-ItemProperty


Clear-Variable

删除变量的值。

语法

Clear-Variable [-Name] <string[]> [-Exclude <string[]>] [-Force] [-Include <string[]>] [-PassThru] [-Scope <string>] [-Confirm] [-WhatIf] [<CommonParameters>]

说明

Clear-Variable cmdlet 将删除变量中存储的数据，但不删除该变量。因此，该变量的值为 NULL（空）。如果变量具有指定的数据或对象类型，则 Clear-Variable 将保留该变量中存储的对象类型。

参数

-Exclude <string[]>

忽略指定项。此参数的值对 Name 参数进行限定。请输入名称元素或模式，例如“s*”。允许使用通配符。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Force

允许该 cmdlet 清除变量（即使该变量是只读的）。但 cmdlet 无法清除常量，既便使用了 Force 参数。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Include <string[]>

只清除指定项。此参数的值对 Name 参数进行限定。请输入名称元素或模式，例如“s*”。允许使用通配符。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Name <string[]>

指定要清除的变量的名称。允许使用通配符。此参数为必需参数，但参数名（“Name”）为可选项。

是否为必需？ | true
位置？ | 1
默认值 |
是否接受管道输入？ | true (ByPropertyName)
是否接受通配符？ | false

-PassThru

返回表示已清除的变量的对象。默认情况下，此 cmdlet 将不产生任何输出。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Scope <string>

指定此别名的有效作用域。有效值包括“Global”、“Local”、“Script”或者相对于当前作用域的数字（0 到作用域数，其中 0 是指当前作用域，1 是指其父作用域）。默认值为“Local”。有关详细信息，请参阅 about_Scopes。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Confirm

在执行命令之前提示您进行确认。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-WhatIf

描述如果执行该命令会发生什么情况（无需实际执行该命令）。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

<CommonParameters>

此 cmdlet 支持通用参数：-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。有关详细信息，请参阅 about_Commonparameters.

输入和输出

输入类型是指可通过管道传递给 cmdlet 的对象的类型。返回类型是指 Cmdlet 所返回对象的类型。

输入 | None 不能通过管道将对象传递到 Clear-Variable。
输出 | None 或 System.Management.Automation.PSVariable 如果使用 PassThru 参数，则 Clear-Variable 生成一个表示已清除变量的 System.Management.Automation.PSVariable 对象。否则，此 cmdlet 将不产生任何输出。

说明

若要删除变量及其值，请使用 Remove-Variable 或 Remove-Item。

Clear-Variable 将不会删除那些设置为常量或归系统所有的变量的值，即使使用 -Force 参数也是如此。

如果正在清除的变量不存在，则 cmdlet 不执行任何操作。它不会创建具有空值的变量。

还可以使用 Clear-Variable 的内置别名“clv”来对其进行引用。有关详细信息，请参阅 about_Aliases。

示例 1

C:\PS>clear-variable my* -global

说明
-----------
此命令删除以“my”开头的全局变量的值。

示例 2

C:\PS>$a=3

C:\PS>&{ clear-variable a }

C:\PS>$a
3

说明
-----------
这些命令演示了在子作用域中清除变量将不会清除父作用域中的值。第一个命令将变量 $a 的值设置为“3”。第二个命令使用调用运算符 (&) 在新作用域中运行 Clear-Variable 命令。在子作用域中清除该变量（尽管它不存在），但不会在本地作用域中清除它。第三个命令用于获取 $a 的值，结果显示值“3”未受影响。

示例 3

C:\PS>clear-variable -name processes

说明
-----------
此命令删除 $processes 变量的值。$processes 变量仍存在，但其为空值。

另请参阅

  • Get-Variable
  • Set-Variable
  • New-Variable
  • Remove-Variable


Compare-Object

比较两组对象。

语法

Compare-Object [-ReferenceObject] <PSObject[]> [-DifferenceObject] <PSObject[]> [-CaseSensitive] [-Culture <string>] [-ExcludeDifferent] [-IncludeEqual] [-PassThru] [-Property <Object[]>] [-SyncWindow <int>] [<CommonParameters>]

说明

Compare-Object cmdlet 将两组对象进行比较。一组对象为 Reference 组，而另一组为 Difference 组。

比较的结果将指示属性值是只出现在 Reference 组中的对象中（由 <= 符号指示），或是只出现在 Difference 组中的对象中（由 => 符号指示），抑或（在指定了 IncludeEqual 参数的情况下）同时出现在这两个对象中（由 == 符号指示）。

参数

-CaseSensitive

指示比较应区分大小写。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Culture <string>

指定比较中要使用的区域性。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-DifferenceObject <PSObject[]>

指定与参考对象进行比较的对象。

是否为必需？ | true
位置？ | 2
默认值 |
是否接受管道输入？ | true (ByValue)
是否接受通配符？ | false

-ExcludeDifferent

只显示相等的比较对象的特征。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-IncludeEqual

显示相等的比较对象的特征。默认情况下，只显示 reference 对象与 difference 对象之间的不同特征。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-PassThru

将不同的对象传递至管道。默认情况下，此 cmdlet 将不产生任何输出。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Property <Object[]>

指定要比较的 reference 对象和 difference 对象的属性。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-ReferenceObject <PSObject[]>

用作比较参照的对象。

是否为必需？ | true
位置？ | 1
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-SyncWindow <int>

定义搜索范围，在没有匹配的情况下在此范围中尝试重新同步顺序。默认值为 [Int32]::MaxValue。

是否为必需？ | false
位置？ | named
默认值 | [Int32]::MaxValue
是否接受管道输入？ | false
是否接受通配符？ | false

<CommonParameters>

此 cmdlet 支持通用参数：-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。有关详细信息，请参阅 about_Commonparameters.

输入和输出

输入类型是指可通过管道传递给 cmdlet 的对象的类型。返回类型是指 Cmdlet 所返回对象的类型。

输入 | System.Management.Automation.PSObject 可通过管道将 DifferenceObject 对象传送到 Compare-Object。
输出 | None, or the objects that are different 如果使用 PassThru 参数，则 Compare-Object 返回不同的对象。否则，此 cmdlet 将不产生任何输出。

示例 1

C:\PS>compare-object -referenceobject $(get-content C:\test\testfile1.txt) -differenceobject $(get-content C:\test\testfile2.txt)

说明
-----------
此命令将比较两个文本文件的内容。该命令显示只出现在一个文件中或另一个文件中的行，而不显示在两个文件中都出现的行。

示例 2

C:\PS>compare-object -referenceobject $(get-content C:\Test\testfile1.txt) -differenceobject $(get-content C:\Test\testfile2.txt) -includeequal

说明
-----------
此命令将比较两个文本文件中的每行内容。该命令显示两个文件中的所有行内容，以指示每一行是只出现在 Textfile1.txt 或 Textfile2.txt 中，还是在这两个文件中都出现。

示例 3

C:\PS>$processes_before = get-process

C:\PS> notepad

C:\PS> $processes_after  = get-process

C:\PS> compare-object -referenceobject $processes_before -differenceobject $processes_after

说明
-----------
这些命令比较两组进程对象。

第一个命令使用 Get-Process cmdlet 来获取计算机上的进程。它将它们存储在 $processes_before 变量中。

第二个命令用于启动记事本。

第三个命令再次使用 Get-Process cmdlet，并将得到的进程存储在 $processes_after 变量中。

第四个命令使用 Compare-Object cmdlet 来比较两组进程对象。该命令显示进程对象之间的差别，包括记事本的新实例。

另请参阅

  • Group-Object
  • Measure-Object
  • Sort-Object
  • ForEach-Object
  • New-Object
  • Select-Object
  • Tee-Object
  • Where-Object


Complete-Transaction

提交活动事务。

语法

Complete-Transaction [-Confirm] [-WhatIf] [<CommonParameters>]

说明

Complete-Transaction cmdlet 将提交活动事务。在提交事务时，该事务中的命令将完成，并且受这些命令影响的数据将发生更改。

如果事务包括多个订阅者，则要提交该事务，必须为每个 Start-Transaction 命令都输入一个 Complete-Transaction 命令。

Complete-Transaction cmdlet 是 Windows PowerShell 中支持事务功能的一组 cmdlet 之一。有关详细信息，请参阅 about_Transactions。

参数

-Confirm

在执行命令之前提示您进行确认。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-WhatIf

描述如果执行该命令会发生什么情况（无需实际执行该命令）。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

<CommonParameters>

此 cmdlet 支持通用参数：-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。有关详细信息，请参阅 about_Commonparameters.

输入和输出

输入类型是指可通过管道传递给 cmdlet 的对象的类型。返回类型是指 Cmdlet 所返回对象的类型。

输入 | None 不能通过管道将对象传递给 Complete-Transaction。
输出 | None 此 cmdlet 不返回任何对象。

说明

无法回滚已提交的事务，或提交已回滚的事务。

不能回滚活动事务之外的任何事务。要回滚其他事务，必须首先提交或回滚活动事务。

默认情况下，如果无法提交事务的任何部分（例如，当事务中的某个命令产生错误时），则将回滚整个事务。

示例 1

C:\PS>cd hkcu:\software

PS HKCU:\software> start-transaction

PS HKCU:\software> new-item MyCompany -UseTransaction
PS HKCU:\software> dir m*

   Hive: HKEY_CURRENT_USER\software

SKC  VC Name                           Property
---  -- ----                           --------
 82   1 Microsoft                      {(default)}

PS HKCU:\software> complete-transaction
PS HKCU:\software> dir m*

   Hive: HKEY_CURRENT_USER\Software

SKC  VC Name                           Property
---  -- ----                           --------
 82   1 Microsoft                      {(default)}
  0   0 MyCompany                      {}

说明
-----------
此示例演示了使用 Complete-Transaction cmdlet 来提交事务的效果。

Start-Transaction 命令将启动事务。New-Item 命令使用 UseTransaction 参数将该命令包括在事务中。

第一个“dir”(Get-ChildItem) 命令显示新项尚未添加到注册表中。

Complete-Transaction 命令将提交事务，这使注册表更改生效。因而，第二个“dir”命令显示注册表已更改。

示例 2

C:\PS>cd hkcu:\software

PS HKCU:\software> start-transaction
PS HKCU:\software> new-item MyCompany -UseTransaction

   Hive: HKEY_CURRENT_USER\Software

SKC  VC Name                           Property
---  -- ----                           --------
  0   0 MyCompany                      {}

PS HKCU:\software> start-transaction
PS HKCU:\Software> Get-Transaction

RollbackPreference   SubscriberCount  Status
------------------   ---------------  ------
Error                2                Active

PS HKCU:\software> new-itemproperty -path MyCompany -name MyKey -value -UseTransaction

MyKey
-----
123

PS HKCU:\software> complete-transaction
PS HKCU:\software> get-transaction

RollbackPreference   SubscriberCount  Status
------------------   ---------------  ------
Error                1                Active

PS HKCU:\software> dir m*

   Hive: HKEY_CURRENT_USER\Software

SKC  VC Name                           Property
---  -- ----                           --------
 82   1 Microsoft                      {(default)}

PS HKCU:\software> complete-transaction
PS HKCU:\software> dir m*

   Hive: HKEY_CURRENT_USER\Software

SKC  VC Name                           Property
---  -- ----                           --------
 82   1 Microsoft                      {(default)}
  0   1 MyCompany                      {MyKey}

说明
-----------
此示例演示如何使用 Complete-Transaction 来提交拥有多个订阅者的事务。

要提交多订阅者事务，必须为每个 Start-Transaction 命令都输入一个 Complete-Transaction 命令。只有在提交最后一个 Complete-Transaction 命令时才会更改数据。

出于演示目的，此示例演示了一系列在命令行中输入的命令。实际上，事务很可能在脚本中运行，其中二级事务由主脚本调用的函数或助手脚本运行。

在此示例中，Start-Transaction 命令将启动事务。带有 UseTransaction 参数的 New-Item 命令将 MyCompany 项添加到 Software 项中。虽然 New-Item 命令返回项对象，但注册表中的数据尚未更改。

第二个 Start-Transaction 命令将第二个订阅者添加到现有事务中。Get-Transaction 命令确认订阅者计数为 2。带有 UseTransaction 参数的 New-ItemProperty 命令向新 MyCompany 项中添加注册表条目。该命令再次返回一个值，但注册表未发生更改。

第一个 Complete-Transaction 命令使订阅者计数减少 1。通过 Get-Transaction 命令对此进行确认。但是，任何数据都未发生更改，如“dir m*”(Get-ChildItem) 命令显示的。

第二个 Complete-Transaction 命令提交整个事务并更改注册表中的数据。可以通过显示更改的第二个“dir m*”命令对此进行确认。

示例 3

C:\PS>cd hkcu:\software

PS HKCU:\software> start-transaction

PS HKCU:\software> new-item MyCompany -UseTransaction

PS HKCU:\software> dir m*

   Hive: HKEY_CURRENT_USER\Software

SKC  VC Name                           Property
---  -- ----                           --------
 82   1 Microsoft                      {(default)}

PS HKCU:\software> dir m* -UseTransaction

   Hive: HKEY_CURRENT_USER\Software

SKC  VC Name                           Property
---  -- ----                           --------
 82   1 Microsoft                      {(default)}
  0   0 MyCompany                      {}

PS HKCU:\software> complete-transaction

说明
-----------
此示例演示在事务中使用 Get-* 命令以及不会更改数据的其他命令的值。在事务中使用 Get-* 命令时，它将获取属于该事务的对象。这样，在提交更改之前，可以预览事务中的更改。

在此示例中，将启动一个事务。带有 UseTransaction 参数的 New-Item 命令向注册表中添加新项作为该事务的一部分。

因为新注册表项在运行 Complete-Transaction 命令后才会添加到注册表中，所以简单的“dir”(Get-ChildItem) 命令将显示不包含新项的注册表。

然而，如果将 UseTransaction 参数添加到“dir”命令中，则该命令将成为事务的一部分，并且它会获取该事务中的项，即使尚未将这些项添加到数据中也是如此。

另请参阅

  • about_Transactions
  • Start-Transaction
  • Get-Transaction
  • Undo-Transaction
  • Use-Transaction


Connect-WSMan

连接到远程计算机上的 WinRM 服务。

语法

Connect-WSMan [-ApplicationName <string>] [-ComputerName <string>] [-Port <int>] [-UseSSL] [-Authentication <Authentication>] [-ComputerName <string>] [-Credential <PSCredential>] [-Port <int>] [-SessionOption <hashtable>] [<CommonParameters>]

Connect-WSMan [-ConnectionURI <Uri>] [-Authentication <Authentication>] [-ComputerName <string>] [-Credential <PSCredential>] [-Port <int>] [-SessionOption <hashtable>] [<CommonParameters>]

说明

Connect-WSMan cmdlet 用于连接到远程计算机上的 WinRM 服务，并建立与远程计算机的持续性连接。您可以在 WS-Management 提供程序的上下文中使用此 cmdlet 连接到远程计算机上的 WinRM 服务。但是，也可以在更改到 WS-Management 提供程序之前，使用此 cmdlet 连接到远程计算机上的 WinRM 服务。远程计算机将出现在 WS-Management 提供程序的根目录中。

有关如何断开与远程计算机上的 WinRM 服务的连接的详细信息，请参阅 Disconnect-WSMan。

参数

-ApplicationName <string>

指定连接中的应用程序名称。ApplicationName 参数的默认值为“WSMAN”。远程终结点的完整标识符采用以下格式：

<transport>://<server>:<port>/<ApplicationName>

例如：

http://server01:8080/WSMAN

承载会话的 Internet 信息服务 (IIS) 将请求连同此终结点转发到指定的应用程序。默认设置“WSMAN”适用于大多数使用情况。当有许多计算机建立了与运行 Windows PowerShell 的一台计算机的远程连接时，需要用到此参数。这种情况下，IIS 托管 Web Services for Management (WS-Management)，以保证效率。

是否为必需？ | false
位置？ | named
默认值 | wsman
是否接受管道输入？ | false
是否接受通配符？ | false

-Authentication <Authentication>

指定服务器上要使用的身份验证机制。可能值为：

- Basic：Basic 是一种方案，在该方案中，用户名和密码以明文形式发送到服务器或代理。

- Default：使用 WS-Management 协议实现的身份验证方法。这是默认设置。

- Digest：Digest 是一种质询响应方案，该方案将服务器指定的数据字符串用于质询。

- Kerberos：客户端计算机和服务器使用 Kerberos 证书相互进行身份验证。

- Negotiate：Negotiate 是一种质询响应方案，该方案与服务器或代理协商以确定要使用的身份验证方案。例如，此参数值允许进行协商以确定是使用 Kerberos 协议还是 NTLM。

- CredSSP：使用凭据安全服务提供程序 (CredSSP) 身份验证，这种方法允许用户委派凭据。此选项用于这样的命令：在一台远程计算机上运行，但从其他远程计算机上收集数据或者在其他远程计算机上运行其他命令。

注意：CredSSP 将本地计算机中的用户凭据委派给远程计算机。此操作增加了远程操作的安全风险。如果远程计算机的安全受到威胁，则在向该计算机传递凭据时，可使用这些凭据来控制网络会话。

是否为必需？ | false
位置？ | named
默认值 | Default
是否接受管道输入？ | false
是否接受通配符？ | false

-ComputerName <string>

指定要对其运行管理操作的计算机。值可以是完全限定的域名、NetBIOS 名称或 IP 地址。使用本地计算机名称、localhost 或点 (.)指定本地计算机。默认值为本地计算机。当远程计算机与用户位于不同的域时，必须使用完全限定的域名。可以通过管道将此参数的值传递给 cmdlet。

是否为必需？ | false
位置？ | named
默认值 | localhost
是否接受管道输入？ | false
是否接受通配符？ | false

-ConnectionURI <Uri>

指定连接终结点。此字符串的格式为：

<Transport>://<Server>:<Port>/<ApplicationName>。

以下字符串是此参数的格式正确的值：

http://Server01:8080/WSMAN。URI 必须完全限定。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Credential <PSCredential>

指定有权执行此操作的用户帐户。默认值为当前用户。键入用户名，例如“User01”、“Domain01\User01”或“User@Domain.com”。或者，输入 PSCredential 对象，例如由 Get-Credential cmdlet 返回的对象。键入用户名时，将会提示您键入密码。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-OptionSet <hashtable>

将一组开关传递到服务以修改或调整请求的性质。这些与命令行 shell 中使用的开关的类似之处在于，它们也是特定于服务的。可以指定任意多个选项。

以下示例演示分别为 a、b 和 c 参数传递值 1、2 和 3 的语法：

-OptionSet @{a=1;b=2;c=3}

是否为必需？ |
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Port <int>

指定要在客户端连接到 WinRM 服务时使用的端口。如果传输方式为 HTTP，则默认端口为 80。如果传输方式为 HTTPS，则默认端口为 443。使用 HTTPS 作为传输方式时，ComputerName 参数的值必须与服务器的证书公用名 (CN) 匹配。但是，如果 SkipCNCheck 参数指定为 SessionOption 参数的一部分，则服务器的证书公用名不必与服务器的主机名称相匹配。SkipCNCheck 参数应仅用于受信任的计算机。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-SessionOption <hashtable>

为 WS-Management 会话定义一组扩展选项。输入使用 New-WSManSessionOption cmdlet 创建的 SessionOption 对象。有关可用选项的详细信息，请参阅 New-WSManSessionOption。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-UseSSL

指定应使用安全套接字层 (SSL) 协议来建立与远程计算机的连接。默认情况下，不使用 SSL。

WS-Management 加密通过网络传输的所有 Windows PowerShell 内容。利用 UseSSL 参数，可以指定 HTTPS（而非 HTTP）的额外保护措施。如果在连接端口上 SSL 不可用并且指定了此参数，则命令将失败。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

<CommonParameters>

此 cmdlet 支持通用参数：-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。有关详细信息，请参阅 about_Commonparameters.

输入和输出

输入类型是指可通过管道传递给 cmdlet 的对象的类型。返回类型是指 Cmdlet 所返回对象的类型。

输入 | None 此 cmdlet 不接受任何输入。
输出 | None 此 cmdlet 将不产生任何输出。

说明

您无需创建 WS-Management 会话便可以在远程计算机上运行管理命令或查询管理数据。通过使用 Invoke-WSManAction 和 Get-WSManInstance 的 ComputerName 参数，可以实现此这一点。使用 ComputerName 参数时，Windows PowerShell 会创建一个用于单个命令的临时连接。在命令运行完后，该连接即会关闭。

示例 1

C:\PS>Connect-WSMan -computer server01

PS C:\Users\testuser> cd wsman:
PS WSMan:\>
PS WSMan:\> dir

   WSManConfig: Microsoft.WSMan.Management\WSMan::WSMan

ComputerName                                  Type
------------                                  ----
localhost                                     Container
server01                                      Container

说明
-----------
此命令创建一个与远程计算机 server01 的连接。

通常在 WS-Management 提供程序的上下文中使用 Connect-WSMan cmdlet 连接到远程计算机（在本例中为计算机 server01）。但是，您可以在更改到 WS-Management 提供程序之前，使用该 cmdlet 建立与远程计算机的连接。这些连接将出现在 ComputerName 列表中。

示例 2

C:\PS>$cred = Get-Credential Administrator
Connect-WSMan -computer server01 -credential $cred

PS C:\Users\testuser> cd wsman:
PS WSMan:\>
PS WSMan:\> dir

   WSManConfig: Microsoft.WSMan.Management\WSMan::WSMan

ComputerName                                  Type
------------                                  ----
localhost                                     Container
server01                                      Container

说明
-----------
此命令使用管理员帐户凭据创建一个与远程系统 server01 的连接。

第一条命令使用 Get-Credential cmdlet 来获取管理员凭据，然后将其保存在 $cred 变量中。Get-Credential cmdlet 将提示用户输入密码或者提示用户名和密码均需要输入。用户会在对话框
或命令行中收到提示，具体取决于系统注册表设置。

第二条命令使用 Credential 参数将存储在 $cred 中的凭据传递给 Connect-WSMan。然后，Connect-WSMan 使用管理员凭据连接到远程系统 server01。

通常在 WS-Management 提供程序的上下文中使用 Connect-WSMan cmdlet 连接到远程计算机（在本例中为 server01）。但是，可以在更改到 WS-Management 提供程序之前使用该 cmdlet 建立与远程计算机的连接，并且这些连接将显示在 ComputerName 列表中。

示例 3

C:\PS>Connect-WSMan -computer server01 -port 80

PS C:\Users\testuser> cd wsman:
PS WSMan:\>
PS WSMan:\> dir

   WSManConfig: Microsoft.WSMan.Management\WSMan::WSMan

ComputerName                                  Type
------------                                  ----
localhost                                     Container
server01                                      Container

说明
-----------
此命令创建一个与远程计算机 server01 的连接，该连接使用端口 80。

通常在 WS-Management 提供程序的上下文中使用 Connect-WSMan cmdlet 连接到远程计算机（在本例中为计算机 server01）。但是，您可以在更改到 WS-Management 提供程序之前，使用该 cmdlet 建立与远程计算机的连接。这些连接将出现在 ComputerName 列表中。

示例 4

C:\PS>$a = New-WSManSessionOption -operationtimeout 30000
Connect-WSMan -computer server01 -sessionoption $a

PS C:\Users\testuser> cd wsman:
PS WSMan:\>
PS WSMan:\> dir

   WSManConfig: Microsoft.WSMan.Management\WSMan::WSMan

ComputerName                                  Type
------------                                  ----
localhost                                     Container
server01                                      Container

说明
-----------
此命令使用在 New-WSManSessionOption 命令中定义的连接选项，创建与远程计算机 server01 的连接。

第一条命令使用 New-WSManSessionOption cmdlet 将一组连接设置选项存储在 $a 变量中。在本例中，这些会话选项将连接超时设置为 30 秒（30,000 毫秒）。

第二条命令使用 SessionOption 参数将存储在 $a 变量中的凭据传递给 Connect-WSMan。然后，Connect-WSMan 使用指定的会话选项连接到远程计算机 server01。

通常在 WS-Management 提供程序的上下文中使用 Connect-WSMan cmdlet 连接到远程计算机（在本例中为计算机 server01）。但是，您可以在更改到 WS-Management 提供程序之前，使用该 cmdlet 建立与远程计算机的连接。这些连接将出现在 ComputerName 列表中。

另请参阅

  • Disable-WSManCredSSP
  • Disconnect-WSMan
  • Enable-WSManCredSSP
  • Get-WSManCredSSP
  • Get-WSManInstance
  • Invoke-WSManAction
  • New-WSManInstance
  • New-WSManSessionOption
  • Remove-WSManInstance
  • Set-WSManInstance
  • Set-WSManQuickConfig
  • Test-WSMan


ConvertFrom-CSV

将逗号分隔值 (CSV) 格式的对象属性转换为原始对象的 CSV 版本。

语法

ConvertFrom-CSV [[-Delimiter] <char>] [-InputObject] <PSObject[]> [-Header <string[]>] [<CommonParameters>]

ConvertFrom-CSV -UseCulture [-InputObject] <PSObject[]> [-Header <string[]>] [<CommonParameters>]

说明

ConvertFrom-CSV cmdlet 通过 ConvertTo-CSV cmdlet 生成的 CSV 长度可变字符串来创建对象。

可使用 ConvertFrom-CSV cmdlet 的参数来指定列标题行（列标题行确定所获得的对象的属性名称）、指定项目分隔符，或指示 ConvertFrom-CSV 使用当前区域性的列表分隔符作为分隔符。

ConvertFrom-CSV 创建的对象是原始对象的 CSV 版本。CSV 对象的属性值是原始对象的属性值的字符串版本。对象的 CSV 版本不含任何方法。

也可使用 Export-CSV 和 Import-CSV cmdlet 将对象转为 CSV 字符串（或将 CSV 字符串转换为变量）。这些 cmdlet 和 ConvertTo-CSV、ConvertFrom-CSV cmdlet 一样，只是它们是将 CSV 字符串保存在文件中。

参数

-Delimiter <char>

指定在 CSV 字符串中用来分隔属性值的分隔符。默认值为逗号 (,)。输入字符，例如冒号 (:)。若要指定分号 (;)，请将它括在引号内。

如果指定了除 CSV 字符串中使用的分隔符之外的字符，则 ConvertFrom-CSV 无法基于 CSV 字符串创建对象。相反，它将返回字符串。

是否为必需？ | false
位置？ | 2
默认值 | ','
是否接受管道输入？ | false
是否接受通配符？ | false

-Header <string[]>

为导入的字符串指定备用的列标题行。列标题确定由 ConvertFrom-CSV 创建的对象的属性名称。

输入以逗号分隔的列标题列表。用引号（单引号或双引号）括起每一项。不要将标题字符串括在引号内。如果您输入的列标题比现有的列数少，剩余的列将没有标题。如果您输入的标题比现有的列数多，将忽略多余的标题。

在使用 Header 参数时将省略来自 CSV 字符串的列标题字符串。否则，ConvertFrom-CSV 将基于标题行中的项目创建多余对象。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-InputObject <PSObject[]>

指定要转换为对象的 CSV 字符串。请输入包含 CSV 字符串的变量，或者键入可获取 CSV 字符串的命令或表达式。也可通过管道将 CSV 字符串传递至 ConvertFrom-CSV。

是否为必需？ | true
位置？ | 1
默认值 |
是否接受管道输入？ | true (ByValue, ByPropertyName)
是否接受通配符？ | false

-UseCulture

使用当前区域性的列表分隔符作为字符串分隔符。默认值为逗号 (,)。

要查找区域性的列表分隔符，请使用下面的命令：(Get-Culture).TextInfo.ListSeparator。如果指定了除 CSV 字符串中使用的分隔符之外的字符，则 ConvertFrom-CSV 无法基于 CSV 字符串创建对象。相反，它将返回字符串。

是否为必需？ | true
位置？ | named
默认值 | Comma
是否接受管道输入？ | false
是否接受通配符？ | false

<CommonParameters>

此 cmdlet 支持通用参数：-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。有关详细信息，请参阅 about_Commonparameters.

输入和输出

输入类型是指可通过管道传递给 cmdlet 的对象的类型。返回类型是指 Cmdlet 所返回对象的类型。

输入 | System.String 可通过管道将 CSV 字符串传递至 ConvertFrom-CSV。
输出 | System.Management.Automation.PSObject ConvertFrom-CSV 返回 CSV 字符串中的属性所描述的对象。

说明

因为导入的对象是该对象类型的 CSV 版本，所以 Windows PowerShell 类型格式化条目无法对其进行识别和格式化，而只能对该对象类型的非 CSV 版本进行格式化。

在 CSV 格式中，通过以逗号分隔的对象属性值列表来表示每个对象。将属性值转换为字符串（通过使用对象的 ToString() 方法），这样它们通常就可由属性值的名称来表示。ConvertTo-Csv 无法导出对象的方法。

示例 1

C:\PS>$p = get-process | convertto-csv

C:\PS> $p | convertfrom-csv

说明
-----------
这些命令将本地计算机中的进程转换为 CSV 格式，然后将其还原为对象形式。

第一条命令使用 Get-Process cmdlet 来获取本地计算机中的进程。管道运算符 (|) 将它们发送至 ConvertTo-CSV cmdlet，该 cmdlet 将进程对象转换为 CSV 格式。CSV 字符串保存在 $p 变量中。

第二个命令使用管道运算符将 $p 变量中的 CSV 字符串发送至 ConvertFrom-CSV cmdlet。该 cmdlet 将 CSV 字符串转换为原进程对象的 CSV 版本。

示例 2

C:\PS>$date = get-date | convertto-csv -delimiter ";"

C:\PS> convertfrom-csv -inputobject $date -delimiter ";"

说明
-----------
这些命令先将数据对象转换为 CSV 格式，然后再转换为 CSV 对象格式。

第一条命令使用 Get-Date cmdlet 来获取当前日期和时间。管道对象 (|) 将日期发送至可将数据对象转换为一系列 CSV 字符串的 ConvertTo-CSV cmdlet。该命令使用 Delimiter 参数来指定分号分隔符。字符串保存在 $date 变量中。

第二条命令使用 ConvertFrom-CSV cmdlet 来将 $date 变量中的 CSV 字符串转换回对象格式。该命令使用 InputObject 参数来指定 CSV 字符串，使用 Delimiter 参数来指定分号分隔符。

示例 3

C:\PS>$j = start-job -scriptblock { get-process } | convertto-csv

C:\PS> $header = "MoreData","StatusMessage","Location","Command","State","Finished","InstanceId","SessionId","Name","ChildJobs","Output","Error","Progress","Verbose","Debug","Warning","StateChanged"

# Delete header from $j
C:\PS> $j = $j[0], $j[2..($j.count - 1)]

$j | convertfrom-csv -header $header

MoreData      : True
StatusMessage :
Location      : localhost
Command       : get-process
State         : Running
Finished      : System.Threading.ManualResetEvent
InstanceId    : 6fcb6578-7f42-4d93-9f23-9937f6aac1a2
SessionId     : 1
Name          : Job1
ChildJobs     : System.Collections.Generic.List`1[System.Management.Automation.Job]
Output        : System.Management.Automation.PSDataCollection`1[System.Management.Automation.PSObject]
Error         : System.Management.Automation.PSDataCollection`1[System.Management.Automation.ErrorRecord]
Progress      : System.Management.Automation.PSDataCollection`1[System.Management.Automation.ProgressRecord]
Verbose       : System.Management.Automation.PSDataCollection`1[System.String]
Debug         : System.Management.Automation.PSDataCollection`1[System.String]
Warning       : System.Management.Automation.PSDataCollection`1[System.String]
StateChanged  :

说明
-----------
此示例演示了如何使用 ConvertFrom-Csv 的 Header 参数来更改所得到的导入对象中的属性名称。

第一条命令使用 Start-Job cmdlet 启动一个后台作业，该作业在本地计算机上运行 Get-Process 命令。管道运算符 (|) 将生成的作业对象发送至 ConvertTo-CSV cmdlet，该 cmdlet 可将作业对象转换为 CSV 格式。分配运算符 (=) 将所得到的 CSV 保存在 $j 变量中。

第二条命令将标题保存在 $header 变量中。与默认标题不同，该标题使用“MoreData”和“State”，而不是“HasMoreData”和“JobStateInfo”。

第三条命令从 CSV 字符串中删除原标题（第二行），并将它返回到 $j 变量中。

第四条命令使用 ConvertFrom-CSV cmdlet 将 CSV 字符串转换为该作业对象的 CSV 版本。该命令使用管道运算符将 $j 中的内容发送至 ConvertFrom-CSV。所得到的对象具有“MoreData”和“State”属性，与标题所指定的一样。

示例 4

C:\PS>(get-culture).textinfo.listseparator

C:\PS> ConvertFrom-Csv -inputobject $services -UseCulture

说明
-----------
该命令使用 ConvertFrom-CSV cmdlet 将服务对象的 CSV 字符串进行转换，该字符串已由 ConvertTo-CSV cmdlet 转换过。该命令使用 UseCulture 参数来指示 ConvertFrom-CSV 使用当前区域性的分隔符（列表分隔符）。

在使用 UseCulture 参数时，请确保当前区域性的列表分隔符与 CSV 字符串中使用的分隔符相匹配。否则，ConvertFrom-CSV 无法基于 CSV 字符串生成对象。

此示例中，在使用 ConvertFrom-CSV 命令之前，使用 Get-Culture 命令来验证列表分隔符。

另请参阅

  • ConvertTo-CSV
  • Export-CSV
  • Import-CSV


ConvertFrom-SecureString

将安全字符串转换为加密的标准字符串。

语法

ConvertFrom-SecureString [-Key <Byte[]>] [-SecureString] <SecureString> [<CommonParameters>]

ConvertFrom-SecureString [[-SecureKey] <SecureString>] [-SecureString] <SecureString> [<CommonParameters>]

说明

ConvertFrom-SecureString cmdlet 用于将安全字符串 (System.Security.SecureString) 转换为加密的标准字符串 (System.String)。与安全字符串不同的是，加密的标准字符串可以保存在文件中，以供将来使用。通过使用 ConvertTo-SecureString cmdlet，可以将加密的标准字符串转换回其安全字符串格式。如果使用 Key 或 SecureKey 参数指定了加密密钥，则将使用 Rijndael 加密算法。指定的密钥长度必须为 128、192 或 256 位，因为 Rijndael 加密算法只支持这些密钥长度。如果未指定任何密钥，则使用 Windows 数据保护 API (DPAPI) 来对标准字符串表示形式进行加密。

参数

-Key <Byte[]>

将加密密钥指定为字节数组。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-SecureKey <SecureString>

将加密密钥指定为安全字符串。安全字符串值在用作密钥之前将转换为一个字节数组。

是否为必需？ | false
位置？ | 2
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-SecureString <SecureString>

指定要转换为加密的标准字符串的安全字符串。

是否为必需？ | true
位置？ | 1
默认值 |
是否接受管道输入？ | true (ByValue)
是否接受通配符？ | false

<CommonParameters>

此 cmdlet 支持通用参数：-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。有关详细信息，请参阅 about_Commonparameters.

输入和输出

输入类型是指可通过管道传递给 cmdlet 的对象的类型。返回类型是指 Cmdlet 所返回对象的类型。

输入 | System.Security.SecureString 可以通过管道将 SecureString 对象传递给 ConvertFrom-SecureString。
输出 | System.String ConvertFrom-SecureString 返回标准的字符串对象。

说明

若要通过在命令提示符下键入的字符来创建安全字符串，请使用 Read-Host cmdlet 的 AsSecureString 参数。

在使用 Key 或 SecureKey 参数指定密钥时，密钥的长度必须正确。例如，可以将 128 位的密钥指定为具有 16 个数字的字节数组。同样，192 位和 256 位的密钥分别对应于具有 24 个数字和 32 个数字的字节数组。

示例 1

C:\PS>$securestring = read-host -assecurestring

说明
-----------
此命令会根据您在命令提示符下键入的字符来创建安全字符串。在输入此命令后，键入要存储为安全字符串的字符串。您键入的每个字符都将显示为星号 (*)。

示例 2

C:\PS>$standardstring = convertfrom-securestring  $securestring

说明
-----------
此命令将 $securestring 变量中的安全字符串转换为加密的标准字符串。所得到的加密的标准字符串将存储在 $standardstring 变量中。

示例 3

C:\PS>$key = (3,4,2,3,56,34,254,222,1,1,2,23,42,54,33,233,1,34,2,7,6,5,35,43)

C:\PS> $standardstring = convertfrom-securestring  $securestring -key $key

说明
-----------
这些命令使用 Rijndael 算法将 $securestring 变量中存储的安全字符串转换为带 192 位密钥的加密的标准字符串。所得到的加密的标准字符串将存储在 $standardstring 变量中。

第一个命令将一个密钥保存在 $key 变量中。该密钥是一个具有 24 个数字的数组，其中每个数字都小于 256。

因为每个数字都表示一个字节（8 位），所以该密钥具有的 24 个数字的总位数为 192 位 (8 x 24)。这是 Rijndael 算法的有效密钥长度。其中每个值都小于 256，256 是无符号字节中可存储的最大值。

第二个命令使用 $key 变量中的密钥将安全字符串转换为加密的标准字符串。

另请参阅

  • ConvertTo-SecureString
  • Read-Host


ConvertFrom-StringData

将包含一个或多个键-值对的字符串转换为哈希表。

语法

ConvertFrom-StringData [-StringData] <string> [<CommonParameters>]

说明

ConvertFrom-StringData cmdlet 将包含一个或多个键-值对的字符串转换为哈希表。由于每个键-值对必须位于一个单独的行上，所以经常使用 here-string 作为输入格式。

可将 ConvertFrom-StringData cmdlet 视为可在脚本或函数的 DATA 节中使用的安全 cmdlet。在 DATA 节中使用时，字符串的内容必须遵循 DATA 节的规则。有关详细信息，请参阅 about_Data_Sections。

参数

-StringData <string>

指定要转换的字符串。可使用该参数或通过管道将字符串传递至 ConvertFrom-StringData。参数名为可选项。

该参数的值必须是括在单引号中的字符串（单引号字符串）或括在双引号中的字符串（双引号字符串），或包含一个或多个键-值对的 here-string。每个键-值对必须位于一个单独的行上，或每个键-值对必须由换行符 (`n) 分隔。

字符串中可包括注释，但是注释不能以键-值对的形式位于同一行上。哈希表中不包括注释。

here-string 是由一行或多行组成的字符串，在其中，按照字义解释引号。有关详细信息，请参阅 about_Quoting_Rules。

是否为必需？ | true
位置？ | 1
默认值 |
是否接受管道输入？ | true (ByValue)
是否接受通配符？ | false

<CommonParameters>

此 cmdlet 支持通用参数：-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。有关详细信息，请参阅 about_Commonparameters.

输入和输出

输入类型是指可通过管道传递给 cmdlet 的对象的类型。返回类型是指 Cmdlet 所返回对象的类型。

输入 | System.String 可将包含一个键-值对的字符串通过管道传送至 ConvertFrom-StringData。
输出 | System.Collections.Hashtable ConvertFrom-StringData 返回它基于键-值对创建的哈希表。

说明

here-string 是由一行或多行组成的字符串，在其中，按照字义解释引号。有关详细信息，请参阅 about_Quoting_Rules。

在以多种口语显示用户消息的脚本中，ConvertFrom-StringData 非常有用。可使用字典风格的哈希表来从代码中隔离文本字符串（如在资源文件中），并为文本字符串设置格式以便在转换工具中使用。

示例 1

C:\PS>$here = @'
Msg1 = The string parameter is required.
Msg2 = Credentials are required for this command.
Msg3 = The specified variable does not exist.
'@

C:\PS> convertfrom-stringdata -stringdata $here

Name                           Value
----                           -----
Msg3                           The specified variable does not exist.
Msg2                           Credentials are required for this command.
Msg1                           The string parameter is required.

说明
-----------
这些命令将用户消息中带单引号的 here-string 转换为一个哈希表。在带单引号的字符串中，不能使用变量和无法计算的表达式来代替其值。

第一个命令将创建一个 here-string，并将它保存在 $here 变量中。

第二个命令使用 ConvertFrom-StringData cmdlet 将 $here 变量中的 here-string 转换为哈希表。

示例 2

C:\PS>$p = @"
ISE = Windows PowerShell Integrated Scripting Environment
"@

C:\PS> $p | get-member

   TypeName: System.String

Name             MemberType            Definition
----             ----------            ----------
Clone            Method                System.Object Clone()
...

C:\PS> $hash = convertfrom-stringdata -stringdata $p

C:\PS> $hash | get-member

   TypeName: System.Collections.Hashtable

Name              MemberType            Definition
----              ----------            ----------
Add               Method                System.Void Add(Object key, Object
...

说明
-----------
这些命令表明 ConvertFrom-StringData 实际上是将 here-string 转换为一个哈希表。

第一个命令创建一个带双引号的 here-string（该 here-string 包含一个键-值对），并将它保存在 $p 变量中。

第二条命令使用管道运算符 (|) 将 $p 变量发送至 Get-Member cmdlet。结果表明 $p 是一个字符串 (System.String)。

第三条命令使用 ConvertFrom-StringData cmdlet 将 $p 中的 here-string 转换为一个哈希表。该命令将结果存储在 $hash 变量中。

最后一个命令使用管道运算符 (|) 将 $hash 变量传送到 Get-Member cmdlet。结果表明 $hash 变量的内容是一个哈希表 (System.Collections.Hashtable)。

示例 3

C:\PS>convertfrom-stringdata -stringdata @'
   Name = Disks.ps1
   # Category is optional.
   Category = Storage
   Cost = Free
'@

Name                           Value
----                           -----
Cost                           Free
Category                       Storage
Name                           Disks.ps1

说明
-----------
此命令将包含多个键-值对的带单引号的 here-string 转换为哈希表。

在此命令中，StringData 参数的值是一个 here-string，而不是一个包含 here-string 的变量。两种格式都有效。

here-string 包括有关某字符串的注释。假如注释与键-值对不在同一行上，则注释在字符串中是有效的。

示例 4

C:\PS>$a = convertfrom-stringdata -stringdata "Top = Red `n Bottom = Blue"

C:\PS> "Top = " + $a.Top
Top = Red

C:\PS> "Bottom = " + $a.Bottom
Bottom = Blue

说明
-----------
此示例将一个带双引号的常规字符串（非 here-string）转换为一个哈希表，并将其保存在 $a 变量中。

为了满足每个键-值对必须在一个单独的行上的条件，它使用 Windows PowerShell 换行符 (`n) 来分隔这些对。

结果为一个由输入内容组成的哈希表。其余命令显示输出内容。

示例 5

C:\PS>$TextMsgs = DATA {
  ConvertFrom-StringData @'
    Text001 = The $Notebook variable contains the 	name of the user's system notebook.
    Text002 = The $MyNotebook variable contains the 	name of the user's private notebook.
'@
}

C:\PS> $TextMsgs.Text001
The $Notebook variable contains the name of the user's system notebook.

C:\PS> $TextMsgs.Text002
The $MyNotebook variable contains the name of the user's private notebook.

说明
-----------
此示例演示了在脚本的 DATA 节中使用的 ConvertFrom-StringData 命令。DATA 节下面的语句向用户显示该文本。

由于文本包括变量名称，所以必须用单引号将它括起来，以便按照字义解释变量，而不是展开它。在 DATA 节中允许使用变量。

示例 6

C:\PS>$here = @'
Msg1 = The string parameter is required.
Msg2 = Credentials are required for this command.
Msg3 = The specified variable does not exist.
'@

C:\PS> $hash = $here | convertfrom-stringdata

C:\PS> $hash

Name     Value
----     -----
Msg3     The specified variable does not exist.
Msg2     Credentials are required for this command.
Msg1     The string parameter is required.

说明
-----------
此示例表明您可使用管道运算符 (|) 将字符串发送至 ConvertFrom-StringData。

第一条命令将 here-string 保存在 $here 变量中。第二条命令使用管道运算符 (|) 将 $here 变量发送至 ConvertFrom-StringData。该命令将结果保存在 $hash 变量中。

最后一条命令显示 $hash 变量的内容。

另请参阅

  • about_Data_Sections
  • about_Quoting_Rules
  • about_Script_Internationalization


Convert-Path

将路径从 Windows PowerShell 路径转换为 Windows PowerShell 提供程序路径。

语法

Convert-Path [-LiteralPath] <string[]> [-UseTransaction] [<CommonParameters>]

Convert-Path [-Path] <string[]> [-UseTransaction] [<CommonParameters>]

说明

Convert-Path cmdlet 将路径从 Windows PowerShell 路径转换为 Windows PowerShell 提供程序路径。

参数

-LiteralPath <string[]>

指定要转换的路径。LiteralPath 参数的值严格按照所键入的形式使用。不会将任何字符解释为通配符。如果路径包括转义符，请将其括在单引号中。单引号会告知 Windows PowerShell 不要将所有字符都解释为转义序列。

是否为必需？ | true
位置？ | 1
默认值 |
是否接受管道输入？ | true (ByPropertyName)
是否接受通配符？ | false

-Path <string[]>

指定要转换的 Windows PowerShell 路径。

是否为必需？ | true
位置？ | 1
默认值 |
是否接受管道输入？ | true (ByValue, ByPropertyName)
是否接受通配符？ | false

-UseTransaction

将命令包含在活动事务中。仅当正在执行事务时，此参数才有效。有关详细信息，请参阅 about_Transactions。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

<CommonParameters>

此 cmdlet 支持通用参数：-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。有关详细信息，请参阅 about_Commonparameters.

输入和输出

输入类型是指可通过管道传递给 cmdlet 的对象的类型。返回类型是指 Cmdlet 所返回对象的类型。

输入 | System.String 可以通过管道将路径（但不是文本路径）传递给 Convert-Path。
输出 | System.String Convert-Path 返回一个包含已转换的路径的字符串。

说明

包含 Path 名词的 cmdlet (Path cmdlet) 采用路径名称作为参数，以所有 Windows PowerShell 提供程序都能够解释的简明格式返回名称。这些 cmdlet 用于需要在其中以特定格式显示全部或部分路径名称的程序或脚本中。您可以像使用 Dirname、Normpath、Realpath、Join 或其他路径操作程序那样使用这些 cmdlet。

可以将路径 cmdlet 与某些提供程序一起使用，包括 FileSystem、Registry 和 Certificate 提供程序。

Convert-Path cmdlet 可使用由任何提供程序公开的数据。要列出会话中可用的提供程序，请键入“Get-PSProvider”。有关详细信息，请参阅 about_Providers。

示例 1

C:\PS>convert-path ~

说明
-----------
此命令展开当前工作目录。

示例 2

C:\PS>convert-path HKLM:\software\microsoft

说明
-----------
此命令将 Windows PowerShell 提供程序路径转换为标准的注册表路径。

另请参阅

  • about_Providers
  • Test-Path
  • Split-Path
  • Resolve-Path
  • Join-Path


ConvertTo-CSV

将 Microsoft .NET Framework 对象转换为一系列以逗号分隔的 (CSV)、长度可变的字符串。

语法

ConvertTo-CSV [[-Delimiter] <char>] [-InputObject] <psobject> [-NoTypeInformation] [<CommonParameters>]

ConvertTo-CSV [-UseCulture] [-InputObject] <psobject> [-NoTypeInformation] [<CommonParameters>]

说明

ConvertTo-CSV cmdlet 返回一系列以逗号分隔的、长度可变的 (CSV) 字符串，该字符串表示您所提交的对象。然后可使用 ConvertFrom-CSV cmdlet 基于 CSV 字符串来重新创建对象。所得到的对象是原始对象的 CSV 版本，这些对象由属性值的字符串表示形式组成，且不含方法。

也可使用 Export-CSV 和 Import-CSV cmdlet 将 .NET Framework 对象转换为 CSV 字符串（或将 CSV 字符串转换为 .NET Framework 对象）。Export-CSV 与 ConvertTo-CSV 相同，区别是它将 CSV 字符串保存在文件中。

可使用 ConvertTo-CSV cmdlet 的参数来指定逗号以外的分隔符，或指示 ConvertTo-CSV 使用当前区域性的默认分隔符。

有关详细信息，请参阅 Export-CSV 和“注释”部分。

参数

-Delimiter <char>

指定分隔符以分隔属性值。默认值为逗号 (,)。输入字符，例如冒号 (:)。

若要指定分号 (;)，请将它括在引号内。否则，会将它解释为命令分隔符。

是否为必需？ | false
位置？ | 2
默认值 | , (comma)
是否接受管道输入？ | false
是否接受通配符？ | false

-InputObject <psobject>

指定要作为 CSV 字符串导出的对象。请输入包含对象的变量，或者键入可获取对象的命令或表达式。也可将对象通过管道传递至 ConvertTo-CSV。

是否为必需？ | true
位置？ | 1
默认值 |
是否接受管道输入？ | true (ByValue, ByPropertyName)
是否接受通配符？ | false

-NoTypeInformation

输出内容省略类型信息标题。默认情况下，输出内容中的字符串包含“#TYPE ”，其后为 .NET Framework 对象类型的完全限定名称。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-UseCulture

使用当前区域性的列表分隔符作为数据分隔符。默认值为逗号 (,)。

该参数对于向全球用户发布的脚本而言很有用。要查找区域性的列表分隔符，请使用下面的命令：(Get-Culture).TextInfo.ListSeparator。

是否为必需？ | false
位置？ | named
默认值 | Comma
是否接受管道输入？ | false
是否接受通配符？ | false

<CommonParameters>

此 cmdlet 支持通用参数：-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。有关详细信息，请参阅 about_Commonparameters.

输入和输出

输入类型是指可通过管道传递给 cmdlet 的对象的类型。返回类型是指 Cmdlet 所返回对象的类型。

输入 | System.Management.Automation.PSObject 可将任何 .NET Framework 对象通过管道传递至 ConvertTo-CSV。
输出 | System.String 返回 CSV 输出以作为字符串的集合。

说明

在 CSV 格式中，通过以逗号分隔的对象属性值列表来表示每个对象。将属性值转换为字符串（通过使用对象的 ToString() 方法），这样它们通常就可由属性值的名称来表示。ConvertTo-CSV 无法导出对象的方法。

所得到的 CSV 字符串的格式如下：

-- 第一个字符串包含“#TYPE”，后面为对象的 .NET Framework 类型的完全限定名称，如 #TYPE System.Diagnostics.Process。要取消显示该字符串，请使用 NoTypeInformation 参数。

-- 下一个字符串表示列标题。它包含以逗号分隔的列表，该列表列出了第一个对象的所有属性的名称。

-- 其余的字符串由以逗号分隔的列表组成，该列表列出了每个对象的属性值。

当向 ConvertTo-CSV 提交多个对象时，ConvertTo-CSV 基于所提交的第一个对象的属性来对字符串进行排序。如果其余对象不具有所指定的属性之一，则该对象的属性值为 null，即用两个相连的逗号表示。如果其余对象具有附加属性，则忽略这些属性。

示例 1

C:\PS>get-process powershell | convertto-csv

#TYPE System.Diagnostics.Process
"__NounName","Name","Handles","VM","WS","PM","NPM","Path","Company","CPU","FileVersion","ProductVersion","Description",
"Product","BasePriority","ExitCode","HasExited","ExitTime","Handle","HandleCount","Id","MachineName","MainWindowHandle"
,"MainWindowTitle","MainModule","MaxWorkingSet","MinWorkingSet","Modules","NonpagedSystemMemorySize","NonpagedSystemMem
orySize64","PagedMemorySize","PagedMemorySize64","PagedSystemMemorySize","PagedSystemMemorySize64","PeakPagedMemorySize
","PeakPagedMemorySize64","PeakWorkingSet","PeakWorkingSet64","PeakVirtualMemorySize","PeakVirtualMemorySize64","Priori
tyBoostEnabled","PriorityClass","PrivateMemorySize","PrivateMemorySize64","PrivilegedProcessorTime","ProcessName","Proc
essorAffinity","Responding","SessionId","StartInfo","StartTime","SynchronizingObject","Threads","TotalProcessorTime","U
serProcessorTime","VirtualMemorySize","VirtualMemorySize64","EnableRaisingEvents","StandardInput","StandardOutput","Sta
ndardError","WorkingSet","WorkingSet64","Site","Container"
"Process","powershell","216","597544960","60399616","63197184","21692","C:\WINDOWS\system32\WindowsPowerShell\v1.0\powe
rshell.exe","Microsoft Corporation","3.4788223","6.1.6587.1 (fbl_srv_powershell(nigels).070711-0102)","6.1.6587.1","Win
dows PowerShell","Microsoft® Windows® Operating System","8",,"False",,"860","216","5132",".","5636936","Windows PowerSh
ell 2.0 (04/17/2008 00:10:40)","System.Diagnostics.ProcessModule (powershell.exe)","1413120","204800","System.Diagnosti
cs.ProcessModuleCollection","21692","21692","63197184","63197184","320080","320080","63868928","63868928","60715008","6
0715008","598642688","598642688","True","Normal","63197184","63197184","00:00:00.2028013","powershell","15","True","1",
"System.Diagnostics.ProcessStartInfo","4/21/2008 3:49:19 PM",,"System.Diagnostics.ProcessThreadCollection","00:00:03.51
00225","00:00:03.3072212","597544960","597544960","False",,,,"60399616","60399616",,

说明
-----------
此命令将单个进程对象转换为 CSV 格式。该命令使用 Get-Process cmdlet 来获取本地计算机中的 PowerShell 进程。它使用管道运算符 (|) 将命令发送至 ConvertTo-CSV cmdlet，该 cmdlet 将其转换为一系列以逗号分隔的字符串。

示例 2

C:\PS>$date = get-date

C:\PS> convertto-csv -inputobject $date -delimiter ";" -notypeinformation

说明
-----------
此示例将日期对象转换为 CSV 格式。

第一条命令使用 Get-Date cmdlet 来获取当前日期，并将日期保存在 $date 变量中。

第二条命令使用 ConvertTo-CSV cmdlet 将 $date 变量中的 DateTime 对象转换为 CSV 格式。该命令使用 InputObject 参数来指定要转换的对象。它使用 Delimiter 参数来指定用来分隔对象属性的分隔符。它使用 NoTypeInformation 参数来取消显示 #TYPE 字符串。

示例 3

C:\PS>get-eventlog -log "windows powershell" | convertto-csv -useculture

说明
-----------
此命令将本地计算机中的 Windows PowerShell 事件日志转换为一系列 CSV 字符串。

该命令使用 Get-EventLog cmdlet 来获取 Windows PowerShell 日志中的事件。管道运算符 (|) 将事件发送至 ConvertTo-CSV cmdlet，该 cmdlet 将事件转换为 CSV 格式。该命令使用 UseCulture 参数，该参数使用当前区域性的列表分隔符作为分隔符。

另请参阅

  • Import-CSV
  • Export-CSV
  • ConvertFrom-CSV


ConvertTo-Html

将 Microsoft .NET Framework 对象转换为可在 Web 浏览器中显示的 HTML。

语法

ConvertTo-Html [[-Head] <string[]>] [[-Title] <string>] [[-Body] <string[]>] [-CssUri <Uri>] [[-Property] <Object[]>] [-As <string>] [-InputObject <psobject>] [-PostContent <string[]>] [-PreContent <string[]>] [<CommonParameters>]

ConvertTo-Html [-Fragment] [[-Property] <Object[]>] [-As <string>] [-InputObject <psobject>] [-PostContent <string[]>] [-PreContent <string[]>] [<CommonParameters>]

说明

ConvertTo-Html cmdlet 将 .NET Framework 对象转换为可在 Web 浏览器中显示的 HTML。可使用此 cmdlet 在网页上显示命令的输出内容。

可使用 ConvertTo-Html 的参数来选择对象属性、指定表格或列表格式、指定 HTML 页面标题，在对象前后添加文本，以及仅返回表格或列表片段，而不是完整的 DTD 页面。

当向 ConvertTo-Html 提交多个对象时，Windows PowerShell 基于所提交的第一个对象的属性来创建表格（或列表）。如果其余对象不具有所指定的属性之一，则该对象的属性值为空单元。如果其余对象具有附加属性，则在文件中不会包括这些属性。

参数

-As <string>

确定将对象设置为表格格式还是列表格式。有效值为 TABLE 和 LIST。默认值为 TABLE。

TABLE 值生成类似 Windows PowerShell 表格格式的 HTML 表。标题行显示属性名称。表格的每一行表示一个对象，并显示该对象的每个属性值。

LIST 值为每个对象生成一个包含两列的 HTML 表，该表类似于 Windows PowerShell 列表格式。第一列显示属性名称，第二列显示属性值。

是否为必需？ | false
位置？ | named
默认值 | Table
是否接受管道输入？ | false
是否接受通配符？ | false

-Body <string[]>

指定要在左 <BODY> 标记之后添加的文本。默认情况下，该位置没有文本。

是否为必需？ | false
位置？ | 4
默认值 | No text.
是否接受管道输入？ | false
是否接受通配符？ | false

-CssUri <Uri>

指定层叠样式表 (CSS) 的统一资源标识符 (URI)，该 URI 将应用在 HTML 文件中。输出中的样式表链接中将包括该 URI。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Fragment

仅生成一个 HTML 表。省略了 HTML、HEAD、TITLE 和 BODY 标记。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Head <string[]>

指定 <HEAD> 标记的内容。默认值为“<title>HTML TABLE</title>”。如果使用 Head 参数，则忽略 Title 参数。

是否为必需？ | false
位置？ | 2
默认值 | <title>HTML TABLE</title>
是否接受管道输入？ | false
是否接受通配符？ | false

-InputObject <psobject>

指定要用 HTML 表示的对象。请输入包含对象的变量，或者键入可获取对象的命令或表达式。

如果使用此参数来提交多个对象（如计算机中的所有服务），则 ConvertTo-Html 会创建一个表格，该表格显示集合的属性或对象数组 (System.Object[]) 的属性。要创建由单个对象组成的表格，请使用管道运算符通过管道将对象传递至 ConvertTo-Html。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | true (ByValue)
是否接受通配符？ | false

-PostContent <string[]>

指定要在右 </TABLE> 标记之后添加的文本。默认情况下，该位置没有文本。

是否为必需？ | false
位置？ | named
默认值 | No text
是否接受管道输入？ | false
是否接受通配符？ | false

-PreContent <string[]>

指定要在左 <TABLE> 标记之前添加的文本。默认情况下，该位置没有文本。

是否为必需？ | false
位置？ | named
默认值 | No text
是否接受管道输入？ | false
是否接受通配符？ | false

-属性 <Object[]>

在 HTML 中包括所指定的对象属性。

是否为必需？ | false
位置？ | 1
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Title <string>

指定 HTML 文件的标题，即在 <TITLE> 标记之间显示的文本。

是否为必需？ | false
位置？ | 3
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

<CommonParameters>

此 cmdlet 支持通用参数：-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。有关详细信息，请参阅 about_Commonparameters.

输入和输出

输入类型是指可通过管道传递给 cmdlet 的对象的类型。返回类型是指 Cmdlet 所返回对象的类型。

输入 | System.Management.Automation.PSObject 可通过管道将任何 .NET 对象传递至 ConvertTo-Html。
输出 | System.String ConvertTo-Html 返回一系列包含有效 HTML 的字符串。

说明

要使用该 cmdlet，请通过管道将一个或多个对象传递至该 cmdlet，或使用 InputObject 参数来指定该对象。当输入内容由多个对象组成时，这两种方法的输出将完全不同。

-- 当通过管道将多个对象传递至某个 cmdlet 时，Windows PowerShell 会将这些对象按照每次一个的方式发送至该 cmdlet。因此，ConvertTo-Html 会创建一个显示单个对象的表格。例如，如果通过管道将计算机上的进程传递至 ConvertTo-Html，则所得到的表格会将这些进程全部显示出来。

-- 当使用 InputObject 参数来提交多个对象时，ConvertTo-Html 会将这些对象作为一个集合或数组来接收。因此，它会创建一个表格，该表格显示数组及其属性，数组中没有项。例如，如果使用 InputObject 向 ConvertTo-Html 提交计算机中的进程，则所得到的表格会显示一个对象数组 (System.Object[]) 及其属性。

为了与 XHTML Strict DTD 一致，将相应修改 DOCTYPE 标记：

(<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">)

示例 1

C:\PS>convertto-html -inputobject (get-date)

说明
-----------
此命令创建用来显示当前日期的属性的 HTML 页。它使用 InputObject 参数将 Get-Date 命令的结果提交到 ConvertTo-Html cmdlet。

示例 2

C:\PS>get-alias | convertto-html > aliases.htm

C:\PS> invoke-item aliases.htm

说明
-----------
此命令创建 HTML 页，该页列出当前控制台中的 Windows PowerShell 别名。

该命令使用 Get-Alias cmdlet 来获取这些别名。它使用管道运算符 (|) 将别名发送至 ConvertTo-Html cmdlet，该 cmdlet 将创建 HTML 页。

示例 3

C:\PS>get-eventlog -logname "Windows PowerShell | convertto-html > pslog.htm

说明
-----------
此命令创建一个名为 pslog.htm 的 HTML 页，该页显示本地计算机上 Windows PowerShell 事件日志中的事件。

它使用 Get-EventLog cmdlet 获取 Windows PowerShell 日志中的事件，然后使用管道运算符 (|) 将事件发送至 ConvertTo-Html cmdlet。

该命令还使用重定向运算符 (>) 将 HTML 代码发送至 pslog.htm 文件。

示例 4

C:\PS>get-process | convertto-html -property Name, Path, Company -title "Process Information" > proc.htm; ii proc.htm

说明
-----------
这些命令创建并打开的 HTML 页列出本地计算机上进程的名称、路径和所属公司。

第一条命令使用 Get-Process cmdlet 获取用来表示计算机中运行的进程的对象。该命令使用管道运算符 (|) 将进程对象发送至 ConvertTo-Html cmdlet。

该命令使用 Property 参数来选择表中要包括的进程对象的三个属性。该命令使用 Title 参数来指定 HTML 页的标题。它还使用重定向运算符 (>) 将所得到的 HTML 发送至名为 Proc.htm 的文件。

第二条命令使用 Invoke-Item cmdlet （别名为 ii）在默认浏览器中打开 Proc.htm。这两个命令以分号 (;) 来分隔。

示例 5

C:\PS>get-service | convertto-html -CssUri "test.css"

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"       "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<head>
<title>HTML TABLE</title>
<link rel="stylesheet" type="text/css" href="test.css" />
...

说明
-----------
该命令创建 Get-Service cmdlet 返回的服务对象的 HTML 页。该命令使用 CssUri 参数来指定 HTML 页的层叠样式表。

CssUri 参数向所得到的 HTML 添加附加的“<link rel="stylesheet" type="text/css”标记。标记中的 HREF 属性包含样式表的名称。

示例 6

C:\PS>get-service | convertto-html -as LIST > services.htm

说明
-----------
该命令创建 Get-Service cmdlet 返回的服务对象的 HTML 页。该命令使用 As 参数来指定列表格式。重定向运算符 (>) 将得到的 HTML 发送至 Services.htm 文件。

示例 7

C:\PS>get-date | cth -fragment

<table>
<colgroup>...</colgroup>
<tr><th>DisplayHint</th><th>DateTime</th><th>Date</th><th>Day</th><th>DayOfWeek</th><th>DayOfYear</th><th>Hour</th><th>
Kind</th><th>Millisecond</th><th>Minute</th><th>Month</th><th>Second</th><th>Ticks</th><th>TimeOfDay</th><th>Year</th><
/tr>
<tr><td>DateTime</td><td>Monday, May 05, 2008 10:40:04 AM</td><td>5/5/2008 12:00:00 AM</td><td>5</td><td>Monday</td><td
>126</td><td>10</td><td>Local</td><td>123</td><td>40</td><td>5</td><td>4</td><td>633455808041237213</td><td>10:40:04.12
37213</td><td>2008</td></tr>
</table>

说明
-----------
该命令使用 ConvertTo-Html 来生成当前日期的 HTML 表。该命令使用 Get-Date cmdlet 获取当前日期。它还使用管道运算符 (|) 将结果发送至 ConvertTo-Html cmdlet（别名为“cth”）。

该 ConvertTo-Html 命令包括 Fragment 参数，该参数限制向 HTML 表进行的输出。因此，将忽略 HTML 页的其他元素，如 <HEAD> 和 <BODY> 标记。

示例 8

C:\PS>get-eventlog -log "Windows PowerShell" | convertto-html -property id, level, task

说明
-----------
该命令使用 Get-EventLog cmdlet 从“Windows PowerShell”事件日志中获取事件。

它使用管道运算符 (|) 将事件发送至 ConvertTo-Html cmdlet，该 cmdlet 将事件转换为 HTML 格式。

ConvertTo-Html 命令使用 Property 参数来仅选择事件的 ID、Level 和 Task 属性。

示例 9

C:\PS>get-service A* | ConvertTo-Html -title "Windows Services: Server01" -body (get-date) -pre "<P>Generated by Corporate IT</P
>" -post "For details, contact Corporate IT." > services.htm; ii services.htm

说明
-----------
该命令创建并打开网页，该页显示计算机中以“A”开头的服务。它使用 ConvertTo-Html 的 Title、Body、PreContent 和 PostContent 参数来自定义输出。

该命令的第一部分使用 Get-Service cmdlet 来获取计算机中以“A”开头的服务。命令使用管道运算符 (|) 将结果发送至 ConvertTo-Html cmdlet。命令还使用重定向运算符 (>) 将输出发送至 Services.htm 文件。

分号 (;) 结束第一个命令并启动第二个命令，第二个命令使用 Invoke-Item cmdlet（别名为“ii”）在默认浏览器中打开 Services.htm 文件。

另请参阅

  • ConvertTo-CSV
  • ConvertTo-XML


ConvertTo-SecureString

将加密的标准字符串转换为安全字符串。它还可以将纯文本转换为安全字符串。此 Cmdlet 与 ConvertFrom-SecureString 和 Read-Host 一起使用。

语法

ConvertTo-SecureString [-Key <Byte[]>] [-String] <string> [<CommonParameters>]

ConvertTo-SecureString [-AsPlainText] [-Force] [-String] <string> [<CommonParameters>]

ConvertTo-SecureString [[-SecureKey] <SecureString>] [-String] <string> [<CommonParameters>]

说明

ConvertTo-SecureString cmdlet 将加密的标准字符串转换为安全字符串。它还可以将纯文本转换为安全字符串。此 Cmdlet 与 ConvertFrom-SecureString 和 Read-Host 一起使用。该 cmdlet 创建的安全字符串可以与需要类型为 SecureString 的参数的 cmdlet 或函数一起使用。使用 ConvertFrom-SecureString cmdlet，可以将安全字符串转换回加密的标准字符串。这样就可以将该字符串存储在文件中，以供将来使用。

如果要转换的标准字符串是通过对指定密钥使用 ConvertFrom-SecureString 进行加密的，则必须提供与 ConvertTo-SecureString cmdlet 的 Key 或 SecureKey 参数值相同的密钥。

参数

-AsPlainText

指定要转换为安全字符串的纯文本字符串。安全字符串 cmdlet 有助于保护机密文本。对该文本进行加密以保持隐私性，并在使用该文本后将其从计算机内存中删除。如果使用此参数将纯文本提供为输入，则系统无法保护采用此方式的输入。若要使用此参数，则还必须指定 Force 参数。

是否为必需？ | false
位置？ | 2
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Force

请确认您已了解使用 AsPlainText 参数的含义，并且仍希望使用该参数。

是否为必需？ | false
位置？ | 3
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Key <Byte[]>

指定将安全字符串转换为加密的标准字符串时要使用的加密密钥。有效的密钥长度为 16、24 和 32 个字节。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-SecureKey <SecureString>

指定将安全字符串转换为加密的标准字符串时要使用的加密密钥。该密钥必须以安全字符串的格式提供。安全字符串在用作密钥之前将转换为一个字节数组。有效的密钥长度为 16、24 和 32 个字节。

是否为必需？ | false
位置？ | 2
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-String <string>

指定要转换为安全字符串的字符串。

是否为必需？ | true
位置？ | 1
默认值 |
是否接受管道输入？ | true (ByValue)
是否接受通配符？ | false

<CommonParameters>

此 cmdlet 支持通用参数：-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。有关详细信息，请参阅 about_Commonparameters.

输入和输出

输入类型是指可通过管道传递给 cmdlet 的对象的类型。返回类型是指 Cmdlet 所返回对象的类型。

输入 | System.String 可以将标准的加密字符串通过管道传递到 ConvertTo-SecureString。
输出 | System.Security.SecureString ConvertTo-SecureString 返回 SecureString 对象。

示例 1

C:\PS>$secure = read-host -assecurestring

C:\PS> $secure
System.Security.SecureString

C:\PS> $encrypted = convertfrom-securestring -securestring $secure
C:\PS> $encrypted
01000000d08c9ddf0115d1118c7a00c04fc297eb010000001a114d45b8dd3f4aa11ad7c0abdae9800000000002000000000003660000a8000000100000005df63cea84bfb7d70bd6842e7
efa79820000000004800000a000000010000000f10cd0f4a99a8d5814d94e0687d7430b100000008bf11f1960158405b2779613e9352c6d14000000e6b7bf46a9d485ff211b9b2a2df3bd
6eb67aae41

C:\PS> $secure2 = convertto-securestring -string $encrypted
C:\PS> $secure2
System.Security.SecureString

说明
-----------
此示例演示如何通过用户输入创建安全字符串，将该安全字符串转换为加密的标准字符串，然后再将加密的标准字符串转换回安全字符串。

第一个命令使用 Read-Host cmdlet 的 AsSecureString 参数创建一个安全字符串。在输入该命令后，所键入的所有字符都将转换为安全字符串并随后保存在 $secure 变量中。

第二个命令显示 $secure 变量的内容。由于 $secure 变量包含安全字符串，因此 Windows PowerShell 将仅显示 System.Security.SecureString 类型。

第三个命令使用 ConvertFrom-SecureString cmdlet 将 $secure 变量中的安全字符串转换为加密的标准字符串。它将结果保存在 $encrypted 变量中。第四个命令显示 $encrypted 变量的值中的加密字符串。

第五个命令使用 ConvertTo-SecureString cmdlet 将 $encrypted 变量中的加密的标准字符串转换回安全字符串。它将结果保存在 $secure2 变量中。第六个命令显示 $secure2 变量的值。SecureString 类型指示该命令已成功。

示例 2

C:\PS>$secure = read-host -assecurestring

C:\PS> $encrypted = convertfrom-securestring -secureString $secure -key (1..16)

C:\PS> $encrypted | set-content encrypted.txt

C:\PS> $secure2 = get-content encrypted.txt | convertto-securestring -key (1..16)

说明
-----------
此示例演示如何通过保存在文件中的加密的标准字符串创建安全字符串。

第一个命令使用 Read-Host cmdlet 的 AsSecureString 参数创建一个安全字符串。在输入该命令后，所键入的所有字符都将转换为安全字符串并随后保存在 $secure 变量中。

第二个命令使用 ConvertFrom-SecureString cmdlet 通过指定的密钥将 $secure 变量中的安全字符串转换为加密的标准字符串。内容保存在 $encrypted 变量中。

第三个命令使用管道运算符 (|) 将 $encrypted 变量的值发送到 Set-Content cmdlet，后者将该值保存在 Encrypted.txt 文件中。

第四个命令使用 Get-Content cmdlet 获取 Encrypted.txt 文件中的加密的标准字符串。该命令使用管道运算符将加密的字符串发送到 ConvertTo-SecureString cmdlet，后者使用指定的密钥将该加密字符串转换为安全字符串。结果保存在 $secure2 变量中。

示例 3

C:\PS>$secure_string_pwd = convertto-securestring "P@ssW0rD!" -asplaintext -force

说明
-----------
此命令将纯文本字符串“P@ssW0rD!”转换为安全字符串，并将结果存储在 $secure_string_pwd 变量中。若要使用 AsPlainText 参数，则此命令还必须包括 Force 参数。

另请参阅

  • ConvertFrom-SecureString
  • Read-Host


ConvertTo-XML

创建对象的基于 XML 的表示形式。

语法

ConvertTo-XML [-InputObject] <psobject> [-As <string>] [-Depth <int>] [-NoTypeInformation] [<CommonParameters>]

说明

ConvertTo-Xml cmdlet 创建一个或多个 Microsoft .NET Framework 对象的基于 XML 的表示形式。若要使用此 cmdlet，请通过管道将一个或多个对象传递至该 cmdlet，或使用 InputObject 参数来指定该对象。

当通过管道将多个对象传递至 ConvertTo-XML 或使用 InputObject 参数来提交多个对象时，ConvertTo-XML 会返回单个 XML 文档，该文档包括所有对象的表示形式。

除了 Export-Clixml 将所得到的 XML 存储在文件中以外，此 cmdlet 与 Export-Clixml 相似。ConvertTo-XML 会返回 XML，因此可在 Windows PowerShell 中继续处理它。

参数

-As <string>

确定输出格式。有效值包括：

-- String：返回单个字符串。

-- Stream：返回一个字符串数组。

-- Document：返回一个 XmlDocument 对象。

默认值为 Stream。

是否为必需？ | false
位置？ | named
默认值 | Stream
是否接受管道输入？ | false
是否接受通配符？ | false

-Depth <int>

指定包含在 XML 表示形式中的被包含对象的级别数。默认值为 1。

例如，如果对象属性也包含对象，那么要对被包含对象的属性的 XML 表示形式进行保存，则必须将级别深度指定为 2。

可以将 Types.ps1xml 文件中对象类型的默认值覆盖。有关详细信息，请参阅 about_Types.ps1xml。

是否为必需？ | false
位置？ | named
默认值 | 1
是否接受管道输入？ | false
是否接受通配符？ | false

-InputObject <psobject>

指定要转换的对象。输入一个包含对象的变量，或键入可获取对象的命令或表达式。也可将对象通过管道传递至 ConvertTo-XML。

是否为必需？ | true
位置？ | 1
默认值 | 无
是否接受管道输入？ | true (ByValue)
是否接受通配符？ | true

-NoTypeInformation

省略对象节点的 Type 属性。

是否为必需？ | false
位置？ | named
默认值 | False
是否接受管道输入？ | false
是否接受通配符？ | false

<CommonParameters>

此 cmdlet 支持通用参数：-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。有关详细信息，请参阅 about_Commonparameters.

输入和输出

输入类型是指可通过管道传递给 cmdlet 的对象的类型。返回类型是指 Cmdlet 所返回对象的类型。

输入 | System.Management.Automation.PSObject 可以通过管道将任何对象传递给 ConvertTo-XML。
输出 | System.String 或 System.Xml.XmlDocument As 参数的值确定由 ConvertTo-XML 返回的对象类型。

示例 1

C:\PS>get-date | convertto-xml

说明
-----------
此命令将当前日期（DateTime 对象）转换为 XML。

示例 2

C:\PS>convertto-xml -as Document -inputObject (get-process) -depth 3

说明
-----------
此命令将表示计算机上所有进程的进程对象转换为一个 XML 文档。这些对象的深度将扩展至三层。

另请参阅

  • Export-Clixml
  • Import-Clixml
  • ConvertTo-Html
  • ConvertTo-CSV


Copy-Item

将项从一个位置复制到命名空间内的另一个位置。

语法

Copy-Item [-LiteralPath] <string[]> [[-Destination] <string>] [-Container] [-Credential <PSCredential>] [-Exclude <string[]>] [-Filter <string>] [-Force] [-Include <string[]>] [-PassThru] [-Recurse] [-Confirm] [-WhatIf] [-UseTransaction] [<CommonParameters>]

Copy-Item [-Path] <string[]> [[-Destination] <string>] [-Container] [-Credential <PSCredential>] [-Exclude <string[]>] [-Filter <string>] [-Force] [-Include <string[]>] [-PassThru] [-Recurse] [-Confirm] [-WhatIf] [-UseTransaction] [<CommonParameters>]

说明

Copy-Item cmdlet 将项从一个位置复制到命名空间中的另一个位置。Copy-Item 不会删除所复制的项。该 cmdlet 可复制的特定项取决于可用的 Windows PowerShell 提供程序。例如，与 FileSystem 提供程序一起使用时，它可以复制文件和目录；与 Registry 提供程序一起使用时，它可以复制注册表项。

参数

-Container

在复制操作期间保留容器对象。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Credential <PSCredential>

指定有权执行此操作的用户帐户。默认值为当前用户。

键入用户名，如“User01”或“Domain01\User01”；或输入 PSCredential 对象，如 Get-Credential cmdlet 生成的一个 PSCredential 对象。如果键入用户名，则将提示您输入密码。

随同 Windows PowerShell 一起安装的任何提供程序都不支持此参数。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | true (ByPropertyName)
是否接受通配符？ | false

-Destination <string>

指定要将项复制到的位置的路径。

是否为必需？ | false
位置？ | 2
默认值 |
是否接受管道输入？ | true (ByPropertyName)
是否接受通配符？ | false

-Exclude <string[]>

忽略指定项。允许使用通配符。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Filter <string>

以提供程序的格式或语言指定筛选器。此参数的值对 Path 参数进行限定。筛选器的语法（包括通配符的使用）取决于提供程序。筛选器比其他参数更有效，因为提供程序是在检索对象时应用筛选器，而不是在检索对象后再由 Windows PowerShell 筛选对象。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Force

允许 cmdlet 复制非此不能更改的项，如复制只读的文件或别名。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Include <string[]>

指定 cmdlet 只对这些项执行操作，排除其他所有项。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-LiteralPath <string[]>

指定项的路径。LiteralPath 参数的值严格按照所键入的形式使用。不会将任何字符解释为通配符。如果路径包括转义符，请将其括在单引号中。单引号会告知 Windows PowerShell 不要将所有字符都解释为转义序列。

是否为必需？ | true
位置？ | 1
默认值 |
是否接受管道输入？ | true (ByPropertyName)
是否接受通配符？ | false

-PassThru

返回表示每个已复制的项的对象。默认情况下，此 cmdlet 将不产生任何输出。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Path <string[]>

指定要复制的项的路径。

是否为必需？ | true
位置？ | 1
默认值 |
是否接受管道输入？ | true (ByValue, ByPropertyName)
是否接受通配符？ | false

-Recurse

指定递归复制。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Confirm

在执行命令之前提示您进行确认。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-WhatIf

描述如果执行该命令会发生什么情况（无需实际执行该命令）。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-UseTransaction

将命令包含在活动事务中。仅当正在执行事务时，此参数才有效。有关详细信息，请参阅 about_Transactions。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

<CommonParameters>

此 cmdlet 支持通用参数：-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。有关详细信息，请参阅 about_Commonparameters.

输入和输出

输入类型是指可通过管道传递给 cmdlet 的对象的类型。返回类型是指 Cmdlet 所返回对象的类型。

输入 | System.String 可以通过管道将包含路径的字符串传递给 Copy-ItemProperty。
输出 | None 或一个表示已复制的项的对象。 如果使用 PassThru 参数，则 Copy-Item 返回一个表示已复制的项的对象。否则，此 cmdlet 将不产生任何输出。

说明

Copy-Item 与其他 shell 中的“cp”或“copy”命令类似。

Copy-Item cmdlet 用于处理由任何提供程序公开的数据。要列出会话中可用的提供程序，请键入“Get-PsProvider”。有关详细信息，请参阅 about_Providers。

示例 1

C:\PS>copy-item C:\Wabash\Logfiles\mar1604.log.txt -destination C:\Presentation

说明
-----------
此命令将文件 mar1604.log.txt 复制到 C:\Presentation 目录下。此命令不会删除原始文件。

示例 2

C:\PS>copy-item C:\Logfiles -destination C:\Drawings -recurse

说明
-----------
此命令将 Logfiles 目录的完整内容复制到 Drawings 目录中。如果源目录的子目录中包含文件，则会复制这些子目录，并保留其文件树。默认情况下，Container 参数设置为 True。这样将保留目录结构。

示例 3

C:\PS>copy-item C:\Logfiles -destination C:\Drawings\Logs -recurse

说明
-----------
此命令将 C:\Logfiles 目录的内容复制到 C:\Drawings\Logs 目录中。如果子目录 \Logs 不存在，则此命令将创建该子目录。

另请参阅

  • about_Providers
  • Clear-Item
  • Get-Item
  • Invoke-Item
  • Move-Item
  • Set-Item
  • New-Item
  • Remove-Item
  • Rename-Item


Copy-ItemProperty

将属性和值从指定的位置复制到另一个位置。

语法

Copy-ItemProperty [-LiteralPath] <string[]> [-Destination] <string> [-Name] <string> [-Credential <PSCredential>] [-Exclude <string[]>] [-Filter <string>] [-Force] [-Include <string[]>] [-PassThru] [-Confirm] [-WhatIf] [-UseTransaction] [<CommonParameters>]

Copy-ItemProperty [-Path] <string[]> [-Destination] <string> [-Name] <string> [-Credential <PSCredential>] [-Exclude <string[]>] [-Filter <string>] [-Force] [-Include <string[]>] [-PassThru] [-Confirm] [-WhatIf] [-UseTransaction] [<CommonParameters>]

说明

Copy-ItemProperty cmdlet 将属性和值从指定的位置复制到另一个位置。例如，可以使用 Copy-ItemProperty 将一个或多个注册表条目从一个注册表项复制到另一个注册表项。

参数

-Credential <PSCredential>

指定有权执行此操作的用户帐户。默认值为当前用户。

键入用户名，如“User01”或“Domain01\User01”；或输入 PSCredential 对象，如 Get-Credential cmdlet 生成的一个 PSCredential 对象。如果键入用户名，则将提示您输入密码。

随同 Windows PowerShell 一起安装的任何提供程序都不支持此参数。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | true (ByPropertyName)
是否接受通配符？ | false

-Destination <string>

指定目标位置的路径。

是否为必需？ | true
位置？ | 2
默认值 |
是否接受管道输入？ | true (ByPropertyName)
是否接受通配符？ | false

-Exclude <string[]>

忽略指定项。允许使用通配符。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Filter <string>

以提供程序的格式或语言指定筛选器。此参数的值对 Path 参数进行限定。筛选器的语法（包括通配符的使用）取决于提供程序。筛选器比其他参数更有效，因为提供程序是在检索对象时应用筛选器，而不是在检索对象后再由 Windows PowerShell 筛选对象。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Force

允许 cmdlet 在不危及安全性的情况下覆盖限制（例如重命名现有文件）。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Include <string[]>

指定 cmdlet 只对这些项执行操作，排除其他所有项。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-LiteralPath <string[]>

指定指向项属性的路径。LiteralPath 的值严格按照所键入的形式使用。不会将任何字符解释为通配符。如果路径包括转义符，请将其括在单引号中。单引号会告知 Windows PowerShell 不要将所有字符都解释为转义序列。

是否为必需？ | true
位置？ | 1
默认值 |
是否接受管道输入？ | true (ByPropertyName)
是否接受通配符？ | false

-Name <string>

指定要复制的属性的名称。

是否为必需？ | true
位置？ | 3
默认值 |
是否接受管道输入？ | true (ByPropertyName)
是否接受通配符？ | false

-PassThru

返回一个表示已复制的项属性的对象。默认情况下，此 cmdlet 将不产生任何输出。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Path <string[]>

指定要复制的属性的路径。

是否为必需？ | true
位置？ | 1
默认值 |
是否接受管道输入？ | true (ByValue, ByPropertyName)
是否接受通配符？ | false

-Confirm

在执行命令之前提示您进行确认。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-WhatIf

描述如果执行该命令会发生什么情况（无需实际执行该命令）。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-UseTransaction

将命令包含在活动事务中。仅当正在执行事务时，此参数才有效。有关详细信息，请参阅 about_Transactions。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

<CommonParameters>

此 cmdlet 支持通用参数：-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。有关详细信息，请参阅 about_Commonparameters.

输入和输出

输入类型是指可通过管道传递给 cmdlet 的对象的类型。返回类型是指 Cmdlet 所返回对象的类型。

输入 | System.String 可以通过管道将包含路径的字符串传递给 Copy-ItemProperty。
输出 | None 或 System.Management.Automation.PSCustomObject 如果使用 Passthru 参数，则 Copy-ItemProperty 生成一个 PsCustomObject 对象，该对象表示已复制的项属性。否则，此 cmdlet 将不产生任何输出。

说明

Copy-ItemProperty cmdlet 用于处理由任何提供程序公开的数据。要列出会话中可用的提供程序，请键入“Get-PSProvider”。有关详细信息，请参阅 about_Providers。

示例 1

C:\PS>copy-itemproperty -path MyApplication -destination HKLM:\Software\MyApplicationRev2 -name MyProperty

说明
-----------
此命令将名为 MyProperty 的属性从 MyApplication 注册表项复制到 MyApplicationRev2 注册表项。

另请参阅

  • about_Providers
  • Clear-ItemProperty
  • New-ItemProperty
  • Move-ItemProperty
  • Rename-ItemProperty
  • Get-ItemProperty
  • Set-ItemProperty


Debug-Process

调试在本地计算机上运行的一个或多个进程。

语法

Debug-Process [-Name] <string[]> [-Confirm] [-WhatIf] [<CommonParameters>]

Debug-Process [-Id] <Int32[]> [-Confirm] [-WhatIf] [<CommonParameters>]

Debug-Process -InputObject <Process[]> [-Confirm] [-WhatIf] [<CommonParameters>]

说明

Debug-Process cmdlet 将调试程序附加到在本地计算机上运行的一个或多个进程。可以通过进程名称或进程 ID (PID) 来指定进程，也可以将进程对象通过管道传送给 Debug-Process。

Debug-Process 将附加当前为该进程注册的调试程序。使用此 cmdlet 之前，请先验证调试程序是否已下载并正确配置。

参数

-Id <Int32[]>

指定要调试的进程的进程 ID。参数名（“-Id”）为可选项。

要查找进程的进程 ID，请键入“get-process”。

是否为必需？ | true
位置？ | 1
默认值 | 无
是否接受管道输入？ | true (ByPropertyName)
是否接受通配符？ | false

-InputObject <Process[]>

指定表示要调试的进程的进程对象。输入一个包含进程对象的变量，或输入一个获取进程对象的命令（如 Get-Process 命令）。还可以将进程对象通过管道传送给 Debug-Process。

是否为必需？ | true
位置？ | named
默认值 |
是否接受管道输入？ | true (ByValue)
是否接受通配符？ | false

-Name <string[]>

指定要调试的进程的名称。如果存在多个同名进程，则 Debug-Process 会将调试程序附加到所有该名称的进程。参数名（“Name”）为可选项。

是否为必需？ | true
位置？ | 1
默认值 |
是否接受管道输入？ | true (ByPropertyName)
是否接受通配符？ | false

-Confirm

在执行命令之前提示您进行确认。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-WhatIf

描述如果执行该命令会发生什么情况（无需实际执行该命令）。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

<CommonParameters>

此 cmdlet 支持通用参数：-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。有关详细信息，请参阅 about_Commonparameters.

输入和输出

输入类型是指可通过管道传递给 cmdlet 的对象的类型。返回类型是指 Cmdlet 所返回对象的类型。

输入 | System.Int32, System.Diagnostics.Process, System.String 可以通过管道将进程 ID (Int32)、进程对象 (System.Diagnostics.Process) 或进程名称 (String) 传递给 Debug-Process。
输出 | None 此 cmdlet 将不产生任何输出。

说明

此 cmdlet 使用 Windows Management Instrumentation (WMI) Win32_Process 类的 AttachDebugger 方法。有关此方法的详细信息，请参阅 MSDN (Microsoft Developer Network) 库中的“AttachDebugger 方法”，网址是 http://go.microsoft.com/fwlink/?LinkId=143640。

示例 1

C:\PS>debug-process -name powershell

说明
-----------
此命令将调试程序附加到计算机上的 PowerShell 进程。

示例 2

C:\PS>debug-process -name sql*

说明
-----------
此命令将调试程序附加到名称以“sql”开头的所有进程。

示例 3

C:\PS>debug-process winlogon, explorer, outlook

说明
-----------
此命令将调试程序附加到 Winlogon、Explorer 和 Outlook 进程。

示例 4

C:\PS>debug-process -id 1132, 2028

说明
-----------
此命令将调试程序附加到进程 ID 为 1132 和 2028 的进程。

示例 5

C:\PS>get-process powershell | debug-process

说明
-----------
此命令将调试程序附加到计算机上的 PowerShell 进程。它使用 Get-Process cmdlet 来获取计算机上的 PowerShell 进程，然后使用管道运算符 (|) 将进程发送给 Debug-Process cmdlet。

要指定特定的 PowerShell 进程，请使用 Get-Process 的 ID 参数。

示例 6

C:\PS>$pid | debug-process

说明
-----------
此命令将调试程序附加到计算机上的当前 PowerShell 进程。

它使用 $pid 自动变量，其中包含当前 PowerShell 进程的进程 ID。然后，它使用管道运算符 (|) 将进程 ID 发送给 Debug-Process cmdlet。

有关 $pid 自动变量的详细信息，请参阅 about_Automatic_Variables。

示例 7

C:\PS>get-process -computername Server01, Server02 -name MyApp | debug-process

说明
-----------
此命令将调试程序附加到 Server01 和 Server02 计算机上的 MyApp 进程。

它使用 Get-Process cmdlet 来获取 Server01 和 Server02 计算机上的 MyApp 进程。它使用管道运算符将进程发送给附加调试程序的 Debug-Process cmdlet。

示例 8

C:\PS>$p = get-process powershell

C:\PS> debug-process -inputobject $p

说明
-----------
此命令将调试程序附加到本地计算机上的 PowerShell 进程。

第一个命令使用 Get-Process cmdlet 来获取计算机上的 PowerShell 进程。它将生成的进程对象保存在 $p 变量中。

第二个命令使用 Debug-Process 的 InputObject 参数将 $p 变量中的进程对象提交给 Debug-Process。

另请参阅

  • Get-Process
  • Start-Process
  • Stop-Process
  • Wait-Process
  • Debug-Process


Disable-ComputerRestore

在指定的文件系统驱动器上禁用系统还原功能。

语法

Disable-ComputerRestore [-Drive] <string[]> [-Confirm] [-WhatIf] [<CommonParameters>]

说明

Disable-ComputerRestore cmdlet 在一个或多个文件系统驱动器上关闭系统还原功能。因此，尝试还原计算机不会影响指定的驱动器。

要在任何驱动器上禁用系统还原，必须首先或并行在系统驱动器上禁用系统还原。

要重新启用系统还原，请使用 Enable-ComputerRestore cmdlet。要查找每个驱动器的系统还原状态，请使用 Rstrui.exe。

参数

-Drive <string[]>

指定文件系统驱动器。输入一个或多个文件系统驱动器号，每个驱动器号后面都加上冒号和反斜杠并用引号引起来，如 "C:\" 或 "D:\"。此参数是必需的。

无法使用此 cmdlet 在远程网络驱动器上禁用系统还原，即使该驱动器映射到本地计算机也是如此，并且无法在不符合系统还原条件的驱动器（如外部驱动器）上禁用系统还原。

要在任何驱动器上禁用系统还原，必须首先或并行在系统驱动器上禁用系统还原。

是否为必需？ | true
位置？ | 1
默认值 | 无
是否接受管道输入？ | false
是否接受通配符？ | false

-Confirm

在执行命令之前提示您进行确认。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-WhatIf

描述如果执行该命令会发生什么情况（无需实际执行该命令）。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

<CommonParameters>

此 cmdlet 支持通用参数：-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。有关详细信息，请参阅 about_Commonparameters.

输入和输出

输入类型是指可通过管道传递给 cmdlet 的对象的类型。返回类型是指 Cmdlet 所返回对象的类型。

输入 | None 不能通过管道将输入传递给此 cmdlet。
输出 | None 此 cmdlet 将不产生任何输出。

说明

Disable-ComputerRestore 和 Enable-ComputerRestore 仅在客户端操作系统（如 Windows Vista 和 Windows XP）上工作。

要在 Windows Vista 以及 Windows 的更高版本上运行 Disable-ComputerRestore 命令，必须使用“以管理员身份运行”选项打开 Windows PowerShell。

要查找符合系统还原条件的文件系统驱动器，请查看“控制面板”中的“系统”中的“系统保护”选项卡。要在 Windows PowerShell 中打开此选项卡，请键入“SystemPropertiesProtection”。

此 cmdlet 使用 Windows Management Instrumentation (WMI) SystemRestore 类。

示例 1

C:\PS>disable-computerrestore -drive "C:\"

说明
-----------
此命令将在 C: 驱动器上禁用系统还原。

示例 2

C:\PS>disable-computerrestore "C:\", "D:\"

说明
-----------
此命令将在 C: 和 D: 驱动器上禁用系统还原。此命令使用 Drive 参数，但它省略了可选的参数名称。

另请参阅

  • Enable-ComputerRestore
  • Get-ComputerRestorePoint
  • Restore-Computer
  • Restart-Computer


Disable-PSBreakpoint

禁用当前控制台中的断点。

语法

Disable-PSBreakpoint [-Id] <Int32[]> [-PassThru] [-Confirm] [-WhatIf] [<CommonParameters>]

Disable-PSBreakpoint [-Breakpoint] <Breakpoint[]> [-PassThru] [-Confirm] [-WhatIf] [<CommonParameters>]

说明

Disable-PSBreakpoint cmdlet 禁用断点，以确保在脚本运行时不会命中断点。可使用它来禁用所有断点，或者可通过提交断点对象或断点 ID 来指定断点。

在技术上，该 cmdlet 将断点对象的 Enabled 属性值更改为 False。要重新启用断点，请使用 Enable-PSBreakpoint cmdlet。当使用 Set-PSBreakpoint cmdlet 来创建断点时，将默认启用断点。

断点是脚本中的一个点，在该处，将暂时停止执行脚本，从而使您可以检查脚本中的指令。Disable-PSBreakpoint 是设计用来调试 Windows PowerShell 脚本的多个 cmdlet 之一。有关 Windows PowerShell 调试程序的详细信息，请参阅 about_Debuggers。

参数

-Breakpoint <Breakpoint[]>

指定要禁用的断点。输入包含断点对象的变量或者用来获取断点对象的命令（如 Get-PSBreakpoint 命令）。还可通过管道将断点对象传递至 Disable-PSBreakpoint cmdlet。

是否为必需？ | true
位置？ | 1
默认值 | 无
是否接受管道输入？ | true (ByValue)
是否接受通配符？ | false

-Id <Int32[]>

禁用具有指定断点 ID 的断点。输入 ID 或包含 ID 的变量。无法通过管道将 ID 传递至 Disable-PSBreakpoint。

是否为必需？ | true
位置？ | 1
默认值 |
是否接受管道输入？ | true (ByPropertyName)
是否接受通配符？ | false

-PassThru

返回表示已启用的断点的对象。默认情况下，此 cmdlet 将不产生任何输出。

是否为必需？ | false
位置？ | named
默认值 | 无
是否接受管道输入？ | false
是否接受通配符？ | false

-Confirm

在执行命令之前提示您进行确认。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-WhatIf

描述如果执行该命令会发生什么情况（无需实际执行该命令）。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

<CommonParameters>

此 cmdlet 支持通用参数：-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。有关详细信息，请参阅 about_Commonparameters.

输入和输出

输入类型是指可通过管道传递给 cmdlet 的对象的类型。返回类型是指 Cmdlet 所返回对象的类型。

输入 | System.Management.Automation.Breakpoint 可通过管道将断点对象传递至 Disable-PSBreakpoint。
输出 | None 或 System.Management.Automation.Breakpoint 如果使用 PassThru 参数，则 Disable-PSBreakpoint 返回一个表示被禁用断点的对象。否则，此 cmdlet 将不产生任何输出。

示例 1

C:\PS>$b = set-psbreakpoint -script sample.ps1 -variable name

C:\PS> $b | disable-psbreakpoint

说明
-----------
这些命令禁用新创建的断点。

第一个命令使用 Set-PSBreakpoint cmdlet 在 Sample.ps1 脚本中的 Name 变量上创建断点。然后，它将断点对象保存在 $b 变量中。

第二条命令使用 Disable-PSBreakpoint cmdlet 来禁用新断点。它使用管道运算符 (|) 将 $b 中的断点对象发送至 Disable-PSBreakpoint cmdlet。

此命令的结果是：$b 中断点对象的 Enabled 属性值是 False。

示例 2

C:\PS>disable-psbreakpoint -id 0

说明
-----------
此命令禁用断点 ID 为 0 的断点。

示例 3

C:\PS>disable-psbreakpoint -breakpoint ($b = set-psbreakpoint -script sample.ps1 -line 5)

C:\PS> $b

说明
-----------
此命令创建新断点，在您启用该断点之前，该断点将一直禁用。

此命令使用 Disable-PSBreakpoint cmdlet 来禁用断点。Breakpoint 参数的值为 Set-PSBreakpoint 命令，该命令可设置新断点、生成断点对象，并将对象保存在 $b 变量中。

Cmdlet 参数以对象作为值，可接受包含对象的变量，或者是可以获取或生成对象的命令。在此情况下，由于 Set-PSBreakpoint 生成断点对象，因此它可作为 Breakpoint 参数的值来使用。

第二条命令显示 $b 变量值中的断点对象。

示例 4

C:\PS>get-psbreakpoint | disable-psbreakpoint

说明
-----------
此命令禁用当前控制台中的所有断点。可将此命令缩写为：“gbp | dbp”。

另请参阅

  • about_Debuggers
  • Set-PSBreakpoint
  • Get-PSBreakpoint
  • Enable-PSBreakpoint
  • Remove-PSBreakpoint
  • Get-PSCallStack


Disable-PSRemoting

阻止计算机接收远程 Windows PowerShell 命令。

语法

Disable-PSRemoting [-Force] [-Confirm] [-WhatIf] [<CommonParameters>]

说明

Disable-PSRemoting 函数通过向本地计算机上所有会话配置的安全描述符中添加“全部拒绝”条目，禁用这些会话配置。这将阻止本地计算机接收远程命令。

Disable-PSRemoting 不会停止 WinRM 服务，也不会阻止本地计算机用户建立连接到远程计算机或向其他计算机发送命令的会话。

若要重新启用这些会话配置，请使用 Enable-PSRemoting 或 Enable-PSSessionConfiguration cmdlet。

若要在 Windows Vista、Windows Server 2008 以及更高版本的 Windows 上运行此函数，您必须使用“以管理员身份运行”选项打开 Windows PowerShell。

参数

-Force

禁止显示所有用户提示。默认情况下，提示您确认每个操作。

是否为必需？ | false
位置？ | named
默认值 | False
是否接受管道输入？ | false
是否接受通配符？ | false

-Confirm

在执行命令之前提示您进行确认。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-WhatIf

描述如果执行该命令会发生什么情况（无需实际执行该命令）。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

<CommonParameters>

此 cmdlet 支持通用参数：-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。有关详细信息，请参阅 about_Commonparameters.

输入和输出

输入类型是指可通过管道传递给 cmdlet 的对象的类型。返回类型是指 Cmdlet 所返回对象的类型。

输入 | None 不能通过管道将输入传递给此 cmdlet。
输出 | None 此 cmdlet 不返回任何对象。

说明

会话配置是一组用于定义会话环境的设置。这些会话配置位于远程计算机上，供连接到该计算机的本地和远程会话使用。

连接到该计算机的每个会话必须使用在该计算机上注册的某一会话配置。这包括使用 New-PSSession 或 Enter-PSSession cmdlet 创建的持续性会话，以及在使用采用 WS-Management 远程处理技术的 cmdlet（如 Invoke-Command）的 ComputerName 参数时 Windows PowerShell 创建的临时会话。通过拒绝访问所有会话配置，可以有效地阻止所有用户建立连接到该计算机的会话。

Disable-PSRemoting 与“Disable-PSSessionConfiguration -name *”等效。

示例 1

C:\PS>disable-psremoting

说明
-----------
此命令禁用计算机上的所有会话配置。

示例 2

C:\PS>disable-psremoting -force

说明
-----------
此命令禁用计算机上的所有会话配置并且不显示提示。

示例 3

C:\PS>disable-psremoting -force

C:\PS> new-pssession -computername localhost

[localhost] Connecting to remote server failed with the following error
message : Access is denied. For more information, see the about_Remote_Troub
leshooting Help topic.
    + CategoryInfo          : OpenError: (System.Manageme....RemoteRunspace:RemoteRunspace) [], PSRemotingTransportException
    + FullyQualifiedErrorId : PSSessionOpenFailed

C:\PS> new-pssession -computername Server01

 Id Name       ComputerName    State    Configuration         Availability
 -- ----       ------------    -----    -------------         ------------
  1 Session1   Server01...     Opened   Microsoft.PowerShell     Available

C:\PS> enable-pssessionConfiguration -name * -force

C:\PS> new-pssession -computername localhost

 Id Name       ComputerName    State    Configuration         Availability
 -- ----       ------------    -----    -------------         ------------
  1 Session1   localhost       Opened   Microsoft.PowerShell     Available

说明
-----------
此示例说明使用 Disable-PSRemoting 的效果。

第一条命令使用 Disable-PSRemoting 禁用本地计算机上的所有已注册会话配置。

第二条命令使用 New-PSSession 创建一个与本地计算机的远程会话（也称为“环回”）。由于该会话所需的会话配置被禁用，因此该命令将失败。

第三条命令使用 New-PSSession cmdlet 创建一个从本地计算机到 Server01 远程计算机的会话。此命令使用远程计算机上的会话配置，因此将会成功。

第四条命令使用 Enable-PSSessionConfiguration cmdlet 重新启用本地计算机上的所有会话配置。该命令对 Name 参数使用值 *（全部）。

第五条命令使用 New-PSSession cmdlet 重新尝试建立环回会话。这次该命令将会成功，因为所需的会话配置已启用。

示例 4

C:\PS>disable-psremoting -force

C:\PS> get-psSessionConfiguration | format-table -property name, permission -auto

Name                   Permission
----                   ----------
microsoft.powershell   Everyone AccessDenied, BUILTIN\Administrators AccessAllowed
microsoft.powershell32 Everyone AccessDenied, BUILTIN\Administrators AccessAllowed

C:\PS> enable-psremoting -force
WinRM already is set up to receive requests on this machine.
WinRM already is set up for remote management on this machine.

C:\PS>> Get-PSSessionConfiguration | ft name, Permission -auto

Name                   Permission
----                   ----------
microsoft.powershell   BUILTIN\Administrators AccessAllowed
microsoft.powershell32 BUILTIN\Administrators AccessAllowed

说明
-----------
此示例说明对会话配置使用 Disable-PSRemoting 和 Enable-PSRemoting 的效果。

第一条命令使用 Disable-PSRemoting 函数禁用所有已注册的会话配置。Force 参数用于禁止显示所有用户提示。

第二条命令使用 Get-PSSessionConfiguration cmdlet 显示计算机上的已注册会话配置。该命令使用管道运算符将结果发送给 Format-Table 命令，后者将在表中只显示这些配置的 Name 和 Permission 属性。

所得的表显示拒绝所有用户对这些配置的权限。

第三条命令使用 Enable-PSRemoting cmdlet 重新启用计算机上的所有会话配置。也可以使用“Enable-PsSessionConfiguration -name *”命令。该命令使用 Force 参数禁止显示所有用户提示，并重新启动 WinRM 服务而不显示提示。

第四条命令使用 Get-PSSessionConfiguration 和 Format-Table 显示会话配置的名称和权限。结果显示此时 Administrators 组的成员可以访问这些会话配置。

另请参阅

  • Enable-PSRemoting
  • Disable-PSSessionConfiguration
  • Get-PSSessionConfiguration
  • Register-PSSessionConfiguration
  • Set-PSSessionConfiguration
  • Unregister-PSSessionConfiguration
  • WSMan Provider


Disable-PSSessionConfiguration

拒绝访问本地计算机上的会话配置。

语法

Disable-PSSessionConfiguration [[-Name] <string[]>] [-Force] [-Confirm] [-WhatIf] [<CommonParameters>]

说明

Disable-PSSessionConfiguration cmdlet 阻止所有计算机用户在会话中使用会话配置。这是一个高级 cmdlet，供系统管理员为其用户管理自定义会话配置时使用。

Disable-PSSessionConfiguration cmdlet 向一个或多个已注册会话配置的安全描述符添加“全部拒绝”设置。因此，您可以注销、查看和更改这些配置，但不能在会话中使用它们。

如果不使用参数，Disable-PSSessionConfiguration 将禁用 Microsoft.PowerShell 配置，即用于会话的默认配置。除非用户指定了其他配置，否则这将有效地阻止本地和远程用户创建连接到计算机的任何会话。

若要禁用计算机上的所有会话配置，请使用 Disable-PSRemoting。

参数

-Force

禁止显示所有用户提示。默认情况下，提示您确认每个操作。

是否为必需？ | false
位置？ | named
默认值 | False
是否接受管道输入？ | false
是否接受通配符？ | false

-Name <string[]>

指定要禁用的会话配置的名称。输入一个或多个配置名称。允许使用通配符。也可以通过管道将包含配置名称的字符串或将会话配置对象传递给 Disable-PSSessionConfiguration。

如果省略此参数，Disable-PSSessionConfiguration 将禁用 Microsoft.PowerShell 会话配置。

是否为必需？ | false
位置？ | 1
默认值 | Microsoft.PowerShell
是否接受管道输入？ | true (ByValue, ByPropertyName)
是否接受通配符？ | true

-Confirm

在执行命令之前提示您进行确认。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-WhatIf

描述如果执行该命令会发生什么情况（无需实际执行该命令）。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

<CommonParameters>

此 cmdlet 支持通用参数：-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。有关详细信息，请参阅 about_Commonparameters.

输入和输出

输入类型是指可通过管道传递给 cmdlet 的对象的类型。返回类型是指 Cmdlet 所返回对象的类型。

输入 | Microsoft.PowerShell.Commands.PSSessionConfigurationCommands#PSSessionConfiguration, System.String 可以通过管道将会话配置对象或包含会话配置名称的字符串传递给 Disable-PSSessionConfiguration。
输出 | None 此 cmdlet 不返回任何对象。

说明

若要在 Windows Vista、Windows Server 2008 以及更高版本的 Windows 上运行此 cmdlet，您必须使用“以管理员身份运行”选项启动 Windows PowerShell。

示例 1

C:\PS>Disable-PSSessionConfiguration

说明
-----------
此命令禁用 Microsoft.PowerShell 会话配置。

示例 2

C:\PS>disable-pssessionConfiguration -name *

说明
-----------
此命令禁用计算机上的所有已注册会话配置。

示例 3

C:\PS>disable-pssessionConfiguration -name Microsoft* -force

说明
-----------
此命令禁用名称以“Microsoft”开头的所有会话配置。该命令使用 Force 参数禁止显示所有用户提示。

示例 4

C:\PS>Get-PSSessionConfiguration -name MaintenanceShell, AdminShell | Disable-PSSessionConfiguration

说明
-----------
此命令禁用 MaintenanceShell 和 AdminShell 会话配置。

该命令使用管道运算符 (|) 将 Get-PSSessionConfiguration 命令的结果发送到 Disable-PSSessionConfiguration。

示例 5

C:\PS>Get-PSSessionConfiguration | format-table -property Name, Permission -auto

Name                   Permission
----                   ----------
MaintenanceShell       BUILTIN\Administrators AccessAllowed
microsoft.powershell   BUILTIN\Administrators AccessAllowed
microsoft.powershell32 BUILTIN\Administrators AccessAllowed

C:\PS> Disable-PSSessionConfiguration -name MaintenanceShell -force

C:\PS> Get-PSSessionConfiguration | format-table -property Name, Permission -auto

Name                   Permission
----                   ----------
MaintenanceShell       Everyone AccessDenied, BUILTIN\Administrators AccessAllowed
microsoft.powershell   BUILTIN\Administrators AccessAllowed
microsoft.powershell32 BUILTIN\Administrators AccessAllowed

C:\PS> Set-PSSessionConfiguration -name MaintenanceShell -MaximumReceivedDataSizePerCommandMB 60

ParamName            ParamValue
---------            ----------
psmaximumreceived... 60

"Restart WinRM service"
WinRM service need to be restarted to make the changes effective. Do you want to run the command "restart-service winrm"?
[Y] Yes  [N] No  [S] Suspend  [?] Help (default is "Y"): y

C:\PS> new-pssession -computername localhost -configurationName MaintenanceShell

[localhost] Connecting to remote server failed with the following error message : Access is denied. For more information, see the about_Remote_Troubl
eshooting Help topic.
    + CategoryInfo          : OpenError: (System.Manageme....RemoteRunspace:RemoteRunspace) [], PSRemotingTransportException
    + FullyQualifiedErrorId : PSSessionOpenFailed

说明
-----------
此示例说明禁用会话配置的效果。

第一条命令使用 Get-SessionConfiguration 和 Format-Table cmdlet 只显示会话配置对象的 Name 和 Permission 属性。使用这种表格式便于查看对象值。结果显示允许 Administrators 组的成员使用会话配置。

第二条命令使用 Disable-PSSessionConfiguration cmdlet 禁用 MaintenanceShell 会话配置。该命令使用 Force 参数禁止显示所有用户提示。

第三条命令重复第一条命令。结果显示您仍可以获取表示 MaintenanceShell 会话配置的对象，即使拒绝所有用户访问该对象也是如此。“AccessDenied”条目优先于安全描述符中的所有其他条目。

第四条命令使用 Set-PSSessionConfiguration cmdlet 将 MaintenanceShell 会话配置上的 MaximumDataSizePerCommandMB 设置增大为 60。结果显示该命令成功执行，即使拒绝所有用户访问该配置也是如此。

第五条命令尝试在会话中使用 MaintenanceShell 会话配置。它使用 New-PSSession cmdlet 创建新会话，并使用 ConfigurationName 参数指定 MaintenanceShell 配置。由于拒绝该用户访问该配置，因此结果显示 New-PSSession 命令失败。

另请参阅

  • about_Session_Configurations
  • Enable-PSSessionConfiguration
  • Get-PSSessionConfiguration
  • Register-PSSessionConfiguration
  • Set-PSSessionConfiguration
  • Unregister-PSSessionConfiguration
  • WSMan Provider


Disable-WSManCredSSP

在客户端计算机上禁用凭据安全服务提供程序 (CredSSP) 身份验证。

语法

Disable-WSManCredSSP [-Role] <string> [<CommonParameters>]

说明

Disable-WSManCredSPP cmdlet 用于禁用客户端或服务器计算机上的 CredSSP 身份验证。使用 CredSSP 身份验证时，用户凭据将传递给要进行身份验证的远程计算机。这种身份验证用于从一个远程会话中创建另一个远程会话的命令。例如，如果要在远程计算机上运行后台作业，可以使用这种身份验证。

该 cmdlet 通过在 Role 参数中指定 Client 来禁用客户端上的 CredSSP。然后，该 cmdlet 将执行以下操作：

- 禁用客户端上的 CredSSP。WS-Management 设置 <localhost|computername>\Client\Auth\CredSSP 将设置为 false。

- 删除客户端上 Windows CredSSP 策略 AllowFreshCredentials 中的所有 WSMan/* 设置。

该 cmdlet 通过在 Role 参数中指定 Server 来禁用服务器上的 CredSSP。然后，该 cmdlet 将执行以下操作：

- 禁用服务器上的 CredSSP。WS-Management 设置 <localhost|computername>\Service\Auth\CredSSP 将设置为 false。

注意：CredSSP 身份验证将本地计算机中的用户凭据委派给远程计算机。此操作增加了远程操作的安全风险。如果远程计算机的安全受到威胁，则在向该计算机传递凭据时，可使用这些凭据来控制网络会话。

若要禁用 CredSSP 身份验证，请使用 Disable-WSManCredSSP cmdlet。

参数

-Role <string>

接受以下两个可能值之一：Client 或 Server。这两个值指定是禁用以客户端身份还是以服务器身份出现的 CredSSP。

如果该 cmdlet 通过在 Role 参数中指定 Client 来禁用客户端上的 CredSSP，则该 cmdlet 将执行以下操作：

- 禁用客户端上的 CredSSP。WS-Management 设置 <localhost|computername>\Client\Auth\CredSSP 将设置为 false。

- 删除客户端上 Windows CredSSP 策略 AllowFreshCredentials 中的所有 WSMan/* 设置。

如果该 cmdlet 通过在 Role 参数中指定 Server 来禁用服务器上的 CredSSP，则该 cmdlet 将执行以下操作：

- 禁用服务器上的 CredSSP。WS-Management 设置 <localhost|computername>\Service\Auth\CredSSP 将设置为 false。

是否为必需？ | true
位置？ | 1
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

<CommonParameters>

此 cmdlet 支持通用参数：-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。有关详细信息，请参阅 about_Commonparameters.

输入和输出

输入类型是指可通过管道传递给 cmdlet 的对象的类型。返回类型是指 Cmdlet 所返回对象的类型。

输入 | None 此 cmdlet 不接受任何输入。
输出 | None 此 cmdlet 将不产生任何输出。

说明

若要启用 CredSSP 身份验证，请使用 Enable-WSManCredSSP cmdlet。

示例 1

C:\PS>Disable-WSManCredSSP -Role Client

说明
-----------
此命令禁用客户端上的 CredSSP，这会阻止到服务器的委派。

示例 2

C:\PS>Disable-WSManCredSSP -Role Server

说明
-----------
此命令禁用服务器上的 CredSSP，这会阻止从客户端委派。

另请参阅

  • Connect-WSMan
  • Disconnect-WSMan
  • Enable-WSManCredSSP
  • Get-WSManCredSSP
  • Get-WSManInstance
  • Invoke-WSManAction
  • New-WSManInstance
  • New-WSManSessionOption
  • Remove-WSManInstance
  • Set-WSManInstance
  • Set-WSManQuickConfig
  • Test-WSMan


Disconnect-WSMan

断开客户端与远程计算机上的 WinRM 服务的连接。

语法

Disconnect-WSMan [-ComputerName <string>] [<CommonParameters>]

说明

Disconnect-WSMan cmdlet 用于断开客户端与远程计算机上的 WinRM 服务的连接。如果已将 WS-Management 会话保存在变量中，则会话对象将保留在变量中，但 WS-Management 的状态为“Closed”。您可以在 WS-Management 提供程序的上下文中使用此 cmdlet 断开客户端与远程计算机上的 WinRM 服务的连接。但是，也可以在更改到 WS-Management 提供程序之前，使用此 cmdlet 断开与远程计算机上的 WinRM 服务的连接。

有关如何连接到远程计算机上的 WinRM 服务的详细信息，请参阅 Connect-WSMan。

参数

-ComputerName <string>

指定要与其断开连接的计算机。值可以是完全限定的域名、NetBIOS 名称或 IP 地址。使用本地计算机名称、localhost 或点 (.)指定本地计算机。默认值为本地计算机。当远程计算机与用户位于不同的域时，必须使用完全限定的域名。可以通过管道将此参数的值传递给 cmdlet。

注意：不能断开与本地主机的连接（即与本地计算机的默认连接）。但是，如果与本地计算机建立了一个单独连接（例如，通过使用该计算机名称），则可以通过使用 Disconnect-WSMan cmdlet 删除该连接。

是否为必需？ | false
位置？ | named
默认值 | localhost
是否接受管道输入？ | false
是否接受通配符？ | false

<CommonParameters>

此 cmdlet 支持通用参数：-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。有关详细信息，请参阅 about_Commonparameters.

输入和输出

输入类型是指可通过管道传递给 cmdlet 的对象的类型。返回类型是指 Cmdlet 所返回对象的类型。

输入 | None 此 cmdlet 不接受任何输入。
输出 | None 此 cmdlet 将不产生任何输出。

示例 1

C:\PS>Disconnect-WSMan -computer server01

C:\PS> cd WSMan:
PS WSMan:\>
PS WSMan:\> dir

   WSManConfig: Microsoft.WSMan.Management\WSMan::WSMan

ComputerName                                  Type
------------                                  ----
localhost                                     Container

说明
-----------
此命令删除与远程计算机 server01 的连接。

通常在 WS-Management 提供程序的上下文中使用此 cmdlet 断开与远程计算机（在本例中为计算机 server01）的连接。但是，也可以在更改到 WSMan 提供程序之前，使用 Disconnect-WSMan cmdlet 删除与远程计算机的连接。这些连接将不会出现在 ComputerName 列表中。

另请参阅

  • Connect-WSMan
  • Disable-WSManCredSSP
  • Enable-WSManCredSSP
  • Get-WSManCredSSP
  • Get-WSManInstance
  • Invoke-WSManAction
  • New-WSManInstance
  • New-WSManSessionOption
  • Remove-WSManInstance
  • Set-WSManInstance
  • Set-WSManQuickConfig
  • Test-WSMan


Enable-ComputerRestore

在指定的文件系统驱动器上启用系统还原功能。

语法

Enable-ComputerRestore [-Drive] <string[]> [-Confirm] [-WhatIf] [<CommonParameters>]

说明

Enable-ComputerRestore cmdlet 在一个或多个文件系统驱动器上打开系统还原功能。因此，可以使用工具（如 Restore-Computer cmdlet）将计算机还原到先前的状态。

默认情况下，系统还原在符合条件的所有驱动器上都处于启用状态，不过您可以禁用系统还原，例如使用 Disable-ComputerRestore cmdlet 来禁用。要在任何驱动器上启用（或重新启用）系统还原，必须首先或同时在系统驱动器上启用系统还原。要查找每个驱动器的系统还原状态，请使用 Rstrui.exe。

参数

-Drive <string[]>

指定文件系统驱动器。输入一个或多个文件系统驱动器号，每个驱动器号后面都加上冒号和反斜杠并用引号引起来，如 "C:\" 或 "D:\"。此参数是必需的。

无法使用此 cmdlet 在远程网络驱动器上启用系统还原，即使该驱动器映射到本地计算机也是如此，并且无法在不符合系统还原条件的驱动器（如外部驱动器）上启用系统还原。

要在任何驱动器上启用系统还原，必须首先或同时在系统驱动器上启用系统还原。

是否为必需？ | true
位置？ | 1
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Confirm

在执行命令之前提示您进行确认。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-WhatIf

描述如果执行该命令会发生什么情况（无需实际执行该命令）。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

<CommonParameters>

此 cmdlet 支持通用参数：-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。有关详细信息，请参阅 about_Commonparameters.

输入和输出

输入类型是指可通过管道传递给 cmdlet 的对象的类型。返回类型是指 Cmdlet 所返回对象的类型。

输入 | None 不能通过管道将对象传递给此 cmdlet。
输出 | None 此 cmdlet 将不产生任何输出。

说明

Disable-ComputerRestore 和 Enable-ComputerRestore 仅在客户端操作系统（如 Windows Vista 和 Windows XP）上工作。

要在 Windows Vista 以及 Windows 的更高版本上运行 Enable-ComputerRestore 命令，请使用“以管理员身份运行”选项打开 Windows PowerShell。

要查找符合系统还原条件的文件系统驱动器，请查看“控制面板”中的“系统”中的“系统保护”选项卡。要在 Windows PowerShell 中打开此选项卡，请键入“SystemPropertiesProtection”。

此 cmdlet 使用 Windows Management Instrumentation (WMI) SystemRestore 类。

示例 1

C:\PS>enable-computerrestore -drive "C:\"

说明
-----------
此命令在本地计算机的 C: 驱动器上启用系统还原。

示例 2

C:\PS>enable-computerrestore -drive "C:\", "D:\"

说明
-----------
此命令在本地计算机的 C: 和 D: 驱动器上启用系统还原。

另请参阅

  • Disable-ComputerRestore
  • Get-ComputerRestorePoint
  • Restore-Computer
  • Restart-Computer


Enable-PSBreakpoint

启用当前控制台中的断点。

语法

Enable-PSBreakpoint [-Id] <Int32[]> [-PassThru] [-Confirm] [-WhatIf] [<CommonParameters>]

Enable-PSBreakpoint [-Breakpoint] <Breakpoint[]> [-PassThru] [-Confirm] [-WhatIf] [<CommonParameters>]

说明

Enable-PSBreakpoint cmdlet 可将已禁用的断点重新启用。可使用它来启用所有断点，或者可通过提交断点对象或断点 ID 来指定断点。

断点是脚本中的一个点，在该处，将暂时停止执行脚本，从而使您可以检查脚本中的指令。新建的断点会自动启用，但是可通过使用 Disable-PSBreakpoint cmdlet 来禁用它们。

在技术上，该 cmdlet 将断点对象的 Enabled 属性值更改为 True。

Enable-PSBreakpoint 是设计用来调试 Windows PowerShell 脚本的多个 cmdlet 之一。有关 Windows PowerShell 调试程序的详细信息，请参阅 about_Debuggers。

参数

-Breakpoint <Breakpoint[]>

指定要启用的断点。输入包含断点对象的变量或者用来获取断点对象的命令（如 Get-PSBreakpoint 命令）。还可通过管道将断点对象传递至 Enable-PSBreakpoint。

是否为必需？ | true
位置？ | 1
默认值 | None.
是否接受管道输入？ | true (ByValue)
是否接受通配符？ | false

-Id <Int32[]>

启用具有指定断点 ID 的断点。默认值为所有断点。输入 ID 或包含 ID 的变量。（无法通过管道将 ID 传递至 Enable-PSBreakpoint。）要查找某个断点的 ID，请使用 Get-PSBreakpoint cmdlet。

是否为必需？ | true
位置？ | 1
默认值 | 无
是否接受管道输入？ | true (ByPropertyName)
是否接受通配符？ | false

-PassThru

返回表示已启用的断点的对象。默认情况下，此 cmdlet 将不产生任何输出。

是否为必需？ | false
位置？ | named
默认值 | No output
是否接受管道输入？ | false
是否接受通配符？ | false

-Confirm

在执行命令之前提示您进行确认。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-WhatIf

描述如果执行该命令会发生什么情况（无需实际执行该命令）。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

<CommonParameters>

此 cmdlet 支持通用参数：-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。有关详细信息，请参阅 about_Commonparameters.

输入和输出

输入类型是指可通过管道传递给 cmdlet 的对象的类型。返回类型是指 Cmdlet 所返回对象的类型。

输入 | System.Management.Automation.Breakpoint 可通过管道将断点对象传递至 Enable-PSBreakpoint。
输出 | None 或 System.Management.Automation.Breakpoint 如果使用 PassThru 参数，则 Enable-PSBreakpoint 返回一个表示已启用的断点的断点对象。否则，此 cmdlet 将不产生任何输出。

说明

如果您试图启用一个已经启用的断点，则 Enable-PSBreakpoint cmdlet 不会生成错误。因此，可启用所有断点且不发生任何错误，即使它们中仅有部分处于禁用状态。

当通过使用 Set-PSBreakpoint cmdlet 来创建断点时会启用断点。无需启用新创建的断点。

示例 1

C:\PS>get-psbreakpoint | enable-psbreakpoint

说明
-----------
此命令启用当前控制台中的所有断点。可将该命令缩写为“gbp | ebp”。

示例 2

C:\PS>enable-psbreakpoint -id 0, 1, 5

说明
-----------
此命令启用断点 ID 为 0、1 和 5 的断点。

示例 3

C:\PS>$b = set-psbreakpoint -script sample.ps1 -variable Name

C:\PS> $b | disable-psbreakpoint -passthru

AccessMode : Write
Variable   : Name
Action     :
Enabled    : False
HitCount   : 0
Id         : 0
Script     : C:\ps-test\sample.ps1
ScriptName : C:\ps-test\sample.ps1

C:\PS> $b | enable-psbreakpoint -passthru

AccessMode : Write
Variable   : Name
Action     :
Enabled    : True
HitCount   : 0
Id         : 0
Script     : C:\ps-test\sample.ps1
ScriptName : C:\ps-test\sample.ps1

说明
-----------
这些命令重新启用已禁用的断点。

第一条命令使用 Set-PSBreakpoint cmdlet 在 Sample.ps1 脚本中的“Name”变量上创建断点。然后，它将断点对象保存在 $b 变量中。

第二条命令使用 Disable-PSBreakpoint cmdlet 来禁用新断点。它使用管道运算符 (|) 将 $b 中的断点对象发送至 Disable-PSBreakpoint cmdlet，并使用 Disable-PSBreakpoint 的 PassThru 参数来显示已禁用的断点对象。这使您可以验证断点对象的 Enabled 属性值是否为 False。

第三条命令使用 Enable-PSBreakpoint cmdlet 来重新启用断点。它使用管道运算符 (|) 将 $b 中的断点对象发送至 Enable-PSBreakpoint cmdlet，并使用 Enable-PSBreakpoint 的 PassThru 参数来显示该断点对象。这使您可以验证断点对象的 Enabled 属性值为 True。

结果显示在下面的示例输出中。

示例 4

C:\PS>$b = get-psbreakpoint -id 3, 5

C:\PS> enable-psbreakpoint -breakpoint $b

说明
-----------
这些命令通过指定它们的断点对象来启用一组断点。

第一个命令使用 Get-PSBreakpoint cmdlet 来获取断点，并将它们保存在 $b 变量中。

第二个命令使用 Enable-PSBreakpoint cmdlet 及其 Breakpoint 参数来启用断点。
此命令与“enable-psbreakpoint -id 3, 5”等效。

另请参阅

  • about_Debuggers
  • Set-PSBreakpoint
  • Disable-PSBreakpoint
  • Get-PSBreakpoint
  • Remove-PSBreakpoint
  • Get-PSCallStack


Enable-PSRemoting

将计算机配置为接收远程命令。

语法

Enable-PSRemoting [-Force] [-Confirm] [-WhatIf] [<CommonParameters>]

说明

Enable-PSRemoting cmdlet 将计算机配置为接收使用 WS-Management 技术发送的 Windows PowerShell 远程命令。

只需在接收命令的每台计算机上运行一次此命令。无需在只发送命令的计算机上运行该命令。由于该配置会激活侦听器，因此谨慎的做法是仅在需要时才运行该命令。

Enable-PSRemoting cmdlet 可执行以下操作：

-- 运行 Set-WSManQuickConfig cmdlet，后者将执行以下任务：

----- 启动 WinRM 服务。

----- 将 WinRM 服务的启动类型设置为“自动”。

----- 创建一个侦听器以接受任意 IP 地址上的请求。

----- 对 WS-Management 通信启用防火墙例外。

-- 启用所有已注册的 Windows PowerShell 会话配置以从远程计算机接收指令。

----- 注册“Microsoft.PowerShell”会话配置（如果尚未注册该配置）。

----- 在 64 位计算机上注册“Microsoft.PowerShell32”会话配置（如果尚未注册该配置）。

----- 从所有已注册的会话配置的安全描述符中删除“拒绝所有用户”设置。

----- 重新启动 WinRM 服务以使上述更改生效。

若要在 Windows Vista、Windows Server 2008 以及更高版本的 Windows 上运行此 cmdlet，您必须使用“以管理员身份运行”选项启动 Windows PowerShell。

参数

-Force

禁止显示所有用户提示。默认情况下，提示您确认每个操作。

是否为必需？ | false
位置？ | named
默认值 | False
是否接受管道输入？ | false
是否接受通配符？ | false

-Confirm

在执行命令之前提示您进行确认。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-WhatIf

描述如果执行该命令会发生什么情况（无需实际执行该命令）。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

<CommonParameters>

此 cmdlet 支持通用参数：-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。有关详细信息，请参阅 about_Commonparameters.

输入和输出

输入类型是指可通过管道传递给 cmdlet 的对象的类型。返回类型是指 Cmdlet 所返回对象的类型。

输入 | None 不能通过管道将输入传递给此 cmdlet。
输出 | System.String Enable-PSRemoting 返回描述其结果的字符串。

示例 1

C:\PS>enable-psremoting

说明
-----------
此命令将计算机配置为接收远程命令。

示例 2

C:\PS>enable-psremoting -force

说明
-----------
此命令将计算机配置为接收远程命令。它使用 Force 参数禁止显示用户提示。

另请参阅

  • about_Remote
  • about_Session_Configurations
  • Disable-PSRemoting
  • Get-PSSessionConfiguration
  • Enable-PSSessionConfiguration
  • Disable-PSSessionConfiguration
  • Register-PSSessionConfiguration
  • Set-PSSessionConfiguration
  • WSMan Provider


Enable-PSSessionConfiguration

启用本地计算机上的会话配置。

语法

Enable-PSSessionConfiguration [[-Name] <string[]>] [-Force] [-SecurityDescriptorSDDL <string>] [-Confirm] [-WhatIf] [<CommonParameters>]

说明

Enable-PSSessionConfiguration cmdlet 重新启用已使用 Disable-PSSessionConfiguration cmdlet 禁用的已注册会话配置。这是一个高级 cmdlet，供系统管理员为其用户管理自定义会话配置时使用。

如果不使用参数，Enable-PSSessionConfiguration 将重新启用 Microsoft.PowerShell 配置，即用于会话的默认配置。

此 cmdlet 对启用的每个配置执行以下操作：

-- 从该配置的安全描述符中删除“拒绝所有用户”设置，或用指定的安全描述符替换原有安全描述符。

-- 启用侦听器以接收任意 IP 地址上的请求。

-- 重新启动 WinRM 服务。

Enable-PSSessionConfiguration cmdlet 将调用 Set-WSManQuickConfig cmdlet。但是，不能使用它在计算机上启用远程处理，而应使用功能更全面的 Enable-PSRemoting cmdlet。

参数

-Force

禁止显示所有用户提示，并重新启动 WinRM 服务而不显示提示。重新启动服务将使配置更改生效。

若要阻止重新启动并禁止显示重新启动提示，请使用 NoServiceRestart 参数。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Name <string[]>

指定要启用的会话配置的名称。输入一个或多个配置名称。允许使用通配符。

也可以通过管道将包含配置名称的字符串或将会话配置对象传递给 Enable-PSSessionConfiguration。

如果省略此参数，Enable-PSSessionConfiguration 将启用 Microsoft.PowerShell 会话配置。

是否为必需？ | false
位置？ | 1
默认值 |
是否接受管道输入？ | true (ByValue, ByPropertyName)
是否接受通配符？ | true

-SecurityDescriptorSDDL <string>

用指定的安全描述符替换会话配置上的安全描述符。

如果省略此参数，则 Enable-PSSessionConfiguration 只是从安全描述符中删除“全部拒绝”项。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Confirm

在执行命令之前提示您进行确认。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-WhatIf

描述如果执行该命令会发生什么情况（无需实际执行该命令）。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

<CommonParameters>

此 cmdlet 支持通用参数：-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。有关详细信息，请参阅 about_Commonparameters.

输入和输出

输入类型是指可通过管道传递给 cmdlet 的对象的类型。返回类型是指 Cmdlet 所返回对象的类型。

输入 | Microsoft.PowerShell.Commands.PSSessionConfigurationCommands#PSSessionConfiguration, System.String 可以通过管道将会话配置对象或包含会话配置名称的字符串传递给 Enable-PSSessionConfiguration。
输出 | None 此 cmdlet 不返回任何对象。

说明

若要在 Windows Vista、Windows Server 2008 以及更高版本的 Windows 上运行此 cmdlet，您必须使用“以管理员身份运行”选项启动 Windows PowerShell。

示例 1

C:\PS>Enable-PSSessionConfiguration

说明
-----------
此命令重新启用计算机上的 Microsoft.PowerShell 默认会话配置。

示例 2

C:\PS>Enable-PSSessionConfiguration -name MaintenanceShell, AdminShell

说明
-----------
此命令重新启用计算机上的 MaintenanceShell 和 AdminShell 会话配置。

示例 3

C:\PS>Enable-PSSessionConfiguration -name *

C:\PS> Get-PSSessionConfiguration | Enable-PSSessionConfiguration

说明
-----------
这些命令重新启用计算机上的所有会话配置。这些命令是等效的，因此您可以使用其中任何一个。

如果启用已启用的会话配置，Enable-PSSessionConfiguration 不会生成错误。

示例 4

C:\PS>Enable-PSSessionConfiguration -name MaintenanceShell -securityDescriptorSDDL "O:NSG:BAD:P(A;;GXGWGR;;;BA)(A;;GAGR;;;S-1-5-21-123456789-188441444-3100496)S:P"

说明
-----------
此命令重新启用 MaintenanceShell 会话配置并为该配置指定新的安全描述符。

另请参阅

  • about_Session_Configurations
  • Disable-PSSessionConfiguration
  • Get-PSSessionConfiguration
  • Register-PSSessionConfiguration
  • Set-PSSessionConfiguration
  • Unregister-PSSessionConfiguration
  • WSMan Provider


Enable-WSManCredSSP

在客户端计算机上启用凭据安全服务提供程序 (CredSSP) 身份验证。

语法

Enable-WSManCredSSP [-Role] <string> [[-DelegateComputer] <string>] [<CommonParameters>]

说明

Enable-WSManCredSPP cmdlet 用于启用客户端或服务器计算机上的 CredSSP 身份验证。使用 CredSSP 身份验证时，用户凭据将传递给要进行身份验证的远程计算机。这种身份验证用于从一个远程会话中创建另一个远程会话的命令。例如，如果要在远程计算机上运行后台作业，可以使用这种身份验证。

此 cmdlet 通过在 Role 参数中指定 Client 来启用客户端上的 CredSSP。然后，该 cmdlet 将执行以下操作：

- 启用客户端上的 CredSSP。WS-Management 设置 <localhost|computername>\Client\Auth\CredSSP 将设置为 true。

- 将客户端上的 Windows CredSSP 策略 AllowFreshCredentials 设置为 WSMan/Delegate。

- 注意：这些设置允许客户端在实现服务器身份验证时将显式凭据委派给服务器。

此 cmdlet 通过在 Role 参数中指定 Server 来启用服务器上的 CredSSP。然后，该 cmdlet 将执行以下操作：

- 启用服务器上的 CredSSP。WS-Management 设置 <localhost|computername>\Service\Auth\CredSSP 将设置为 true。

- 注意：此策略设置允许服务器充当客户端的代理。

注意：CredSSP 身份验证将本地计算机中的用户凭据委派给远程计算机。此操作增加了远程操作的安全风险。如果远程计算机的安全受到威胁，则在向该计算机传递凭据时，可使用这些凭据来控制网络会话。

若要禁用 CredSSP 身份验证，请使用 Disable-WSManCredSSP cmdlet。

参数

-DelegateComputer <string>

允许将客户端凭据委派给此参数指定的一台或多台服务器。此参数的值应为完全限定的域名。

如果 Role 参数指定 Client，则必须使用 DelegateComputer 参数。

如果 Role 参数指定 Server，则不允许使用 DelegateComputer 参数。

是否为必需？ | false
位置？ | 2
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Role <string>

接受以下两个可能值之一：Client 或 Server。这两个值指定是启用以客户端身份还是以服务器身份出现的 CredSSP。

如果 Role 参数指定 Client，则该 cmdlet 将执行以下操作：

- 启用客户端上的 CredSSP。WS-Management 设置 <localhost|computername>\Client\Auth\CredSSP 将设置为 true。

- 将客户端上的 Windows CredSSP 策略 AllowFreshCredentials 设置为 WSMan/Delegate。

- 注意：这些设置允许客户端在实现服务器身份验证时将显式凭据委派给服务器。

如果 Role 参数指定 Server，则该 cmdlet 将执行以下操作：

- 启用服务器上的 CredSSP。WS-Management 设置 <localhost|computername>\Service\Auth\CredSSP 将设置为 true。

- 注意：此策略设置允许服务器充当客户端的代理。

是否为必需？ | true
位置？ | 1
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

<CommonParameters>

此 cmdlet 支持通用参数：-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。有关详细信息，请参阅 about_Commonparameters.

输入和输出

输入类型是指可通过管道传递给 cmdlet 的对象的类型。返回类型是指 Cmdlet 所返回对象的类型。

输入 | None 此 cmdlet 不接受任何输入。
输出 | System.Xml.XmlElement 如果成功启用 CredSSP 身份验证，此 cmdlet 会生成一个 XMLElement 对象。

示例 1

C:\PS>enable-wsmancredssp -role client -delegatecomputer server02.accounting.fabrikam.com

cfg         : http://schemas.microsoft.com/wbem/wsman/1/config/client/auth
lang        : en-US
Basic       : true
Digest      : true
Kerberos    : true
Negotiate   : true
Certificate : true
CredSSP     : true

说明
-----------
此命令允许将客户端凭据委派给计算机 server02。

示例 2

C:\PS>enable-wsmancredssp -role client -delegatecomputer *.accounting.fabrikam.com

cfg         : http://schemas.microsoft.com/wbem/wsman/1/config/client/auth
lang        : en-US
Basic       : true
Digest      : true
Kerberos    : true
Negotiate   : true
Certificate : true
CredSSP     : true

说明
-----------
此命令允许将客户端凭据委派给 accounting.fabrikam.com 域中的所有计算机。

示例 3

C:\PS>enable-wsmancredssp -role client -delegatecomputer server02.accounting.fabrikam.com, server03.accounting.fabrikam.com, server04.accounting.fabrikam.com

cfg         : http://schemas.microsoft.com/wbem/wsman/1/config/client/auth
lang        : en-US
Basic       : true
Digest      : true
Kerberos    : true
Negotiate   : true
Certificate : true
CredSSP     : true

说明
-----------
此命令允许将客户端凭据委派给多台计算机。

示例 4

C:\PS>enable-wsmancredssp -role server

说明
-----------
此命令允许一台计算机充当另一台计算机的代理。Enable-WSManCredSSP cmdlet（如上述示例所示）只启用相应客户端上的 CredSSP 身份验证，并指定可代理该客户端的远程计算机。若要使远程计算机充当客户端的代理，必须将 WSMan 的服务节点中的 CredSSP 项设置为 true。

示例 5

C:\PS>connect-wsman server02
set-item wsman:\server02\service\auth\credSSP -value $true

说明
-----------
此命令允许一台计算机充当另一台计算机的代理。Enable-WSManCredSSP 命令（如上述示例所示）只启用相应客户端计算机上的 CredSSP 身份验证，并指定可代理该客户端计算机的远程计算机。若要使远程计算机充当客户端计算机的代理，必须将 WSMan 提供程序的服务目录中的 CredSSP 项设置为 true。

在本例中，第一条命令创建一个与远程计算机 server02 的连接。

第二条命令在远程计算机 server02 上设置允许该远程计算机充当代理的 credSSP 值。

另请参阅

  • Connect-WSMan
  • Disable-WSManCredSSP
  • Disconnect-WSMan
  • Get-WSManCredSSP
  • Get-WSManInstance
  • Invoke-WSManAction
  • New-WSManInstance
  • New-WSManSessionOption
  • Remove-WSManInstance
  • Set-WSManInstance
  • Set-WSManQuickConfig
  • Test-WSMan


Enter-PSSession

启动与远程计算机间的交互式会话。

语法

Enter-PSSession [-ComputerName] <string> [-ApplicationName <string>] [-Authentication {<Default> | <Basic> | <Negotiate> | <NegotiateWithImplicitCredential> | <Credssp> | <Digest> | <Kerberos>}] [-CertificateThumbprint <string>] [-ConfigurationName <string>] [-Credential <PSCredential>] [-Port <int>] [-SessionOption <PSSessionOption>] [-UseSSL] [<CommonParameters>]

Enter-PSSession [[-Id] <int>] [<CommonParameters>]

Enter-PSSession [-InstanceId <Guid>] [<CommonParameters>]

Enter-PSSession [-Name <string>] [<CommonParameters>]

Enter-PSSession [[-Session] <PSSession>] [<CommonParameters>]

Enter-PSSession [[-ConnectionURI] <Uri>] [-AllowRedirection] [-Authentication {<Default> | <Basic> | <Negotiate> | <NegotiateWithImplicitCredential> | <Credssp> | <Digest> | <Kerberos>}] [-CertificateThumbprint <string>] [-ConfigurationName <string>] [-Credential <PSCredential>] [-SessionOption <PSSessionOption>] [<CommonParameters>]

说明

Enter-PSSession cmdlet 可启动与单个远程计算机间的交互式会话。会话期间，键入的命令会在远程计算机上运行，就像直接在远程计算机上键入命令一样。一次只能有一个交互式会话。

通常，使用 ComputerName 参数指定远程计算机的名称。不过，也可以使用通过 New-PSSession 创建的会话进行交互式会话。

要结束交互式会话并断开与远程计算机的连接，请使用 Exit-PSSession cmdlet 或键入“exit”。

参数

-AllowRedirection

允许将此连接重定向到备用统一资源标识符 (URI)。

使用 ConnectionURI 参数时，远程目标可以返回重定向到另一 URI 的指令。默认情况下，Windows PowerShell 不会重定向连接，但您可以使用此参数允许它重定向连接。

允许将此连接重定向到备用 URI。

使用 ConnectionURI 参数时，远程目标可以返回重定向到另一 URI 的指令。默认情况下，Windows PowerShell 不会重定向连接，但您可以使用 AllowRedirection 参数允许它重定向连接。

也可以通过设置 $PSSessionOption 首选项变量的 MaximumConnectionRedirectionCount 属性或 SessionOption 参数值的 MaximumConnectionRedirectionCount 属性来限制重定向连接的次数。默认值为 5。有关详细信息，请参阅 SessionOption 参数的说明以及 New-PSSessionOption。

是否为必需？ | false
位置？ | named
默认值 | False
是否接受管道输入？ | false
是否接受通配符？ | false

-ApplicationName <string>

指定连接 URI 的应用程序名称段。使用此参数可在命令中未使用 ConnectionURI 参数时指定应用程序名称。

默认值为本地计算机上的 $PSSessionApplicationName 首选项变量的值。如果未定义此首选项变量，则默认值为 WSMAN。该值适用于大多数使用情况。有关详细信息，请参阅 about_Preference_Variables。

WinRM 服务使用该应用程序名称来选择为连接请求提供服务的侦听器。此参数的值应与远程计算机上的侦听器的 URLPrefix 属性值匹配。

是否为必需？ | false
位置？ | named
默认值 | WSMAN
是否接受管道输入？ | true (ByPropertyName)
是否接受通配符？ | false

-Authentication <AuthenticationMechanism>

指定用于对用户的凭据进行身份验证的机制。有效值为“Default”、“Basic”、“Credssp”、“Digest”、“Kerberos”、“Negotiate”和“NegotiateWithImplicitCredential”。默认值为“Default”。

CredSSP 身份验证仅在 Windows Vista、Windows Server 2008 和更高版本的 Windows 中可用。

有关此参数的值的信息，请参阅 MSDN (Microsoft Developer Network) Library 中对 System.Management.Automation.Runspaces.AuthenticationMechanism 枚举的说明，网址是 http://go.microsoft.com/fwlink/?LinkId=144382。

注意：在凭据安全服务提供程序 (CredSSP) 身份验证中，用户凭据传递到远程计算机中以进行验证，这种验证用于要求对多个资源（例如访问远程网络共享）进行验证的命令。此机制增加了远程操作的安全风险。如果远程计算机的安全受到威胁，则传递给该计算机的凭据可用于控制网络会话。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-CertificateThumbprint <string>

指定有权执行此操作的用户帐户的数字公钥证书 (X509)。输入证书的证书指纹。

证书用于基于客户端证书的身份验证。证书只能映射到本地用户帐户，而不适用于域帐户。

若要获取证书指纹，请在 Windows PowerShell Cert: 驱动器中使用 Get-Item 或 Get-ChildItem 命令。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-ComputerName <string>

启动与指定的远程计算机间的交互式会话。只输入一个计算机名称。默认值为本地计算机。

键入一台或多台远程计算机的 NetBIOS 名称、IP 地址或完全限定的域名。也可通过管道将计算机名称传送给 Enter-PSSession。

若要在 ComputerName 参数的值中使用 IP 地址，命令必须包括 Credential 参数。另外，必须为计算机配置 HTTPS 传输，或者必须在本地计算机上的 WinRM TrustedHosts 列表中包含远程计算机的 IP 地址。有关将计算机名称添加到 TrustedHosts 列表的说明，请参阅 about_Remote_Troubleshooting 中的“如何将计算机添加到受信任主机列表中”。

注意：在 Windows Vista 以及更高版本的 Windows 中，要在 ComputerName 参数的值中包含本地计算机，必须使用“以管理员身份运行”选项启动 Windows PowerShell。

是否为必需？ | true
位置？ | 1
默认值 |
是否接受管道输入？ | true (ByValue, ByPropertyName)
是否接受通配符？ | false

-ConfigurationName <string>

指定用于交互式会话的会话配置。

输入会话配置的配置名称或完全限定的资源 URI。如果只指定配置名称，那么将在该名称前面添加以下架构 URI：http://schemas.microsoft.com/powershell。

会话的会话配置位于远程计算机上。如果远程计算机上不存在指定的会话配置，命令会失败。

默认值为本地计算机上的 $PSSessionConfigurationName 首选项变量的值。如果未设置此首选项变量，则默认为 Microsoft.PowerShell。有关详细信息，请参阅 about_Preference_Variables。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | true (ByPropertyName)
是否接受通配符？ | false

-ConnectionURI <Uri>

指定定义交互式会话的连接终结点的统一资源标识符 (URI)。URI 必须完全限定。

此字符串的格式如下：

<Transport>://<ComputerName>:<Port>/<ApplicationName>

默认值如下：

http://localhost:80/WSMAN

URI 的 Transport 段的有效值为 HTTP 和 HTTPS。如果未指定 ConnectionURI，则可以使用 UseSSL、ComputerName、Port 和 ApplicationName 参数指定 URI 值。

如果目标计算机将连接重定向到另一个 URI，Windows PowerShell 将阻止重定向，除非您在命令中使用了 AllowRedirection 参数。

是否为必需？ | false
位置？ | 2
默认值 |
是否接受管道输入？ | true (ByPropertyName)
是否接受通配符？ | false

-Credential <PSCredential>

指定有权执行此操作的用户帐户。默认值为当前用户。

键入用户名，如“User01”、“Domain01\User01”或“User@Domain.com”，或输入 PSCredential 对象，如 Get-Credential cmdlet 返回的一个 PSCredential 对象。

键入用户名时，将会提示您键入密码。

是否为必需？ | false
位置？ | named
默认值 | Current user
是否接受管道输入？ | true (ByPropertyName)
是否接受通配符？ | false

-Id <int>

指定现有会话的 ID。Enter-PSSession 使用指定的会话进行交互式会话。

要查找某个会话的 ID，请使用 Get-PSSession cmdlet。

是否为必需？ | false
位置？ | 1
默认值 |
是否接受管道输入？ | true (ByPropertyName)
是否接受通配符？ | false

-InstanceId <Guid>

指定现有会话的实例 ID。Enter-PSSession 使用指定的会话进行交互式会话。

实例 ID 即为 GUID。要查找某个会话的实例 ID，请使用 Get-PSSession cmdlet。也可使用 Session、Name 或 ID 参数指定一个现有会话。此外，还可以使用 ComputerName 参数启动一个临时会话。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | true (ByPropertyName)
是否接受通配符？ | false

-Name <string>

指定现有会话的友好名称。Enter-PSSession 使用指定的会话进行交互式会话。

如果指定的名称与多个会话匹配，该命令会失败。也可使用 Session、InstanceID 或 ID 参数指定一个现有会话。此外，还可以使用 ComputerName 参数启动一个临时会话。

若有为会话建立友好名称，请使用 New-PSSession cmdlet 的 Name 参数。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | true (ByPropertyName)
是否接受通配符？ | false

-Port <int>

指定远程计算机上用于此命令的网络端口。默认值为端口 80（HTTP 端口）。

使用备用端口之前，必须将远程计算机上的 WinRM 侦听器配置为侦听该端口。使用下面的命令配置该侦听器：

1. winrm delete winrm/config/listener?Address=*+Transport=HTTP

2. winrm create winrm/config/listener?Address=*+Transport=HTTP @{Port="<port-number>"}

除非确有必要，否则不要使用 Port 参数。命令中的端口设置应用于运行该命令的所有计算机或会话。备用端口设置可能使该命令无法在所有计算机上运行。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Session <PSSession>

指定用于交互式会话的 Windows PowerShell 会话 (PSSession)。此参数获取一个会话对象。还可使用 Name、InstanceID 或 ID 参数指定一个 PSSession。

输入包含会话对象的变量或者用来创建或获取会话对象的命令，如 New-PSSession 或 Get-PSSession 命令。也可以通过管道将会话传送给 Enter-PSSession。使用此参数只能提交一个 PSSession。如果输入的变量包含多个 PSSession，该命令会失败。

使用 Exit-PSSession 或 EXIT 关键字时，交互式会话会结束，但已创建的 PSSession 仍旧开放，可供使用。

是否为必需？ | false
位置？ | 1
默认值 |
是否接受管道输入？ | true (ByValue, ByPropertyName)
是否接受通配符？ | true

-SessionOption <PSSessionOption>

为会话设置高级选项。输入使用 New-PSSessionOption cmdlet 创建的 SessionOption 对象。

这些选项的默认值由 $PSSessionOption 首选项变量的值（如果设置了该变量）确定。否则，会话使用系统默认值。

有关会话选项（包括默认值）的说明，请参阅 New-PSSessionOption。有关 $PSSessionOption 首选项变量的信息，请参阅 about_Preference_Variables。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-UseSSL

使用安全套接字层 (SSL) 协议来建立与远程计算机的连接。默认情况下，不使用 SSL。

WS-Management 加密通过网络传输的所有 Windows PowerShell 内容。UseSSL 是一种额外的保护措施，它通过 HTTPS 连接而不是 HTTP 连接来发送数据。

如果使用此参数，但 SSL 在用于此命令的端口上不可用，命令将失败。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

<CommonParameters>

此 cmdlet 支持通用参数：-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。有关详细信息，请参阅 about_Commonparameters.

输入和输出

输入类型是指可通过管道传递给 cmdlet 的对象的类型。返回类型是指 Cmdlet 所返回对象的类型。

输入 | System.String or System.Management.Automation.Runspaces.PSSession 可以通过管道将计算机名称（字符串）或会话对象传递给 Enter-PSSession。
输出 | None 该 cmdlet 不返回任何输出。

说明

-- 要连接到一台远程计算机，您必须属于该远程计算机上 Administrators 组的成员。

-- 在 Windows Vista 以及更高版本的 Windows 上，要在本地计算机上启动一个交互式会话，您必须使用“以管理员身份运行”选项启动 Windows PowerShell。

-- 使用 Enter-PSSession 时，远程计算机上您的用户配置文件用于交互式会话。远程用户配置文件中的命令（包括添加 Windows PowerShell 管理单元的命令和更改命令提示符的命令）会在远程提示符显示之前运行。

-- Enter-PSSession 对交互式会话使用本地计算机上的 UI 区域性设置。要确定本地 UI 区域性，请使用 $UICulture 自动变量。

-- Enter-PSSession 需要 Get-Command、Out-Default 和 Exit-PSSession cmdlet。如果远程计算机上的会话配置中不包括这些 cmdlet，Enter-PSSession 命令会失败。

-- 与 Invoke-Command（在将命令发送到远程计算机前会对其进行分析和解释）不同，Enter-PSSession 不对命令进行解释而直接将其发送到远程计算机。

示例 1

C:\PS>Enter-PSSession

LocalHost\PS>

说明
-----------
此命令在本地计算机上启动一个交互式会话。命令提示符会改变以指示现在正在一个不同的会话中运行命令。

输入的命令在新的会话中运行，命令结果会以文本形式返回到默认会话。

示例 2

C:\PS>enter-pssession -computer Server01

Server01\PS> get-process powershell > C:\ps-test\process.txt

Server01\PS> exit-pssession
C:\PS>

C:\PS> dir C:\ps-test\process.txt
Get-ChildItem : Cannot find path 'C:\ps-test\process.txt' because it does not exist.
At line:1 char:4
+ dir <<<<  c:\ps-test\process.txt

说明
-----------
此命令说明如何工作在与远程计算机建立的交互式会话中。

第一条命令使用 Enter-PSSession cmdlet 启动一个与远程计算机 Server01 的交互式会话。会话启动时，命令提示符变为包括该计算机名称。

第二条命令获取 PowerShell 进程并将输出重定向到 Process.txt 文件。该命令提交到远程计算机，并且 Process.txt 文件也保存在远程计算机上。

第三条命令使用 Exit 关键字来结束交互式会话并关闭连接。

第四条命令确认 Process.txt 文件位于远程计算机上。在本地计算机上运行 Get-ChildItem（“dir”）命令无法找到该文件。

示例 3

C:\PS>$s = new-pssession -computername Server01

C:\PS> Enter-PSSession -session $s

Server01\PS>

说明
-----------
这些命令使用 Enter-PSSession 的 Session 参数在现有的 Windows PowerShell 会话 (PSSession) 中运行交互式会话。

示例 4

C:\PS>Enter-PSSession -computername Server01 -port 90 -credential domain01\user01

Server01\PS>

说明
-----------
此命令启动与 Server01 计算机的交互式会话。它使用 Port 参数指定端口，使用 Credential 参数指定有权连接到远程计算机的用户的帐户。

示例 5

C:\PS>Enter-PSSession -computername Server01

Server01:\PS> Exit-PSSession

C:\PS>

说明
-----------
此示例说明如何启动和停止一个交互式会话。第一条命令使用 Enter-PSSession cmdlet 启动了一个与计算机 Server01 的交互式会话。

第二条命令使用 Exit-PSSession cmdlet 来结束会话。也可使用 Exit 关键字来结束该交互式会话。Exit-PSSession 和 Exit 具有相同的效果。

另请参阅

  • about_PSSessions
  • about_Remote
  • New-PSSession
  • Get-PSSession
  • Exit-PSSession
  • Remove-PSSession
  • Invoke-Command


Exit-PSSession

结束与远程计算机的交互式会话。

语法

Exit-PSSession [<CommonParameters>]

说明

Exit-PSSession cmdlet 结束通过使用 Enter-PSSession 启动的交互式会话。

也可使用 Exit 关键字来结束交互式会话。这与使用 Exit-PSSession 具有相同的效果。

参数

<CommonParameters>

此 cmdlet 支持通用参数：-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。有关详细信息，请参阅 about_Commonparameters.

输入和输出

输入类型是指可通过管道传递给 cmdlet 的对象的类型。返回类型是指 Cmdlet 所返回对象的类型。

输入 | None 不能通过管道将对象传递给 Exit-PSSession。
输出 | None 此 cmdlet 不返回任何输出。

说明

此 cmdlet 只接受通用参数。

示例 1

C:\PS>Enter-PSSession -computername Server01

Server01\PS> Exit-PSSession

C:\PS>

说明
-----------
这些命令启动然后停止一个与远程计算机 Server01 的交互式会话。

示例 2

C:\PS>$s = new-pssession -computername Server01

C:\PS> Enter-PSSession -session $s

Server01\PS> Exit-PSSession

C:\PS> $s

Id Name            ComputerName    State    ConfigurationName
-- ----            ------------    -----    -----------------
1  Session1        Server01        Opened   Microsoft.PowerShell

说明
-----------
这些命令启动并停止与计算机 Server01 的交互式会话，该计算机使用 Windows PowerShell 会话 (PSSession)。

由于该交互式会话是使用 Windows PowerShell 会话 (PSSession) 启动的，因此在交互式会话结束时，PSSession 仍然可用。如果使用了 ComputerName 参数，Enter-PSSession 将创建一个随着交互式会话结束而关闭的临时会话。

第一条命令使用 New-PSSession cmdlet 在 Server01 计算机上创建一个 PSSession。此命令将 PSSession 保存在 $s 变量中。

第二条命令使用 Enter-PSSession cmdlet 以及 $s 中的 PSSession 启动一个交互式会话。

第三条命令使用 Exit-PSSession cmdlet 来停止交互式会话。

最后一个命令显示了 $s 变量中的 PSSession。State 属性显示 PSSession 仍旧开放，可供使用。

示例 3

C:\PS>Enter-PSSession -computername Server01

Server01\PS> exit

C:\PS>

说明
-----------
此命令使用 Exit 关键字来停止通过使用 Enter-PSSession cmdlet 启动的交互式会话。Exit 关键字与 Exit-PSSession 具有相同的效果。

另请参阅

  • about_PSSessions
  • about_Remote
  • Enter-PSSession
  • New-PSSession
  • Get-PSSession
  • Remove-PSSession
  • Invoke-Command


Export-Alias

将当前定义的别名相关信息导出到文件中。

语法

Export-Alias [-Path] <string> [[-Name] <string[]>] [-Append] [-As {<Csv> | <Script>}] [-Description <string>] [-Force] [-NoClobber] [-PassThru] [-Scope <string>] [-Confirm] [-WhatIf] [<CommonParameters>]

说明

Export-Alias cmdlet 将当前会话中的别名导出到一个文件中。如果输出文件不存在，该 cmdlet 将创建此输出文件。

Export-Alias 可将特定作用域或所有作用域中的别名导出，并可生成 CSV 格式的数据或一系列 Set-Alias 命令（可将这些命令添加到会话或 Windows PowerShell 配置文件中）。

参数

-Append

将输出追加到指定的文件中，而不是覆盖该文件的现有内容。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-As <ExportAliasFormat>

确定输出格式。默认值为 CSV。

有效值包括：

-- CSV：逗号分隔的值 (CSV) 格式。

-- Script：为每个导出的别名创建 Set-Alias 命令。如果使用 .ps1 文件扩展名为输出文件命名，则可将其作为脚本来运行以向任何会话中添加别名。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Description <string>

为导出文件添加说明。说明将作为注释显示在文件顶部的标题信息之后。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Force

覆盖输出文件，即使为该文件设置了只读属性。

默认情况下，Export-Alias 不发出警告就覆盖文件，除非设置了只读或隐藏属性，或在命令中使用了 NoClobber 参数。当命令中同时使用了 NoClobber 和 Force 参数时，前者优先于后者。

Force 参数不能强制 Export-Alias 覆盖具有隐藏属性的文件。

是否为必需？ | false
位置？ | named
默认值 | Does not overwrite read-only files.
是否接受管道输入？ | false
是否接受通配符？ | false

-Name <string[]>

指定要导出的别名名称。允许使用通配符。

默认情况下，Export-Alias 导出会话或作用域中的所有别名。

是否为必需？ | false
位置？ | 2
默认值 | Export all aliases
是否接受管道输入？ | true (ByPropertyName)
是否接受通配符？ | false

-NoClobber

即使在命令中使用了 Force 参数，也阻止 Export-Alias 覆盖任何文件。

如果省略了 NoClobber 参数，则 Export-Alias 将不发出警告就覆盖现有文件，除非为文件设置了只读属性。NoClobber 优先于 Force 参数，允许 Export-Alias 覆盖具有只读属性的文件。

NoClobber 并不阻止 Append 参数向现有文件中添加内容。

是否为必需？ | false
位置？ | named
默认值 | Overwrites read-write files.
是否接受管道输入？ | false
是否接受通配符？ | false

-PassThru

返回表示已导出的别名的对象。默认情况下，此 cmdlet 将不产生任何输出。

是否为必需？ | false
位置？ | named
默认值 | No output
是否接受管道输入？ | false
是否接受通配符？ | false

-Path <string>

指定输出文件的路径。允许使用通配符，但所得到的路径值必须解析为单个文件名。此参数是必需的。

是否为必需？ | true
位置？ | 1
默认值 | 无
是否接受管道输入？ | false
是否接受通配符？ | false

-Scope <string>

指定应从其中导出别名的作用域。

有效值是“Global”、“Local”或“Script”，或者相对于当前作用域的数字（0 到作用域的数目，其中 0 是当前作用域，1 是它的父级）。默认值为“Local”。有关详细信息，请参阅 about_Scopes。

是否为必需？ | false
位置？ | named
默认值 | Local
是否接受管道输入？ | false
是否接受通配符？ | false

-Confirm

在执行命令之前提示您进行确认。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-WhatIf

描述如果执行该命令会发生什么情况（无需实际执行该命令）。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

<CommonParameters>

此 cmdlet 支持通用参数：-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。有关详细信息，请参阅 about_Commonparameters.

输入和输出

输入类型是指可通过管道传递给 cmdlet 的对象的类型。返回类型是指 Cmdlet 所返回对象的类型。

输入 | None 不能通过管道将对象传递给此 cmdlet。
输出 | None 或 System.Management.Automation.AliasInfo 如果使用 Passthru 参数，则 Export-Alias 返回一个表示该别名的 System.Management.Automation.AliasInfo 对象。否则，此 cmdlet 将不产生任何输出。

说明

只能使用 Export-Alias 导出到一个文件。

示例 1

C:\PS>export-alias -path alias.csv

说明
-----------
此命令将当前别名信息导出到当前目录下名为 Alias.csv 的文件中。

示例 2

C:\PS>export-alias -path alias.csv -noclobber

说明
-----------
此命令将当前会话中的别名导出到名为 Alias.csv 的文件中。

由于指定了 NoClobber 参数，所以，如果当前目录下已存在 Alias.csv 文件，则该命令会失败。

示例 3

C:\PS>export-alias -path alias.csv -append -description "Appended Aliases" -force

说明
-----------
该命令将当前会话中的别名附加到名为 Alias.csv 的文件中。

该命令使用 Description 参数为文件顶部的注释添加说明。

该命令还使用 Force 参数来覆盖任何现有的 Alias.csv 文件，即使它们具有只读属性。

示例 4

C:\PS>export-alias -path alias.ps1 -as script

C:\PS> add-content -path $profile -value (get-content alias.ps1)

C:\PS> $s = new-pssession -computername Server01
C:\PS> invoke-command -session $s -filepath .\alias.ps1

说明
-----------
此示例演示了如何使用 Export-Alias 生成的脚本文件格式。

第一条命令将会话中的别名导出到 Alias.ps1 文件中。它使用具有 Script 值的 As 参数来为每个别名生成包含 Set-Alias 命令的文件。

第二条命令将 Alias.ps1 文件中的别名添加到 CurrentUser-CurrentHost 配置文件中。（配置文件的路径保存在 $profile 变量中。）该命令使用 Get-Content cmdlet 从 Alias.ps1 文件中获取别名，然后 Add-Content cmdlet 将别名添加到配置文件中。有关详细信息，请参阅 about_Profiles。

第三和第四条命令将 Alias.ps1 文件中的别名添加到 Server01 计算机中的远程会话中。第三条命令使用 New-PSSession cmdlet 来创建会话。第四条命令使用 Invoke-Command cmdlet 的 FilePath 参数来在新会话中运行 Alias.ps1 文件。

另请参阅

  • Import-Alias
  • Get-Alias
  • New-Alias
  • Set-Alias


Export-Clixml

创建对象的基于 XML 的表示形式并将其存储在文件中。

语法

Export-Clixml [-Path] <string> -InputObject <psobject> [-Depth <int>] [-Encoding <string>] [-Force] [-NoClobber] [-Confirm] [-WhatIf] [<CommonParameters>]

说明

Export-Clixml cmdlet 创建对象的基于 XML 的表示形式并将其存储在文件中。随后，可以使用 Import-CLIXML cmdlet 基于该文件的内容来重新创建保存的对象。

除 Export-Clixml 将所得到的 XML 存储在文件中以外，此 cmdlet 类似于 ConvertTo-XML。ConvertTo-XML 返回 XML，因此您可在 Windows PowerShell 中继续处理它。

参数

-Depth <int>

指定包含在 XML 表示形式中的被包含对象的级别数。默认值为 2。

可以将 Types.ps1xml 文件中对象类型的默认值覆盖。有关详细信息，请参阅 about_Types.ps1xml。

是否为必需？ | false
位置？ | named
默认值 | 2
是否接受管道输入？ | false
是否接受通配符？ | false

-Encoding <string>

为目标文件指定编码类型。有效值包括 ASCII、UTF8、UTF7、UTF32、Unicode、BigEndianUnicode、Default 和 OEM。默认值为 UTF8。

是否为必需？ | false
位置？ | named
默认值 | UTF8
是否接受管道输入？ | false
是否接受通配符？ | false

-Force

可导致 cmdlet 清除输出文件的只读属性（如果需要）。在该命令完成后，cmdlet 将尝试重置只读属性。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-InputObject <psobject>

指定要转换的对象。输入一个包含对象的变量，或键入可获取对象的命令或表达式。也可将对象通过管道传递至 Export-Clixml。

是否为必需？ | true
位置？ | named
默认值 |
是否接受管道输入？ | true (ByValue)
是否接受通配符？ | false

-NoClobber

确保 cmdlet 不会覆盖现有文件的内容。默认情况下，如果指定的路径中存在同名文件，则 Export-Clixml 将覆盖该文件，而不会发出警告。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Path <string>

指定对象的 XML 表示形式要存储到其中的文件的路径。

是否为必需？ | true
位置？ | 1
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Confirm

在执行命令之前提示您进行确认。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-WhatIf

描述如果执行该命令会发生什么情况（无需实际执行该命令）。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

<CommonParameters>

此 cmdlet 支持通用参数：-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。有关详细信息，请参阅 about_Commonparameters.

输入和输出

输入类型是指可通过管道传递给 cmdlet 的对象的类型。返回类型是指 Cmdlet 所返回对象的类型。

输入 | System.Management.Automation.PSObject 可以通过管道将任何对象传递给 Export-Clixml。
输出 | System.IO.FileInfo Export-Clixml 将创建一个包含 XML 的文件。

示例 1

C:\PS>"This is a test" | export-clixml sample.xml

说明
-----------
此命令将创建存储字符串表示形式的 XML 文件，例如“This is a test”。

示例 2

C:\PS>get-acl C:\test.txt | export-clixml -Path fileacl.xml

C:\PS> $fileacl = import-clixml fileacl.xml

说明
-----------
此示例演示了如何将对象导出到 XML 文件中，然后通过从文件中导入 XML 来创建对象。

第一条命令使用 Get-ACL cmdlet 来获取 Test.txt 文件的安全描述符。它使用管道运算符将安全描述符传递至 Export-Clixml，后者将对象的基于 XML 的表示形式存储在名为 FileACL.xml 的文件中。

第二条命令使用 Import-Clixml cmdlet 基于 FileACL.xml 文件中的 XML 创建对象。然后，它将对象保存在 $FileAcl 变量中。

另请参阅

  • Import-Clixml
  • ConvertTo-XML
  • Export-CSV
  • ConvertTo-Html


Export-Console

将当前会话中管理单元的名称导出到一个控制台文件。

语法

Export-Console [[-Path] <string>] [-Force] [-NoClobber] [-Confirm] [-WhatIf] [<CommonParameters>]

说明

Export-Console cmdlet 将当前会话中 Windows PowerShell 管理单元的名称导出到一个 Windows PowerShell 控制台文件 (.psc1) 中。可以使用此 cmdlet 保存管理单元以便用在将来的会话中。

若要将 .psc1 控制台文件中的管理单元添加到一个会话中，请通过使用 Cmd.exe 或其他 Windows PowerShell 会话，在命令行启动 Windows PowerShell (Powershell.exe)，然后使用 Powershell.exe 的 PSConsoleFile 参数指定该控制台文件。

有关 Windows PowerShell 管理单元的详细信息，请参阅 about_PSSnapins。

参数

-Force

在不提示的情况下覆盖控制台文件中的数据，即使该文件具有只读属性也是如此。命令完成后，只读属性将更改并且不会重置。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-NoClobber

不覆盖现有控制台文件或替换该文件的内容。默认情况下，如果指定的路径中已有文件，则 Export-Console 将覆盖该文件，而不会发出警告。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Path <string>

指定控制台文件 (*.psc1) 的路径和文件名。输入路径（可选）和名称。不允许使用通配符。

如果只键入文件名，Export-Console 将在当前目录中创建一个具有该名称和“.psc1”文件扩展名的文件。

除非已使用 PSConsoleFile 参数打开了 Windows PowerShell 或在当前会话期间导出了控制台文件，否则此参数是必需的。在使用 NoClobber 参数防止当前控制台文件被覆盖时也会用到此参数。

如果省略此参数，则 Export-Console 将覆盖或替换最近在此会话中使用的控制台文件的内容。最近使用的控制台文件的路径存储在 $ConsoleFileName 自动变量的值中。有关详细信息，请参阅 about_Automatic_Variables。

是否为必需？ | false
位置？ | 1
默认值 |
是否接受管道输入？ | true (ByValue, ByPropertyName)
是否接受通配符？ | false

-Confirm

在执行命令之前提示您进行确认。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-WhatIf

描述如果执行该命令会发生什么情况（无需实际执行该命令）。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

<CommonParameters>

此 cmdlet 支持通用参数：-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。有关详细信息，请参阅 about_Commonparameters.

输入和输出

输入类型是指可通过管道传递给 cmdlet 的对象的类型。返回类型是指 Cmdlet 所返回对象的类型。

输入 | System.String 可以通过管道将路径字符串传递给 Export-Console。
输出 | System.IO.FileInfo Export-Console 创建一个包含导出的别名的文件。

说明

使用控制台文件 (.psc1) 启动会话时，控制台文件的名称自动存储在 $ConsoleFileName 自动变量中。当使用 Export-Console 的 Path 参数指定一个新的控制台文件时，$ConsoleFileName 的值也会相应地更新。如果没有使用控制台文件，$ConsoleFileName 将没有值 ($null)。

若要在新会话中使用 Windows PowerShell 控制台文件，请使用以下语法启动 Windows PowerShell：

“powershell.exe -PsConsoleFile <ConsoleFile>.psc1”。

还可以将 Add-PSSnapin 命令添加到 Windows PowerShell 配置文件中，从而保存 Windows PowerShell 管理单元以供将来的会话使用。有关详细信息，请参阅 about_Profiles。

示例 1

C:\PS>export-console -path $pshome\Consoles\ConsoleS1.psc1

说明
-----------
此命令将当前会话中 Windows PowerShell 管理单元的名称导出到 Windows PowerShell 安装目录 $pshome 的 Consoles 子目录内的 ConsoleS1.psc1 文件中。

示例 2

C:\PS>export-console

说明
-----------
此命令将当前会话中 Windows PowerShell 管理单元的名称导出到最近在当前会话中使用的 Windows PowerShell 控制台文件中。此命令会覆盖先前的文件内容。

如果在当前会话期间尚未导出过控制台文件，则系统将提示您需要相应权限才能继续操作，然后提示您输入文件名。

示例 3

C:\PS>add-pssnapin NewPSSnapin

C:\PS> export-console -path NewPSSnapinConsole.psc1

C:\PS> powershell.exe -PsConsoleFile NewPsSnapinConsole.psc1

说明
-----------
这些命令会将 NewPSSnapin Windows PowerShell 管理单元添加到当前会话，将当前会话中 Windows PowerShell 管理单元的名称导出到一个控制台文件，然后使用该控制台文件启动 Windows PowerShell 会话。

第一条命令使用 Add-PSSnapin cmdlet 将 NewPSSnapin 管理单元添加到当前会话。只能添加已在系统中注册的 Windows PowerShell 管理单元。

第二条命令将 Windows PowerShell 管理单元名称导出到 NewPSSnapinConsole.psc1 文件中。

第三条命令使用 NewPSSnapinConsole.psc1 文件启动 Windows PowerShell。因为该控制台文件包含 Windows PowerShell 管理单元名称，所以该管理单元中的 cmdlet 和提供程序在当前会话中可用。

示例 4

C:\PS>export-console -path Console01

C:\PS> notepad console01.psc1

<?xml version="1.0" encoding="utf-8"?>
<PSConsoleFile ConsoleSchemaVersion="1.0">
  <PSVersion>2.0</PSVersion>
  <PSSnapIns>
    <PSSnapIn Name="NewPSSnapin" />
  </PSSnapIns>
</PSConsoleFile>

说明
-----------
此命令将当前会话中的 Windows PowerShell 管理单元的名称导出到当前目录下的 Console01.psc1 文件中。

第二条命令使用记事本显示 Console01.psc1 文件的内容。

示例 5

C:\PS>powershell.exe -PSConsoleFile Console01.psc1

C:\PS> add-pssnapin MySnapin

C:\PS> export-console NewConsole.psc1

C:\PS> $consolefilename

C:\PS> add-pssnapin SnapIn03

C:\PS> export-console

说明
-----------
此示例说明在使用不带 Path 参数值的 Export-Console 的情况下，如何使用 $ConsoleFileName 自动变量来确定将更新的控制台文件。

第一条命令使用 PowerShell.exe 的 PSConsoleFile 参数来打开具有 Console01.psc1 文件的 Windows PowerShell。

第二条命令使用 Add-PSSnapin cmdlet 将 MySnapin Windows PowerShell 管理单元添加到当前会话中。

第三条命令使用 Export-Console cmdlet 将会话中所有 Windows PowerShell 管理单元的名称导出到 NewConsole.psc1 文件中。

第四条命令使用 $ConsoleFileName 参数来显示最近使用的控制台文件。示例输出显示 NewConsole.ps1 是最近使用的文件。

第五条命令将 SnapIn03 添加到当前控制台中。

第六条命令使用不带 Path 参数的 ExportConsole cmdlet。此命令将当前会话中所有 Windows PowerShell 管理单元的名称导出到最近使用的文件 NewConsole.psc1 中。

另请参阅

  • Add-PSSnapin
  • Get-PSSnapin
  • Remove-PSSnapin


Export-Counter

Export-Counter cmdlet 获取 PerformanceCounterSampleSet 对象并将它们导出为计数器日志文件。

语法

Export-Counter [-Path] <string> -InputObject <PerformanceCounterSampleSet[]> [-Circular <switch>] [-FileFormat <string>] [-Force <switch>] [-MaxSize <int>] [<CommonParameters>]

说明

Export-Counter cmdlet 将性能计数器数据（PerformanceCounterSampleSet 对象）导出到二进制性能日志 (.blg)、逗号分隔值 (.csv) 或制表符分隔值 (.tsv) 格式的日志文件中。可以使用此 cmdlet 来记录或重新记录性能计数器数据。

Export-Counter 用于导出 Get-Counter 和 Import-Counter cmdlet 返回的数据。

注意：Export-Counter 只能在 Windows 7、Windows Server 2008 R2 以及更高版本的 Windows 上运行。

参数

-Circular <switch>

指示输出文件应是先进先出 (FIFO) 格式的循环日志。当包含此参数时，MaxSize 参数是必需的。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-FileFormat <string>

指定输出日志文件的输出格式。有效值为 CSV、TSV 和 BLG。默认值为 BLG。

是否为必需？ | false
位置？ | named
默认值 | BLG
是否接受管道输入？ | false
是否接受通配符？ | false

-Force <switch>

如果 Path 参数指定的位置存在一个文件，则覆盖并替换现有文件。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-InputObject <PerformanceCounterSampleSet[]>

指定要导出的计数器数据。输入包含数据的变量或者用来获取数据的命令，例如 Get-Counter 或 Import-Counter 命令。

是否为必需？ | true
位置？ | named
默认值 |
是否接受管道输入？ | true (ByValue)
是否接受通配符？ | false

-MaxSize <int>

指定输出文件的最大大小。

如果指定了 Circular 参数，则当日志文件达到指定的最大大小时，将在添加较新项目的同时删除最旧的项目。如果未指定 Circular 参数，则当日志文件达到指定的最大大小时，不会添加任何新数据，并且 cmdlet 会生成非终止错误。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Path <string>

指定输出文件的路径和文件名。输入本地计算机上的相对或绝对路径，或远程计算机的通用命名约定 (UNC) 路径，例如 \\Computer\Share\file.blg。此参数是必需的。

注意：文件格式由 FileFormat 参数值决定，而不是由路径中的文件扩展名决定。

是否为必需？ | true
位置？ | 2
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

<CommonParameters>

此 cmdlet 支持通用参数：-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。有关详细信息，请参阅 about_Commonparameters.

输入和输出

输入类型是指可通过管道传递给 cmdlet 的对象的类型。返回类型是指 Cmdlet 所返回对象的类型。

输入 | Microsoft.PowerShell.Commands.GetCounter.PerformanceCounterSampleSet 可以将 Get-Counter 或 Import-Counter 中的性能计数器数据通过管道传送到 Export-Counter。
输出 | 无

说明

日志文件生成器要求所有输入对象具有相同的计数器路径并且对象按时间顺序升序排列。

第一个输入对象的计数器类型和路径决定日志文件中记录的属性。如果其他输入对象的记录的属性没有值，则属性字段将为空。如果对象具有未记录的属性值，则将忽略额外的属性值。

性能监视器可能无法读取 Export-Counter 生成的所有日志。例如，性能监视器要求所有对象具有相同的路径并且按相同时间间隔分隔所有对象。

Import-Counter cmdlet 没有 ComputerName 参数。但是，如果已对计算机进行相应配置以进行 Windows PowerShell 远程处理，则可以使用 Invoke-Command cmdlet 来对远程计算机运行 Import-Counter 命令。

示例 1

C:\PS># Export-Counter

说明
-----------
此命令将计数器数据导出到 .blg 文件中。

此命令使用 Get-Counter cmdlet 来收集处理器时间数据。它使用管道运算符 (|) 将数据发送到 Export-Counter cmdlet。Export-Counter 命令使用 Path 变量来指定输出文件。

C:\PS> get-counter "\Processor(*)\% Processor Time" -max 50 | export-counter -path $home\counters.blg

因为数据集可能会非常大，所以此命令通过管道将数据发送到 Export-Counter。如果数据保存在变量中，则此命令可能会使用过多的内存量。

示例 2

C:\PS># Export-Counter

说明
-----------
这些命令将计数器数据的 CSV 文件转换为 BLG 格式。

第一个命令使用内置 Windows PowerShell 转换功能将值 1 千兆字节 (GB) 以字节为单位存储在 $1GBinBytes 变量中。当键入一个后跟 K（千字节）、MB（兆字节）或 GB 的值时，Windows PowerShell 将以字节为单位返回该值。

C:\PS> $1GBinBytes = 1GB

第二个命令使用 Import-Counter cmdlet 从 Threads.csv 文件中导入性能计数器数据。此示例假定此文件是以前使用 Export-Counter cmdlet 导出的。

管道运算符 (|) 将导入的数据发送给 Export-Counter cmdlet。此命令使用 Path 参数来指定输出文件的位置。它使用 Circular 和 MaxSize 参数来指示 Export-Counter 创建在达到 1 GB 时进行返转的循环日志。

C:\PS> import-counter threads.csv | export-counter -path threadtest.blg -circular -maxsize $1GBinBytes

示例 3

C:\PS># Export-Counter

说明
-----------
此示例演示如何从远程计算机获取性能计数器数据并将数据保存在远程计算机上的文件中。

第一个命令使用 Get-Counter cmdlet 来从远程计算机 Server01 收集工作集计数器数据。此命令将数据保存在 $c 变量中。

C:\PS> $c = get-counter -computername Server01 -counter "\Process(*)\Working Set - Private" -maxSamples 20

第二个命令使用管道运算符 (|) 将 $c 中的数据发送给 Export-Counter cmdlet，后者将数据保存在 Server01 计算机上 Perf 共享中的 Workingset.blg 文件中。

C:\PS> $c | export-counter -path \\Server01\Perf\WorkingSet.blg

示例 4

C:\PS># Export-Counter

说明
-----------
此示例演示如何使用 Import-Counter 和 Export-Counter cmdlet 来重新记录现有数据。

第一个命令使用 Import-Counter cmdlet 从 DiskSpace.blg 日志中导入性能计数器数据。它将数据保存在 $all 变量中。此文件包含企业中 200 多台远程计算机上的“LogicalDisk\% Free Space”计数器的样本。

C:\PS> $all = import-counter DiskSpace.blg

第二个命令使用 $all 中的样本集对象的 CounterSamples 属性和 Where-Object cmdlet（别名为“where”）来选择 CookedValues 小于 15 (%) 的对象。此命令将结果保存在 $lowSpace 变量中。

C:\PS> $lowSpace = $all.countersamples | where {$_.cookedvalues -lt 15}

第三个命令使用管道运算符 (|) 将 $lowSpace 变量中的数据发送给 Export-Counter cmdlet。此命令使用 path 变量来指示应将所选数据记录在 LowDiskSpace.blg 文件中。

C:\PS> $lowSpace | export-counter -path LowDiskSpace.blg

另请参阅

  • Get-Counter
  • Import-Counter


Export-CSV

将 Microsoft .NET Framework 对象转换为一系列以逗号分隔的、长度可变的 (CSV) 字符串，并将这些字符串保存到一个 CSV 文件中。

语法

Export-CSV [[-Delimiter] <char>] [-Path] <string> -InputObject <psobject> [-Encoding <string>] [-Force] [-NoClobber] [-NoTypeInformation] [-Confirm] [-WhatIf] [<CommonParameters>]

Export-CSV [-UseCulture] [-Path] <string> -InputObject <psobject> [-Encoding <string>] [-Force] [-NoClobber] [-NoTypeInformation] [-Confirm] [-WhatIf] [<CommonParameters>]

说明

Export-CSV cmdlet 创建一个长度可变的 CSV 文件，该文件表示所提交的对象。

然后，可使用 Import-CSV cmdlet 基于文件中的 CSV 字符串重新创建对象。所得到的对象是原始对象的 CSV 版本，这些对象由属性值的字符串表示形式组成，且不含方法。

也可使用 ConvertTo-CSV 和 ConvertFrom-CSV cmdlet 将 .NET Framework 对象转换为 CSV 字符串（或将 CSV 字符串转换为 .NET Framework 对象）。Export-CSV 与 ConvertTo-CSV 相同，区别是它将 CSV 字符串保存在文件中。

可使用 Export-CSV cmdlet 的参数来指定逗号以外的分隔符，或指示 Export-CSV 使用当前区域性的默认分隔符。

当向 Export-CSV 提交多个对象时，Export-CSV 基于所提交的第一个对象的属性来组织文件。如果其余对象不具有所指定的属性之一，则该对象的属性值为 null，即用两个相连的逗号表示。如果其余对象具有附加属性，则在文件中不会包括这些属性。

有关详细信息，请参阅 Export-CSV 和“注释”部分。

参数

-Delimiter <char>

指定分隔符以分隔属性值。默认值为逗号 (,)。输入字符，例如冒号 (:)。若要指定分号 (;)，请将它括在引号内。

是否为必需？ | false
位置？ | 2
默认值 | , (comma)
是否接受管道输入？ | false
是否接受通配符？ | false

-Encoding <string>

为导出的 CSV 文件指定编码。有效值是 Unicode、UTF7、UTF8、ASCII、UTF32、BigEndianUnicode、Default 和 OEM。默认值是 ASCII。

是否为必需？ | false
位置？ | named
默认值 | ASCII
是否接受管道输入？ | false
是否接受通配符？ | false

-Force

覆盖路径中指定的文件，而不提示您进行确认。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-InputObject <psobject>

指定要作为 CSV 字符串导出的对象。请输入包含对象的变量，或者键入可获取对象的命令或表达式。也可将对象通过管道传递至 Export-CSV。

是否为必需？ | true
位置？ | named
默认值 |
是否接受管道输入？ | true (ByValue, ByPropertyName)
是否接受通配符？ | false

-NoClobber

不覆盖现有文件（替换内容）。默认情况下，如果指定的路径中存在同名文件，则 Export-CSV 将覆盖该文件，而不会发出警告。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-NoTypeInformation

忽略 CSV 文件中的类型信息。默认情况下，CSV 文件的第一行包含“#TYPE ”，后面为 .NET Framework 对象类型的完全限定名称。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Path <string>

指定 CSV 输出文件的路径。该参数是必需的。

是否为必需？ | true
位置？ | 1
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-UseCulture

使用当前区域性的列表分隔符作为项目分隔符。默认值为逗号 (,)。

该参数对于向全球用户发布的脚本而言很有用。要查找区域性的列表分隔符，请使用下面的命令：(Get-Culture).TextInfo.ListSeparator。

是否为必需？ | false
位置？ | named
默认值 | Comma
是否接受管道输入？ | false
是否接受通配符？ | false

-Confirm

在执行命令之前提示您进行确认。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-WhatIf

描述如果执行该命令会发生什么情况（无需实际执行该命令）。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

<CommonParameters>

此 cmdlet 支持通用参数：-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。有关详细信息，请参阅 about_Commonparameters.

输入和输出

输入类型是指可通过管道传递给 cmdlet 的对象的类型。返回类型是指 Cmdlet 所返回对象的类型。

输入 | System.Management.Automation.PSObject 可将任何 .NET Framework 对象通过管道传递至 Export-CSV。
输出 | System.String CSV 列表将发送至 Path 参数中指定的文件。

说明

Export-CSV cmdlet 将提交的对象转换为一系列长度可变的 CSV 字符串，并将它们保存在所指定的文本文件中。可使用 Export-CSV 将对象保存到 CSV 文件中，然后使用 Import-CSV cmdlet 基于 CSV 文件中的文本创建对象。

在 CSV 文件中，通过以逗号分隔的对象属性值列表来表示每个对象。将属性值转换为字符串（通过使用对象的 ToString() 方法），这样它们通常就可由属性值的名称来表示。Export-CSV 并不导出对象的方法。

导出文件格式如下：

-- CSV 文件的第一行包含字符串“#TYPE”，后面是该对象的 .NET Framework 类型的完全限定名称，如 #TYPE System.Diagnostics.Process。要取消显示该行，请使用 NoTypeInformation 参数。

-- CSV 文件的下一行表示列标题。它包含以逗号分隔的列表，该列表列出了第一个对象的所有属性的名称。

-- 文件的附加行由逗号分隔的列表组成，该列表列出了每个对象的属性值。

示例 1

C:\PS>get-process wmiprvse | select-object basePriority,ID,SessionID,WorkingSet | export-csv -path data.csv

说明
-----------
此命令将选择 wmiprvse 进程的一些属性并将它们导出到名为 data.csv 的 CSV 格式的文件中。

示例 2

C:\PS>get-process | export-csv processes.csv

C:\PS> get-process | export-csv processes.csv

# In processes.csv

#TYPE System.Diagnostics.Process
__NounName,Name,Handles,VM,WS,PM,NPM,Path,Company,CPU,FileVersion,...
Process,powershell,626,201666560,76058624,61943808,11960,C:\WINDOWS...
Process,powershell,257,151920640,38322176,37052416,7836,C:\WINDOWS\...

说明
-----------
该命令将表示计算机中进程的对象导出到当前目录下的 Processes.csv 文件中。由于它没有指定分隔符，因此使用逗号 (,) 来分隔文件中的字段。

示例 3

C:\PS>get-process | export-csv processes.csv -Delimiter ";"

# In processes.csv

#TYPE System.Diagnostics.Process
__NounName;Name;Handles;VM;WS;PM;NPM;Path;Company;CPU;FileVersion;...
Process;powershell;626;201666560;76058624;61943808;11960;C:\WINDOWS...
Process;powershell;257;151920640;38322176;37052416;7836;C:\WINDOWS\...

说明
-----------
该命令将表示计算机中进程的对象导出到当前目录下的 Processes.csv 文件中。它使用 Delimiter 参数来指定分号 (;)。因此，文件中的字段由分号来分隔。

示例 4

C:\PS>get-process | export-csv processes.csv -UseCulture

说明
-----------
该命令将表示计算机中进程的对象导出到当前目录下的 Processes.csv 文件中。它使用 UseCulture 参数来指示 Export-CSV 使用当前区域性的 ListSeparator 属性所指定的分隔符。

示例 5

C:\PS>get-process | export-csv processes.csv -NoTypeInformation

C:\PS> get-process | export-csv processes.csv -NoTypeInformation

# In processes.csv

__NounName,Name,Handles,VM,WS,PM,NPM,Path,Company,CPU,FileVersion,...
Process,powershell,626,201666560,76058624,61943808,11960,C:\WINDOWS...
Process,powershell,257,151920640,38322176,37052416,7836,C:\WINDOWS\...

说明
-----------
该命令将表示计算机中进程的对象导出到当前目录下的 Processes.csv 文件中。它使用 NoTypeInformation 参数来取消显示文件中的类型信息。

另请参阅

  • Import-CSV
  • ConvertTo-CSV
  • ConvertFrom-CSV


Export-FormatData

将当前会话中的格式数据保存在一个格式文件中。

语法

Export-FormatData [-Force] [-IncludeScriptBlock] [-InputObject <ExtendedTypeDefinition[]>] [-NoClobber] [-Path <string>] [<CommonParameters>]

说明

Export-FormatData cmdlet 基于当前会话中的格式设置对象来创建 Windows PowerShell 格式设置文件 (format.ps1xml)。它获取 Get-FormatData 返回的 ExtendedTypeDefinition 对象，并将它们保存在 XML 格式的文件中。

Windows PowerShell 使用格式设置文件 (format.ps1xml) 中的数据来生成会话中 Microsoft .NET Framework 对象的默认显示。可以查看和编辑格式设置文件，并使用 Update-FormatData cmdlet 将这些格式数据添加到会话中。

有关 Windows PowerShell 中格式设置文件的详细信息，请参阅 about_Format.ps1xml。

参数

-Force

覆盖现有输出文件，即使该文件具有只读属性。

是否为必需？ | false
位置？ | named
默认值 | False
是否接受管道输入？ | false
是否接受通配符？ | false

-IncludeScriptBlock

确定是否导出格式数据中的脚本块。

由于脚本块中包含代码，可能会被恶意使用，因此默认情况下不将它们导出。

是否为必需？ | false
位置？ | named
默认值 | False
是否接受管道输入？ | false
是否接受通配符？ | false

-InputObject <ExtendedTypeDefinition[]>

指定要导出的格式数据对象。输入包含对象的变量，或输入用于获取对象的命令，如 Get-FormatData 命令。也可通过管道将对象从 Get-FormatData 传递给 Export-FormatData。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | true (ByValue)
是否接受通配符？ | false

-NoClobber

阻止 cmdlet 覆盖现有文件。默认情况下，Export-FormatData 将在不发出警告的情况下覆盖文件，除非文件具有只读属性。

若要指示 Export-FormatData 覆盖只读文件，请使用 Force 参数。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Path <string>

指定输出文件的位置。输入路径（可选）和具有 format.ps1xml 文件扩展名的文件名。如果省略路径，则 Export-FormatData 将在当前目录中创建文件。

如果使用 .ps1xml 以外的文件扩展名，则 Update-FormatData cmdlet 将不会识别该文件。

如果指定现有文件，则除非文件具有只读属性，否则 Export-FormatData 将在不发出警告的情况下覆盖文件。若要覆盖只读文件，请使用 Force 参数。若要防止将文件覆盖，请使用 NoClobber 参数。

是否为必需？ | false
位置？ | named
默认值 | 无
是否接受管道输入？ | false
是否接受通配符？ | false

<CommonParameters>

此 cmdlet 支持通用参数：-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。有关详细信息，请参阅 about_Commonparameters.

输入和输出

输入类型是指可通过管道传递给 cmdlet 的对象的类型。返回类型是指 Cmdlet 所返回对象的类型。

输入 | System.Management.Automation.ExtendedTypeDefinition 可通过管道将 ExtendedTypeDefinition 对象从 Get-FormatData 传递给 Export-FormatData。
输出 | None Export-FormatData 不返回任何对象。它生成一个文件，并将该文件保存到指定路径中。

说明

若要使用任何格式设置文件（包括导出的格式设置文件），会话的执行策略必须允许运行脚本和配置文件。有关详细信息，请参阅 about_Execution_Policies。

示例 1

C:\PS>get-formatdata -typename * | export-formatdata -path allformat.ps1xml -IncludeScriptBlock

说明
-----------
此命令将会话中的所有格式数据导出到 AllFormat.ps1xml 文件中。

该命令使用 Get-FormatData cmdlet 来获取会话中的格式数据。TypeName 参数的 *（所有）的值指示该 cmdlet 获取会话中的所有数据。

该命令使用管道运算符 (|) 将格式数据从 Get-FormatData 命令发送到 Export-FormatData cmdlet，该 cmdlet 将格式数据导出到 AllFormat.ps1 文件中。

Export-FormatData 命令使用 IncludeScriptBlock 参数将格式数据中的脚本块包括在文件中。

示例 2

C:\PS>$f = get-formatdata -typename helpinfoshort

C:\PS> export-formatdata -inputObject $f -path c:\test\help.format.ps1xml -IncludeScriptBlock

说明
-----------
这些命令将 HelpInfoShort 类型的格式数据导出到 Help.format.ps1xml 文件中。

第一个命令使用 Get-FormatData cmdlet 来获取 HelpInfoShort 类型的格式数据，然后将其保存到 $f 变量中。

第二个命令使用 Export-FormatData 的 InputObject 参数来输入保存在 $f 变量中的格式数据。它还使用 IncludeScriptBlock 参数将脚本块包括在输出中。

示例 3

C:\PS>get-formatdata -typename System.Diagnostics.Process | export-FormatData -path process.format.ps1xml

C:\PS> Update-FormatData -prependPath .\process.format.ps1xml

C:\PS> get-process p*

Handles  NPM(K)  PM(K)  WS(K) VM(M)   CPU(s)    Id ProcessName
-------  ------  -----  ----- -----   ------    -- -----------
    323                                       5600 powershell
    336                                       3900 powershell_ise
    138                                       4076 PresentationFontCache

说明
-----------
此示例说明省略 Export-FormatData 命令的 IncludeScriptBlock 参数的效果。

第一个命令使用 Get-FormatData cmdlet 来获取 Get-Process cmdlet 返回的 System.Diagnostics.Process 对象的格式数据。该命令使用管道运算符 (|) 将格式数据发送到 Export-FormatData cmdlet，该 cmdlet 将格式数据导出到当前目录中的 Process.format.ps1xml 文件中。

在本示例中，Export-FormatData 命令不使用 IncludeScriptBlock 参数。

第二个命令使用 Update-FormatData cmdlet 将 Process.format.ps1xml 文件添加到当前会话中。该命令使用 PrependPath 参数来确保 Process.format.ps1xml 文件中的进程对象的格式数据位于进程对象的标准格式数据之前。

第三个命令显示了此更改的效果。该命令使用 Get-Process cmdlet 来获取名称以“P”开头的进程。输出结果表明未显示通过使用脚本块而计算出的属性值。

另请参阅

  • Get-FormatData
  • Update-FormatData


Export-ModuleMember

指定要导出的模块成员。

语法

Export-ModuleMember [[-Function] <string[]>] [-Alias <string[]>] [-Cmdlet <string[]>] [-Variable <string[]>] [<CommonParameters>]

说明

Export-ModuleMember cmdlet 指定从脚本模块 (.psm1) 文件或从使用 New-Module cmdlet 创建的动态模块中导出的模块成员（如 cmdlet、函数、变量和别名）。此 cmdlet 只可用于脚本模块文件或动态模块。

如果脚本模块中不包含 Export-ModuleMember 命令，则只导出脚本模块中的函数，而不导出变量和别名。如果脚本模块中包含一个 Export-ModuleMember 命令，则只导出在该 Export-ModuleMember 命令中指定的成员。

如果脚本模块包含多个 Export-ModuleMember 命令，则只导出在一个 Export-ModuleMember 命令中列出的成员。

还可以使用 Export-ModuleMember 导出脚本模块从其他模块导入的成员。

参数

-Alias <string[]>

指定要从脚本模块文件中导出的别名。输入别名。允许使用通配符。

是否为必需？ | false
位置？ | named
默认值 | 无
是否接受管道输入？ | true (ByPropertyName)
是否接受通配符？ | true

-Cmdlet <string[]>

指定要从脚本模块文件中导出的 cmdlet。输入 cmdlet 名称。允许使用通配符。

不能在脚本模块文件中创建 cmdlet，但可将二进制模块中的 cmdlet 导入到脚本模块中，然后重新从该脚本模块中导出这些 cmdlet。

是否为必需？ | false
位置？ | named
默认值 | 无
是否接受管道输入？ | true (ByPropertyName)
是否接受通配符？ | true

-Function <string[]>

指定要从脚本模块文件中导出的函数。输入函数名称。允许使用通配符。还可以通过管道将函数名称字符串传送给 Export-ModuleMember。

是否为必需？ | false
位置？ | 1
默认值 | 无
是否接受管道输入？ | true (ByValue, ByPropertyName)
是否接受通配符？ | true

-Variable <string[]>

指定要从脚本模块文件中导出的变量。输入变量名称（不带美元符号）。允许使用通配符。

是否为必需？ | false
位置？ | named
默认值 | 无
是否接受管道输入？ | true (ByPropertyName)
是否接受通配符？ | true

<CommonParameters>

此 cmdlet 支持通用参数：-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。有关详细信息，请参阅 about_Commonparameters.

输入和输出

输入类型是指可通过管道传递给 cmdlet 的对象的类型。返回类型是指 Cmdlet 所返回对象的类型。

输入 | System.String 可以通过管道将函数名称字符串传递给 Export-ModuleMember。
输出 | None 此 cmdlet 将不产生任何输出。

说明

要从导出成员的列表中排除某个成员，请添加一个 Export-ModuleMember 命令，使之列出所有其他成员，但忽略要排除的成员。

示例 1

C:\PS>Export-ModuleMember -function * -alias *

说明
-----------
此命令导出在脚本模块中定义的别名和函数。

为了导出别名（默认情况下不会导出别名），还必须明确地指定函数。否则，只会导出别名。

示例 2

C:\PS>Export-ModuleMember -function Get-Test, New-Test, Start-Test -alias gtt, ntt, stt

说明
-----------
此命令导出在脚本模块中定义的三个别名和三个函数。

可以使用此命令格式指定模块成员的名称。

示例 3

C:\PS>Export-ModuleMember

说明
-----------
此命令指定不导出在脚本模块中定义的成员。

此命令阻止导出模块成员，但不隐藏模块成员。用户可以读取和复制模块成员，或使用调用运算符 (&) 来调用未导出的模块成员。

示例 4

C:\PS>Export-ModuleMember -variable increment

说明
-----------
此命令只从脚本模块中导出 $increment 变量，而不会导出其他成员。

若要导出某个变量，除了导出模块中的函数之外，Export-ModuleMember 命令还必须包含所有这些函数的名称和该变量的名称。

示例 5

C:\PS># From TestModule.psm1

function new-test
    { <function code> }
export-modulemember -function new-test

function validate-test
    { <function code> }

function start-test
    { <function code> }
set-alias stt start-test
export-modulemember -function *-test -alias stt

说明
-----------
这些命令说明如何解释脚本模块 (.psm1) 文件中的多条 Export-ModuleMember 命令。

这些命令创建了三个函数和一个别名，然后导出其中两个函数和该别名。

如果没有 Export-ModuleMember 命令，将会导出全部三个函数，但不会导出别名。使用 Export-ModuleMember 命令，只导出 Get-Test 和 Start-Test 函数，并导出 STT 别名。

示例 6

C:\PS>new-module -script {function SayHello {"Hello!"}; set-alias Hi SayHello; Export-ModuleMember -alias Hi -function SayHello}

说明
-----------
此命令说明了如何在使用 New-Module cmdlet 创建的动态模块中使用 Export-ModuleMember。

在此示例中，Export-ModuleMember 用于同时导出该动态模块中的“Hi”别名和“SayHello”函数。

示例 7

C:\PS>function export
{
    param (
        [parameter(mandatory=$true)] [validateset("function","variable")] $type,
        [parameter(mandatory=$true)] $name,
        [parameter(mandatory=$true)] $value
    )
    if ($type -eq "function")
    {
        Set-item "function:script:$name" $value
        Export-ModuleMember $name
    }
    else
    {
        Set-Variable -scope Script $name $value
        Export-ModuleMember -variable $name
    }
}

export function New-Test
{
  ...
}

function helper
{
  ...
}

export variable interval 0
$interval = 2

说明
-----------
此示例包含一个名为 Export 的函数，用于声明函数或创建变量，然后为该函数或变量编写一条 Export-ModuleMember 命令。这样可以通过单个命令声明和导出函数或变量。

若要使用 Export 函数，请将其包含在脚本模块中。若要导出某一函数，请在 Function 关键字之前键入“Export”。

若要导出某一变量，请使用以下格式声明该变量并为其设置值：

    export variable <variable-name> <value>

该示例中的命令显示了正确的格式。在此示例中，只导出 New-Test 函数和 $Interval 变量。

另请参阅

  • Import-Module
  • Get-Module
  • Remove-Module
  • about_Modules


Export-PSSession

导入来自其他会话的命令，并将它们保存到 Windows PowerShell 模块中。

语法

Export-PSSession [-Session] <PSSession> [-OutputModule] <string> [[-CommandName] <string[]>] [[-FormatTypeName] <string[]>] [-AllowClobber] [-ArgumentList <Object[]>] [-CommandType {<Alias> | <Function> | <Filter> | <Cmdlet> | <ExternalScript> | <Application> | <Script> | <All>}] [-Encoding <string>] [-Force] [-Module <string[]>] [<CommonParameters>]

说明

Export-PSSession cmdlet 从本地或远程计算机上的其他 PSSession 获取 cmdlet、函数、别名和其他命令类型，并将它们保存在 Windows PowerShell 模块中。若要将来自模块的命令添加到当前会话中，请使用 Import-Module cmdlet。

Export-PSSession 与 Import-PSSession 不同，后者将命令从其他 PSSession 导入到当前会话中，而前者将命令保存到一个模块中。这些命令不会被导入到当前会话中。

若要导出命令，请先使用 New-PSSession cmdlet 来创建一个 PSSession，而该 PSSession 具有要导出的命令。然后使用 Export-PSSession cmdlet 来导出命令。默认情况下，Export-PSSession 会导出所有命令，但不导出当前会话中存在的命令，您可以使用 CommandName 参数来指定要导出的命令。

此 Export-PSSession cmdlet 使用 Windows PowerShell 的隐式远程处理功能。在将命令导入到当前会话中时，导入的命令将在原始会话中或在源计算机上的一个相似会话中隐式运行。

参数

-AllowClobber

导出指定命令，即使它们与当前会话中的命令同名。

如果导入与当前会话中的命令同名的命令，则导入的命令会隐藏或替换原始命令。有关详细信息，请参阅 about_Command_Precedence。

Export-PSSession 不会导入与当前会话中的命令同名的命令。默认行为是防止命令名发生冲突。

是否为必需？ | false
位置？ | named
默认值 | False
是否接受管道输入？ | false
是否接受通配符？ | false

-ArgumentList <Object[]>

将使用指定的参数（参数值）所得到的命令的变体导出。

例如，要将 $s 的 PSSession 中证书 (Cert:) 驱动器的 Get-Item 命令的变体导出，请键入“export-pssession -session $s -command Get-Item -argumentlist cert:”。

是否为必需？ | false
位置？ | named
默认值 | 无
是否接受管道输入？ | false
是否接受通配符？ | false

-CommandName <string[]>

仅将具有指定名称或名称模式的命令导出。允许使用通配符。使用“CommandName”或其别名“Name”。

默认情况下，Export-PSSession 导出 PSSession 中的所有命令，但与当前会话中的命令具有相同名称的命令除外。这样可以防止导入的命令隐藏或替换当前会话中的命令。若要导出所有命令（甚至是那些隐藏或替换其他命令的命令），请使用 AllowClobber 参数。

如果使用 CommandName 参数，则将不导出命令的格式设置文件，除非使用 FormatTypeName 参数。同样，如果使用 FormatTypeName 参数，则将不导出命令，除非使用 CommandName 参数。

是否为必需？ | false
位置？ | 3
默认值 | All commands in the session.
是否接受管道输入？ | false
是否接受通配符？ | true

-CommandType <CommandTypes>

仅导出指定类型的命令对象。使用“CommandType”或它的别名“Type”。

有效值包括：

-- Alias：当前会话中的所有 Windows PowerShell 别名。

-- All：所有命令类型。它与“get-command *”等效。

-- Application：位于 Path 环境变量 ($env:path) 所列路径中的所有 Windows PowerShell 文件以外的文件，包括 .txt、.exe. 和 .dll 文件。

-- Cmdlet：当前会话中的 cmdlet。默认值为“Cmdlet”。

-- ExternalScript：位于 Path 环境变量 ($env:path) 所列路径中的全部 .ps1 文件。

-- Filter and Function：所有 Windows PowerShell 函数。

-- Script：当前会话中的脚本块。

是否为必需？ | false
位置？ | named
默认值 | All commands in the session.
是否接受管道输入？ | false
是否接受通配符？ | false

-Encoding <string>

为输出文件指定编码。有效值是“Unicode”、“UTF7”、“UTF8”、“ASCII”、“UTF32”、“BigEndianUnicode”、“Default”和“OEM”。默认值为“UTF-8”。

是否为必需？ | false
位置？ | named
默认值 | UTF-8
是否接受管道输入？ | false
是否接受通配符？ | false

-Force

覆盖一个或多个现有输出文件，即使该文件具有只读属性。

是否为必需？ | false
位置？ | named
默认值 | False
是否接受管道输入？ | false
是否接受通配符？ | false

-FormatTypeName <string[]>

仅导出指定 Microsoft .NET Framework 类型的格式指令。输入类型名称。默认情况下，Export-PSSession 导出所有 .NET Framework 类型的格式指令，这些类型不在 System.Management.Automation 命名空间中。

此参数的值必须是从其中导入命令的会话中的 Get-FormatData 命令所返回的类型的名称。若要获取远程会话中的所有格式数据，请键入 *。

如果使用 FormatTypeName 参数，则将不导出命令，除非使用 CommandName 参数。

同样，如果使用 CommandName 参数，则将不导出命令的格式设置文件，除非使用 FormatTypeName 参数。

是否为必需？ | false
位置？ | 4
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Module <string[]>

仅将指定的 Windows PowerShell 管理单元和模块中的命令导出。输入管理单元和模块的名称。不允许使用通配符。

有关详细信息，请参阅 about_Pssnapins 和 Import-Module。

是否为必需？ | false
位置？ | named
默认值 | All commands in the session.
是否接受管道输入？ | false
是否接受通配符？ | false

-OutputModule <string>

指定 Export-PSSession 所创建的模块的路径（可选项）和名称。默认路径为 $home\Documents\WindowsPowerShell\Modules。此参数是必需的。

如果已存在 Export-PSSession 所创建的模块子目录或任何文件，则该命令将失败。若要覆盖现有文件，请使用 Force 参数。

是否为必需？ | true
位置？ | 2
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Session <PSSession>

指定要从中导出命令的 PSSession。输入包含会话对象的变量或者用来获取会话对象的命令，如 Get-PSSession 命令。此参数是必需的。

是否为必需？ | true
位置？ | 1
默认值 | 无
是否接受管道输入？ | false
是否接受通配符？ | false

<CommonParameters>

此 cmdlet 支持通用参数：-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。有关详细信息，请参阅 about_Commonparameters.

输入和输出

输入类型是指可通过管道传递给 cmdlet 的对象的类型。返回类型是指 Cmdlet 所返回对象的类型。

输入 | None 不能通过管道将对象传递给 Export-PSSession。
输出 | System.IO.FileInfo Export-PSSession 返回包含它所创建的模块的文件列表。

说明

Export-PSSession 依赖于 Windows PowerShell 远程处理基础结构。若要使用此 cmdlet，必须对计算机进行相应配置以进行远程处理。有关详细信息，请参阅 about_Remote_Requirements。

不能使用 Export-PSSession 来导出 Windows PowerShell 提供程序。

导出的命令在从中导出这些命令的 PSSession 中隐式运行。但是，远程运行这些命令的详细信息完全由 Windows PowerShell 进行处理。可以像运行本地命令那样运行导出的命令。

Export-Module 捕获和保存它所导出的模块中的 PSSession 的相关信息。如果在导入模块时从中导出命令的 PSSession 已关闭，并且同一台计算机上没有活动的 PSSession，则该模块中的命令尝试重新创建 PSSession。如果重新创建 PSSession 的尝试失败，则导出的命令的将不会运行。

Export-Module 捕获和保存在模块中的会话信息不包括会话选项，如在 $PSSessionOption 自动变量中指定的会话选项，或使用 New-PSSession、Enter-PSSession 或 Invoke-Command cmdlet 的 SessionOption 参数指定的会话选项。如果在导入模块时原始 PSSession 已关闭，则该模块将使用同一台计算机上的另一个 PSSession（如果存在另一个 PSSession）。若要启用导入的命令以在正确配置的会话中运行，请在导入模块之前，通过所需选项来创建 PSSession。

为了查找要导出的命令，Export-PSSession 使用 Invoke-Command cmdlet 来运行 PSSession 中的 Get-Command 命令。为了获取和保存命令的格式数据，它使用 Get-FormatData 和 Export-FormatData cmdlet。运行 Export-PSSession 命令时，您可能会看到来自 Invoke-Command、Get-Command、Get-FormatData 和 Export-FormatData 的错误消息。另外，Export-PSSession 无法从不包含 Get-Command、Get-FormatData、Select-Object 和 Get-Help cmdlet 的会话中导出命令。

Export-PSSession 使用 Write-Progress cmdlet 来显示该命令的进度。该命令正在运行时，您可能会看到进度条。

导出的命令与其他远程命令具有相同的限制（包括无法启动具有用户界面的程序，如记事本）。

因为 Windows PowerShell 配置文件不在 PSSession 中运行，所以配置文件添加到会话中的命令无法用于 Export-PSSession。若要从配置文件导出命令，请在导出命令之前使用 Invoke-Command 命令在 PSSession 中手动运行该配置文件。

Export-PSSession 创建的模块可能包含格式设置文件，即使该命令不导入格式数据。如果该命令不导入格式数据，则创建的任何格式设置文件都不包含格式数据。

示例 1

C:\PS>$s = new-pssession -computerName Server01

C:\PS> export-pssession -session $s -outputModule Server01

说明
-----------
此示例中的命令将 Server01 计算机上某个 PSSession 中的所有命令导出到本地计算机上的 Server01 模块，但与当前会话中的命令具有相同名称的命令除外。它还将导出命令的格式数据。

第一条命令在 Server01 计算机上创建一个 PSSession。第二个命令将会话中的命令和格式数据导出到 Server01 模块中。

示例 2

C:\PS>$s = new-pssession -ConnectionUri http://exchange.microsoft.com/mailbox -credential exchangeadmin01@hotmail.com -authentication negotiate

C:\PS> export-pssession -session $r -module exch* -commandname get-*, set-* -formattypename * -outputModule $pshome\Modules\Exchange -encoding ASCII

说明
-----------
这些命令将 Get 和 Set 命令从远程计算机上的 Microsoft Exchange Server 管理单元导出到本地计算机上的 $pshome\Modules 目录下的 Exchange 模块中。

通过将模块置于 $pshome\Module 目录中，计算机上的所有用户就可对它进行访问。

示例 3

C:\PS>$s = new-pssession -computerName Server01 -credential Server01\User01

C:\PS> export-pssession -session $s -outputModule TestCmdlets -type cmdlet -commandname *test* -formattypename *

C:\PS> remove-pssession $s

C:\PS> import-module TestCmdlets

C:\PS> get-help test*

C:\PS> test-files

说明
-----------
这些命令将 cmdlet 从远程计算机上的 PSSession 导出，并将它们保存在本地计算机上的一个模块中。然后，命令将 cmdlet 从模块添加到当前会话中，以便可以使用它们。

第一条命令在 Server01 计算机上创建一个 PSSession，并将它保存在 $s 变量中。

第二个命令将名称以“Test”开头的 cmdlet 从 $s 中的 PSSession 导出到本地计算机上的 TestCmdlets 模块中。

第三个命令使用 Remove-PSSession cmdlet 删除当前会话中的 $s 中的 PSSession。此命令说明 PSSession 使用从其导入的命令时无需处于活动状态。

第四个命令可在任何时候在任何会话中运行，它使用 Import-Module cmdlet 将 TestCmdlets 模块中的 cmdlet 添加到当前会话中。

第五个命令使用 Get-Help cmdlet 来获取名称以“Test”开头的 cmdlet 的帮助。将模块中的命令添加到当前会话中之后，可使用 Get-Help 和 Get-Command cmdlet 来了解这些导入的命令，就像在会话中针对任何命令使用它们一样。

第六个命令使用 Test-Files cmdlet，它从 Server01 计算机中导出并添加到会话中。

虽然并不显而易见，但 Test-Files 命令实际将在从中导入该命令的计算机上的一个远程会话中运行。Windows PowerShell 将基于存储在模块中的信息来创建会话。

示例 4

C:\PS>export-pssession -session $s -AllowClobber -outputModule AllCommands

说明
-----------
此命令将 $s 变量中 PSSession 的所有命令和所有格式数据导出到当前会话中。该命令使用 AllowClobber 参数将与当前会话中的命令具有相同名称的命令包括进来。

示例 5

C:\PS>$options = New-PSSessionOption -NoMachineProfile

C:\PS> $s = new-pssession -computername Server01 -sessionoption $options

C:\PS> export-pssession -session $s -outputModule Server01

C:\PS> remove-pssession $s

C:\PS> new-pssession -computername Server01 -sessionoption $options

C:\PS> import-module Server01

说明
-----------
此示例说明如何在从中导出命令的 PSSession 关闭时，在具有特定选项的会话中运行导出的命令。

在使用 Export-PSSession 时，它将保存其所创建的模块中的原始 PSSession 的相关信息。在导入模块时，如果原始远程会话已关闭，则该模块将使用与源计算机相连的任何打开的远程会话。

如果当前会话不包含与源计算机相连的会话，则该模块中的命令将重新建立与该计算机的会话。但是，Export-PSSession 不会保存特殊选项，如模块中通过使用 New-PSSession 的 SessionOption 参数设置的选项。

因此，如果想在具有特定选项的远程会话中运行导出的命令，则需要在导入模块之前，使用所需选项来创建远程会话。

第一个命令使用 New-PSSessionOption cmdlet 来创建 PSSessionOption 对象，并将该对象保存在 $options 变量中。

第二个命令将创建一个包含指定选项的 PSSession。该命令使用 New-PSSession cmdlet 在 Server01 计算机上创建一个 PSSession。它使用 SessionOption 参数将该选项对象提交到 $options 中。

第三个命令使用 Export-PSSession cmdlet 将 $s 中的 PSSession 的命令导出到 Server01 模块中。

第四个命令使用 Remove-PSSession cmdlet 删除 $s 变量中的 PSSession。

第五个命令使用 New-PSSession cmdlet 创建一个连接到 Server01 计算机的新 PSSession。此 PSSession 还使用 $options 变量中的会话选项。

第六个命令使用 Import-Module cmdlet 从 Server01 模块导入命令。该模块中的命令在 Server01 计算机上的 PSSession 中运行。

另请参阅

  • about_Command_Precedence
  • Import-PSSession
  • New-PSSession
  • Import-Module
  • Invoke-Command
  • about_PSSessions


ForEach-Object

针对每一组输入对象执行操作。

语法

ForEach-Object [-Process] <ScriptBlock[]> [-Begin <scriptblock>] [-End <scriptblock>] [-InputObject <psobject>] [<CommonParameters>]

说明

ForEach-Object cmdlet 对一组输入对象中的每个对象执行操作。输入对象可以以管道形式传入 cmdlet，或使用 InputObject 参数指定输入对象。

在作为 Process 参数的值提供给 cmdlet 的脚本块中描述了要执行的操作。脚本块可以包含任何 Windows PowerShell 脚本。

在脚本块中，使用 $_ 变量表示当前输入对象。

除了使用描述要对每个输入对象执行何种操作的脚本块以外，还可以另外提供两个脚本块。一个（指定为 Begin 参数的值）运行于处理第一个输入对象之前。另一个（指定为 End 参数的值）运行于处理最后一个输入对象之后。

所有脚本块的计算结果（包括使用 Begin 和 End 指定的结果）都将传入管道。

参数

-Begin <scriptblock>

指定在处理任何输入对象之前要运行的脚本块。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-End <scriptblock>

指定在处理完所有输入对象之后要运行的脚本块。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-InputObject <psobject>

接受在 process 参数中指定的脚本块的对象。输入一个包含对象的变量，或键入可获取对象的命令或表达式。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | true (ByValue)
是否接受通配符？ | false

-Process <ScriptBlock[]>

指定应用于每个传入对象的脚本块。

是否为必需？ | true
位置？ | 1
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

<CommonParameters>

此 cmdlet 支持通用参数：-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。有关详细信息，请参阅 about_Commonparameters.

输入和输出

输入类型是指可通过管道传递给 cmdlet 的对象的类型。返回类型是指 Cmdlet 所返回对象的类型。

输入 | System.Management.Automation.PSObject 可以通过管道将任何对象传递给 ForEach-Object。
输出 | System.Management.Automation.PSObject ForEach-Object 返回的对象由输入确定。

示例 1

C:\PS>30000,56798,12432 | foreach-object -process {$_/1024}

说明
-----------
此命令接受整数数组，然后将其中每个整数除以 1024，然后显示结果。

示例 2

C:\PS>get-childitem C:\ | foreach-object -process { $_.length / 1024 }

说明
-----------
此命令检索 C: 驱动器的根目录中的文件和目录，然后返回并显示它们每一项的大小。零表示其中文件大小不可用的目录。

示例 3

C:\PS>$events = get-eventlog -logname system -newest 1000

C:\PS> $events | foreach-object -begin {get-date} -process {out-file -filepath events.txt -append -inputobject $_.message} -end {get-date}

说明
-----------
此命令从系统日志中检索 1000 个最近事件，并将它们存储在 $events 变量中。然后，通过管道将事件传递给 ForEach-Object cmdlet。Begin 参数显示当前日期和时间。接着，Process 参数使用 Out-File cmdlet 来创建名为 events.txt 的文本文件，并将每个事件的消息属性存储在该文件中。最后，在完成所有处理之后，使用 End 参数显示日期和时间。

示例 4

C:\PS>get-itemproperty -path hkcu:\Network\* | foreach-object {set-itemproperty -path $_.pspath -name RemotePath -value $_.RemotePath.ToUpper();}

说明
-----------
此命令将 HKCU:\Network 项的所有子项中 RemotePath 注册表条目的值更改为大写文本。可以使用此格式更改注册表条目值的形式或内容。

Network 项中的每个子项都表示将在登录时重新连接的映射的网络驱动器。RemotePath 项包含连接的驱动器的 UNC 路径。例如，如果将 E: 驱动器映射到 \\Server\Share，将存在 HKCU:\Network 的一个子项 E，并且 E 子项中 RemotePath 注册表条目的值将为 \\Server\Share。

该命令使用 Get-ItemProperty cmdlet 来获取 Network 项的所有子项，使用 Set-ItemProperty cmdlet 来更改每项中的 RemotePath 注册表条目的值。在 Set-ItemProperty 命令中，路径为该注册表项的 PSPath 属性的值。（这是表示该注册表项的 Microsoft .NET Framework 对象的一个属性，而不是一个注册表条目）。该命令使用 RemotePath 值的 ToUpper() 方法，前者是一个字符串 (REG_SZ)。

因为 Set-ItemProperty 更改每一项的属性，所以需要 ForEach-Object cmdlet 来访问该属性。


Format-Custom

使用自定义视图来设置输出的格式。

语法

Format-Custom [[-Property] <Object[]>] [-Depth <int>] [-DisplayError] [-Expand <string>] [-Force] [-GroupBy <Object>] [-InputObject <psobject>] [-ShowError] [-View <string>] [<CommonParameters>]

说明

Format-Custom cmdlet 将根据可选视图中的定义来设置命令输出的格式。Format-Custom 用于显示不是仅为表格或仅为列表的视图。可使用 Windows PowerShell 目录中的 *format.PS1XML 文件中定义的视图，或者可在新的 PS1XML 文件中创建自己的视图，并使用 Update-FormatData cmdlet 将它们添加到 Windows PowerShell 中。

参数

-Depth <int>

指定显示的列数。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-DisplayError

在命令行中显示错误。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Expand <string>

设置集合对象以及集合中的对象的格式。此参数用于设置支持 ICollection (System.Collections) 接口的对象的格式。默认值为 EnumOnly。

有效值包括：

-- EnumOnly：显示集合中的对象的属性。

-- CoreOnly：显示集合对象的属性。

-- Both：显示集合对象的属性以及集合中对象的属性。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Force

使 cmdlet 显示所有错误信息。与 DisplayError 或 ShowError 参数一起使用。默认情况下，当错误对象写入错误或显示流时，只显示部分错误信息。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-GroupBy <Object>

根据共享属性或值将输出结果分组显示。请输入表达式或输出的属性。

GroupBy 参数的值可以是新的计算属性。若要创建计算属性，请使用哈希表。有效键包括：

-- Name（或 Label）<字符串>

-- Expression <字符串> 或 <脚本块>

-- FormatString <字符串>

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-InputObject <psobject>

指定要设置格式的对象。请输入包含对象的变量，或者键入可获取对象的命令或表达式。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | true (ByValue)
是否接受通配符？ | false

-Property <Object[]>

指定要在屏幕上显示的对象属性及其显示顺序。允许使用通配符。

如果省略此参数，则屏幕上显示的属性取决于要显示的对象。参数名（“Property”）为可选项。不能在同一命令中使用 Property 和 View 参数。

Property 参数的值可以是新的计算属性。若要创建计算属性，请使用哈希表。有效键包括：

-- Expression <字符串> 或 <脚本块>

-- Depth <int32>

是否为必需？ | false
位置？ | 1
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-ShowError

通过管道发送错误。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-View <string>

指定可选格式或“视图”的名称。如果省略此参数，则 Format-Custom 将使用默认的自定义视图。不能在同一命令中使用 Property 和 View 参数。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

<CommonParameters>

此 cmdlet 支持通用参数：-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。有关详细信息，请参阅 about_Commonparameters.

输入和输出

输入类型是指可通过管道传递给 cmdlet 的对象的类型。返回类型是指 Cmdlet 所返回对象的类型。

输入 | System.Management.Automation.PSObject 可以通过管道将任何对象传递给 Format-Custom。
输出 | Microsoft.PowerShell.Commands.Internal.Format Format-Custom 返回表示显示的格式对象。

说明

Format-Custom 用于显示那些不是仅为表格或仅为列表的视图。若要显示可选表格视图，请使用 Format-Table。若要显示可选列表视图，请使用 Format-List。

还可以使用内置别名“fc”来引用 Format-Custom。有关详细信息，请参阅 about_Aliases。

GroupBy 参数假定对象已经过排序。在使用 Format-Custom 对对象进行分组之前，请使用 Sort-Object 对它们进行排序。

示例 1

C:\PS>get-command start-transcript | format-custom -view MyView

说明
-----------
此命令使用 MyView 视图（一种由用户创建的自定义视图）定义的格式来设置 Start-Transcript cmdlet 的相关信息的格式。若要成功运行此命令，必须首先创建新的 PS1XML 文件，定义 MyView 视图，然后使用 Update-FormatData 命令将该 PS1XML 文件添加到 Windows PowerShell 中。

示例 2

C:\PS>get-process Winlogon | format-custom

说明
-----------
此命令将设置可选自定义视图中有关 Winlogon 进程的信息的格式。由于该命令未使用 View 参数，因此 Format-Custom 将使用默认的自定义视图来设置数据的格式。


Format-List

将输出的格式设置为属性列表，其中每个属性均各占一行显示。

语法

Format-List [[-Property] <Object[]>] [-DisplayError] [-Expand <string>] [-Force] [-GroupBy <Object>] [-InputObject <psobject>] [-ShowError] [-View <string>] [<CommonParameters>]

说明

Format-List cmdlet 将命令输出的格式设置为属性列表，其中每个属性均各占一行进行显示。可使用 Format-List 将对象的全部或所选属性设置为列表格式 (format-list *) 并进行显示。

与表相比，列表中的各项具有更多可用的显示空间，所以 Windows PowerShell 可在列表中显示更多的对象属性，而且属性值被截断的可能性将更小。

参数

-DisplayError

在命令行中显示错误。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Expand <string>

设置集合对象以及集合中的对象的格式。此参数用于设置支持 ICollection (System.Collections) 接口的对象的格式。默认值为 EnumOnly。

有效值包括：

-- EnumOnly：显示集合中的对象的属性。

-- CoreOnly：显示集合对象的属性。

-- Both：显示集合对象的属性以及集合中对象的属性。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Force

使 cmdlet 显示所有错误信息。与 DisplayError 或 ShowError 参数一起使用。默认情况下，当错误对象写入错误或显示流时，只显示部分错误信息。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-GroupBy <Object>

根据共享属性或值将输出结果分组显示。请输入表达式或输出的属性。

GroupBy 参数的值可以是新的计算属性。若要创建计算属性，请使用哈希表。有效键包括：

-- Name（或 Label）<字符串>

-- Expression <字符串> 或 <脚本块>

-- FormatString <字符串>

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-InputObject <psobject>

指定要设置格式的对象。请输入包含对象的变量，或者键入可获取对象的命令或表达式。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | true (ByValue)
是否接受通配符？ | false

-Property <Object[]>

指定要在屏幕上显示的对象属性及其显示顺序。允许使用通配符。

如果省略此参数，则屏幕上显示的属性取决于要显示的对象。参数名（“Property”）为可选项。不能在同一命令中使用 Property 和 View 参数。

Property 参数的值可以是新的计算属性。若要创建计算属性，请使用哈希表。有效键包括：

-- Name（或 Label）<字符串>

-- Expression <字符串> 或 <脚本块>

-- FormatString <字符串>

是否为必需？ | false
位置？ | 1
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-ShowError

通过管道发送错误。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-View <string>

指定可选列表格式或“视图”的名称。不能在同一命令中使用 Property 和 View 参数。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

<CommonParameters>

此 cmdlet 支持通用参数：-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。有关详细信息，请参阅 about_Commonparameters.

输入和输出

输入类型是指可通过管道传递给 cmdlet 的对象的类型。返回类型是指 Cmdlet 所返回对象的类型。

输入 | System.Management.Automation.PSObject 可以通过管道将任何对象传递给 Format-List。
输出 | Microsoft.PowerShell.Commands.Internal.Format Format-List 返回表示列表的格式对象。

说明

也可使用它的内置别名“FL”来引用 Format-List。有关详细信息，请参阅 about_Aliases。

格式 cmdlet（例如 Format-List）可以排列要显示的数据，但并不实际显示它。数据可通过 Windows PowerShell 的输出功能和包含 Out 动词的 cmdlet（输出 cmdlet，如 Out-Host、Out-File 和 Out-Printer）来显示。

若未使用 format cmdlet，则 Windows PowerShell 将对要显示的每个对象应用默认格式。

GroupBy 参数假定对象已经过排序。在使用 Format-Custom 对对象进行分组之前，请使用 Sort-Object 对它们进行排序。

使用 View 参数可以指定表的可选格式。可使用 Windows PowerShell 目录中的 *.format.PS1XML 文件中定义的视图，或者可在新的 PS1XML 文件中创建自己的视图，并使用 Update-FormatData cmdlet 将它们包括在 Windows PowerShell 中。

View 参数的可选视图必须使用列表格式，否则，该命令将失败。如果可选视图为表，请使用 Format-Table。如果可选视图既不是列表也不是表，请使用 Format-Custom。

示例 1

C:\PS>get-service | format-list

说明
-----------
此命令将计算机上服务的相关信息设置为列表格式。默认情况下，将这些服务设置为表视图格式。Get-Service cmdlet 可获取表示计算机上的服务的对象。管道运算符 (|) 通过管道将结果传递给 Format-List。随后，Format-List 命令将服务信息设置为列表格式，并将其发送到默认的输出 cmdlet 以进行显示。

示例 2

C:\PS>$a = get-childitem $pshome\*.ps1xml

说明
-----------
这些命令将以列表形式显示 Windows PowerShell 目录中 PS1XML 文件的相关信息。第一条命令将获取表示该文件的对象，并将它们存储在 $a 变量中。第二个命令使用 Format-List 来设置存储在 $a 中对象的相关信息的格式。此命令使用 InputObject 参数将该变量传递给 Format-List，后者随后将已设置格式的输出发送到默认的输出 cmdlet 以进行显示。

示例 3

C:\PS>get-process | format-list -property name, basepriority, priorityclass

说明
-----------
此命令将显示计算机上每个进程的名称、基本优先级和优先级类。它使用 Get-Process cmdlet 来获取表示每个进程的对象。管道运算符 (|) 通过管道将进程对象传递给 Format-List。Format-List 将进程的格式设置为指定属性的列表。“Property”参数名为可选项，因此可将其省略。

示例 4

C:\PS>get-process winlogon | format-list -property *

说明
-----------
此命令显示 Winlogon 进程的所有属性。它使用 Get-Process cmdlet 来获取表示 Winlogon 进程的对象。管道运算符 (|) 通过管道将 Winlogon 进程对象传递给 Format-List。该命令使用 Property 参数来指定属性，并使用 * 表示所有属性。由于 Property 参数的名称为可选项，因此可将其省略，并键入命令“format-list *”。Format-List 自动将结果发送到默认的输出 cmdlet 以进行显示。


Format-Table

将输出的格式设置为表。

语法

Format-Table [[-Property] <Object[]>] [-AutoSize] [-DisplayError] [-Expand <string>] [-Force] [-GroupBy <Object>] [-HideTableHeaders] [-InputObject <psobject>] [-ShowError] [-View <string>] [-Wrap] [<CommonParameters>]

说明

Format-Table cmdlet 将命令输出的格式设置为表，表中每列显示选定的对象属性。对象类型可确定默认布局以及每列中显示的属性，但也可以使用 Property 参数来选择要查看的属性。

也可在显示对象前使用哈希表为对象添加计算属性，以及使用哈希表指定表格中的列标题。若要添加计算属性，请使用 Property 或 GroupBy 参数。

参数

-AutoSize

根据数据的宽度调整列大小和列数。默认情况下，列大小和列数由视图确定。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-DisplayError

在命令行中显示错误。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Expand <string>

设置集合对象以及集合中的对象的格式。此参数用于设置支持 ICollection (System.Collections) 接口的对象的格式。默认值为 EnumOnly。

有效值包括：

-- EnumOnly：显示集合中的对象的属性。

-- CoreOnly：显示集合对象的属性。

-- Both：显示集合对象的属性以及集合中对象的属性。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Force

使 cmdlet 显示所有错误信息。与 DisplayError 或 ShowError 参数一起使用。默认情况下，当错误对象写入错误或显示流时，只显示部分错误信息。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-GroupBy <Object>

基于属性值，将单独的表格中的排序结果进行排列。例如，可基于服务状态，使用 GroupBy 列出单独的表中的服务。

请输入表达式或输出的属性。在将输出内容发送至 Format-Table 前必须对其进行排序。

GroupBy 参数的值可以是新的计算属性。若要创建计算属性，请使用哈希表。有效键包括：

-- Name（或 Label）<字符串>

-- Expression <字符串> 或 <脚本块>

-- FormatString <字符串>

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-HideTableHeaders

省略表中的列标题。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-InputObject <psobject>

指定要设置格式的对象。输入一个包含对象的变量，或键入可获取对象的命令或表达式。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | true (ByValue)
是否接受通配符？ | false

-Property <Object[]>

指定要在屏幕上显示的对象属性及其显示顺序。键入一个或多个属性名称（用逗号分隔），或者使用哈希表显示计算属性。允许使用通配符。

如果省略此参数，则屏幕上显示的属性取决于要显示的对象。参数名（“Property”）为可选项。不能在同一命令中使用 Property 和 View 参数。

Property 参数的值可以是新的计算属性。若要创建计算属性，请使用哈希表。有效键包括：

-- Name（或 Label）<字符串>

-- Expression <字符串> 或 <脚本块>

-- FormatString <字符串>

-- Width <int32>

-- Alignment（值可以是“Left”、“Center”或“Right”）。

是否为必需？ | false
位置？ | 1
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-ShowError

通过管道发送错误。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-View <string>

指定可选表格式或“视图”的名称。不能在同一命令中使用 Property 和 View 参数。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Wrap

在下一行显示超过列宽的文本。默认情况下，超过列宽的文本将被截断。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

<CommonParameters>

此 cmdlet 支持通用参数：-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。有关详细信息，请参阅 about_Commonparameters.

输入和输出

输入类型是指可通过管道传递给 cmdlet 的对象的类型。返回类型是指 Cmdlet 所返回对象的类型。

输入 | System.Management.Automation.PSObject 可以通过管道将任何对象传递给 Format-Table。
输出 | Microsoft.PowerShell.Commands.Internal.Format Format-Table 返回表示表的格式对象。

说明

还可以使用 Format-Table 的内置别名“FT”来对其进行引用。有关详细信息，请参阅 about_Aliases。

GroupBy 参数假定对象已经过排序。在使用 Format-Custom 对对象进行分组之前，请使用 Sort-Object 对它们进行排序。

使用 View 参数可以指定表的可选格式。您可以使用 Windows PowerShell 目录中的 *.format.PS1XML 文件中定义的视图，也可以在新的 PS1XML 文件中创建自己的视图，然后使用 Update-FormatData cmdlet 将它们包括在 Windows PowerShell 中。

View 参数的可选视图必须使用表格式，否则，该命令将失败。如果可选视图为列表，请使用 Format-List。如果可选视图既不是列表也不是表，请使用 Format-Custom。

示例 1

C:\PS>get-pssnapin | format-table -auto

说明
-----------
此命令将 Windows PowerShell 管理单元的相关信息设置为表格式。默认情况下，这些信息将设置为列表格式。Get-PSSnapin cmdlet 获取表示管理单元的对象。管道运算符 (|) 将对象传递给 Format-Table 命令。Format-Table 设置表中对象的格式。Autosize 参数调整列宽以尽可能减少截断。

示例 2

C:\PS>get-process | sort-object -property basepriority | format-table -groupby basepriority -wrap

说明
-----------
此命令可分组显示计算机上的进程，即，具有相同基本优先级的进程分为一组进行显示。

Get-Process cmdlet 获取表示计算机上每个进程的对象。管道运算符 (|) 将对象传递至 Sort-Object cmdlet，该 cmdlet 按照对象的基本优先级将对象进行排序。

另一个管道运算符将结果传递给 Format-Table 命令。GroupBy 参数基于进程的 BasePriority 属性值对进程的有关数据进行分组。Wrap 参数可确保数据不会被截断。

示例 3

C:\PS>get-process | sort-object starttime | format-table -view starttime

说明
-----------
此命令将根据进程的开始日期分组显示计算机上进程的相关信息。它使用 Get-Process cmdlet 来获取表示计算机上进程的对象。管道运算符 (|) 将 Get-Process 的输出发送给 Sort-Object cmdlet，后者根据 StartTime 属性对其进行排序。另一个管道运算符将排序的结果发送给 Format-Table。

View 参数用于为 System.Diagnostics.Process 对象（例如由 Get-Process 返回的对象）选择 DotNetTypes.format.ps1xml 格式设置文件中定义的 StartTime 视图。此视图将进程的 StartTime 转换为短日期格式，然后按开始日期对进程进行分组。

DotNetTypes.format.ps1xml 格式设置文件还包含用于进程的 Priority 视图，您可通过自定义视图创建自己的 format.ps1xml 文件。

示例 4

C:\PS>get-service | format-table -property Name, DependentServices

说明
-----------
此命令在具有两列（Name 和 DependentServices）的表中显示计算机上的所有服务。该命令使用 Get-Service cmdlet 获取计算机上的所有服务。管道运算符 (|) 将结果发送给 Format-Table cmdlet，该 cmdlet 将输出格式设置为表。Property 参数指定按列的形式显示在表中的属性。Property 参数名为可选项，因此可以省略（“format-table name, dependentservices”）。

Property 和 DependentServices 仅仅是服务对象的两个属性。要查看所有属性，请键入“get-service | get-member”。

示例 5

C:\PS>get-process notepad | format-table ProcessName, `
@{Label="TotalRunningTime"; Expression={(get-date) - $_.StartTime}}

说明
-----------
此命令将显示在表中使用计算属性的方法。该命令将显示具有本地计算机上所有 Notepad 进程的进程名称和总运行时间的表。总运行时间是通过从当前时间减去每个进程的开始时间而计算出来的。

该命令使用 Get-Process cmdlet 来获取本地计算机上所有名为“Notepad”的进程。管道运算符 (|) 将结果发送给 Format-Table，后者将显示一个由两列组成的表：ProcessName 列是进程的标准属性，TotalRunningTime 列是计算属性。

TotalRunningTime 属性由具有两个键（Label 和 Expression）的哈希表指定。属性的名称将赋予 Label 键。而计算则赋予 Expression 键。Expression 将获取每个进程对象的 StartTime 属性，并从 Get-Date 命令（用于获取当前日期和时间）的结果中减去该值。

示例 6

C:\PS>$processes = get-wmiobject -ComputerName Server01 win32_process -filter "name='notepad.exe'"

C:\PS> $processes | format-table ProcessName, @{ Label = "Total  Running Time"; `
Expression={(get-date) - $_.ConvertToDateTime($_.CreationDate)}}

说明
-----------
这些命令与上一命令相似，所不同的是，这些命令使用 Get-WmiObject cmdlet 和 Win32_Process 类来显示远程计算机上 Notepad 进程的相关信息。

第一个命令使用 Get-WmiObject cmdlet 来获取描述 Server01 计算机上所有名为 Notepad.exe 的进程的 Windows Management Instrumentation (WMI) Win32_Process 类的实例。该命令将进程信息存储在 $processes 变量中。

第二个命令使用管道运算符 (|) 将 $processes 变量中的进程信息发送给 Format-Table cmdlet，后者将显示每个进程的 ProcessName 以及新的计算属性。

该命令将新计算属性的名称 Total Running Time 赋予 Label 键。赋予 Expression 键的脚本块将通过从当前日期中减去进程创建日期来计算出进程的运行时间。Get-Date cmdlet 获取当前日期。ConvertToDateTime 方法将 Win32_Process 对象的 CreationDate 属性从 WMI CIM_DATETIME 对象转换为可与 Get-Date 的输出相比较的 Microsoft .NET Framework DateTime 对象。随后，从当前日期中减去转换的创建日期。结果是 Total Running Time 的值。

倒引号字符 (`) 是行继续符。

另请参阅

  • Format-List
  • Format-Wide
  • Format-Custom


Format-Wide

将对象的格式设置为只能显示每个对象的一个属性的宽表。

语法

Format-Wide [[-Property] <Object>] [-AutoSize] [-Column <int>] [-DisplayError] [-Expand <string>] [-Force] [-GroupBy <Object>] [-InputObject <psobject>] [-ShowError] [-View <string>] [<CommonParameters>]

说明

Format-Wide cmdlet 将对象的格式设置为只能显示每个对象的一个属性的宽表。可以使用 Property 参数来确定要显示的属性。

参数

-AutoSize

根据数据的宽度调整列大小和列数。默认情况下，列大小和列数由视图确定。不能在同一命令中使用 AutoSize 和 Column 参数。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Column <int>

指定显示的列数。不能在同一命令中使用 AutoSize 和 Column 参数。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-DisplayError

在命令行中显示错误。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Expand <string>

设置集合对象以及集合中的对象的格式。此参数用于设置支持 ICollection (System.Collections) 接口的对象的格式。默认值为 EnumOnly。

有效值包括：

-- EnumOnly：显示集合中的对象的属性。

-- CoreOnly：显示集合对象的属性。

-- Both：显示集合对象的属性以及集合中对象的属性。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Force

覆盖阻止命令成功执行的限制，但应确保所做更改不会危及安全性。例如，Force 将覆盖只读属性或创建目录来完成文件路径，但它不会尝试更改文件权限。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-GroupBy <Object>

根据共享属性或值将输出结果分组显示。请输入表达式或输出的属性。

GroupBy 参数的值可以是新的计算属性。若要创建计算属性，请使用哈希表。有效键包括：

-- Name（或 Label）<字符串>

-- Expression <字符串> 或 <脚本块>

-- FormatString <字符串>

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-InputObject <psobject>

指定要设置格式的对象。输入一个包含对象的变量，或键入可获取对象的命令或表达式。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | true (ByValue)
是否接受通配符？ | false

-Property <Object>

指定要在屏幕上显示的对象属性及其显示顺序。允许使用通配符。

如果省略此参数，则屏幕上显示的属性取决于要显示的对象。参数名（“Property”）为可选项。不能在同一命令中使用 Property 和 View 参数。

Property 参数的值可以是新的计算属性。若要创建计算属性，请使用哈希表。有效键包括：

-- Expression <字符串> 或 <脚本块>

-- FormatString <字符串>

是否为必需？ | false
位置？ | 1
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-ShowError

通过管道发送错误。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-View <string>

指定可选表格式或“视图”的名称。不能在同一命令中使用 Property 和 View 参数。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

<CommonParameters>

此 cmdlet 支持通用参数：-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。有关详细信息，请参阅 about_Commonparameters.

输入和输出

输入类型是指可通过管道传递给 cmdlet 的对象的类型。返回类型是指 Cmdlet 所返回对象的类型。

输入 | System.Management.Automation.PSObject 可以通过管道将任何对象传递给 Format-Wide。
输出 | Microsoft.PowerShell.Commands.Internal.Format Format-Wide 返回表示表的格式对象。

说明

还可以使用 Format-Wide 的内置别名“fw”来对其进行引用。有关详细信息，请参阅 about_Aliases。

GroupBy 参数假定对象已经过排序。在使用 Format-Custom 对对象进行分组之前，请使用 Sort-Object 对它们进行排序。

使用 -View 参数可以指定表的可选格式。您可以使用 Windows PowerShell 目录中的 *.format.PS1XML 文件中定义的视图，也可以在新的 PS1XML 文件中创建自己的视图，然后使用 Update-FormatData cmdlet 将它们包括在 Windows PowerShell 中。

View 参数的可选视图必须使用表格式，否则，该命令将失败。如果可选视图为列表，请使用 Format-List。如果可选视图既不是列表也不是表，请使用 Format-Custom。

示例 1

C:\PS>get-childitem | format-wide -column 3

说明
-----------
此命令在整个屏幕中以三列显示当前目录中的文件名。Get-ChildItem cmdlet 获取表示目录中每个文件的对象。管道运算符 (|) 通过管道将文件对象传递给 Format-Wide，后者将设置这些文件对象的格式以便进行输出。Column 参数指定列的数目。

示例 2

C:\PS>get-childitem HKCU:\software\microsoft | format-wide -property pschildname -autosize

说明
-----------
此命令将显示 HKEY_CURRENT_USER\Software\Microsoft 项中的注册表项的名称。Get-ChildItem cmdlet 获取表示这些项的对象。路径将指定为“HKCU:”，这是由 Windows PowerShell 注册表提供程序公开的驱动器之一，后跟该项的路径。管道运算符 (|) 通过管道将注册表项对象传递给 Format-Wide，后者将设置这些注册表项对象的格式以便进行输出。Property 参数用于指定属性的名称，而 AutoSize 参数用于调整列以增加可读性。


Get-Acl

获取资源（例如文件或注册表项）的安全描述符。

语法

Get-Acl [[-Path] <string[]>] [-Audit] [-Exclude <string[]>] [-Filter <string>] [-Include <string[]>] [-UseTransaction] [<CommonParameters>]

说明

Get-Acl cmdlet 获取用于表示文件或资源的安全描述符的对象。安全描述符包含资源的访问控制列表 (ACL)。ACL 可指定用户和用户组要访问资源所需具备的权限。

参数

-Audit

从系统访问控制列表 (SACL) 中获取安全描述符的审核数据。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Exclude <string[]>

忽略指定项。此参数的值对 Path 参数进行限定。请输入路径元素或模式，例如“*.txt”。允许使用通配符。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Filter <string>

以提供程序的格式或语言指定筛选器。此参数的值对 Path 参数进行限定。筛选器的语法（包括通配符的使用）取决于提供程序。筛选器比其他参数更有效，因为提供程序是在检索对象时应用筛选器，而不是在检索对象后再由 Windows PowerShell 筛选对象。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Include <string[]>

只检索指定项。此参数的值对 Path 参数进行限定。请输入路径元素或模式，例如“*.txt”。允许使用通配符。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Path <string[]>

指定资源的路径。Get-Acl 获取该路径所指示的资源的安全描述符。允许使用通配符。如果省略了 Path 参数，则 Get-Acl 将获取当前目录的安全描述符。

参数名（“Path”）为可选项。

是否为必需？ | false
位置？ | 1
默认值 |
是否接受管道输入？ | true (ByValue, ByPropertyName)
是否接受通配符？ | false

-UseTransaction

将命令包含在活动事务中。仅当正在执行事务时，此参数才有效。有关详细信息，请参阅 about_Transactions。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

<CommonParameters>

此 cmdlet 支持通用参数：-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。有关详细信息，请参阅 about_Commonparameters.

输入和输出

输入类型是指可通过管道传递给 cmdlet 的对象的类型。返回类型是指 Cmdlet 所返回对象的类型。

输入 | System.String 可以通过管道将包含路径的字符串传递给 Get-Acl。
输出 | System.Security.AccessControl Get-Acl 返回一个表示它所获取的 ACL 的对象。对象类型取决于 ACL 类型。

说明

默认情况下，Get-Acl 显示资源的 Windows PowerShell 路径（<提供程序>::<资源路径>）、资源的所有者和“Access”（资源的随机访问控制列表 (DACL) 中访问控制条目的列表或数组）。DACL 列表由资源所有者控制。

在将结果的格式设置为列表（“get-acl | format-list”）时，除了路径、所有者和访问列表之外，Windows PowerShell 还将显示以下字段：

-- Group：所有者的安全组。

-- Audit：系统访问控制列表 (SACL) 中的条目的列表或数组。SACL 指定 Windows 为其生成审核记录的访问尝试的类型。

-- Sddl：资源的安全描述符以安全描述符定义语言格式显示在单个文本字符串中。Windows PowerShell 采用安全描述符的 GetSddlForm 方法检索此数据。

由于文件系统和注册表提供程序支持 Get-Acl，因此可以使用 Get-Acl 来查看文件系统对象（例如文件和目录）以及注册表对象（例如注册表项和条目）的 ACL。

示例 1

C:\PS>get-acl C:\windows

说明
-----------
此命令将获取 C:Windows 目录的安全描述符。

示例 2

C:\PS>get-acl C:\Windows\k*.log | format-list -property PSPath, Sddl

说明
-----------
此命令将获取 C:\Windows 目录中名称以“k”开头的所有 .log 文件的 Windows PowerShell 路径和 SDDL。

该命令使用 Get-Acl 来获取表示每个日志文件的安全描述符的对象。它使用管道运算符 (|) 将结果发送到 Format-List cmdlet。该命令使用 Format-List 的 Property 参数仅显示每个安全描述符对象的 PsPath 和 SDDL 属性。

Windows PowerShell 中会经常使用列表，因为表中较长的值有可能会被截断。

SDDL 值对于系统管理员非常重要，因为这些值是包含安全描述符中所有信息的简单文本字符串。同样它们还便于传递和存储，并可以在需要时进行分析。

示例 3

C:\PS>get-ACL c:/windows/k*.log -Audit | foreach-object { $_.Audit.Count }

说明
-----------
此命令将获取 C:\Windows 目录中名称以“k”开头的 .log 文件的安全描述符。它使用 Audit 参数从 SACL 检索安全描述符中的审核记录。随后，它使用 For-EachObject 参数来计算与每个文件关联的审核记录的数量。结果为表示每个日志文件的审核记录数的数字列表。

示例 4

C:\PS>get-acl -path hklm:\system\currentcontrolset\control | format-list

说明
-----------
此命令使用 Get-Acl 来获取注册表的 Control 子项 (HKLM\SYSTEM\CurrentControlSet\Control) 的安全描述符。

Path 参数指定 Control 子项。管道运算符 (|) 将 Get-Acl 检索到的安全描述符传递到 Format-List 命令，该命令将安全描述符的属性设置为列表格式以便于阅读。

另请参阅

  • Set-Acl


Get-Alias

获取当前会话的别名。

语法

Get-Alias [[-Name] <string[]>] [-Exclude <string[]>] [-Scope <string>] [<CommonParameters>]

Get-Alias [-Definition <string[]>] [-Exclude <string[]>] [-Scope <string>] [<CommonParameters>]

说明

Get-Alias cmdlet 获取当前会话的别名（命令和可执行文件的替代名称）。其中包括内置别名、已设置或导入的别名，以及已添加到 Windows PowerShell 配置文件中的别名。

默认情况下，Get-Alias 获取别名并返回命令名称。当使用 Definition 参数时，Get-Alias 采用命令名称并返回其别名。

参数

-Definition <string[]>

获取所指定项的别名。请输入 cmdlet、函数、脚本、文件或可执行文件的名称。

此参数名为 Definition，这是因为它在别名对象的 Definition 属性中搜索项目名称。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | true

-Exclude <string[]>

忽略指定项。此参数的值对 Name 和 Definition 参数进行限定。请输入名称、定义或模式，例如“s*”。允许使用通配符。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Name <string[]>

指定要检索的别名。允许使用通配符。默认情况下，Get-Alias 将检索为当前会话定义的所有别名。参数名（“Name”）为可选项。还可通过管道将别名传递至 Get-Alias。

是否为必需？ | false
位置？ | 1
默认值 |
是否接受管道输入？ | true (ByValue, ByPropertyName)
是否接受通配符？ | false

-Scope <string>

仅获取所指定作用域中的别名。有效值包括“Global”、“Local”、“Script”或者相对于当前作用域的数字（0 到作用域数，其中 0 是指当前作用域，1 是指其父作用域）。默认值为“Local”。有关详细信息，请参阅 about_Scopes。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

<CommonParameters>

此 cmdlet 支持通用参数：-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。有关详细信息，请参阅 about_Commonparameters.

输入和输出

输入类型是指可通过管道传递给 cmdlet 的对象的类型。返回类型是指 Cmdlet 所返回对象的类型。

输入 | System.String 还可通过管道将别名传递至 Get-Alias。
输出 | System.Management.Automation.AliasInfo Get-Alias 返回表示每个别名的对象。

说明

别名是 cmdlet、函数或可执行文件的替代名称或昵称。若要运行 cmdlet、函数或可执行文件，则可使用其全名或任何别名。有关详细信息，请参阅 about_Aliases。

若要创建新别名，请使用 Set-Alias 或 New-Alias。若要删除别名，请使用 Remove-Item。

示例 1

C:\PS>get-alias

说明
-----------
此命令获取当前会话中的所有别名。

示例 2

C:\PS>get-alias -name g*, s* -exclude get-*

说明
-----------
此命令获取所有以“g”或“s”开头的别名，但以“get-”开头的别名除外。

示例 3

C:\PS>get-alias -definition Get-ChildItem

说明
-----------
此命令获取 Get-ChildItem cmdlet 的别名。

默认情况下，Get-Alias cmdlet 会在您知道别名的情况下获取项目名称。Definition 参数会在您知道项目名称的情况下获取别名。

示例 4

C:\PS>get-alias | where-object {$_.Options -match "ReadOnly"}

说明
-----------
此命令将检索所有其 Options 属性值为 ReadOnly 的别名。此命令提供了快速查找 Windows PowerShell 中内置别名的方法，因为这些别名均具有 ReadOnly 选项。

Options 属性仅是 Get-Alias 获取的 AliasInfo 对象的属性之一。若要查找 AliasInfo 对象的所有属性和方法，请键入“get-alias | get-member”。

示例 5

C:\PS>get-alias -definition "*-pssession" -exclude e* -scope global

说明
-----------
此示例获取所有以“-pssession”结尾的命令别名，但以“e”开头的别名除外。

该命令使用 Scope 参数将命令应用到全局作用域。当您希望获取会话中的别名时，这对脚本比较有用。

另请参阅

  • about_Aliases
  • Set-Alias
  • New-Alias
  • Export-Alias
  • Import-Alias
  • Alias Provider


Get-AuthenticodeSignature

获取文件中有关 Authenticode 签名的信息。

语法

Get-AuthenticodeSignature [-FilePath] <string[]> [<CommonParameters>]

说明

Get-AuthenticodeSignature cmdlet 获取文件中有关 Authenticode 签名的信息。如果文件未签名，也将检索该信息，只不过相应字段为空。

参数

-FilePath <string[]>

指定要检查的文件的路径。允许使用通配符，但它们必须指向单个文件。参数名（“FilePath”）为可选项。

是否为必需？ | true
位置？ | 1
默认值 |
是否接受管道输入？ | true (ByValue, ByPropertyName)
是否接受通配符？ | false

<CommonParameters>

此 cmdlet 支持通用参数：-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。有关详细信息，请参阅 about_Commonparameters.

输入和输出

输入类型是指可通过管道传递给 cmdlet 的对象的类型。返回类型是指 Cmdlet 所返回对象的类型。

输入 | System.String 可以通过管道将包含文件路径的字符串传递给 Get-AuthenticodeSignature。
输出 | System.Management.Automation.Signature Get-AuthenticodeSignature 针对每个所获取的签名返回一个签名对象。

说明

有关 Windows PowerShell 中 Authenticode 签名的信息，请参阅 about_Signing。

示例 1

C:\PS>get-AuthenticodeSignature -filepath C:\Test\NewScript.ps1

说明
-----------
此命令获取有关 NewScript.ps1 文件中 Authenticode 签名的信息。它使用 FilePath 参数来指定文件。

示例 2

C:\PS>get-authenticodesignature test.ps1, test1.ps1, sign-file.ps1, makexml.ps1

说明
-----------
此命令获取有关命令行中列出的四个文件中 Authenticode 签名的信息。在此命令中，省略了 FilePath 参数（该参数为可选项）的名称。

示例 3

C:\PS>get-childitem $pshome\*.* | foreach-object {Get-AuthenticodeSignature $_} | where {$_.status -eq "Valid"}

说明
-----------
此命令会列出 $pshome 目录中具有有效 Authenticode 签名的所有文件。$pshome 自动变量包含 Windows PowerShell 安装目录的路径。

此命令使用 Get-ChildItem cmdlet 获取 $pshome 目录中的文件。它采用 *.* 模式排除目录（尽管它也会排除文件名中不含点的文件）。

此命令使用管道运算符 (|) 将 $pshome 中的文件发送到 Foreach-Object cmdlet，其中将针对每个文件调用 Get-AuthenticodeSignature。

Get-AuthenticodeSignature 命令的结果将发送到 Where-Object 命令，该命令仅选择状态为“Valid”的签名对象。

另请参阅

  • about_Signing
  • about_Execution_Policies
  • Set-AuthenticodeSignature
  • Get-ExecutionPolicy
  • Set-ExecutionPolicy


Get-ChildItem

获取一个或多个指定位置中的项和子项。

语法

Get-ChildItem [[-Path] <string[]>] [[-Filter] <string>] [-Exclude <string[]>] [-Force] [-Include <string[]>] [-Name] [-Recurse] [-UseTransaction] [<CommonParameters>]

Get-ChildItem [-LiteralPath] <string[]> [[-Filter] <string>] [-Exclude <string[]>] [-Force] [-Include <string[]>] [-Name] [-Recurse] [-UseTransaction] [<CommonParameters>]

说明

Get-ChildItem cmdlet 获取一个或多个指定位置中的项。如果该项为容器，则此命令将获取容器内的各项（称为子项）。可以使用 Recurse 参数来获取所有子容器中的项。

位置可以是文件系统位置（如目录），也可以是由其他提供程序公开的位置（如注册表配置单元或证书存储区）。

参数

-Exclude <string[]>

忽略指定项。此参数的值对 Path 参数进行限定。请输入路径元素或模式，例如“*.txt”。允许使用通配符。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Filter <string>

以提供程序的格式或语言指定筛选器。此参数的值对 Path 参数进行限定。筛选器的语法（包括通配符的使用）取决于提供程序。筛选器比其他参数更有效，因为提供程序是在检索对象时应用筛选器，而不是在检索对象后再由 Windows PowerShell 筛选对象。

是否为必需？ | false
位置？ | 2
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Force

允许 cmdlet 获取用户非此不能访问的项，例如隐藏文件或系统文件。不同提供程序有不同的实现。有关详细信息，请参阅 about_Providers。即使使用 Force 参数，该 cmdlet 也无法覆盖安全限制。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Include <string[]>

只检索指定项。此参数的值对 Path 参数进行限定。请输入路径元素或模式，例如“*.txt”。允许使用通配符。

仅当该命令包括 Recurse 参数时，或当路径指向目录的内容时（例如，C:\Windows\*，其中的通配符指定 C:\Windows 目录的内容），Include 参数才有效。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-LiteralPath <string[]>

指定一个或多个位置的路径。与 Path 不同，LiteralPath 的值严格按照所键入的形式使用。不会将任何字符解释为通配符。如果路径包括转义符，请将其括在单引号中。单引号会告知 Windows PowerShell 不要将所有字符都解释为转义序列。

是否为必需？ | true
位置？ | 1
默认值 |
是否接受管道输入？ | true (ByPropertyName)
是否接受通配符？ | false

-Name

只检索位置中的项的名称。如果将此命令的输出通过管道传递给另一个命令，则只会发送项名称。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Path <string[]>

指定一个或多个位置的路径。允许使用通配符。默认位置为当前目录 (.)。

是否为必需？ | false
位置？ | 1
默认值 |
是否接受管道输入？ | true (ByValue, ByPropertyName)
是否接受通配符？ | false

-Recurse

获取指定位置及其所有子项中的项。

仅当路径指向具有子项的容器时（例如，C:\Windows 或 C:\Windows\*），Recurse 才有效，如果路径指向没有子项的项（例如，C:\Windows\*.exe），则 Recurse 无效。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-UseTransaction

将命令包含在活动事务中。仅当正在执行事务时，此参数才有效。有关详细信息，请参阅 about_Transactions。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

<CommonParameters>

此 cmdlet 支持通用参数：-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。有关详细信息，请参阅 about_Commonparameters.

输入和输出

输入类型是指可通过管道传递给 cmdlet 的对象的类型。返回类型是指 Cmdlet 所返回对象的类型。

输入 | System.String 可以通过管道将包含路径的字符串传递给 Get-ChildItem。
输出 | 对象。 Get-ChildItem 返回的对象的类型由它配合使用的提供程序确定。

说明

还可以使用 Get-ChildItem 的内置别名“ls”、“dir”和“gci”来对其进行引用。有关详细信息，请参阅 about_Aliases。

默认情况下，Get-ChildItem 不会获取隐藏项。若要获取隐藏项，请使用 -Force。

Get-ChildItem cmdlet 用于处理由任何提供程序公开的数据。要列出会话中可用的提供程序，请键入“Get-PsProvider”。有关详细信息，请参阅 about_Providers。

示例 1

C:\PS>get-childitem

说明
-----------
此命令获取当前位置中的子项。如果当前位置为文件系统目录，则此命令获取当前目录中的文件和子目录。如果该项不具有子项，则此命令将返回命令提示符，而不显示任何内容。

在默认显示中，将列出文件的模式（属性）、上次写入时间、文件大小（长度）和名称。模式的有效值为 d（目录）、a（存档）、r（只读）、h（隐藏）和 s（系统）。

示例 2

C:\PS>get-childitem . -include *.txt -recurse -force

说明
-----------
此命令检索当前目录及其子目录中的所有 .txt 文件。Path 参数值中的点 (.)表示当前目录，而 Include 参数指定文件扩展名。Recurse 参数指示 Windows PowerShell 递归检索对象，并指示该命令的执行对象为指定的目录及其内容。force 参数将隐藏文件添加到显示中。

示例 3

C:\PS>get-childitem c:\windows\logs\* -include *.txt -exclude A*

说明
-----------
此命令列出 Logs 子目录中的 .txt 文件，但名称以字母 A 开头的文件除外。它使用通配符 (*) 以指示 Logs 子目录的内容，而不是目录容器。因为此命令未包括 Recurse 参数，所以 Get-ChildItem 不会自动包括目录的内容；您需要指定该内容。

示例 4

C:\PS>get-childitem registry::hklm\software

说明
-----------
此命令检索本地计算机注册表内的 HKEY_LOCAL_MACHINE\SOFTWARE 项中的所有注册表项。

示例 5

C:\PS>get-childitem -name

说明
-----------
此命令仅检索当前目录中的项的名称。

示例 6

C:\PS>get-childitem cert:\. -recurse -codesigningcert

说明
-----------
此命令获取证书存储区中具有代码签名颁发机构的所有证书。

此命令使用 Get-ChildItem cmdlet。此路径指定由 Windows PowerShell 证书提供程序公开的 Cert: 驱动器。反斜杠 (\) 符号指定证书存储的子目录，而点 (.)表示当前目录，即证书存储的根目录。Recurse 参数指定递归搜索。

CodeSigningCertificate 参数是动态参数，仅获取具有代码签名颁发机构的证书。有关详细信息，请键入“get-help certificate”。

示例 7

C:\PS>get-childitem * -include *.exe

说明
-----------
此命令检索当前目录中具有“.exe”文件扩展名的所有项。通配符 (*) 表示当前目录的内容（而不是容器）。使用 Include 参数且不使用 Recurse 参数时，路径必须指向内容，而不是容器。

另请参阅

  • about_Providers
  • Get-Item
  • Get-Alias
  • Get-Location
  • Get-Process


Get-Command

获取有关 cmdlet 以及有关 Windows PowerShell 命令的其他元素的基本信息。

语法

Get-Command [[-Name] <string[]>] [-CommandType {<Alias> | <Function> | <Filter> | <Cmdlet> | <ExternalScript> | <Application> | <Script> | <All>}] [[-ArgumentList] <Object[]>] [-Module <string[]>] [-语法] [-TotalCount <int>] [<CommonParameters>]

Get-Command [-Noun <string[]>] [-Verb <string[]>] [[-ArgumentList] <Object[]>] [-Module <string[]>] [-语法] [-TotalCount <int>] [<CommonParameters>]

说明

Get-Command cmdlet 获取会话中 Windows PowerShell 命令的 cmdlet 及其他元素（例如，别名、函数、筛选器、脚本和应用程序）的基本信息。

Get-Command 直接从 cmdlet、函数、脚本或别名的代码中获取其数据，而不像 Get-Help 那样从帮助主题文件中获取其信息。

如果不使用参数，“Get-Command”将获取当前会话中的所有 cmdlet 和函数。“Get-Command *”获取所有 Windows PowerShell 元素以及 Path 环境变量 ($env:path) 中的所有非 Windows-PowerShell 文件。它将这些文件归入“Application”命令类型。

可以使用 Get-Command 的 Module 参数查找通过添加 Windows PowerShell 管理单元或导入模块而添加到会话中的命令。

参数

-ArgumentList <Object[]>

获取 cmdlet 或函数在与指定的参数（如 path）一起使用时的信息。ArgumentList 的别名为 Args。

要检测在 cmdlet 与特定的提供程序一起使用时添加到 cmdlet 中的参数，请将 ArgumentList 的值设置为提供程序驱动器中的一条路径，如“HKML\Software”或“cert:\my”。

是否为必需？ | false
位置？ | 2
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-CommandType <CommandTypes>

只获取指定类型的命令。使用“CommandType”或它的别名“Type”。默认情况下，Get-Command 获取 cmdlet 和函数。

有效值包括：

-- Alias：当前会话中的所有 Windows PowerShell 别名。

-- All：所有命令类型。它与“get-command *”等效。

-- Application：位于 Path 环境变量 ($env:path) 所列路径中的所有非 Windows-PowerShell 文件，例如 .txt、.exe 和 .dll 文件。

-- Cmdlet：当前会话中的 cmdlet。默认值为“Cmdlet”。

-- ExternalScript：位于 Path 环境变量 ($env:path) 所列路径中的全部 .ps1 文件。

-- Filter and Function：所有 Windows PowerShell 函数。

-- Script：当前会话中的脚本块。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | true (ByPropertyName)
是否接受通配符？ | false

-Module <string[]>

获取源自指定模块或管理单元的命令。输入模块或管理单元的名称，或输入管理单元或模块对象。

可以使用此参数的名称 Module 或其别名 PSSnapin 对其进行引用。选择的参数名称不会影响到命令或命令的输出。

此参数接受字符串值，但您也可以提供 PSModuleInfo 或 PSSnapinInfo 对象（如 Get-Module、Get-PSSnapin 和 Import-PSSession 返回的对象）。

是否为必需？ | false
位置？ | named
默认值 | 无
是否接受管道输入？ | true (ByPropertyName)
是否接受通配符？ | false

-Name <string[]>

只获取具有指定名称的 cmdlet 或命令元素的相关信息。<字符串> 表示 cmdlet 或命令元素的名称的全部或一部分。允许使用通配符。

要按执行顺序列出具有相同名称的命令，请键入不含通配符的命令名称。有关详细信息，请参阅“注释”部分。

是否为必需？ | false
位置？ | 1
默认值 |
是否接受管道输入？ | true (ByValue, ByPropertyName)
是否接受通配符？ | false

-Noun <string[]>

获取名称包含指定名词的 cmdlet 和函数。<字符串> 表示一个或多个名词或名词模式，例如，“process”或“*item*”。允许使用通配符。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | true (ByPropertyName)
是否接受通配符？ | false

-语法

只获取有关命令元素的指定数据。

* 对于别名，检索标准名称。

* 对于 cmdlet，检索语法。

* 对于函数和筛选器，检索函数定义。

* 对于脚本和应用程序（文件），检索路径和文件名。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | true (ByPropertyName)
是否接受通配符？ | false

-TotalCount <int>

只获取指定数量的命令元素。可使用此参数限制命令的输出。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | true (ByPropertyName)
是否接受通配符？ | false

-Verb <string[]>

获取名称包含指定动词的 cmdlet 和函数的信息。<字符串> 表示一个或多个动词或动词模式，例如，“remove”或“*et”。允许使用通配符。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | true (ByPropertyName)
是否接受通配符？ | false

<CommonParameters>

此 cmdlet 支持通用参数：-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。有关详细信息，请参阅 about_Commonparameters.

输入和输出

输入类型是指可通过管道传递给 cmdlet 的对象的类型。返回类型是指 Cmdlet 所返回对象的类型。

输入 | System.String 可以通过管道将指定的名词属性“Name”、“Command”和“Verb”或字符串对象传递给 Get-Command。
输出 | Object 返回的对象类型取决于检索到的命令元素的类型。例如，对 cmdlet 使用 Get-Command 将检索 CmdletInfo 对象，而对 DLL 使用 Get-Command 则检索 ApplicationInfo 对象。

说明

在不使用参数的情况下，“Get-Command”将获取有关 Windows PowerShell cmdlet 和函数的信息。请使用参数来限定所检索的元素。

与 Get-Help 显示基于 XML 的帮助主题文件中的内容不同，Get-Command 直接从系统中的 cmdlet 代码获取其 cmdlet 信息。

Get-Command 按字母顺序返回命令。如果会话中多个命令同名，则 Get-Command 按执行顺序返回命令。列出的第一个命令是在未限定的情况下键入命令名称时运行的命令。有关详细信息，请参阅 about_Command_Precedence。

示例 1

C:\PS>get-command

说明
-----------
此命令获取所有 Windows PowerShell cmdlet 和函数的相关信息。

默认显示会列出命令类型（“Cmdlet”、“函数”或“筛选器”），cmdlet 或函数的名称以及语法或函数定义。

示例 2

C:\PS>get-command -verb set | format-list

说明
-----------
此命令获取所有包含动词“set”的 cmdlet 和函数的相关信息，并在列表中显示其中的部分信息。

列表格式包括表显示中省略的字段，包括完整语法。要显示所有字段（对象的所有属性），请键入“get-command -verb set | format-list *”。

示例 3

C:\PS>get-command -type cmdlet | sort-object noun | format-table -group noun

说明
-----------
此命令检索所有的 cmdlet，并按 cmdlet 名称中名词的字母顺序对它们进行排序，
然后在基于名词的组中显示它们。此显示结果可帮助您查找任务的 cmdlet。

默认情况下，Get-Command 按系统发现项的顺序显示这些项，在运行命令不明确时，这也是选择它们运行的顺序。

示例 4

C:\PS>get-command -module Microsoft.PowerShell.Security, TestModule

说明
-----------
此命令获取 Microsoft.PowerShell.Security 管理单元和 Test-Module 模块中的命令。

Module 参数获取通过导入模块或添加 Windows PowerShell 管理单元而添加的命令。

示例 5

C:\PS>get-command get-childitem -args cert: -syntax

说明
-----------
此命令检索在 Get-ChildItem 与 Windows PowerShell 证书提供程序一起使用时 Get-ChildItem cmdlet 的相关信息。

如果将输出中显示的语法与省略 Args (ArgumentList) 参数时所显示的语法进行比较，您会发现证书提供程序将参数 CodeSigningCert 动态地添加到 Get-ChildItem 中。

示例 6

C:\PS>(get-command get-childitem -ArgumentList cert:).parametersets[0].parameters | where-object { $_.IsDynamic }

说明
-----------
如果将此命令与 Windows PowerShell 证书提供程序一起使用，则此命令只检索动态添加到 Get-ChildItem cmdlet 的参数。这是上一示例中使用方法的替代方法。

在此命令中，将首先处理“get-command get-childitem -ArgumentList cert:”。如果将此命令与证书提供程序一起使用，则它将向 Get-Command 请求 Get-ChildItem cmdlet 的相关信息。“.parametersets[0]”选择“get-childitem -argumentList cert:”的第一个参数集 (set 0)，而“.parameters”选择该参数集中的参数。所得到的参数将通过管道传递给 Where-Object cmdlet，以便通过使用 IsDynamic 属性来测试每个参数（“$_.”）。若要查找命令中对象的属性，请使用 Get-Member。

示例 7

C:\PS>get-command *

说明
-----------
此命令获取当前控制台中的 Windows PowerShell cmdlet、函数、筛选器、脚本和别名的信息。

此命令还获取位于 Path 环境变量 ($env:path) 的路径中的所有文件的相关信息。它针对每个文件返回一个 ApplicationInfo 对象 (System.Management.Automation.ApplicationInfo)，而不是 FileInfo 对象 (System.IO.FileInfo)。

示例 8

C:\PS>get-command | where-object {$_.definition -like "*first*"}

CommandType     Name                        Definition
-----------     ----                        ---------
Cmdlet          Select-Object               Select-Object [[-Property]

说明
-----------
此命令基于 cmdlet 或函数的某个参数的名称查找 cmdlet 或函数。当您只能回想起 cmdlet 或函数的某个参数的名称时，可以使用此命令对其进行标识。

在本例中，您只记得 cmdlet 或函数之一有一个获取列表中前“n”个对象的 First 参数，但您无法记起具体是哪个 cmdlet。

此命令使用 Get-Command cmdlet 获取表示会话中的每个 cmdlet 和函数的 CmdletInfo 对象。CmdletInfo 对象具有一个 Definition 属性，它包含 cmdlet 或函数的语法（包含其参数）。

该命令使用管道运算符 (|) 将 CmdletInfo 对象传递给 Where-Object cmdlet，后者检查每个对象 ($_) 的定义（语法）以找到包含“first”的值。

结果显示 First 参数属于 Select-Object cmdlet。

示例 9

C:\PS>get-command dir | format-list

Name              : dir
CommandType       : Alias
Definition        : Get-ChildItem
ReferencedCommand : Get-ChildItem
ResolvedCommand   : Get-ChildItem

说明
-----------
此示例说明如何将 Get-Command cmdlet 与别名结合使用。尽管 Get-Command 通常用于 cmdlet，但它也显示脚本、函数、别名和可执行文件中的代码的有关信息。

此命令显示当前控制台中的“dir”别名。该命令通过管道将结果传递给 Format-List cmdlet。

示例 10

C:\PS>get-command notepad

CommandType     Name           Definition
-----------     ----           ----------
Application     notepad.exe    C:\WINDOWS\system32\notepad.exe
Application     NOTEPAD.EXE    C:\WINDOWS\NOTEPAD.EXE

说明
-----------
此示例说明如何使用 Get-Command 来确定当 Windows PowerShell 访问到名称相同的多个命令时，具体会运行哪个命令。当使用不含通配符的 Name 参数时，Get-Command 会按执行的优先级顺序列出具有该名称的命令。

此命令显示当您键入没有完全限定路径的“Notepad”时，Windows PowerShell 将运行哪个 Notepad 程序。该命令使用没有通配符的 Name 参数。

该示例输出显示了当前控制台中的 Notepad 命令。这表示 Windows PowerShell 将运行 C:\Windows\System32 目录中 Notepad.exe 的实例。

示例 11

C:\PS>(get-command get-date).pssnapin

C:\PS> (get-command remove-gpo).module

说明
-----------
这些命令说明如何查找特定 cmdlet 所源自的管理单元或模块。

第一条命令使用 CmdletInfo 对象的 PSSnapin 属性查找添加了 Get-Date cmdlet 的管理单元。

第二条命令使用 CmdletInfo 对象的 Module 属性查找添加了 Remove-GPO cmdlet 的模块。

另请参阅

  • about_Command_Precedence
  • Get-Help
  • Get-PSDrive
  • Get-Member
  • Import-PSSession
  • Export-PSSession


Get-ComputerRestorePoint

获取本地计算机上的还原点。

语法

Get-ComputerRestorePoint [[-RestorePoint] <Int32[]>] [<CommonParameters>]

Get-ComputerRestorePoint -LastStatus [<CommonParameters>]

说明

Get-ComputerRestorePoint cmdlet 获取本地计算机上的还原点。此 cmdlet 还可以显示最近的计算机还原尝试的状态。

可以使用 Get-ComputerRestorePoint 返回的信息来选择还原点，并且可以使用序列号来为 Restore-Computer cmdlet 标识还原点。

参数

-LastStatus

获取最近的系统还原操作的状态。

是否为必需？ | true
位置？ | named
默认值 | False
是否接受管道输入？ | false
是否接受通配符？ | false

-RestorePoint <Int32[]>

获取具有指定的序列号的还原点。输入一个或多个还原点的序列号。默认情况下，Get-ComputerRestorePoint 将获取本地计算机上的所有还原点。

是否为必需？ | false
位置？ | 1
默认值 | All restore points
是否接受管道输入？ | false
是否接受通配符？ | false

<CommonParameters>

此 cmdlet 支持通用参数：-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。有关详细信息，请参阅 about_Commonparameters.

输入和输出

输入类型是指可通过管道传递给 cmdlet 的对象的类型。返回类型是指 Cmdlet 所返回对象的类型。

输入 | None 不能通过管道将对象传递给此 cmdlet。
输出 | System.Management.ManagementObject#root\default\SystemRestore 或 String。 Get-ComputerRestore 返回 SystemRestore 对象，该对象是 WMI SystemRestore 类的实例。使用 LastStatus 参数时，此 cmdlet 将返回一个字符串。

说明

要在 Windows Vista 以及 Windows 的更高版本上运行 Get-ComputerRestorePoint 命令，必须使用“以管理员身份运行”选项打开 Windows PowerShell。

此 cmdlet 使用 Windows Management Instrumentation (WMI) SystemRestore 类。

示例 1

C:\PS>get-computerrestorepoint

说明
-----------
此命令获取本地计算机上的所有还原点。

示例 2

C:\PS>get-computerrestorepoint -restorepoint 232, 240, 245

说明
-----------
此命令获取序列号为 232、240 和 245 的还原点。

示例 3

C:\PS>get-computerrestorepoint -laststatus

The last restore failed.

说明
-----------
此命令显示本地计算机上最近的系统还原操作的状态。

示例 4

C:\PS>get-computerrestorepoint | format-table SequenceNumber, @{Label="Date"; Expression={$_.ConvertToDateTime($_.CreationTime)}}, Description -auto

SequenceNumber Date                  Description
-------------- ----                  -----------
           253 8/5/2008 3:19:20 PM   Windows Update
           254 8/6/2008 1:53:24 AM   Windows Update
           255 8/7/2008 12:00:04 AM  Scheduled Checkpoint
...

说明
-----------
此命令以表的形式显示还原点以便轻松阅读。

Format-Table 命令包括一个使用 ConvertToDateTime 方法将 CreationTime 属性值由 WMI 格式转换为 DateTime 对象的计算属性。

示例 5

C:\PS>((get-computerrestorepoint)[-1]).sequencenumber

说明
-----------
此命令获取计算机上最近创建的还原点的序列号。

此命令使用 -1 索引来获取 Get-ComputerRestorePoint 返回的数组中的最后一项。

另请参阅

  • Enable-ComputerRestore
  • Disable-ComputerRestore
  • Restore-Computer
  • Restart-Computer


Get-Content

获取位于指定位置的项的内容。

语法

Get-Content [-LiteralPath] <string[]> [-Credential <PSCredential>] [-Exclude <string[]>] [-Filter <string>] [-Force] [-Include <string[]>] [-ReadCount <Int64>] [-TotalCount <Int64>] [-UseTransaction] [<CommonParameters>]

Get-Content [-Path] <string[]> [-Credential <PSCredential>] [-Exclude <string[]>] [-Filter <string>] [-Force] [-Include <string[]>] [-ReadCount <Int64>] [-TotalCount <Int64>] [-UseTransaction] [<CommonParameters>]

说明

Get-Content cmdlet 获取位于路径所指定位置的项的内容，例如，文件中的文本。此命令每次读取一行内容，并为每行返回一个对象。

参数

-Credential <PSCredential>

指定有权执行此操作的用户帐户。默认值为当前用户。

键入用户名，如“User01”或“Domain01\User01”；或输入 PSCredential 对象，如 Get-Credential cmdlet 生成的一个 PSCredential 对象。如果键入用户名，则将提示您输入密码。

随同 Windows PowerShell 一起安装的任何提供程序都不支持此参数。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | true (ByPropertyName)
是否接受通配符？ | false

-Exclude <string[]>

忽略指定项。此参数的值对 Path 参数进行限定。请输入路径元素或模式，例如“*.txt”。允许使用通配符。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Filter <string>

以提供程序的格式或语言指定筛选器。此参数的值对 Path 参数进行限定。筛选器的语法（包括通配符的使用）取决于提供程序。筛选器比其他参数更有效，因为提供程序是在检索对象时应用筛选器，而不是在检索对象后再由 Windows PowerShell 筛选对象。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Force

覆盖阻止命令成功执行的限制，但应确保所做更改不会危及安全性。例如，Force 将覆盖只读属性或创建目录来完成文件路径，但它不会尝试更改文件权限。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Include <string[]>

只检索指定项。此参数的值对 Path 参数进行限定。请输入路径元素或模式，例如“*.txt”。允许使用通配符。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-LiteralPath <string[]>

指定项的路径。与 Path 不同，LiteralPath 的值严格按照所键入的形式使用。不会将任何字符解释为通配符。如果路径包括转义符，请将其括在单引号中。单引号会告知 Windows PowerShell 不要将所有字符都解释为转义序列。

是否为必需？ | true
位置？ | 1
默认值 |
是否接受管道输入？ | true (ByPropertyName)
是否接受通配符？ | false

-Path <string[]>

指定项的路径。Get-Content 将检索该项的内容。允许使用通配符。参数名（“Path”或“FilePath”）为可选项。

是否为必需？ | true
位置？ | 1
默认值 |
是否接受管道输入？ | true (ByPropertyName)
是否接受通配符？ | false

-ReadCount <Int64>

指定每次通过管道发送的内容行数。默认值为 1。值 0（零）将一次发送所有内容。

此参数不会更改显示的内容，但会影响显示内容所用的时间。随着 ReadCount 的值增加，返回第一行所用的时间将会增加，但该操作的总计时间将会减少。这一点在非常大的项中可产生显而易见的差异。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | true (ByPropertyName)
是否接受通配符？ | false

-TotalCount <Int64>

指定要检索的内容行数。默认值为 -1（所有行）。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | true (ByPropertyName)
是否接受通配符？ | false

-UseTransaction

将命令包含在活动事务中。仅当正在执行事务时，此参数才有效。有关详细信息，请参阅 about_Transactions。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

<CommonParameters>

此 cmdlet 支持通用参数：-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。有关详细信息，请参阅 about_Commonparameters.

输入和输出

输入类型是指可通过管道传递给 cmdlet 的对象的类型。返回类型是指 Cmdlet 所返回对象的类型。

输入 | None 不能通过管道将输入传递给 Get-Content。
输出 | Object Get-Content 返回表示所获取内容的对象。对象类型取决于内容类型。

说明

还可以使用 Get-Content 的内置别名“cat”、“type”和“gc”来对其进行引用。有关详细信息，请参阅 about_Aliases。

Get-Content cmdlet 用于处理由任何提供程序公开的数据。要列出会话中可用的提供程序，请键入“Get-PsProvider”。有关详细信息，请参阅 about_Providers。

示例 1

C:\PS>get-content -Path C:\Chapters\chapter1.txt

说明
-----------
此命令在控制台上显示 Chapter1.txt 文件的内容。它使用 Path 参数来指定项的名称。Get-Content 实际上将内容传入管道，但因为没有其他管道元素，所以将设置内容的格式并在控制台上显示内容。

示例 2

C:\PS>get-content c:\Logs\Log060912.txt -totalcount 50 | set-content sample.txt

说明
-----------
此命令获取 Log060912.txt 文件的前 50 行，并将它们存储在 sample.txt 文件中。此命令使用 Get-Content cmdlet 来获取文件中的文本。（省略了可选的 Path 参数名）TotalCount 参数将检索限定于前 50 行。管道运算符 (|) 将结果发送给 Set-Content，Set-Content 会将该结果放在 sample.txt 文件中。

示例 3

C:\PS>(get-content cmdlets.txt -totalcount 5)[-1]

说明
-----------
此命令获取 Cmdlets.txt 文本文件的第五行。它使用 TotalCount 参数来获取前 5 行，然后使用数组表示法来获取结果集的最后 1 行（由“-1”指示）。

另请参阅

  • about_Providers
  • Add-Content
  • Set-Content
  • Clear-Content


Get-Counter

从本地和远程计算机上获取性能计数器数据。

语法

Get-Counter [-Counter] <string[]> [-ComputerName <string[]>] [-Continuous] [-MaxSamples <Int64>] [-SampleInterval <int>] [<CommonParameters>]

Get-Counter -ListSet <string[]> [-ComputerName <string[]>] [<CommonParameters>]

说明

Get-Counter cmdlet 直接从 Windows 中的性能监视设备中获取活动的实时性能计数器数据。可以使用它来按指定的样本间隔从本地或远程计算机中获取性能数据。

如果不使用参数，“Get-Counter”命令会获取一组系统计数器的计数器数据。

可以使用 Get-Counter 的参数来指定一台或多台计算机、列出性能计数器集及其包含的计数器以及设置样本大小和间隔。

参数

-ComputerName <string[]>

从指定的计算机中获取数据。键入计算机的 NetBIOS 名称、Internet 协议 (IP) 地址或完全限定的域名。默认值为本地计算机。

注意：Get-Counter 不依赖于 Windows PowerShell 远程处理。即使您的计算机未进行相应配置以在 Windows PowerShell 中进行远程处理，您也可以使用 Get-Counter 的 ComputerName 参数。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Continuous

连续获取样本直到按 Ctrl+C 为止。默认情况下，Get-Counter 仅获取一个计数器样本。可以使用 SampleInterval 参数设置连续采样的间隔。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Counter <string[]>

从指定的性能计数器获取数据。输入一个或多个计数器路径。只有 Instance 值允许通配符。还可以将计数器路径字符串通过管道传送到 Get-Counter。

每个计数器路径具有以下格式：

"[\\<ComputerName>]\<CounterSet>(<Instance>)\<CounterName>"

例如：

"\\Server01\Processor(2)\% User Time"。

<ComputerName> 元素是可选的。如果省略它，则 Get-Counter 将使用 ComputerName 参数的值。

注意：若要获取正确格式的计数器路径，请使用 ListSet 参数来获取性能计数器集。每个性能计数器集的 Paths 和 PathsWithInstances 属性包含各个字符串格式的计数器路径。可以将计数器路径字符串保存在变量中，或将字符串直接通过管道传送到另一个 Get-Counter 命令。有关演示，请参阅示例。

是否为必需？ | true
位置？ | 2
默认值 |
是否接受管道输入？ | true (ByValue)
是否接受通配符？ | true

-ListSet <string[]>

获取计算机上指定的性能计数器集。输入计数器集的名称。允许使用通配符。还可以将计数器集名称通过管道传送到 Get-Counter。

是否为必需？ | true
位置？ | named
默认值 |
是否接受管道输入？ | true (ByValue, ByPropertyName)
是否接受通配符？ | true

-MaxSamples <Int64>

指定要从每个计数器获取的样本数目。默认值为 1 个样本。若要连续获取样本（没有最大样本大小），请使用 Continuous 参数。

要收集非常大的数据集，请考虑将 Get-Counter 命令作为 Windows PowerShell 后台作业运行。有关详细信息，请参阅 about_Jobs 和 Start-Job。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-SampleInterval <int>

指定样本的间隔时间，以秒为单位。最小值和默认值均为 1 秒。

是否为必需？ | false
位置？ | named
默认值 | 1
是否接受管道输入？ | false
是否接受通配符？ | false

<CommonParameters>

此 cmdlet 支持通用参数：-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。有关详细信息，请参阅 about_Commonparameters.

输入和输出

输入类型是指可通过管道传递给 cmdlet 的对象的类型。返回类型是指 Cmdlet 所返回对象的类型。

输入

System.String[]

可以将计数器路径和计数器集 (ListSet) 名称通过管道传送到 Get-Counter。

输出

Microsoft.PowerShell.Commands.GetCounter.CounterSet、Microsoft.PowerShell.Commands.GetCounter.PerformanceCounterSampleSet、Microsoft.PowerShell.Commands.GetCounter.PerformanceCounterSample

ListSet 参数获取 Microsoft.PowerShell.Commands.GetCounter.CounterSet 对象。Counter 参数获取 Microsoft.PowerShell.Commands.GetCounter.PerformanceCounterSampleSet 对象。每个计数器值为 Microsoft.PowerShell.Commands.GetCounter.PerformanceCounterSample 对象。

说明

性能计数器通常受访问控制列表 (ACL) 保护。若要获取所有可用的性能计数器，请使用“以管理员身份运行”选项打开 Windows PowerShell。

默认情况下，Get-Counter 在一秒钟的采用间隔期间获取一个样本。若要更改此行为，请使用 MaxSamples 和 Continuous 参数。

设置的 MaxSamples 和 SampleInterval 值将应用于命令中的所有计算机上的所有计数器。要为不同的计数器设置不同的值，请为每个计数器输入单独的 Get-Counter 命令。

示例 1

C:\PS># Get-Counter

说明
-----------
此命令获取本地计算机上的所有计数器集。

C:\PS> get-counter -ListSet *

因为许多计数器集都受访问控制列表 (ACL) 保护，所以要查看所有计数器集，请在使用 Get-Counter 命令之前，使用“以管理员身份运行”选项打开 Windows PowerShell。

示例 2

C:\PS># Get-Counter

说明
-----------
此命令获取本地计算机上所有处理器的当前“% Processor Time”合并值。它每两秒钟收集一次数据，直到具有三个值。

C:\PS> get-counter -Counter "\Processor(_Total)\% Processor Time" -SampleInterval 2 -MaxSamples 3

示例 3

C:\PS># Get-Counter

说明
-----------
此命令获取本地计算机上的所有计数器集的按字母顺序排序的名称列表。

C:\PS> get-counter -listset * | sort-object  countersetname | format-table countersetname

示例 4

C:\PS># Get-Counter

说明
-----------
这些命令使用计数器集的 Path 属性来查找性能计数器的正确格式的路径名称。可以使用类似此命令的命令来获取正确的计数器路径名称。

第一个命令获取本地计算机上的 Memory 计数器集中的性能计数器的路径名称。

C:\PS> (get-counter -listset memory).paths

\Memory\Page Faults/sec
\Memory\Available Bytes
\Memory\Committed Bytes
\Memory\Commit Limit
\Memory\Write Copies/sec
\Memory\Transition Faults/sec
\Memory\Cache Faults/sec
\Memory\Demand Zero Faults/sec
\Memory\Pages/sec
\Memory\Pages Input/sec
...

第二个命令获取包含“cache”的路径名称。

C:\PS> (get-counter -listset memory).paths | where {$_ -like "*cache*"}

\Memory\Cache Faults/sec
\Memory\Cache Bytes
\Memory\Cache Bytes Peak
\Memory\System Cache Resident Bytes
\Memory\Standby Cache Reserve Bytes
\Memory\Standby Cache Normal Priority Bytes
\Memory\Standby Cache Core Bytes

示例 5

C:\PS># Get-Counter

说明
-----------
这些命令从 Server01 和 Server02 计算机中获取 Disk Reads/sec 计数器数据。

第一个命令将 Disk Reads/sec 计数器路径保存在 $diskreads 变量中。

C:\PS> $diskreads = "\LogicalDisk(C:)\Disk Reads/sec"

第二个命令使用管道运算符 (|) 将 $diskreads 变量中的计数器路径发送到 Get-Counter cmdlet。此命令使用 MaxSamples 参数将输出的样本数限制为 10 个。

C:\PS> $diskreads | get-counter -computer Server01, Server02 -maxsamples 10

示例 6

C:\PS># Get-Counter

说明
-----------
此命令获取 PhysicalDisk 性能计数器的正确格式的路径名称，包括实例名称。

C:\PS> (get-counter -list physicaldisk).pathswithinstances

示例 7

C:\PS># Get-Counter

说明
-----------
这些命令获取企业中随机选择的 50 台计算机上的“% DPC Time”性能计数器的值。

第一个命令使用 Get-Content cmdlet 从 Servers.txt 文件中获取企业服务器列表。它使用 Get-Random cmdlet 来从 Servers.txt 文件内容中随机选择 50 个服务器名称。结果保存在 $servers 变量中。

C:\PS> $servers = get-random (get-content servers.txt) -count 50

第二个命令将指向“% DPC Time”cmdlet 的计数器路径保存在 $Counter 变量中。计数器路径中的实例名称包含通配符，目的是获取每台计算机上的所有处理器上的数据。

C:\PS> $counter = "\Processor(*)\% DPC Time"

第三个命令使用 Get-Counter cmdlet 来获取计数器值。它使用 Counter 参数指定计数器，并使用 ComputerName 参数指定保存在 $servers 变量中的计算机。

C:\PS> get-counter -Counter $counter -computername $servers

示例 8

C:\PS># Get-Counter

说明
-----------
这些命令获取本地计算机上的 memory 计数器集中的所有性能计数器的单个值。

第一个命令获取计数器路径并将它们保存在 $memCounters 变量中。

C:\PS> $memCounters = (get-counter -list memory).paths

第二个命令使用 Get-Counter cmdlet 来获取每个计数器的计数器数据。它使用 Counter 参数指定 $memCounters 中的计数器。

C:\PS> get-counter -counter $memCounters

示例 9

C:\PS># Get-Counter

说明
-----------
此示例演示表示每个数据样本的 PerformanceCounterSample 对象中的属性值。

第一个命令将计数器路径保存在 $counter 变量中。

C:\PS> $counter = "\\SERVER01\Process(Idle)\% Processor Time"

第二个命令使用 Get-Counter cmdlet 来获取计数器值的一个样本。它将结果保存在 $data 变量中。

C:\PS> $data = get-counter $counter

第三个命令使用 Format-List cmdlet 以列表形式显示样本集对象的 CounterSamples 属性的所有属性。

C:\PS> $data.countersamples | format-list -property *

Path             : \\SERVER01\process(idle)\% processor time
InstanceName     : idle
CookedValue      : 198.467899571389
RawValue         : 14329160321003
SecondValue      : 128606459528326201
MultipleCount    : 1
CounterType      : Timer100Ns
Timestamp        : 7/15/2008 6:39:12 PM
Timestamp100NSec : 128606207528320000
Status           : 0
DefaultScale     : 0
TimeBase         : 10000000

可以使用 CounterSamples 对象的属性来检查、选择、排序和分组数据。

示例 10

C:\PS># Get-Counter

说明
-----------
此命令将 Get-Counter 命令作为后台作业运行。有关详细信息，请参阅 Start-Job。

C:\PS> $counters = "\LogicalDisk(_Total)\% Free Space"

C:\PS> start-job -scriptblock {get-counter -counter $counters -maxsamples 1000)

示例 11

C:\PS># Get-Counter

说明
-----------
此命令使用 Get-Counter 和 Get-Random cmdlet 来查找从 Servers.txt 文件中随机选择的 50 台计算机上的可用磁盘空间百分比。

C:\PS> get-counter -computername (get-random servers.txt -count 50) -counter "\LogicalDisk(*)\% Free Space"

示例 12

C:\PS># Get-Counter

说明
-----------
此示例演示如何将计数器数据与其源自的计算机相关联以及如何操作此数据。

第一个命令使用 Get-Counter cmdlet 来从两台远程计算机 S1 和 S2 获取“LogicalDisk\% Free Space”计数器值。它将结果保存在 $a 变量中。

$a = get-counter "\LogicalDisk(_Total)\% Free Space" -comp s1, s2

第二个命令显示 $a 变量中的结果。所有数据都存储在对象中，但以这种形式查看数据并不容易。

C:\PS> $a

Counter Paths: \\s1\\logicaldisk(c:)\% free space, \\s1\\logicaldisk(d:)\% free space, \\s1\\logicaldisk(_total)\% free space, \\s2\\logicaldisk(c:)\% free space, \\s2\\logicaldisk(_total)\% free space

Timestamp     : 7/15/2008 5:09:08 PM
Cooked Values : "0.327058823529412", "17.8952248493278", "12.9994033060778", "75.0754805595626", "75.0754805595626"

第三个命令以表的形式显示 Get-Counter 返回的 PerformanceCounterSampleSet 对象的 CounterSamples 属性的值。（要查看对象的所有属性和方法，请将它通过管道传送到 Get-Member cmdlet。）

C:\PS> $a.countersamples | format-table -auto

Path                                     InstanceName       CookedValue
----                                     ------------       -----------
\\s1\\logicaldisk(c:)\% free space       c:           0.327058823529412
\\s1\\logicaldisk(d:)\% free space       d:            17.8952248493278
\\s1\\logicaldisk(_total)\% free space   _total        12.9994033060778
\\s2\\logicaldisk(c:)\% free space       c:            75.0754805595626
\\s2\\logicaldisk(_total)\% free space   _total        75.0754805595626

CounterSamples 属性包含具有自己的属性和方法的 PerformanceCounterSample 对象。第四个命令使用数组表示法来获取第一个计数器样本，并使用管道运算符来将计数器样本对象发送到 Format-List cmdlet，后者将以列表形式显示其所有属性和方法。此显示内容展示了每个计数器样本对象中的数据的丰富性。

第四个命令演示如何从计数器样本中选择数据。它使用 Where-Object cmdlet 来只获取 CookedValue 小于 15 的计数器样本。

C:\PS> $a.countersamples | where {$_.cookedvalue -lt 15}

Path                                     InstanceName       CookedValue
----                                     ------------       -----------
\\s1\\logicaldisk(c:)\% free space       c:           0.327058823529412
\\s1\\logicaldisk(_total)\% free space   _total        12.9994033060778

示例 13

C:\PS># Get-Counter

说明
-----------
此示例演示如何为您检索到的性能计数器数据排序。此示例在计算机上查找采样期间使用处理器时间最多的进程。

第一个命令获取计算机上所有进程的“Process\% Processor Time”计数器。此命令将结果保存在 $p 变量中。

C:\PS> $p = get-counter '\Process(*)\% Processor Time'

第二个命令获取 $p 中的样本集对象的 CounterSamples 属性并按样本的成熟值以降序顺序为样本排序。此命令使用 Format-Table cmdlet 及其 AutoFormat 参数来定位表中的列。

C:\PS> $p.CounterSamples | sort-object -property CookedValue -Descending | format-table -auto

Path                                              InstanceName      CookedValue
----                                              ------------      -----------
\\server01\process(_total)\% processor time        _total        200.00641042078
\\server01\process(idle)\% processor time          idle          200.00641042078
\\server01\process(explorer#1)\% processor time    explorer                    0
\\server01\process(dwm#1)\% processor time         dwm                         0
\\server01\process(taskeng#1)\% processor time     taskeng                     0
\\server01\process(taskhost#1)\% processor time    taskhost                    0
\\server01\process(winlogon)\% processor time      winlogon                    0
\\server01\process(csrss)\% processor time         csrss                       0

示例 14

C:\PS># Get-Counter

说明
-----------
这些命令在计算机上查找具有最大工作集的进程。它们按进程的工作集大小以降序顺序列出进程。

第一个命令获取每个进程的“Process\Working Set - Private”计数器的一个样本。此命令将计数器数据保存在 $ws 变量中。

C:\PS> $ws = get-counter "\Process(*)\Working Set - Private"

第二个命令使用管道运算符 (|) 来将 $ws 变量的 CounterSamples 属性中的数据发送给 Sort-Object cmdlet，后者将按 CookedValue 属性值以降序顺序为进程数据排序。另一个管道将经过排序的数据发送给 Format-Table cmdlet，后者将数据设置为具有 InstanceName 和 CookedValue 列的表格格式。

C:\PS> $ws.countersamples | sort-object -property cookedvalue -descending | format-table -property InstanceName, CookedValue -auto

InstanceName  CookedValue
------------  -----------
_total          162983936
svchost          40370176
powershell       15110144
explorer         14135296
svchost          10928128
svchost           9027584
...

示例 15

C:\PS># Get-Counter

说明
-----------
此命令以默认间隔（1 秒钟）获取一系列 Processor\% Processor Time 计数器样本。若要停止此命令，请按 Ctrl+C。

C:\PS> get-counter -counter "\processor(_total)\% processor time" -continuous

另请参阅

  • Import-Counter
  • Export-Counter


Get-Credential

获取基于用户名和密码的凭据对象。

语法

Get-Credential [-Credential] <PSCredential> [<CommonParameters>]

说明

Get-Credential cmdlet 为指定的用户名和密码创建凭据对象。您可以在安全操作中使用凭据对象。

该 cmdlet 将提示用户输入密码或者提示用户名和密码均需要输入。用户会在对话框或命令行中收到提示，具体取决于系统注册表设置。

参数

-Credential <PSCredential>

指定凭据的用户名，例如“User01”或“Domain01\User01”。参数名（“Credential”）为可选项。

提交该命令后，系统将提示您输入密码。

如果您输入不带域的用户名，Get-Credential 会在名称前插入一个反斜杠。

如果省略此参数，则将提示您输入用户名和密码。

是否为必需？ | true
位置？ | 1
默认值 | 无
是否接受管道输入？ | false
是否接受通配符？ | false

<CommonParameters>

此 cmdlet 支持通用参数：-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。有关详细信息，请参阅 about_Commonparameters.

输入和输出

输入类型是指可通过管道传递给 cmdlet 的对象的类型。返回类型是指 Cmdlet 所返回对象的类型。

输入 | None 不能通过管道将输入传递给此 cmdlet。
输出 | System.Management.Automation.PSCredential Get-Credential 返回凭据对象。

说明

可以在请求用户身份验证的 cmdlet 中使用 Get-Credential 创建的 PSCredential 对象，例如那些具有 Credential 参数的 cmdlet。

随 Windows PowerShell 安装的提供程序不支持 Credential 参数。但可以对 Get-WmiObject 使用 Credential 参数，因为该命令会直接调用 Microsoft .NET Framework。

示例 1

C:\PS>$c = Get-Credential

说明
-----------
此命令获取凭据对象并将其保存在 $c 变量中。

在输入该命令后，将显示一个对话框，要求输入用户名和密码。在输入要求的信息后，cmdlet 将创建表示用户凭据的 PSCredential 对象并将其保存在 $c 变量中。

可以将该对象用作请求用户身份验证的 cmdlet 的输入，例如那些具有 Credential 参数的 cmdlet。但是，随 Windows PowerShell 一起安装的提供程序不支持 Credential 参数。

示例 2

C:\PS>$c = Get-Credential

C:\PS>Get-WmiObject Win32_DiskDrive -ComputerName Server01 -Credential $c

说明
-----------
这些命令使用 Get-Credential 生成的凭据对象对远程计算机上的用户进行身份验证，以便于这些用户使用 Windows Management Instrumentation (WMI) 来管理计算机。

第一个命令获取凭据对象并将其保存在 $c 变量中。第二个命令在 Get-WmiObject 命令中使用该凭据对象。此命令获取 Server01 计算机中的磁盘驱动器的有关信息。

示例 3

C:\PS>C:\PS>Get-WmiObject Win32_BIOS -ComputerName Server01 '
-Credential (get-credential Domain01\User01)

说明
-----------
此命令显示如何在 Get-WmiObject 命令中包括 Get-Credential 命令。

此命令使用 Get-WmiObject cmdlet 来获取 Server01 计算机中的 BIOS 的有关信息。它使用 Credential 参数对用户 (Domain01\User01) 进行身份验证，并将 Get-Credential 命令作为 Credential 参数的值。

示例 4

C:\PS>$c = Get-Credential -credential User01

C:\PS>$c.Username

\User01

说明
-----------
此示例将创建包含用户名（不带域名）的凭据。它证实了 Get-Credential 会在用户名前插入一个反斜杠。

第一个命令会获取带用户名 User01 的凭据，并将其存储到 $c 变量中。

第二个命令会显示所生成的凭据对象的 Username 属性值。

示例 5

C:\PS>$credential = $host.ui.PromptForCredential("Need credentials", "Please enter your user name and password.", "", "NetBiosUserName")

说明
-----------
此命令使用 PromptForCredential 方法提示用户输入用户名和密码。此命令将生成的凭据保存在 $credential 变量中。

PromptForCredential 是 Get-Credential 的替代方法。使用 PromptForCredential 时，可以指定显示在消息框中的标题、消息和用户名。

示例 6

C:\PS>Set-ItemProperty 'HKLM:\SOFTWARE\Microsoft\PowerShell\1\ShellIds' ConsolePrompting $true

说明
-----------
需要用户名和密码时，默认情况下会出现一个对话框，提示用户输入这些信息。要在命令行显示提示，请以管理员身份在 Windows PowerShell 中运行此命令，以修改注册表。

使用具有“ConsolePrompting $false”设置的同一命令将在对话框中显示提示。


Get-Culture

获取操作系统中设置的当前区域性。

语法

Get-Culture [<CommonParameters>]

说明

Get-Culture cmdlet 获取有关当前区域性设置的信息。这包括有关系统中当前语言设置的信息（如键盘布局），以及项目的显示格式（如数字、货币和日期）。

还可使用 Get-UICulture cmdlet，它可获取系统中当前用户界面区域性。用户界面 (UI) 区域性确定哪些文本字符串用于用户界面元素（如菜单和消息）。

参数

<CommonParameters>

此 cmdlet 支持通用参数：-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。有关详细信息，请参阅 about_Commonparameters.

输入和输出

输入类型是指可通过管道传递给 cmdlet 的对象的类型。返回类型是指 Cmdlet 所返回对象的类型。

输入 | None 不能通过管道将输入传递给此 cmdlet。
输出 | System.Globalization.CultureInfo Get-Culture 返回一个表示当前区域性的对象。

说明

还可使用 $PsCulture 和 $PsUICulture 变量。$PsCulture 变量存储当前区域性的名称，$PsUICulture 变量存储当前 UI 区域性的名称。

示例 1

C:\PS>get-culture

说明
-----------
此命令显示计算机上的区域设置的相关信息。

示例 2

C:\PS>$c = get-culture

C:\PS> $c | format-list -property *

Parent                         : en
LCID                           : 1033
KeyboardLayoutId               : 1033
Name                           : en-US
IetfLanguageTag                : en-US
DisplayName                    : English (United States)
NativeName                     : English (United States)
EnglishName                    : English (United States)
TwoLetterISOLanguageName       : en
ThreeLetterISOLanguageName     : eng
ThreeLetterWindowsLanguageName : ENU
CompareInfo                    : CompareInfo - 1033
TextInfo                       : TextInfo - 1033
IsNeutralCulture               : False
CultureTypes                   : SpecificCultures, InstalledWin32Cultures, FrameworkCultures
NumberFormat                   : System.Globalization.NumberFormatInfo
DateTimeFormat                 : System.Globalization.DateTimeFormatInfo
Calendar                       : System.Globalization.GregorianCalendar
OptionalCalendars              : {System.Globalization.GregorianCalendar, System.Globalization.GregorianCalendar}
UseUserOverride                : True
IsReadOnly                     : False

C:\PS> $c.calendar

MinSupportedDateTime : 1/1/0001 12:00:00 AM
MaxSupportedDateTime : 12/31/9999 11:59:59 PM
AlgorithmType        : SolarCalendar
CalendarType         : Localized
Eras                 : {1}
TwoDigitYearMax      : 2029
IsReadOnly           : False

C:\PS> $c.datetimeformat

AMDesignator                     : AM
Calendar                         : System.Globalization.GregorianCalendar
DateSeparator                    : /
FirstDayOfWeek                   : Sunday
CalendarWeekRule                 : FirstDay
FullDateTimePattern              : dddd, MMMM dd, yyyy h:mm:ss tt
LongDatePattern                  : dddd, MMMM dd, yyyy
LongTimePattern                  : h:mm:ss tt
MonthDayPattern                  : MMMM dd
PMDesignator                     : PM
RFC1123Pattern                   : ddd, dd MMM yyyy HH':'mm':'ss 'GMT'
ShortDatePattern                 : M/d/yyyy
ShortTimePattern                 : h:mm tt
SortableDateTimePattern          : yyyy'-'MM'-'dd'T'HH':'mm':'ss
TimeSeparator                    : :
UniversalSortableDateTimePattern : yyyy'-'MM'-'dd HH':'mm':'ss'Z'
YearMonthPattern                 : MMMM, yyyy
AbbreviatedDayNames              : {Sun, Mon, Tue, Wed...}
ShortestDayNames                 : {Su, Mo, Tu, We...}
DayNames                         : {Sunday, Monday, Tuesday, Wednesday...}
AbbreviatedMonthNames            : {Jan, Feb, Mar, Apr...}
MonthNames                       : {January, February, March, April...}
IsReadOnly                       : False
NativeCalendarName               : Gregorian Calendar
AbbreviatedMonthGenitiveNames    : {Jan, Feb, Mar, Apr...}
MonthGenitiveNames               : {January, February, March, April...}

C:\PS> $c.datetimeformat.firstdayofweek
Sunday

说明
-----------
该示例表明区域性对象中存在大量数据。它演示了如何显示对象的属性和子属性。

第一条命令使用 Get-Culture cmdlet 获取计算机中的当前区域性设置。它将所得到的区域性对象存储在 $c 变量中。

第二条命令显示区域性对象的所有属性。它使用管道运算符 (|) 将 $c 中的区域性对象发送至 Format-List cmdlet。它使用 Property 参数来显示对象的所有 (*) 属性。（此命令可缩写为“$c | fl *”。）

其余的命令通过使用点表示法显示对象属性的值来展示区域性对象的属性。可使用此表示法来显示对象的任意属性的值。

第三条命令使用点表示法来显示区域性对象的 Calendar 属性的值。

第四条命令使用点表示法来显示区域性对象的 DataTimeFormat 属性的值。

许多对象属性都具有属性。第五条命令使用点表示法来显示 DateTimeFormat 属性的 FirstDayOfWeek 属性的值。


Get-Date

获取当前日期和时间。

语法

Get-Date [-格式 <string>] [[-日期] <DateTime>] [-Day <int>] [-DisplayHint {<Date> | <Time> | <DateTime>}] [-Hour <int>] [-Minute <int>] [-Month <int>] [-Second <int>] [-Year <int>] [<CommonParameters>]

Get-Date [-UFormat <string>] [[-日期] <DateTime>] [-Day <int>] [-DisplayHint {<Date> | <Time> | <DateTime>}] [-Hour <int>] [-Minute <int>] [-Month <int>] [-Second <int>] [-Year <int>] [<CommonParameters>]

说明

Get-Date cmdlet 获取 DateTime 对象，该对象表示当前日期或您所指定的日期。它可将日期和时间设置为多种 Windows 和 UNIX 格式。可使用 Get-Date 来生成日期或时间字符串，然后将字符串发送至其他 cmdlet 或程序。

参数

-日期 <DateTime>

指定日期和时间。默认情况下，Get-Date 获取系统当前日期和时间。

以系统区域设置的标准格式键入日期，如 dd-MM-yyyy（德语 [德国]）或 MM/dd/yyyy（英语 [美国]）。

是否为必需？ | false
位置？ | 1
默认值 |
是否接受管道输入？ | true (ByValue, ByPropertyName)
是否接受通配符？ | false

-Day <int>

指定要显示的月的日期。输入一个介于 1-31 之间的值，此值将取代当前日期进行显示。

如果指定的值大于该月中的天数，则 Windows PowerShell 会将该天数添加到此月份并显示结果。例如，“get-date -month 2 -day 31”将显示“March 3”，而不是“February 31”。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-DisplayHint <DisplayHintType>

确定要显示哪些日期和时间元素。

有效值包括：

-- Date：仅显示日期

-- Time：仅显示时间

-- DateTime：显示日期和时间

默认值为 DateTime。

此参数不会影响 Get-Date 检索到的 DateTime 对象。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-格式 <string>

以格式说明符指示的 Microsoft .NET Framework 格式显示日期和时间。输入一个格式说明符。有关可用格式说明符的列表，请参阅 MSDN (Microsoft Developer Network) 库中的“DateTimeFormatInfo 类”，网址是 http://go.microsoft.com/fwlink/?LinkId=143638。

使用 Format 参数时，Windows PowerShell 只检索以指定的格式显示日期所需要的 DateTime 对象属性。因此，可能无法使用 DateTime 对象的某些属性和方法。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Hour <int>

指定要显示的小时。输入一个介于 1-23 之间的值，此值将取代当前时间进行显示。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Minute <int>

指定要显示的分钟数。输入一个介于 1-59 之间的值，此值将取代当前分钟数进行显示。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Month <int>

指定要显示的月份。输入一个介于 1-12 之间的值，此值将取代当前月份进行显示。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Second <int>

指定要显示的秒数。输入一个介于 1-59 之间的值，此值将取代当前秒数进行显示。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-UFormat <string>

以 UNIX 格式显示日期和时间。有关格式说明符列表的信息，请参阅“注释”部分。

使用 UFormat 参数时，Windows PowerShell 只检索以指定的格式显示日期所需要的 DateTime 对象属性。因此，可能无法使用 DateTime 对象的某些属性和方法。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Year <int>

指定要显示的年份。输入一个介于 1-9999 之间的值，此值将取代当前年份进行显示。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

<CommonParameters>

此 cmdlet 支持通用参数：-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。有关详细信息，请参阅 about_Commonparameters.

输入和输出

输入类型是指可通过管道传递给 cmdlet 的对象的类型。返回类型是指 Cmdlet 所返回对象的类型。

输入 | None 不能通过管道将输入传递给此 cmdlet。
输出 | System.DateTime 或 System.String 当使用 Format 或 UFormat 参数时，输出对象是 System.String。

说明

默认情况下，以系统区域设置的长日期和长时间格式显示日期和时间。

当您通过管道将日期传递至接收字符串输入的 cmdlet（如 Add-Content）时，Windows PowerShell 会先将 DateTime 对象转换为字符串，然后才添加到文件中。ToString() 的默认格式为短日期和长时间。要指定备用格式，请使用 Get-Date 的 Format 或 UFormat 参数。

Uformat 值：

UFormat 参数的值如下。命令的格式包括：

get-date -uformat %<value>

例如，

get-date -uformat %d

Date-Time：

日期和时间 - 完整

（默认值）（2006 年 6 月 16 日，星期五，上午 10:31:27）

c 日期和时间 – 缩写（2006 年 6 月 16 日 星期五 10:31:27）

日期：

D 以 mm/dd/yy 格式显示的日期 (06/14/06)

x 以区域设置的标准格式显示的日期（中文-中国 为 07/09/12）

年份：

C 世纪（2006 的世纪值为 20）

Y 以 4 位格式显示的年份 (2006)

y 以 2 位格式显示的年份 (06)

G 同‘Y’

g 同‘y’

月份：

b 月份名称 - 缩写 (1)

B 月份名称 - 全称（一月）

h 同‘b’

M 月份编号 (06)

周：

W 一年中的周编号 (00-52)

V 一年中的周编号 (01-53)

U 同‘W’

日期：

a 一周中的第几日 - 缩写名称（周一）

A 一周中的第几日 - 全名（星期一）

u 一周中的第几日 - 编号（星期一 = 1）

d 一月中的第几日 - 2 位 (05)

e 一月中的第几日 - 数字前留一空格 ( 5)

j 一年中的第几日 - (1-366)

w 同‘u’

时间：

p 上午或下午

r 以 12 小时格式显示的时间（上午 09:15:36）

R 以 24 小时格式显示的时间 - 不显示秒 (17:45)

T 以 24 小时格式显示的时间 (17:45:52)

X 同‘T’

Z 与通用协调时间 (UTC) 的时差 (-07)

小时：

H 以 24 小时格式显示的小时数 (17)

I 以 12 小时格式显示的小时数 (05)

k 同‘H’

l 同‘I’（大写 I = 小写 L）

分钟和秒：

m 分钟 (35)

S 秒 (05)

s 自 1970 年 1 月 1 日 00:00:00 起过去的秒数 (1150451174.95705)

特殊字符：

n 换行符 (\n)

t 制表符 (\t)

示例 1

C:\PS>get-date -DisplayHint date

Tuesday, June 13, 2006

说明
-----------
此命令检索 DateTime 对象，但只显示日期。它使用 DisplayHint 参数指示只显示日期。

示例 2

C:\PS>get-date -format g

6/13/2006 12:43 PM

说明
-----------
此命令检索当前日期和时间，并将其设置为短日期和短时间格式。它使用 .NET Framework“g”格式说明符（通用[短日期和短时间]）来指定格式。

示例 3

C:\PS>get-date -uformat "%Y / %m / %d / %A / %Z"

2006 / 06 / 13 / Tuesday / -07

说明
-----------
此命令检索当前日期和时间，并根据命令的指定来设置其格式。在这种情况下，格式包括年份的全称 (%Y)、两位数字的月份 (%m)、日期 (%d)、一周第几天的全称 (%A)，以及相对于 UTC 的时差（“Zulu”）。

示例 4

C:\PS>(get-date -year 2000 -month 12 -day 31).dayofyear

366

说明
-----------
此命令显示当前日期是一年中的第几天。例如，12 月 31 日是 2006 年的第 365 天，但它是 2000 年的第 366 天。

示例 5

C:\PS>$a = get-date

C:\PS> $a.IsDaylightSavingTime()

True

说明
-----------
这些命令将显示当前的日期和时间是否调整为当前区域设置中的夏令时。

第一条命令创建名为 $a 的变量，然后将由 Get-Date 检索的对象赋予该 $a 变量。然后，对 $a 中的对象使用 IsDaylightSavingTime 方法。

要查看 DateTime 对象的属性和方法，请键入：
 "get-date | get-member".

示例 6

C:\PS>$a = get-date

C:\PS> $a.ToUniversalTime()

Tuesday, June 13, 2006 8:09:19 PM

说明
-----------
这些命令将当前日期和时间转换为 UTC 时间。

第一条命令创建名为 $a 的变量，然后将由 Get-Date 检索的对象赋予该 $a 变量。然后，对 $a 中的对象使用 ToUniversalTime 方法。

示例 7

C:\PS>$a = get-wmiobject win32_bios -computer server01

$a | format-list -property Name, @{Label="BIOS Age"; `
Expression={(get-date) - $_.ConvertToDateTime($_.ReleaseDate)}}

Name     : Default System BIOS
BIOS Age : 1345.17:31:07.1091047

说明
-----------
Windows Management Instrumentation (WMI) 使用不同于 Get-Date 返回的 .NET Framework 日期时间对象的一个日期时间对象。若要在命令中将 WMI 中的日期时间信息与 Get-Date 中的日期时间信息一起使用，则必须使用 ConvertToDateTime 方法将 WMI CIM_DATETIME 对象转换为 .NET Framework DateTime 对象。

此示例中的命令将显示远程计算机 Server01 上的 BIOS 的 name 和 age。

第一条命令使用 Get-WmiObject cmdlet 来获取 Server01 上的 Win32_BIOS 类的实例，然后将其存储到 $a 变量中。

第二条命令使用管道运算符 (|) 将存储在 $a 中的 WMI 对象发送至 Format-List cmdlet。Format-List 的 Property 参数用于指定要在列表中显示的两个属性：“Name”和“BIOS Age”。“BIOS Age”属性将在哈希表中指定。该表包括 Label 键（指定属性的名称）和 Expression 键（包含计算 BIOS age 的表达式）。该表达式使用 ConvertToDateTime 方法将 ReleaseDate 的每个实例转换为 .NET Framework DateTime 对象。然后，从 Get-Date cmdlet 的值中减去该值，此 cmdlet 在不带参数的情况下获取当前日期。

在 Windows PowerShell 中，倒引号字符 (`) 为行继续符。

示例 8

C:\PS>get-date

Tuesday, June 13, 2006 12:43:42 PM

说明
-----------
此命令获取 DateTime 对象并以系统区域设置的长日期和长时间格式来显示当前日期和时间，就好像您键入了“get-date -format F”一样。

示例 9

C:\PS>get-date

C:\PS> Tuesday, September 26, 2006 11:25:31 AM

c:\PS>(get-date).ToString()
9/26/2006 11:25:31 AM

C:\PS>get-date | add-content test.txt
# Adds 9/26/2006 11:25:31 AM

C:\PS>get-date -format F | add-content test.txt
# Adds Tuesday, September 26, 2006 11:25:31 AM

说明
-----------
这些命令演示了如何结合使用 Get-Date 和 Add-Content 以及其他 cmdlet（这些 cmdlet 可将 Get-Date 生成的 DateTime 对象转换为字符串）。

第一条命令表明“get-date”命令的默认显示采用长日期和长时间格式。

第二条命令表明 DateTime 对象的 ToString() 方法的默认显示采用短日期和短时间格式。

第三条命令使用管道运算符将 DateTime 对象发送至 Add-Content cmdlet，该 cmdlet 将内容添加到 Test.txt 文件中。由于 Add-Content 使用 DateTime 对象的 ToString() 方法，所以所添加的日期采用短日期和短时间格式。

第四条命令使用 Get-Date 的 Format 参数来指定格式。当使用 Format 或 UFormat 参数时，Get-Date 生成字符串，而不是 DateTime 对象。之后，当您将字符串发送到 Add-Content 时，它会在不更改字符串的情况下直接将该字符串添加到 Test.txt 文件中。

另请参阅

  • Set-Date
  • New-TimeSpan


Get-Event

获取事件队列中的事件。

语法

Get-Event [-EventIdentifier] <int> [<CommonParameters>]

Get-Event [[-SourceIdentifier] <string>] [<CommonParameters>]

说明

Get-Event cmdlet 获取当前会话的 Windows PowerShell 事件队列中的事件。您可以获取所有事件，也可以使用 EventIdentifier 或 SourceIdentifier 参数指定事件。

当发生某事件时，会将其添加到事件队列中。事件队列包括已注册的事件、使用 New-Event cmdlet 创建的事件，以及当 Windows PowerShell 退出时引发的事件。可使用 Get-Event 或 Wait-Event 来获取事件。

此 cmdlet 不会从“事件查看器”日志中获取事件。要获取这些事件，请使用 Get-WinEvent 或 Get-EventLog。

参数

-EventIdentifier <int>

仅获取具有指定事件标识符的事件。

是否为必需？ | true
位置？ | 1
默认值 |
是否接受管道输入？ | true (ByPropertyName)
是否接受通配符？ | false

-SourceIdentifier <string>

仅获取具有指定源标识符的事件。默认值为事件队列中的所有事件。不允许使用通配符。

是否为必需？ | false
位置？ | 1
默认值 | All events
是否接受管道输入？ | true (ByPropertyName)
是否接受通配符？ | false

<CommonParameters>

此 cmdlet 支持通用参数：-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。有关详细信息，请参阅 about_Commonparameters.

输入和输出

输入类型是指可通过管道传递给 cmdlet 的对象的类型。返回类型是指 Cmdlet 所返回对象的类型。

输入 | None 不能通过管道将输入传递给此 cmdlet。
输出 | System.Management.Automation.PSEventArgs Get-Event 为每个事件返回一个 PSEventArgs 对象。若要查看此对象的说明，请键入“get-help get-event -full”，然后查看帮助主题的“注释”部分。

说明

事件、事件订阅和事件队列仅存在于当前会话中。如果关闭当前会话，将丢弃事件队列并取消事件订阅。

Get-Event cmdlet 返回具有以下属性的 PSEventArgs 对象 (System.Management.Automation.PSEventArgs)。

-- ComputerName：发生该事件的计算机的名称。只有在从远程计算机转发该事件时，才填充此属性值。

-- RunspaceId：一个 GUID，用于唯一标识该事件发生时所在的会话。只有在从远程计算机转发该事件时，才填充此属性值。

-- EventIdentifier：一个整数 (Int32)，用于唯一标识当前会话中的事件通知。

-- Sender：生成事件的对象。在 Action 参数的值中，$Sender 自动变量包含发送方对象。

-- SourceEventArgs：从 EventArgs 派生的第一个参数（如果存在）。例如，在签名形式为“Object sender, Timers.ElapsedEventArgs e”的 Timer Elapsed 事件中，SourceEventArgs 属性包含 Timers.ElapsedEventArgs。在 Action 参数的值中，$SourceEventArgs 自动变量包含此值。

-- SourceArgs：原始事件签名的所有参数。对于标准事件签名，$args[0] 表示发送方，$args[1] 表示 SourceEventArgs。在 Action 参数的值中，$SourceArgs 自动变量包含此值。

-- SourceIdentifier：用于标识事件订阅的字符串。在 Action 参数的值中，$Event 自动变量的 SourceIdentifier 属性包含此值。

-- TimeGenerated：一个 DateTime 对象，表示事件的生成时间。在 Action 参数的值中，$Event 自动变量的 TimeGenerated 属性包含此值。

--MessageData：与事件订阅关联的数据。用户在注册事件时指定此数据。在 Action 参数的值中，$Event 自动变量的 MessageData 属性包含此值。

示例 1

C:\PS>get-event

说明
-----------
此命令获取事件队列中的所有事件。

示例 2

C:\PS>get-event -sourceIdentifier "PowerShell.ProcessCreated"

说明
-----------
此命令获取其中所含 SourceIdentifier 属性的值为“PowerShell.ProcessCreated”的事件。

示例 3

C:\PS>$events = get-event

C:\PS> $events[0] | format-list -property *

ComputerName     :
RunspaceId       : c2153740-256d-46c0-a57c-b805917d1b7b
EventIdentifier  : 1
Sender           : System.Management.ManagementEventWatcher
SourceEventArgs  : System.Management.EventArrivedEventArgs
SourceArgs       : {System.Management.ManagementEventWatcher, System.Management.EventArrivedEventArgs}
SourceIdentifier : ProcessStarted
TimeGenerated    : 11/13/2008 12:09:32 PM
MessageData      :

C:\PS> get-event | where {$_.TimeGenerated -ge "11/13/2008 12:15:00 PM"}

ComputerName     :
RunspaceId       : c2153740-256d-46c0-a57c-b8059325d1a0
EventIdentifier  : 1
Sender           : System.Management.ManagementEventWatcher
SourceEventArgs  : System.Management.EventArrivedEventArgs
SourceArgs       : {System.Management.ManagementEventWatcher, System.Management.EventArrivedEventArgs}
SourceIdentifier : ProcessStarted
TimeGenerated    : 11/13/2008 12:15:00 PM
MessageData      :

说明
-----------
此示例演示了如何使用属性而不是 SourceIdentifier 来获取事件。

第一条命令获取事件队列中的所有事件并将其保存在 $events 变量中。

第二条命令使用数组表示法来获取 $events 变量的数组中的第一个（索引为 0）事件。该命令使用管道运算符 (|) 将事件发送至 Format-List 命令，后者显示列表中事件的所有属性。这样，您便可以检查事件对象的属性。

第三条命令演示了如何基于事件的生成时间，使用 Where-Object cmdlet 来
获取事件。

示例 4

C:\PS>get-event -eventIdentifier 2

说明
-----------
此命令获取事件标识符为 2 的事件。

另请参阅

  • Register-ObjectEvent
  • Register-EngineEvent
  • Register-WmiEvent
  • Unregister-Event
  • New-Event
  • Remove-Event
  • Wait-Event


Get-EventLog

获取本地或远程计算机上的事件日志或事件日志列表中的事件。

语法

Get-EventLog [-AsString] [-ComputerName <string[]>] [-List] [<CommonParameters>]

Get-EventLog [-LogName] <string> [[-InstanceId] <Int64[]>] [-After <DateTime>] [-AsBaseObject] [-Before <DateTime>] [-ComputerName <string[]>] [-EntryType <string[]>] [-Index <Int32[]>] [-Message <string>] [-Newest <int>] [-Source <string[]>] [-UserName <string[]>] [<CommonParameters>]

说明

Get-EventLog cmdlet 获取本地和远程计算机上的事件和事件日志。

使用 Get-EventLog 的参数来按事件属性值搜索事件。Get-EventLog 只获取与指定的所有属性值匹配的事件。

包含 EventLog 名词的 cmdlet (EventLog cmdlet) 仅适用于传统事件日志。要从使用 Windows Vista 以及 Windows 更高版本中的 Windows 事件日志技术的日志中获取事件，请使用 Get-WinEvent。

参数

-After <DateTime>

只获取在指定的日期和时间之后发生的事件。输入 DateTime 对象，例如 Get-Date cmdlet 返回的 DateTime 对象。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-AsBaseObject

为每个事件返回一个标准 System.Diagnostics.EventLogEntry 对象。如果不使用此参数，则 Get-EventLog 返回具有附加的 EventLogName、Source 和 InstanceId 属性的扩展 PSObject 对象。

要查看此参数的效果，请将事件通过管道传送给 Get-Member cmdlet 并检查结果中的 TypeName 值。

是否为必需？ | false
位置？ | named
默认值 | False
是否接受管道输入？ | false
是否接受通配符？ | false

-AsString

以字符串而非对象的形式返回输出。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Before <DateTime>

只获取在指定的日期和时间之前发生的事件。输入 DateTime 对象，例如 Get-Date cmdlet 返回的 DateTime 对象。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-ComputerName <string[]>

指定远程计算机。默认值为本地计算机。

键入远程计算机的 NetBIOS 名称、Internet 协议 (IP) 地址或完全限定的域名。要指定本地计算机，请键入计算机名称、句点 (.) 或“localhost”。

此参数不依赖于 Windows PowerShell 远程处理。即使您的计算机未配置为运行远程命令，您也可以使用 Get-EventLog 的 ComputerName 参数。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-EntryType <string[]>

只获取具有指定条目类型的事件。有效值包括 Error、Information、FailureAudit、SuccessAudit 和 Warning。默认值为所有事件。

是否为必需？ | false
位置？ | named
默认值 | All events
是否接受管道输入？ | false
是否接受通配符？ | false

-Index <Int32[]>

只获取具有指定索引值的事件。

是否为必需？ | false
位置？ | named
默认值 | All events
是否接受管道输入？ | false
是否接受通配符？ | false

-InstanceId <Int64[]>

只获取具有指定实例 ID 的事件。

是否为必需？ | false
位置？ | 2
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-List

获取计算机上的事件日志列表。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-LogName <string>

指定事件日志。输入一个事件日志的日志名称（Log 属性的值；而非 LogDisplayName）。不允许使用通配符。此参数是必需的。

是否为必需？ | true
位置？ | 1
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Message <string>

获取其消息中具有指定字符串的事件。可以使用此属性来搜索包含特定单词或短语的消息。允许使用通配符。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | true

-Newest <int>

指定检索的事件的最大数目。Get-EventLog 从日志中的最新事件开始，获取指定数目的事件。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Source <string[]>

获取由指定的源写入日志的事件。允许使用通配符。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | true

-UserName <string[]>

只获取与指定的用户名相关联的事件。输入名称或名称模式，如 User01、User* 或 Domain01\User*。允许使用通配符。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | true

<CommonParameters>

此 cmdlet 支持通用参数：-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。有关详细信息，请参阅 about_Commonparameters.

输入和输出

输入类型是指可通过管道传递给 cmdlet 的对象的类型。返回类型是指 Cmdlet 所返回对象的类型。

输入 | 无。 不能通过管道将输入传递给此 cmdlet。
输出 | System.Diagnostics.EventLogEntry.System.Diagnostics.EventLog.System.String 如果指定了 LogName 参数，则输出将为 EventLogEntry 对象 (System.Diagnostics.EventLogEntry) 的集合。 如果仅指定了 List 参数，则输出将为 EventLog 对象 (System.Diagnostics.EventLog) 的集合。 如果同时指定了 List 和 AsString 参数，则输出将为 String (System.String) 的集合。

示例 1

C:\PS>get-eventlog -list

说明
-----------
此命令显示有关计算机上的事件日志的信息。

示例 2

C:\PS>get-eventlog -newest 5 -logname application

说明
-----------
此命令显示 Application 事件日志中的五个最新条目。

示例 3

C:\PS>$events = get-eventlog -logname system -newest 1000

C:\PS> $events | group-object -property source -noelement | sort-object -property count -descending

Count Name
----- ----
   75 Service Control Manager
   12 Print
    6 UmrdpService
    2 DnsApi
    2 DCOM
    1 Dhcp
    1 TermDD
    1 volsnap

说明
-----------
此示例演示如何查找系统事件日志中的 1000 个最新条目中表示的所有源。

第一个命令从系统事件日志中获取 1000 个最新条目，并将这些条目存储在 $events 变量中。

第二个命令使用管道运算符 (|) 将 $events 中的事件发送给 Group-Object cmdlet，后者按 Source 属性的值对条目进行分组。该命令使用第二个管道运算符将经过分组的事件发送给 Sort-Object cmdlet，后者对其进行降序排序，因此出现频率最高的源将列在最前面。

Source 就是事件日志条目的属性。要查看事件日志条目的所有属性，请将事件通过管道传送给 Get-Member cmdlet。

示例 4

C:\PS>get-eventlog -logname System -EntryType Error

说明
-----------
此命令只获取系统事件日志中的错误事件。

示例 5

C:\PS>get-eventlog -logname System -instanceID 3221235481 -Source "DCOM"

说明
-----------
此命令从系统日志中获取 InstanceID 为 3221235481 且 Source 值为“DCOM”的事件。

示例 6

C:\PS>get-eventlog -logname "Windows PowerShell" -computername localhost, Server01, Server02

说明
-----------
此命令从三台计算机上的“Windows PowerShell”事件日志中获取事件，这三台计算机分别是 Server01、Server02 和本地计算机（称为“localhost”）。

示例 7

C:\PS>get-eventlog -logname "Windows PowerShell" -message "*failed*"

说明
-----------
此命令获取 Windows PowerShell 事件日志中消息值包括单词“failed”的所有事件。

示例 8

C:\PS>$a = get-eventlog -log System -newest 1

C:\PS> $a | format-list -property *

EventID            : 7036
MachineName        : Server01
Data               : {}
Index              : 10238
Category           : (0)
CategoryNumber     : 0
EntryType          : Information
Message            : The description for Event ID
Source             : Service Control Manager
ReplacementStrings : {WinHTTP Web Proxy Auto-Disco
InstanceId         : 1073748860
TimeGenerated      : 4/11/2008 9:56:05 PM
TimeWritten        : 4/11/2008 9:56:05 PM
UserName           :
Site               :
Container          :

说明
-----------
此示例演示如何显示事件的所有属性值。

第一个命令获取系统事件日志中的最新事件并将其保存在 $a 变量中。

第二个命令使用管道运算符 (|) 将 $a 中的事件发送给 Format-List 命令，后者将显示所有 (*) 事件属性。

示例 9

C:\PS>get-eventlog -log application -source outlook | where {$_.eventID -eq 34}

说明
-----------
此命令获取应用程序事件日志中源为 Outlook 且事件 ID 为 34 的事件。即使 Get-EventLog 没有 EventID 参数，也可以使用 Where-Object cmdlet 来根据任何事件属性的值选择事件。

示例 10

C:\PS>get-eventlog -log system -username NT* | group-object -property username -noelement | format-table Count, Name -auto

Count Name
----- ----
 6031 NT AUTHORITY\SYSTEM
   42 NT AUTHORITY\LOCAL SERVICE
    4 NT AUTHORITY\NETWORK SERVICE

说明
-----------
此命令返回系统日志中按其 UserName 属性值分组的事件。Get-EventLog 命令使用 UserName 参数来只获取用户名以“NT*”开头的事件。

示例 11

C:\PS>$May31 = get-date 5/31/08

C:\PS> $July1 = get-date 7/01/08

C:\PS> get-eventlog -log "Windows PowerShell" -entrytype Error -after $may31 -before $july1

说明
-----------
此命令获取 Windows Powershell 事件日志中 2008 年 6 月发生的所有错误。

另请参阅

  • Get-WinEvent
  • Clear-EventLog
  • Limit-EventLog
  • New-EventLog
  • Remove-EventLog
  • Show-EventLog
  • Write-EventLog
  • Get-WinEvent


Get-EventSubscriber

获取当前会话中的事件订阅者。

语法

Get-EventSubscriber [-SubscriptionId] <int> [-Force] [<CommonParameters>]

Get-EventSubscriber [[-SourceIdentifier] <string>] [-Force] [<CommonParameters>]

说明

Get-EventSubscriber cmdlet 获取当前会话中的事件订阅者。

当使用 Register 事件 cmdlet 来订阅事件时，会将事件订阅者添加到 Windows PowerShell 会话中，每当发生所订阅的事件时，就会将其添加到事件队列中。要取消事件订阅，请使用 Unregister-Event cmdlet 来删除事件订阅者。

参数

-Force

获取所有事件订阅者，包括使用 Register-ObjectEvent、Register-WmiEvent 和 Register-EngineEvent 的 SupportEvent 参数隐藏的事件的订阅者。

是否为必需？ | false
位置？ | 2
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-SourceIdentifier <string>

仅获取具有指定 SourceIdentifier 属性值的事件订阅者。默认情况下，Get-EventSubscriber 获取会话中的所有事件订阅者。不允许使用通配符。此参数区分大小写。

是否为必需？ | false
位置？ | 1
默认值 | All event subscribers
是否接受管道输入？ | true (ByPropertyName)
是否接受通配符？ | false

-SubscriptionId <int>

只获取指定的订阅标识符。默认情况下，Get-EventSubscriber 获取会话中的所有事件订阅者。

是否为必需？ | true
位置？ | 1
默认值 | 无
是否接受管道输入？ | true (ByPropertyName)
是否接受通配符？ | false

<CommonParameters>

此 cmdlet 支持通用参数：-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。有关详细信息，请参阅 about_Commonparameters.

输入和输出

输入类型是指可通过管道传递给 cmdlet 的对象的类型。返回类型是指 Cmdlet 所返回对象的类型。

输入 | None 不能通过管道将输入传递给此 cmdlet。
输出 | System.Management.Automation.PSEventSubscriber Get-EventSubscriber 返回表示每个事件订阅者的对象。

说明

New-Event cmdlet 创建自定义事件，但不生成订阅者。因此，Get-EventSubscriber cmdlet 将无法找到这些事件的订阅者对象。不过，如果使用 Register-EngineEvent cmdlet 来订阅自定义事件（以便转发事件或指定操作），则 Get-EventSubscriber 将找到 Register-EngineEvent 生成的订阅者。

事件、事件订阅和事件队列仅存在于当前会话中。如果关闭当前会话，将丢弃事件队列并取消事件订阅。

示例 1

C:\PS>$timer = New-Object Timers.Timer

C:\PS> $timer | Get-Member -Type Event

C:\PS> Register-ObjectEvent -inputObject $timer -EventName Elapsed -SourceIdentifier Timer.Elapsed

C:\PS> Get-EventSubscriber

C:\PS> $timer = New-Object Timers.Timer

C:\PS> $timer | Get-Member -Type Event

   TypeName: System.Timers.Timer

Name     MemberType Definition
----     ---------- ----------
Disposed Event      System.EventHandler Disposed(System.Object, System.EventArgs)
Elapsed  Event      System.Timers.ElapsedEventHandler Elapsed(System.Object, System.Timers.ElapsedEventArgs)

C:\PS> Register-ObjectEvent -InputObject $timer -EventName Elapsed -SourceIdentifier Timer.Elapsed

C:\PS> Get-EventSubscriber

SubscriptionId   : 4
SourceObject     : System.Timers.Timer
EventName        : Elapsed
SourceIdentifier : Timer.Elapsed
Action           :
HandlerDelegate  :
SupportEvent     : False
ForwardEvent     : False

说明
-----------
此示例使用 Get-EventSubscriber 命令来获取计时器事件的事件订阅者。

第一条命令使用 New-Object cmdlet 创建计时器对象的实例。它将新计时器对象保存在 $timer 变量中。

第二条命令使用 Get-Member cmdlet 来显示可用于计时器对象的事件。该命令使用 Get-Member cmdlet 的 Type 参数，该参数的值为 Event。

第三条命令使用 Register-ObjectEvent cmdlet 来注册计时器对象的 Elapsed 事件。

第四条命令使用 Get-EventSubscriber cmdlet 来获取 Elapsed 事件的事件订阅者。

示例 2

C:\PS>$timer  = New-Object Timers.Timer

C:\PS> $timer.Interval = 500

C:\PS> Register-ObjectEvent -inputObject $timer -eventName Elapsed -sourceIdentifier Timer.Random -Action { $random = Get-Random -Min 0 -Max 100 }

Id  Name           State      HasMoreData  Location  Command
--  ----           -----      -----------  --------  -------
3   Timer.Random   NotStarted False                  $random = Get-Random ...

C:\PS> $timer.Enabled = $true

C:\PS> $subscriber = Get-EventSubcriber -sourceIdentifer Timer.Random

C:\PS> ($subscriber.action).gettype().fullname
PSEventJob

C:\PS> $subscriber.action | format-list -property *

State         : Running
Module        : __DynamicModule_6b5cbe82-d634-41d1-ae5e-ad7fe8d57fe0
StatusMessage :
HasMoreData   : True
Location      :
Command       : $random = Get-Random -Min 0 -Max 100
JobStateInfo  : Running
Finished      : System.Threading.ManualResetEvent
InstanceId    : 88944290-133d-4b44-8752-f901bd8012e2
Id            : 1
Name          : Timer.Random
ChildJobs     : {}
...

C:\PS> & $subscriber.action.module {$random}
96

C:\PS> & $subscriber.action.module {$random}
23

说明
-----------
此示例演示如何在事件订阅者的 Action 属性中的 PSEventJob 对象中使用动态模块。

第一条命令使用 New-Object cmdlet 创建一个计时器对象。第二条命令将计时器间隔设置为 500（毫秒）。

第三条命令使用 Register-ObjectEvent cmdlet 注册该计时器对象的 Elapsed 事件。该命令包含处理该事件的操作。每当经过该计时器间隔时，就会引发一个事件并运行操作中的命令。在此示例中，Get-Random cmdlet 生成一个介于 0 和 100 之间的随机数，并将其保存在 $random 变量中。事件的源标识符是 Timer.Random。

在 Register-ObjectEvent 命令中使用 Action 参数时，该命令返回表示该操作的 PSEventJob 对象。

第四条命令启用计时器。

第五条命令使用 Get-EventSubscriber cmdlet 来获取 Timer.Random 事件的事件订阅者。它将事件订阅者对象保存在 $subscriber 变量中。

第六条命令显示事件订阅者对象的 Action 属性包含一个 PSEventJob 对象。事实上，它包含与 Register-ObjectEvent 命令返回的 PSEventJob 对象相同的对象。

第七条命令使用 Format-List cmdlet 在列表中的 Action 属性中显示 PSEventJob 对象的所有属性。结果显示，PSEventJob 对象具有 Module 属性，该属性包含实现该操作的动态脚本模块。

其余的命令使用调用运算符 (&) 调用模块中的命令并显示 $random 变量的值。您可以使用调用运算符调用模块中的任何命令，包括未导出的命令。在此示例中，这些命令显示 Elapsed 事件发生时所生成的随机数。

有关模块的详细信息，请参阅 about_Modules。

另请参阅

  • Register-ObjectEvent
  • Register-EngineEvent
  • Register-WmiEvent
  • Unregister-Event
  • Get-Event
  • New-Event
  • Remove-Event
  • Wait-Event


Get-ExecutionPolicy

获取当前会话中的执行策略。

语法

Get-ExecutionPolicy [[-Scope] {<Process> | <CurrentUser> | <LocalMachine> | <UserPolicy> | <MachinePolicy>}] [-List] [<CommonParameters>]

说明

Get-ExecutionPolicy cmdlet 获取当前会话中的执行策略。

执行策略由使用 Set-ExecutionPolicy 设置的执行策略以及 Windows PowerShell 执行策略设置的组策略设置来确定。默认值为“Restricted”。

如果不带参数，Get-ExecutionPolicy 将获取会话中的有效执行策略。可以使用 List 参数获取影响会话的所有执行策略，也可以使用 Scope 参数获取特定作用域的执行策略。

有关详细信息，请参阅 about_Execution_Policies。

参数

-List

获取会话的所有按优先级顺序列出的执行策略值。默认情况下，Get-ExecutionPolicy 仅获取有效执行策略。

是否为必需？ | false
位置？ | named
默认值 | False
是否接受管道输入？ | false
是否接受通配符？ | false

-Scope <ExecutionPolicyScope>

获取指定作用域中的执行策略。默认情况下，Get-ExecutionPolicy 将获取当前会话中的有效执行策略。

有效值包括：

-- MachinePolicy：由计算机上的所有用户的组策略设置的执行策略。

-- UserPolicy：由计算机上的当前用户的组策略设置的执行策略。

-- Process：为当前的 Windows PowerShell 进程设置的执行策略。

-- CurrentUser：为当前用户设置的执行策略。

-- LocalMachine：为计算机上的所有用户设置的执行策略。

是否为必需？ | false
位置？ | 1
默认值 | Effective execution policy
是否接受管道输入？ | true (ByPropertyName)
是否接受通配符？ | false

<CommonParameters>

此 cmdlet 支持通用参数：-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。有关详细信息，请参阅 about_Commonparameters.

输入和输出

输入类型是指可通过管道传递给 cmdlet 的对象的类型。返回类型是指 Cmdlet 所返回对象的类型。

输入 | None 不能通过管道将输入传递给此 cmdlet。
输出 | Microsoft.PowerShell.ExecutionPolicy Get-ExecutionPolicy 针对每个所获取的执行策略返回一个对象。

说明

使用 Get-ExecutionPolicy 无法获取为特定作用域设置的特定执行策略，也无法获取由组策略设置的执行策略。Get-ExecutionPolicy 只会获取由于应用所有优先级规则而得出的有效执行策略。

执行策略是 Windows PowerShell 安全策略的一部分。它确定是否可以加载配置文件（包括 Windows PowerShell 配置文件）和运行脚本，并且确定哪些脚本（如果有）在运行之前必须进行数字签名。

有效执行策略由使用 Set-ExecutionPolicy 设置的策略以及计算机和用户的“启动脚本执行”组策略来确定。优先级顺序为：计算机组策略 > 用户组策略 > 进程（会话）执行策略 > 用户执行策略 > 计算机执行策略。

有关 Windows PowerShell 执行策略的详细信息（包括 Windows PowerShell 策略的定义），请参阅 about_Execution_Policies。

示例 1

C:\PS>get-executionpolicy

Restricted

说明
-----------
此命令获取 shell 的当前执行策略。

示例 2

C:\PS>set-executionpolicy RemoteSigned; get-executionPolicy

RemoteSigned

说明
-----------
这些命令为 shell 执行策略设置新的用户首选项，然后显示有效的执行策略。这些命令以分号 (;) 分隔。在此示例中，由于没有任何组策略设置，因此用户首选项即为 shell 的有效策略。

示例 3

C:\PS>get-executionpolicy -list

        Scope  ExecutionPolicy
        -----  ---------------
MachinePolicy  Undefined
   UserPolicy  Undefined
      Process  Undefined
  CurrentUser  AllSigned
 LocalMachine  RemoteSigned

C:\PS> get-executionpolicy
AllSigned

说明
-----------
这些命令获取当前会话中的所有执行策略以及有效的执行策略。

第一个命令获取影响当前会话的所有执行策略。这些策略按优先级顺序列出。

第二个命令仅获取有效的执行策略，这是在 CurrentUser 作用域中设置的执行策略。

另请参阅

  • Set-ExecutionPolicy
  • Get-AuthenticodeSignature
  • Set-AuthenticodeSignature
  • about_Execution_Policies
  • about_Signing


Get-FormatData

获取当前会话中的格式数据。

语法

Get-FormatData [[-TypeName] <string[]>] [<CommonParameters>]

说明

Get-FormatData cmdlet 获取当前会话中的格式数据。

会话中的格式数据包括 Format.ps1xml 格式设置文件（如 $pshome 目录中的文件）中的格式数据、导入到会话中的模块的格式数据，以及使用 Import-PSSession cmdlet 导入到会话中的命令的格式数据。

可以使用此 cmdlet 检查格式数据。然后，可以使用 Export-FormatData cmdlet 将对象序列化（将它们转换为 XML），并将它们保存在 Format.ps1xml 文件中。

有关 Windows PowerShell 中格式设置文件的详细信息，请参阅 about_Format.ps1xml。

参数

-TypeName <string[]>

只获取具有指定类型名称的格式数据。输入类型名称。允许使用通配符。

是否为必需？ | false
位置？ | 1
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | true

<CommonParameters>

此 cmdlet 支持通用参数：-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。有关详细信息，请参阅 about_Commonparameters.

输入和输出

输入类型是指可通过管道传递给 cmdlet 的对象的类型。返回类型是指 Cmdlet 所返回对象的类型。

输入 | None 不能通过管道将输入传递给此 cmdlet。
输出 | System.Management.Automation.ExtendedTypeDefinition

示例 1

C:\PS>get-formatdata

说明
-----------
此命令获取会话中的格式数据。

示例 2

C:\PS>get-formatdata -typename Microsoft.Wsman*

说明
-----------
此命令获取名称以“Microsoft.Wsman”开头的格式数据项。

示例 3

C:\PS>$f = get-formatdata -typename helpinfoshort

C:\PS> $f

TypeName        FormatViewDefinition
--------        --------------------
HelpInfoShort   {help , TableControl}

C:\PS> $f.FormatViewDefinition[0].control

Headers                                                                    Rows
-------                                                                    ----
{System.Management.Automation.TableControlColumnHeader, System.Manageme... {System.Management.Automation.TableControlRow}

C:\PS> $f.FormatViewDefinition[0].control.headers

Label         Alignment      Width
-----         ---------      -----
Name          Left           33
Category      Left           9
              Undefined      0

说明
-----------
此示例演示如何获取格式数据对象并检查其属性。

示例 4

C:\PS>$a = get-formatdata

C:\PS> import-module bitstransfer
C:\PS> $b = get-formatdata
C:\PS> compare-object $a $b

InputObject                                                SideIndicator
-----------                                                -------------
Microsoft.BackgroundIntelligentTransfer.Management.BitsJob =>

C:\PS> get-formatdata *bits* | export-formatdata -filepath c:\test\bits.format.ps1xml

C:\PS> get-content c:\test\bits.format.ps1xml

<?xml version="1.0" encoding="utf-8"?><Configuration><ViewDefinitions>
<View><Name>Microsoft.BackgroundIntelligentTransfer.Management.BitsJob</Name>
...

说明
-----------
此示例演示如何使用 Get-FormatData 和 Export-FormatData 导出由模块添加的格式数据。

前四条命令使用 Get-FormatData、Import-Module 和 Compare-Object cmdlet 来标识 BitsTransfer 模块添加到会话中的格式类型。

第五条命令使用 Get-FormatData cmdlet 来获取 BitsTransfer 模块添加的格式类型。它使用管道运算符 (|) 将格式类型对象发送到 Export-FormatData cmdlet，该 cmdlet 将格式类型对象转换回 XML，并将其保存在指定的 format.ps1xml 文件中。

最后一条命令显示 format.ps1xml 文件内容的摘要。

另请参阅

  • Export-FormatData
  • Update-FormatData


Get-Help

显示有关 Windows PowerShell 命令和概念的信息。

语法

Get-Help [-Full] [[-Name] <string>] [-Category <string[]>] [-Component <string[]>] [-Functionality <string[]>] [-Online] [-Path <string>] [-Role <string[]>] [<CommonParameters>]

Get-Help [-Detailed] [[-Name] <string>] [-Category <string[]>] [-Component <string[]>] [-Functionality <string[]>] [-Online] [-Path <string>] [-Role <string[]>] [<CommonParameters>]

Get-Help [-示例] [[-Name] <string>] [-Category <string[]>] [-Component <string[]>] [-Functionality <string[]>] [-Online] [-路径 <string>] [-Role <string[]>] [<CommonParameters>]

Get-Help [-Parameter <string>] [[-Name] <string>] [-Category <string[]>] [-Component <string[]>] [-Functionality <string[]>] [-Online] [-路径 <string>] [-Role <string[]>] [<CommonParameters>]

说明

Get-Help cmdlet 显示有关 Windows PowerShell 概念和命令（包括 cmdlet、提供程序、函数和脚本）的信息。要获取所有 cmdlet 帮助主题标题的列表，请键入“get-help *”。

如果键入“Get-Help”并在其后键入帮助主题的确切名称或某个帮助主题特有的字，Get-Help 会显示该主题的内容。如果您输入了出现在若干个帮助主题标题中的字或字图，Get-Help 将显示匹配标题的列表。如果输入的字未出现在任何帮助主题标题中，Get-Help 将显示内容中包括该字的主题的列表。

除“get-help”外，还可以键入“help”或“man”（一次显示一屏文本），或者键入“<cmdlet-name> -?”（与 Get-Help 相同，但只适用于 cmdlet）。

可以显示完整的帮助文件，或其中的选定部分，如语法、参数或示例。还可使用 Online 参数在 Internet 浏览器中显示帮助文件的联机版本。这些参数对概念性帮助主题没有影响。

Windows PowerShell 中的概念性帮助主题以“about_”开头，如“about_Comparison_Operators”。要查看所有“about_”主题，请键入“get-help about_*”。要查看特定主题，请键入“get-help about_<主题名>”，如“get-help about_Comparison_Operators”。

参数

-Category <string[]>

显示指定类别中项的帮助。有效值为 Alias、Cmdlet、Provider 和 HelpFile。概念性主题在 HelpFile 类别中。

Category 是 Get-Help 返回的 MamlCommandHelpInfo 对象的一个属性。此参数不影响概念性（“about_”）帮助的显示。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Component <string[]>

显示具有指定的组件值（例如“Exchange”）的工具的列表。输入组件名。允许使用通配符。

Component 是 Get-Help 返回的 MamlCommandHelpInfo 对象的一个属性。此参数不影响概念性（“About_”）帮助的显示。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Detailed

将参数说明以及示例添加到基本的帮助显示中。

此参数不影响概念性（“About_”）帮助的显示。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-示例

只显示名称、摘要和示例。要只显示示例，请键入“(get-help <cmdlet-name>).examples”。

此参数不影响概念性（“About_”）帮助的显示。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Full

显示一个 cmdlet 的完整帮助文件，其中包括参数说明和属性、示例、输入和输出对象类型以及附加注释。

此参数不影响概念性（“About_”）帮助的显示。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Functionality <string[]>

显示具有指定功能的项的帮助。输入功能。允许使用通配符。

Functionality 是 Get-Help 返回的 MamlCommandHelpInfo 对象的一个属性。此参数不影响概念性（“About_”）帮助的显示。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Name <string>

请求有关指定的工具或概念性主题的帮助。输入 cmdlet、提供程序、脚本或函数名称（如 Get-Member）、概念性主题名称（如“about_Objects”）或别名（如“ls”）。在 cmdlet 和提供程序名称中允许使用通配符，但不能使用通配符查找函数帮助和脚本帮助主题的名称。

若要为不在 Path 环境变量中所列出的路径中的脚本获取帮助，请键入该脚本的路径和文件名。

如果您输入的正好是帮助主题的名称，Get-Help 将显示主题内容。如果您输入了出现在若干个帮助主题标题中的字或字图，Get-Help 将显示匹配标题的列表。如果您输入的字不匹配任何帮助主题标题，Get-Help 将显示内容包括该字的主题的列表。

概念主题的名称（如 about_Objects）必须用英文输入，即使在非英文版的 Windows PowerShell 中也是如此。

是否为必需？ | false
位置？ | 1
默认值 |
是否接受管道输入？ | true (ByPropertyName)
是否接受通配符？ | false

-Online

在默认的 Internet 浏览器中显示帮助主题的联机版本。此参数仅适用于 cmdlet、函数和脚本帮助主题。

Get-Help 使用显示在 cmdlet、函数或脚本帮助主题的“相关链接”部分的第一个项中的 Internet 地址（统一资源标识符 [URI]）。仅当帮助主题包含以“Http”或“Https”开头的 URI 并且系统上已安装 Internet 浏览器时，此参数才适用。

有关在您编写的帮助主题中支持该功能的信息，请参阅 about_Comment_Based_Help，另请参阅 MSDN (Microsoft Developer Network) Library 中的“如何编写 Cmdlet 帮助”，网址是 http://go.microsoft.com/fwlink/?LinkID=123415。

是否为必需？ | false
位置？ | named
默认值 | 无
是否接受管道输入？ | false
是否接受通配符？ | false

-Parameter <string>

只显示指定参数的详细说明。允许使用通配符。

此参数不影响概念性（“About_”）帮助的显示。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-路径 <string>

获取说明 cmdlet 如何在指定的提供程序路径中工作的帮助。输入 Windows PowerShell 提供程序路径。

此参数获取 cmdlet 帮助主题的自定义版本，该帮助主题说明 cmdlet 如何在指定的 Windows PowerShell 提供程序路径中工作。此参数仅对于有关提供程序 cmdlet 的帮助有效，并且仅当该提供程序包括自定义版本的提供程序 cmdlet 帮助主题时才有效。

要查看提供程序路径的自定义 cmdlet 帮助，请转到提供程序路径位置并输入 Get-Help 命令，或者从任意路径位置使用 Get-Help 的 Path 参数来指定提供程序路径。有关详细信息，请参阅 about_Providers。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Role <string[]>

显示为指定的用户角色自定义的帮助。输入一个角色。允许使用通配符。

输入用户在组织中担任的职位。某些 cmdlet 可以根据此参数的值在其帮助文件中显示不同的文本。此参数不影响核心 cmdlet 的帮助。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

<CommonParameters>

此 cmdlet 支持通用参数：-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。有关详细信息，请参阅 about_Commonparameters.

输入和输出

输入类型是指可通过管道传递给 cmdlet 的对象的类型。返回类型是指 Cmdlet 所返回对象的类型。

输入 | None 不能通过管道将对象传递给此 cmdlet。
输出 | System.String or MamlCommandHelpInfo 如果请求某一概念性主题，Get-Help 将以字符串的形式返回该主题。如果指定 cmdlet、函数或脚本的名称，则该命令返回 MamlCommandHelpInfo 对象。否则 Get-Help 返回 $pshome 目录的 Help.Format.ps1xml 文件中所指定的某一格式化视图。

说明

在没有参数的情况下，“Get-Help”显示有关 Windows PowerShell 帮助系统的信息。

help 的完整视图 (-full) 包括有关参数的信息的表。该表包括下列字段：

-- 必需：指示参数是必需的 (true) 还是可选的 (false)。

-- 位置：指示参数是命名参数还是位置参数（编号参数）。位置参数必须出现在命令中的指定位置。

--“命名”表示参数名称是必需的，但参数可以出现在命令中的任何地方。

-- <数字> 表示参数名称是可选的，但是当省略名称时，参数必须位于数字指定的位置。例如，“2”表示当省略参数名称时，参数必须是命令中的第二个 (2) 或唯一的未命名参数。当使用参数名称时，参数可以出现在命令中的任何地方。

-- 默认值：在命令中没有使用参数的情况下 Windows PowerShell 所使用的参数值。

-- 是否接受管道输入：指示您可以 (true) 还是不可以 (false) 通过管道向参数发送对象。“按属性名称”表示通过管道传递的对象必须具有其名称与参数名称相同的属性。

-- 是否接受通配符：指示参数的值是否可以包括诸如 * 和 ? 之类的通配符。

示例 1

C:\PS>get-help

说明
-----------
此命令显示有关 Windows PowerShell 帮助系统的帮助。

示例 2

C:\PS>get-help *

说明
-----------
此命令显示 Windows PowerShell 帮助系统中的所有帮助文件的列表。

示例 3

C:\PS>get-help get-alias

C:\PS>help get-alias

C:\PS>get-alias -?

说明
-----------
这些命令显示有关 get-alias cmdlet 的基本信息。“Get-Help”和“-?”命令在单个页面上显示信息。“Help”命令一次一个页面地显示信息。

示例 4

C:\PS>get-help about_*

说明
-----------
此命令显示 Windows PowerShell 帮助中包括的概念主题的列表。所有这些主题都以字符“about_”开始。若要显示特定帮助文件，请键入“get-help <主题名称>”，例如，“get-help about_signing”。

示例 5

C:\PS>get-help ls -detailed

说明
-----------
此命令通过指定 Get-ChildItem cmdlet 的一个别名“ls”来显示其详细帮助。Detailed 参数请求帮助文件的详细视图，包括参数描述和示例。若要查看 cmdlet 的完整的帮助文件，请使用 Full 参数。

示例 6

C:\PS>get-help format-string -full

说明
-----------
此命令显示 Format-String cmdlet 的完整视图帮助。帮助的完整视图包括参数说明、示例，以及有关参数的详细技术信息的表。

示例 7

C:\PS>get-help start-service -examples

说明
-----------
此命令显示在 Windows PowerShell 命令中使用 start-service 的示例。

示例 8

C:\PS>get-help get-childitem -parameter f*

说明
-----------
此命令显示以“f”开始的 Get-ChildItem cmdlet 的参数（filter 和 force）的说明。有关所有参数的说明，请键入“get-help get-childitem parameter*”。

示例 9

C:\PS>(get-help write-output).syntax

说明
-----------
此命令只显示 Write-Output cmdlet 的语法。

语法是帮助对象的许多属性之一；其他是描述、详细信息、示例和参数。若要查找帮助对象的所有属性和方法，请键入“get-help <cmdlet-name> | get-member”；例如，“get-help start-service | get member”。

示例 10

C:\PS>(get-help trace-command).alertset

说明
-----------
此命令显示该 cmdlet 的相关注释。注释存储在帮助对象的 alertSet 属性中。

注释包括概念性信息和使用 cmdlet 的提示。默认情况下，只有使用 Get-Help 的 Full 参数时才会显示注释，但也可使用 alertSet 属性显示它们。

示例 11

C:\PS>get-help add-member -full | out-string -stream | select-string -pattern clixml

说明
-----------
此示例说明如何搜索特定的 cmdlet 帮助主题中的字。此命令在 Add-Member cmdlet 的完整版帮助主题中搜索字“clixml”。

因为 Get-Help cmdlet 生成的是 MamlCommandHelpInfo 对象，而不是字符串，所以需要使用将帮助主题内容转换为字符串的命令，如 Out-String 或 Out-File。

示例 12

C:\PS>get-help get-member -online

说明
-----------
此命令显示 Get-Member cmdlet 的联机版帮助主题。

示例 13

C:\PS>get-help remoting

说明
-----------
此命令显示内容中包含单词“remoting”一字的主题的列表。

如果输入的字未出现在任何主题标题中，Get-Help 将显示包括该字的主题列表。

示例 14

C:\PS>get-help get-item -path SQLSERVER:\DataCollection

NAME
    Get-Item

SYNOPSIS
    Gets a collection of Server objects for the local computer and any computers to which you have made a SQL Server PowerShell connection.
...

C:\PS> cd SQLSERVER:\DataCollection
C:\PS> SQLSERVER:\DataCollection> get-help get-item

NAME
    Get-Item

SYNOPSIS
    Gets a collection of Server objects for the local computer and any computers to which you have made a SQL Server PowerShell connection.
...

C:\PS> Get-Item

NAME
    Get-Item

SYNOPSIS
    Gets the item at the specified location.

...

说明
-----------
此示例说明如何获取 Get-Item cmdlet 的帮助，了解如何在 Windows PowerShell SQL Server 提供程序的 DataCollection 节点中使用该 cmdlet。

该示例演示了获取 Get-Item 的自定义帮助的两种方式。

第一条命令使用 Get-Help 的 Path 参数来指定提供程序路径。可以在任意路径位置输入此命令。

第二条命令使用 Set-Location cmdlet（别名为“cd”）来转到提供程序路径。从该位置，即使不使用 Path 参数，Get-Help 命令也会获取该提供程序路径的自定义帮助。

第三条命令说明了文件系统路径中的 Get-Help 命令在不使用 Path 参数的情况下，获取 Get-Item cmdlet 的标准帮助。

示例 15

C:\PS>get-help c:\ps-test\MyScript.ps1

说明
-----------
此命令获取 MyScript.ps1 脚本的帮助。有关如何编写函数和脚本的帮助的信息，请参阅 about_Comment_Based_Help。

另请参阅

  • about_Comment_Based_Help
  • Get-Command
  • Get-PSDrive
  • Get-Member


Get-History

获取在当前会话中输入的命令的列表。

语法

Get-History [[-Id] <Int64[]>] [[-Count] <int>] [<CommonParameters>]

说明

Get-History cmdlet 获取会话历史记录（即在当前会话中输入的命令的列表）。Windows PowerShell 自动地维护每一个会话的历史记录。您可以采用 XML 或 CSV 格式保存会话历史记录。默认情况下，历史记录文件保存在主目录中，但也可以将该文件保存在任何位置。

参数

-Count <int>

显示指定数量的最近历史记录条目。默认值是 32。如果在一个命令中同时使用 Count 和 Id 参数，则显示将在 Id 参数指定的命令处结束。

是否为必需？ | false
位置？ | 2
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Id <Int64[]>

指定会话历史记录中的命令的 ID 号。Get-History 只获取指定的命令。如果使用 Id 和 Count，则 Get-History 获取最近的命令，一直到 Id 参数所指定的命令。

是否为必需？ | false
位置？ | 1
默认值 |
是否接受管道输入？ | true (ByValue)
是否接受通配符？ | false

<CommonParameters>

此 cmdlet 支持通用参数：-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。有关详细信息，请参阅 about_Commonparameters.

输入和输出

输入类型是指可通过管道传递给 cmdlet 的对象的类型。返回类型是指 Cmdlet 所返回对象的类型。

输入 | Int64 可以通过管道将历史记录 ID 传递给 Get-History。
输出 | Microsoft.PowerShell.Commands.HistoryInfo Get-History 为所获取的每个历史记录项返回一个历史记录对象。

说明

会话历史记录是会话期间输入的命令（包含 ID）的列表。会话历史记录表示命令的执行顺序、状态以及开始和结束时间。输入每条命令时，Windows PowerShell 会将其添加到历史记录中，以便对其进行重复利用。有关命令历史记录的详细信息，请参阅 about_History。

还可以使用 Get-History 的内置别名“h”、“history”和“ghy”来对其进行引用。有关详细信息，请参阅 about_Aliases。

示例 1

C:\PS>get-history

说明
-----------
此命令获取 32 个最近提交的命令。默认显示每一个命令及其表示执行顺序的 ID。

示例 2

C:\PS>get-history | where-object {$_.commandLine -like "*service*"}

说明
-----------
此命令从命令历史记录中获取包括单词“service”的条目。第一个命令获取会话历史记录中的 32 个最近的条目。管道运算符 (|) 将结果传递给 Where-Object cmdlet，后者只选择包括“service”的命令。

示例 3

C:\PS>get-history -id 7 -count 5 | export-csv history.csv

说明
-----------
此命令获取以条目 7 结束的最近五个历史记录条目。管道运算符 (|) 将结果传递到 Export-Csv cmdlet，后者将历史记录设置为以逗号分隔的文本格式，并将其保存在 History.csv 文件中。该文件包括在将历史记录设置为列表格式时显示的数据，包括命令的状态以及开始和结束时间。

示例 4

C:\PS>get-history -count 1

说明
-----------
此命令获取命令历史记录中的最后一个（最近输入的）命令。它使用 Count 参数来只显示一个命令。默认情况下，Get-History 显示最近的命令。此命令可以缩写为“h -c 1”，相当于按上箭头键。

示例 5

C:\PS>get-history -count $MaximumHistoryCount

说明
-----------
此命令显示保存在会话历史记录中的所有命令。默认情况下，$MaximumHistoryCount 是 64，因此，此命令可以缩写为“h -c 64”。

示例 6

C:\PS>get-history | format-list

说明
-----------
此命令显示会话历史记录中的条目的所有属性。管道运算符 (|) 将结果传递给 Format-List cmdlet，此 cmdlet 显示每一个历史记录条目的所有属性，包括命令的 ID、状态以及开始和结束时间。

另请参阅

  • about_History
  • Invoke-History
  • Add-History
  • Clear-History


Get-Host

获取表示当前主机程序的对象。默认情况下，还显示 Windows PowerShell 的版本和区域信息。

语法

Get-Host [<CommonParameters>]

说明

Get-Host cmdlet 获取表示托管 Windows PowerShell 的程序的对象。

默认显示内容包括 Windows PowerShell 版本号以及主机使用的当前区域和语言设置，但是主机对象包含大量信息，其中包括有关当前正在运行的 Windows PowerShell 版本以及 Windows PowerShell 的当前区域性和 UI 区域性的详细信息。也可使用该 cmdlet 对主机程序用户界面的特性（如文本和背景色）进行自定义。

参数

<CommonParameters>

此 cmdlet 支持通用参数：-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。有关详细信息，请参阅 about_Commonparameters.

输入和输出

输入类型是指可通过管道传递给 cmdlet 的对象的类型。返回类型是指 Cmdlet 所返回对象的类型。

输入 | None 不能通过管道将输入传递给此 cmdlet。
输出 | System.Management.Automation.Internal.Host.InternalHost Get-Host 返回一个 System.Management.Automation.Internal.Host.InternalHost 对象。

说明

$host 自动变量包含的对象与 Get-Host 返回的对象相同，您可采用相同的方式来使用它。同样，$PSCulture 和 $PSUICulture 自动变量包含的对象与主机对象的 CurrentCulture 和 CurrentUICulture 属性包含的对象相同。可交替使用这些功能。

有关详细信息，请参阅 about_Automatic_Variables。

示例 1

C:\PS>get-host

Name             : ConsoleHost
Version          : 2.0
InstanceId       : e4e0ab54-cc5e-4261-9117-4081f20ce7a2
UI               : System.Management.Automation.Internal.Host.InternalHostUserInterface
CurrentCulture   : en-US
CurrentUICulture : en-US
PrivateData      : Microsoft.PowerShell.ConsoleHost+ConsoleColorProxy
IsRunspacePushed : False
Runspace         : System.Management.Automation.Runspaces.LocalRunspace

说明
-----------
此命令显示有关 Windows PowerShell 控制台的信息，在本示例中，该控制台是 Windows PowerShell 的当前主机程序。它包括主机的名称、主机中正在运行的 Windows PowerShell 版本，以及当前区域性和 UI 区域性。

Version、UI、CurrentCulture、CurrentUICulture、PrivateData 和 Runspace 属性都包含一个对象，且该对象都具有一些非常有用的属性。后面的示例将检查这些属性。

示例 2

C:\PS>$h = get-host

C:\PS> $win = $h.ui.rawui.windowsize

C:\PS> $win.height = 10

C:\PS> $win.width  = 10

C:\PS> $h.ui.rawui.set_windowsize($win)

说明
-----------
此命令将 Windows PowerShell 窗口重新调整为 10 x 10 像素。

示例 3

C:\PS>(get-host).version | format-list -property *

Major         : 2
Minor         : 0
Build         : -1
Revision      : -1
MajorRevision : -1
MinorRevision : -1

说明
-----------
此命令获取有关主机中运行的 Windows PowerShell 版本的详细信息。您可以查看这些值，但不能更改它们。

Get-Host 的 Version 属性包含 System.Version 对象。此命令使用管道运算符 (|) 将版本对象发送至 Format-List cmdlet。Format-List 命令使用值为 *（全部）的 Property 参数来显示版本对象的所有属性和属性值。

示例 4

C:\PS>(get-host).currentculture | format-list -property *

Parent                         : en
LCID                           : 1033
KeyboardLayoutId               : 1033
Name                           : en-US
IetfLanguageTag                : en-US
DisplayName                    : English (United States)
NativeName                     : English (United States)
EnglishName                    : English (United States)
TwoLetterISOLanguageName       : en
ThreeLetterISOLanguageName     : eng
ThreeLetterWindowsLanguageName : ENU
CompareInfo                    : CompareInfo - 1033
TextInfo                       : TextInfo - 1033
IsNeutralCulture               : False
CultureTypes                   : SpecificCultures, InstalledWin32Cultures, FrameworkCultures
NumberFormat                   : System.Globalization.NumberFormatInfo
DateTimeFormat                 : System.Globalization.DateTimeFormatInfo
Calendar                       : System.Globalization.GregorianCalendar
OptionalCalendars              : {System.Globalization.GregorianCalendar, System.Globalization.GregorianCalendar}
UseUserOverride                : True
IsReadOnly                     : False

说明
-----------
此命令获取有关主机中运行的 Windows PowerShell 的当前区域性设置的详细信息。该信息与 Get-Culture cmdlet 返回的信息相同。

（同样，CurrentUICulture 属性返回的对象与 Get-UICulture 返回的对象相同。）

主机对象的 CurrentCulture 属性包含 System.Globalization.CultureInfo 对象。此命令使用管道运算符 (|) 将 CultureInfo 对象发送至 Format-List cmdlet。Format-List 命令使用值为 *（全部）的 Property 参数来显示 CultureInfo 对象的所有属性和属性值。

示例 5

C:\PS>(get-host).currentculture.DateTimeFormat | format-list -property *

AMDesignator                     : AM
Calendar                         : System.Globalization.GregorianCalendar
DateSeparator                    : /
FirstDayOfWeek                   : Sunday
CalendarWeekRule                 : FirstDay
FullDateTimePattern              : dddd, MMMM dd, yyyy h:mm:ss tt
LongDatePattern                  : dddd, MMMM dd, yyyy
LongTimePattern                  : h:mm:ss tt
MonthDayPattern                  : MMMM dd
PMDesignator                     : PM
RFC1123Pattern                   : ddd, dd MMM yyyy HH':'mm':'ss 'GMT'
ShortDatePattern                 : M/d/yyyy
ShortTimePattern                 : h:mm tt
SortableDateTimePattern          : yyyy'-'MM'-'dd'T'HH':'mm':'ss
TimeSeparator                    : :
UniversalSortableDateTimePattern : yyyy'-'MM'-'dd HH':'mm':'ss'Z'
YearMonthPattern                 : MMMM, yyyy
AbbreviatedDayNames              : {Sun, Mon, Tue, Wed...}
ShortestDayNames                 : {Su, Mo, Tu, We...}
DayNames                         : {Sunday, Monday, Tuesday, Wednesday...}
AbbreviatedMonthNames            : {Jan, Feb, Mar, Apr...}
MonthNames                       : {January, February, March, April...}
IsReadOnly                       : False
NativeCalendarName               : Gregorian Calendar
AbbreviatedMonthGenitiveNames    : {Jan, Feb, Mar, Apr...}
MonthGenitiveNames               : {January, February, March, April...}

说明
-----------
此命令返回有关 Windows PowerShell 使用的当前区域性的 DateTimeFormat 的详细信息。

主机对象的 CurrentCulture 属性包含 CultureInfo 对象，而 CultureInfo 对象具有许多有用的属性。其中，DateTimeFormat 属性包含 DateTimeFormatInfo 对象，而该对象又具有许多有用的属性。

要查找存储在对象属性中的对象的类型，请使用 Get-Member cmdlet。要显示对象的属性值，请使用 Format-List cmdlet。

示例 6

C:\PS>(get-host).ui.rawui | format-list -property *

ForegroundColor       : DarkYellow
BackgroundColor       : DarkBlue
CursorPosition        : 0,390
WindowPosition        : 0,341
CursorSize            : 25
BufferSize            : 120,3000
WindowSize            : 120,50
MaxWindowSize         : 120,81
MaxPhysicalWindowSize : 182,81
KeyAvailable          : False
WindowTitle           : Windows PowerShell 2.0 (04/11/2008 00:08:14)

说明
-----------
此命令显示主机对象的 RawUI 属性的各属性。通过更改这些值，可以更改主机程序的外观。

示例 7

C:\PS>(get-host).ui.rawui.backgroundcolor = "Black"

C:\PS> cls

说明
-----------
这些命令将 Windows PowerShell 控制台的背景色更改为黑色。“cls”命令是 Clear-Host 函数的别名，该函数可清除屏幕并将整个屏幕更改为新的颜色。

此更改仅在当前会话中有效。若要更改所有会话的控制台背景色，请将该命令添加到 Windows PowerShell 配置文件中。

示例 8

C:\PS>$host.privatedata.errorbackgroundcolor = "white"

说明
-----------
此命令将错误消息的背景色更改为白色。

此命令使用自动变量 $host，该变量包含当前主机程序的主机对象。Get-Host 会返回 $host 包含的同一对象，所以它们可以互换。

此命令使用 $host 的 PrivateData 属性作为其 ErrorBackgroundColor 属性。若要查看 $host.privatedata 属性中对象的所有属性，请键入“$host.privatedata | format-list *”。

另请参阅

  • Read-Host
  • Out-Host
  • Write-Host


Get-HotFix

获取已应用于本地和远程计算机的修补程序。

语法

Get-HotFix [[-Id] <string[]>] [-ComputerName <string[]>] [-Credential <PSCredential>] [<CommonParameters>]

Get-HotFix [-Description <string[]>] [-ComputerName <string[]>] [-Credential <PSCredential>] [<CommonParameters>]

说明

Get-Hotfix cmdlet 通过基于组件的服务来获取已应用于本地计算机或远程计算机的修补程序。

参数

-ComputerName <string[]>

指定远程计算机。默认值为本地计算机。

键入远程计算机的 NetBIOS 名称、Internet 协议 (IP) 地址或完全限定的域名。

此参数不依赖于 Windows PowerShell 远程处理。即使您的计算机未配置为运行远程命令，您也可以使用 Get-Hotfix 的 ComputerName 参数。

是否为必需？ | false
位置？ | named
默认值 | Local computer
是否接受管道输入？ | true (ByPropertyName)
是否接受通配符？ | false

-Credential <PSCredential>

指定有权执行此操作的用户帐户。默认值为当前用户。

键入用户名，如“User01”或“Domain01\User01”；或输入 PSCredential 对象，如 Get-Credential cmdlet 生成的一个 PSCredential 对象。如果键入用户名，则将提示您输入密码。

是否为必需？ | false
位置？ | named
默认值 | Current user
是否接受管道输入？ | false
是否接受通配符？ | false

-Description <string[]>

只获取具有指定说明的修补程序。允许使用通配符。默认值为计算机上的所有修补程序。

是否为必需？ | false
位置？ | named
默认值 | All hotfixes
是否接受管道输入？ | false
是否接受通配符？ | true

-Id <string[]>

只获取具有指定修补程序 ID 的修补程序。默认值为计算机上的所有修补程序。

是否为必需？ | false
位置？ | 1
默认值 | All hotfixes
是否接受管道输入？ | false
是否接受通配符？ | false

<CommonParameters>

此 cmdlet 支持通用参数：-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。有关详细信息，请参阅 about_Commonparameters.

输入和输出

输入类型是指可通过管道传递给 cmdlet 的对象的类型。返回类型是指 Cmdlet 所返回对象的类型。

输入 | None 不能通过管道将输入传递给 Get-HotFix。
输出 | System.Management.ManagementObject#root\CIMV2\Win32_QuickFixEngineering Get-Hotfix 返回表示计算机上的修补程序的对象。

说明

此 cmdlet 使用 Win32_QuickFixEngineering WMI 类，该类表示操作系统的系统范围小更新。随 Windows Vista 启动时，此类仅返回由基于组件的服务 (CBS) 提供的更新。它不包括由 Microsoft Windows Installer (MSI) 或 Windows 更新站点提供的更新。有关详细信息，请参阅 Microsoft .NET Framework SDK 中的 Win32_QuickFixEngineering 类主题，网址为 http://go.microsoft.com/fwlink/?LinkID=145071。

在不同操作系统上，此 cmdlet 的输出可能有所不同。

示例 1

C:\PS>get-hotfix

说明
-----------
此命令将获取本地计算机上的所有修补程序。

示例 2

C:\PS>get-hotfix -description Security* -computername Server01, Server02 -cred Server01\admin01

说明
-----------
此命令将获取计算机 Server01 和 Server02 上其说明以“Security”开头的所有修补程序。

示例 3

C:\PS>$a = get-content servers.txt

C:\PS> $a | foreach { if (!(get-hotfix -id KB957095 -computername $_)) { add-content $_ -path Missing-kb953631.txt }}

说明
-----------
此示例中的命令创建一个文本文件，其中列出缺少安全更新的计算机的名称。

这些命令使用 Get-Hotfix cmdlet 来获取其名称列在 Servers.txt 文件中的所有计算机上的 KB957095 安全更新。

如果计算机没有更新，则 Add-Content cmdlet 会将该计算机名称写入 Missing-KB953631.txt 文件。

示例 4

C:\PS>(get-hotfix | sort installedon)[-1]

说明
-----------
此命令将获取计算机上的最新修补程序。

它将获取修补程序，按 InstalledOn 属性值对其进行排序，然后使用数组表示法来选择数组中的最后一项。

另请参阅

  • Get-ComputerRestorePoint


Get-Item

获取位于指定位置的项。

语法

Get-Item [-LiteralPath] <string[]> [-Credential <PSCredential>] [-Exclude <string[]>] [-Filter <string>] [-Force] [-Include <string[]>] [-UseTransaction] [<CommonParameters>]

Get-Item [-Path] <string[]> [-Credential <PSCredential>] [-Exclude <string[]>] [-Filter <string>] [-Force] [-Include <string[]>] [-UseTransaction] [<CommonParameters>]

说明

Get-Item cmdlet 获取位于指定位置的项。除非使用通配符 (*) 来请求该项的所有内容，否则此命令不会获取位于该位置的项的内容。

Windows PowerShell 提供程序通过使用 Get-Item cmdlet，可以在不同类型的数据存储进行导航。

参数

-Credential <PSCredential>

指定有权执行此操作的用户帐户。默认值为当前用户。

键入用户名，如“User01”或“Domain01\User01”；或输入 PSCredential 对象，如 Get-Credential cmdlet 生成的一个 PSCredential 对象。如果键入用户名，则将提示您输入密码。

随同 Windows PowerShell 一起安装的任何提供程序都不支持此参数。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | true (ByPropertyName)
是否接受通配符？ | false

-Exclude <string[]>

忽略指定项。此参数的值对 Path 参数进行限定。请输入路径元素或模式，例如“*.txt”。允许使用通配符。

仅当该命令包括项的内容时（例如，C:\Windows\*，其中通配符指定 C:\Windows 目录的内容），Exclude 参数才有效。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Filter <string>

以提供程序的格式或语言指定筛选器。此参数的值对 Path 参数进行限定。筛选器的语法（包括通配符的使用）取决于提供程序。筛选器比其他参数更有效，因为提供程序是在检索对象时应用筛选器，而不是在检索对象后再由 Windows PowerShell 筛选对象。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Force

允许 cmdlet 获取非此不能访问的项，如隐藏项。不同提供程序有不同的实现。有关详细信息，请参阅 about_Providers。即使使用 Force 参数，该 cmdlet 也无法覆盖安全限制。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Include <string[]>

只检索指定项。此参数的值对 Path 参数进行限定。请输入路径元素或模式，例如“*.txt”。允许使用通配符。

仅当该命令包括项的内容时（例如，C:\Windows\*，其中通配符指定 C:\Windows 目录的内容），Include 参数才有效。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-LiteralPath <string[]>

指定项的路径。与 Path 不同，LiteralPath 的值严格按照所键入的形式使用。不会将任何字符解释为通配符。如果路径包括转义符，请将其括在单引号中。单引号会告知 Windows PowerShell 不要将所有字符都解释为转义序列。

是否为必需？ | true
位置？ | 1
默认值 |
是否接受管道输入？ | true (ByPropertyName)
是否接受通配符？ | false

-Path <string[]>

指定项的路径。Get-Item 获取位于指定位置的项。允许使用通配符。此参数为必需参数，但参数名（“Path”）为可选项。

使用点 (.)指定当前位置。使用通配符 (*) 可以指定当前位置中的所有项。

是否为必需？ | true
位置？ | 1
默认值 |
是否接受管道输入？ | true (ByValue, ByPropertyName)
是否接受通配符？ | false

-UseTransaction

将命令包含在活动事务中。仅当正在执行事务时，此参数才有效。有关详细信息，请参阅 about_Transactions。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

<CommonParameters>

此 cmdlet 支持通用参数：-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。有关详细信息，请参阅 about_Commonparameters.

输入和输出

输入类型是指可通过管道传递给 cmdlet 的对象的类型。返回类型是指 Cmdlet 所返回对象的类型。

输入 | System.String 可以通过管道将包含路径的字符串传递给 Get-Item。
输出 | Object Get-Item 返回所获取的对象。类型由路径中的对象的类型确定。

说明

还可以使用 Get-Item 的内置别名“gi”来对其进行引用。有关详细信息，请参阅 about_Aliases。

Get-Item 没有 Recurse 参数，因为它只获取项，而不获取其内容。要递归获取项的内容，请使用 Get-ChildItem。

若要在注册表中导航，请使用 Get-Item 来获取注册表项，使用 Get-ItemProperty 来获取注册表值和数据。注册表值被视为注册表项的属性。

Get-Item cmdlet 用于处理由任何提供程序公开的数据。要列出会话中可用的提供程序，请键入“Get-PsProvider”。有关详细信息，请参阅 about_Providers。

示例 1

C:\PS>get-item .

Directory: C:\

Mode                LastWriteTime     Length Name
----                -------------     ------ ----
d----         7/26/2006  10:01 AM            ps-test

说明
-----------
此命令获取当前目录。Path 参数值中的点 (.)表示当前位置处的项（而非其内容）。

示例 2

C:\PS>get-item *

Directory: C:\ps-test

Mode                LastWriteTime     Length Name
----                -------------     ------ ----
d----         7/26/2006   9:29 AM            Logs
d----         7/26/2006   9:26 AM            Recs
-a---         7/26/2006   9:28 AM         80 date.csv
-a---         7/26/2006  10:01 AM         30 filenoext
-a---         7/26/2006   9:30 AM      11472 process.doc
-a---         7/14/2006  10:47 AM         30 test.txt

说明
-----------
此命令将获取当前目录中的所有项。通配符 (*) 表示当前项的所有内容。

示例 3

C:\PS>get-item C:\

说明
-----------
此命令获取 C: 驱动器的当前目录。检索到的对象仅表示目录，而不表示其内容。

示例 4

C:\PS>get-item C:\*

说明
-----------
此命令获取 C: 驱动器中的项。通配符 (*) 表示容器中的所有项，而不仅仅表示容器。

在 Windows PowerShell 中，使用单个星号 (*) 来获取内容，而不使用传统的“*.*”。格式是按字面意思解释的，因此“*.*”将不会检索没有点的目录或文件名。

示例 5

C:\PS>(get-item C:\Windows).LastAccessTime

说明
-----------
此命令获取 C:\Windows 目录的 LastAccessTime 属性。LastAccessTime 只是文件系统目录的一个属性。若要查看目录的所有属性，请键入“(Get-Item <directory-name>) | Get-Member”。

示例 6

C:\PS>get-item hklm:\software\microsoft\powershell\1\shellids\microsoft.powershell\*

说明
-----------
此命令显示 Microsoft.PowerShell 注册表项的内容。可以将 Windows PowerShell Registry 提供程序与 Get-Item 一起使用以获取注册表项和子项，但必须使用 Get-ItemProperty 来获取注册表值和数据。

示例 7

C:\PS>get-item c:\Windows\* -include *.* -exclude w*

说明
-----------
此命令获取 Windows 目录中的其名称包含点 (.) 但不以 w* 开头的项。此命令只有在路径包括通配符 (*) 以指定项的内容的情况下才起作用。

另请参阅

  • about_Providers
  • Clear-Item
  • Copy-Item
  • Invoke-Item
  • Move-Item
  • Set-Item
  • New-Item
  • Remove-Item
  • Rename-Item


Get-ItemProperty

获取指定项的属性。

语法

Get-ItemProperty [-LiteralPath] <string[]> [[-Name] <string[]>] [-Credential <PSCredential>] [-Exclude <string[]>] [-Filter <string>] [-Include <string[]>] [-UseTransaction] [<CommonParameters>]

Get-ItemProperty [-Path] <string[]> [[-Name] <string[]>] [-Credential <PSCredential>] [-Exclude <string[]>] [-Filter <string>] [-Include <string[]>] [-UseTransaction] [<CommonParameters>]

说明

Get-ItemProperty cmdlet 获取指定项的属性。例如，可以使用 Get-ItemProperty 来获取文件对象的 LastAccessTime 属性值。还可以使用 Get-ItemProperty 来查看注册表条目及其值。

参数

-Credential <PSCredential>

指定有权执行此操作的用户帐户。默认值为当前用户。

键入用户名，如“User01”或“Domain01\User01”；或输入 PSCredential 对象，如 Get-Credential cmdlet 生成的一个 PSCredential 对象。如果键入用户名，则将提示您输入密码。

随同 Windows PowerShell 一起安装的任何提供程序都不支持此参数。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | true (ByPropertyName)
是否接受通配符？ | false

-Exclude <string[]>

忽略指定项。允许使用通配符。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Filter <string>

以提供程序的格式或语言指定筛选器。此参数的值对 Path 参数进行限定。筛选器的语法（包括通配符的使用）取决于提供程序。筛选器比其他参数更有效，因为提供程序是在检索对象时应用筛选器，而不是在检索对象后再由 Windows PowerShell 筛选对象。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Include <string[]>

包括指定项。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-LiteralPath <string[]>

指定指向项属性的路径。LiteralPath 的值严格按照所键入的形式使用。不会将任何字符解释为通配符。如果路径包括转义符，请将其括在单引号中。单引号会告知 Windows PowerShell 不要将所有字符都解释为转义序列。

是否为必需？ | true
位置？ | 1
默认值 |
是否接受管道输入？ | true (ByPropertyName)
是否接受通配符？ | false

-Name <string[]>

指定要检索的属性的名称。

是否为必需？ | false
位置？ | 2
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Path <string[]>

指定一个或多个项的路径。

是否为必需？ | true
位置？ | 1
默认值 |
是否接受管道输入？ | true (ByValue, ByPropertyName)
是否接受通配符？ | false

-UseTransaction

将命令包含在活动事务中。仅当正在执行事务时，此参数才有效。有关详细信息，请参阅 about_Transactions。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

<CommonParameters>

此 cmdlet 支持通用参数：-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。有关详细信息，请参阅 about_Commonparameters.

输入和输出

输入类型是指可通过管道传递给 cmdlet 的对象的类型。返回类型是指 Cmdlet 所返回对象的类型。

输入 | System.String 可以通过管道将包含路径的字符串传递给 Get-ItemProperty。
输出 | Object Get-ItemProperty 为所获取的每个项属性返回一个对象。对象类型取决于检索的对象。

说明

Get-ItemProperty cmdlet 用于处理由任何提供程序公开的数据。要列出会话中可用的提供程序，请键入“Get-PSProvider”。有关详细信息，请参阅 about_Providers。

示例 1

C:\PS>get-itemproperty C:\Windows

说明
-----------
此命令获取有关 C:\Windows 目录的信息。

示例 2

C:\PS>get-itemproperty C:\Test\Weather.xls | format-list

说明
-----------
此命令获取 C:\Test\Weather.xls 文件的属性。将结果通过管道传送给 Format-List cmdlet 来以列表形式显示输出。

示例 3

C:\PS>get-itemproperty -path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion

说明
-----------
此命令显示 CurrentVersion 注册表子项中包含的每个注册表项的值名称和数据。请注意，该命令需要具有名为 HKLM: 的 Windows PowerShell 驱动器（映射到注册表的 HKEY_LOCAL_MACHINE 配置单元）。默认情况下，Windows PowerShell 中已附带具有该名称和映射的驱动器。或者，可以通过使用以下替代路径指定此注册表子项的路径（替代路径以提供程序名称开头，后跟两个冒号）：
Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion.

示例 4

C:\PS>get-itemproperty -path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion `
-name "ProgramFilesDir"

说明
-----------
此命令获取 CurrentVersion 注册表子项中的 ProgramFilesDir 注册表条目的值名称和数据。此命令使用 Path 参数来指定子项，使用 Name 参数来指定条目的值名称。

示例 5

C:\PS>get-itemproperty -path HKLM:\SOFTWARE\Microsoft\PowerShell\1\PowerShellEngine

ApplicationBase         : C:\Windows\system32\WindowsPowerShell\v1.0\
ConsoleHostAssemblyName : Microsoft.PowerShell.ConsoleHost, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad
                          364e35, ProcessorArchitecture=msil
PowerShellVersion       : 2.0
RuntimeVersion          : v2.0.50727
CTPVersion              : 5
PSCompatibleVersion     : 1.0,2.0

说明
-----------
此命令获取 PowerShellEngine 注册表项中的注册表条目的值名称和数据。结果显示在下面的示例输出中。

示例 6

C:\PS>get-itemproperty -path HKLM:\SOFTWARE\Microsoft\PowerShell\1\ShellIds\Microsoft.PowerShell

Path                                                        ExecutionPolicy
----                                                        ---------------
C:\Windows\system32\WindowsPowerShell\v1.0\powershell.exe   RemoteSigned

C:\PS>get-itemproperty -path HKLM:\SOFTWARE\Microsoft\PowerShell\1\ShellIds\Microsoft.PowerShell | format-list -property *

PSPath          : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\Software\Microsoft\PowerShell\1\ShellIds\Micro
                  soft.PowerShell
PSParentPath    : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\Software\Microsoft\PowerShell\1\ShellIds
PSChildName     : Microsoft.PowerShell
PSDrive         : HKLM
PSProvider      : Microsoft.PowerShell.Core\Registry
Path            : C:\Windows\system32\WindowsPowerShell\v1.0\powershell.exe
ExecutionPolicy : RemoteSigned

说明
-----------
此示例演示如何将 Get-ItemProperty 命令的输出格式设置为列表以便轻松查看注册表值和数据，以及方便地解释这些结果。

第一个命令使用 Get-ItemProperty cmdlet 来获取 Microsoft.PowerShell 子项中的注册表条目。此子项存储 Windows PowerShell 的默认 shell 的选项。结果显示在下面的示例输出中。

输出显示有两个注册表条目，分别是 Path 和 ExecutionPolicy。如果注册表项中包含的条目少于 5 个，则默认情况下，将以表的形式显示它，但通常列表形式更易于查看。

第二个命令使用相同的 Get-ItemProperty 命令。但是，该命令这一次使用管道运算符 (|) 将命令结果发送给 Format-List cmdlet。Format-List 命令使用值为 *（所有）的 Property 参数来以列表形式显示对象的所有属性。结果显示在下面的示例输出中。

生成的显示界面显示了 Path 和 ExecutionPolicy 注册表条目以及注册表项对象的几个不太熟悉的属性。以“PS”为前缀的其他属性是 Windows PowerShell 自定义对象（例如表示注册表项的对象）的属性。

另请参阅

  • about_Providers
  • Set-ItemProperty
  • Clear-ItemProperty
  • Copy-ItemProperty
  • Move-ItemProperty
  • New-ItemProperty
  • Remove-ItemProperty
  • Rename-ItemProperty


Get-Job

获取在当前会话中运行的 Windows PowerShell 后台作业。

语法

Get-Job [-Command <string[]>] [<CommonParameters>]

Get-Job [[-InstanceId] <Guid[]>] [<CommonParameters>]

Get-Job [[-Name] <string[]>] [<CommonParameters>]

Get-Job [[-Id] <Int32[]>] [<CommonParameters>]

Get-Job [-State {<NotStarted> | <Running> | <Completed> | <Failed> | <Stopped> | <Blocked>}] [<CommonParameters>]

说明

Get-Job cmdlet 获取表示在当前会话中启动的后台作业的对象。可以使用 Get-Job 来获取通过 Start-Job 或任何 cmdlet 的 AsJob 参数启动的作业。

如果不使用参数，“Get-Job”命令会获取当前会话中所有的作业。可以使用 Get-Job 的参数来获取特定作业。

Get-Job 返回的作业对象包含作业的有用信息，但不包含作业结果。要获取作业结果，请使用 Receive-Job cmdlet。

Windows PowerShell 后台作业是“在后台”运行而不与当前会话交互的命令。通常，应使用后台作业来运行需要长时间才能完成的复杂命令。有关 Windows PowerShell 中的后台作业的详细信息，请参阅 about_Jobs。

参数

-Command <string[]>

获取包含指定命令的作业。默认值为所有作业。输入命令（以字符串的形式）。可以使用通配符来指定命令模式。

是否为必需？ | false
位置？ | named
默认值 | All jobs
是否接受管道输入？ | true (ByPropertyName)
是否接受通配符？ | true

-Id <Int32[]>

只获取具有指定 ID 的作业。

ID 是一个整数，用于在当前会话中唯一标识作业。它比实例 ID 更便于记忆和键入，但它只在当前会话中是唯一的。可以键入一个或多个 ID（以逗号分隔）。要查找作业的 ID，请键入不带参数的“Get-Job”。

是否为必需？ | false
位置？ | 1
默认值 |
是否接受管道输入？ | true (ByPropertyName)
是否接受通配符？ | false

-InstanceId <Guid[]>

获取具有指定实例 ID 的作业。默认值为所有作业。

实例 ID 是一个 GUID，用于在计算机上唯一地标识作业。若要查找作业的实例 ID，请使用 Get-Job。

是否为必需？ | false
位置？ | 1
默认值 |
是否接受管道输入？ | true (ByPropertyName)
是否接受通配符？ | true

-Name <string[]>

获取具有指定友好名称的作业。输入作业名称，或使用通配符输入作业名称模式。默认情况下，Get-Job 获取当前会话中的所有作业。

是否为必需？ | false
位置？ | 1
默认值 |
是否接受管道输入？ | true (ByPropertyName)
是否接受通配符？ | true

-State <JobState>

只获取处于指定状态的作业。有效值是 NotStarted、Running、Completed、Stopped、Failed 和 Blocked。默认情况下，Get-Job 获取当前会话中的所有作业。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | true (ByPropertyName)
是否接受通配符？ | false

<CommonParameters>

此 cmdlet 支持通用参数：-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。有关详细信息，请参阅 about_Commonparameters.

输入和输出

输入类型是指可通过管道传递给 cmdlet 的对象的类型。返回类型是指 Cmdlet 所返回对象的类型。

输入 | None 不能通过管道将输入传递给此 cmdlet。
输出 | System.Management.Automation.RemotingJob Get-Job 返回表示会话中的作业的对象。

示例 1

C:\PS>get-job

说明
-----------
此命令获取在当前会话中启动的所有后台作业。其中不包括在其他会话中创建的作业，即使这些作业在本地计算机上运行也是如此。

示例 2

C:\PS>$j = get-job -name Job1

C:\PS> $ID = $j.InstanceID

C:\PS> $ID

Guid
----
03c3232e-1d23-453b-a6f4-ed73c9e29d55

C:\PS> stop-job -instanceid $ID

说明
-----------
这些命令说明如何获取作业的实例 ID，然后用它来停止作业。不同于作业名称的不唯一性，实例 ID 是唯一的。

第一条命令使用 Get-Job cmdlet 来获取一个作业。它使用 Name 参数来标识该作业。该命令将 Get-Job 返回的作业对象存储在 $j 变量中。在此示例中，只有一个具有指定名称的作业。

第二条命令获取 $j 变量中对象的 InstanceId 属性并将它存储在 $ID 变量中。

第三条命令显示 $ID 变量的值。

第四条命令使用 Stop-Job cmdlet 来停止作业。它使用 InstanceId 参数来标识作业，使用 $ID 变量来表示作业的实例 ID。

示例 3

C:\PS>get-job -command "*get-process*"

说明
-----------
此命令获取系统中包含 Get-Process 命令的作业。它使用 Get-Job 的 Command 参数来限制检索的作业。此命令使用通配符 (*) 来获取在命令字符串中的任意位置包含 Get-Process 命令的作业。

示例 4

C:\PS>"*get-process*" | get-job

说明
-----------
与上一示例中的命令一样，此命令获取系统中包含 Get-Process 命令的作业。该命令使用管道运算符 (|) 将双引号内的字符串发送给 Get-Job cmdlet。它与先前的命令等效。

示例 5

C:\PS>get-job -state NotStarted

说明
-----------
此命令只获取那些已创建、但尚未启动的作业。这包括计划在以后运行或尚未计划运行的作业。

示例 6

C:\PS>get-job -name job*

说明
-----------
此命令获取作业名称以“job”开头的所有作业。因为“job<number>”是作业的默认名称，所以此命令会获取所有没有被明确赋予名称的作业。

示例 7

C:\PS>start-job -scriptblock {get-process} -name MyJob

C:\PS> $j = get-job -name MyJob

C:\PS> $j

Id       Name      State      HasMoreData     Location    Command
--       ----      -----      -----------     --------    -------
1        myjob     Completed  True            localhost   get-process

C:\PS> receive-job -job $j

Handles  NPM(K)    PM(K)      WS(K) VM(M)   CPU(s)     Id ProcessName
-------  ------    -----      ----- -----   ------     -- -----------
    124       4    13572      12080    59            1140 audiodg
    783      16    11428      13636   100             548 CcmExec
     96       4     4252       3764    59            3856 ccmsetup
...

说明
-----------
此示例说明如何使用 Get-Job 来获取作业对象，然后说明如何在命令中用作业对象表示作业。

第一条命令使用 Start-Job cmdlet 启动一个后台作业，该作业在本地计算机上运行 Get-Process 命令。此命令使用 Start-Job 的 Name 参数为该作业分配一个友好名称。

第二条命令使用 Get-Job 来获取该作业。它使用 Get-Job 的 Name 参数来标识该作业。此命令将生成的作业对象保存在 $j 变量中。

第三条命令显示 $j 变量中的作业对象的值。State 属性的值表明作业已完成。HasMoreData 属性的值表明还有一些作业结果尚未被检索。

第四条命令使用 Receive-Job cmdlet 来获取作业的结果。它使用 $j 变量中的作业对象来表示作业。也可使用管道运算符将作业对象发送给 Receive-Job。

示例 8

C:\PS>start-job -scriptblock {get-eventlog system}

C:\PS> invoke-command -computername S1 -scriptblock {get-eventlog system} -AsJob

C:\PS> invoke-command -computername S2 -scriptblock {start-job -scriptblock {get-eventlog system}}

C:\PS> get-job

Id    Name     State      HasMoreData   Location   Command
--    ----     -----      -----------   --------   -------
1     Job1     Running    True          localhost  get-eventlog system
2     Job2     Running    True          S1         get-eventlog system

C:\PS> invoke-command -computername S2 -scriptblock {get-job}

Id    Name     State      HasMoreData   Location   Command
--    ----     -----      -----------   --------   -------
4     Job4     Running    True          localhost  get-eventlog system

说明
-----------
此示例演示 Get-Job cmdlet 可以获取在当前会话中启动的所有作业，即使这些作业是使用不同的方法启动的也是如此。

第一条命令使用 Start-Job cmdlet 在本地计算机上启动作业。

第二条命令使用 Invoke-Command 的 AsJob 参数在 S1 计算机上启动作业。即使作业中的命令运行在远程计算机上，也会在本地计算机上创建作业对象，因此可以使用本地命令来管理作业。

第三条命令使用 Invoke-Command cmdlet 在 S2 计算机上运行 Start-Job 命令。使用此方法，作业对象在远程计算机上创建，因此可使用远程命令来管理作业。

第四条命令使用 Get-Job 来获取存储在本地计算机上的作业。

第五条命令使用 Invoke-Command 在 S2 计算机上运行 Get-Job 命令。

示例输出显示 Get-Job 命令的结果。

有关在远程计算机上运行后台作业的详细信息，请参阅 about_Remote_Jobs。

示例 9

C:\PS>start-job -scriptblock {get-process}

Id       Name            State      HasMoreData     Location             Command
--       ----            -----      -----------     --------             -------
1        Job1            Failed     False           localhost            get-process

C:\PS> (get-job).jobstateinfo | format-list -property *

State  : Failed
Reason :

C:\PS> get-job | format-list *

HasMoreData   : False
StatusMessage :
Location      : localhost
Command       : get-process
JobStateInfo  : Failed
Finished      : System.Threading.ManualResetEvent
InstanceId    : fb792295-1318-4f5d-8ac8-8a89c5261507
Id            : 1
Name          : Job1
ChildJobs     : {Job2}
Output        : {}
Error         : {}
Progress      : {}
Verbose       : {}
Debug         : {}
Warning       : {}
StateChanged  :

C:\PS> (get-job -name job2).jobstateinfo.reason
Connecting to remote server using WSManCreateShellEx api failed. The async callback gave the following error message :
Access is denied.

说明
-----------
此命令说明如何使用 Get-Job 返回的作业对象调查作业失败的原因。它还说明了如何获取每个作业的子作业。

第一条命令使用 Start-Job cmdlet 在本地计算机上启动作业。Start-Job 返回的作业对象显示作业失败。State 属性的值为“Failed”。

第二条命令使用 Get-Job 来获取作业对象。该命令使用点表示法来获取对象的 JobStateInfo 属性的值。它使用管道运算符将 JobStateInfo 属性中的对象发送给 Format-List cmdlet，后者将对象的所有属性 (*) 设置为列表格式。

Format-List 命令的结果显示作业的 Reason 属性值为空。

第三条命令进行了进一步的调查。它使用 Get-Job 命令来获取作业，然后使用管道运算符将整个作业对象发送给 Format-List cmdlet，后者以列表格式显示作业的所有属性。

作业对象中所有属性的显示结果显示出作业中包含名为“Job2”的子作业。

第四条命令使用 Get-Job 来获取代表 Job2 子作业的作业对象。这是实际运行命令的作业。它使用点表示法来获取 JobStateInfo 属性的 Reason 属性。

命令结果显示作业失败，其原因在于“拒绝访问”错误。在本例中，打开 Windows PowerShell 时，用户忘记了使用“以管理员身份运行”选项。

由于后台作业要用到 Windows PowerShell 的远程处理功能，因此必须为计算机配置远程处理才能运行作业，即使作业运行在本地计算机上也是如此。

有关 Windows PowerShell 中的远程处理要求的信息，请参阅 about_Remote_Requirements。有关故障排除技巧，请参阅 about_Remote_Troubleshooting。

另请参阅

  • about_Jobs
  • about_Job_Details
  • about_Remote_Jobs
  • Start-Job
  • Receive-Job
  • Wait-Job
  • Stop-Job
  • Remove-Job
  • Invoke-Command


Get-Location

获取当前工作位置的相关信息。

语法

Get-Location [-PSDrive <string[]>] [-PSProvider <string[]>] [-UseTransaction] [<CommonParameters>]

Get-Location [-Stack] [-StackName <string[]>] [-UseTransaction] [<CommonParameters>]

说明

Get-Location cmdlet 获取表示当前目录的对象，非常类似于 pwd（打印工作目录）命令。

当您在 Windows PowerShell 驱动器间移动时，Windows PowerShell 保留您在每个驱动器中的位置。可以使用 Get-Location 来查找您在每个驱动器中的位置。

还可以在运行时使用 Get-Location 来获取当前目录并将其用于函数和脚本，例如在 Windows PowerShell 提示符中显示当前目录的函数。

如果使用 Push-Location cmdlet 将位置添加到路径堆栈，则可以使用 Get-Location 的 Stack 参数来显示当前堆栈。

参数

-PSDrive <string[]>

获取指定的 Windows PowerShell 驱动器中的当前位置。

例如，如果您位于 Certificate: 驱动器中，则可以使用此参数来查找您在 C: 驱动器中的当前位置。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | true (ByPropertyName)
是否接受通配符？ | false

-PSProvider <string[]>

获取指定的 Windows PowerShell 提供程序支持的驱动器中的当前位置。

如果指定的提供程序支持多个驱动器，则 Get-Location 将返回最近访问过的驱动器上的位置。

例如，如果您位于 C: 驱动器中，则可以使用此参数来查找您在 Windows PowerShell Registry 提供程序的驱动器中的当前位置。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | true (ByPropertyName)
是否接受通配符？ | false

-Stack

显示默认路径堆栈中的位置。

要将路径添加到默认堆栈，请使用 Push-Location cmdlet。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-StackName <string[]>

显示指定的路径堆栈中的位置。

要创建路径堆栈，请使用 Push-Location cmdlet。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | true (ByPropertyName)
是否接受通配符？ | false

-UseTransaction

将命令包含在活动事务中。仅当正在执行事务时，此参数才有效。有关详细信息，请参阅 about_Transactions。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

<CommonParameters>

此 cmdlet 支持通用参数：-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。有关详细信息，请参阅 about_Commonparameters.

输入和输出

输入类型是指可通过管道传递给 cmdlet 的对象的类型。返回类型是指 Cmdlet 所返回对象的类型。

输入 | None 不能通过管道将输入传递给此 cmdlet。
输出 | PathInfo objects or StackInfo objects 如果使用 Stack 或 StackName 参数，则 Get-Location 返回 StackInfo 对象。否则，它返回 PathInfo 对象。

说明

位置可以存储在堆栈中。Push-Location cmdlet 将位置添加到堆栈的顶部。Pop-Location cmdlet 获取堆栈顶部的位置。

PSProvider、PSDrive、Stack 和 StackName 参数的交互方式取决于提供程序。某些组合将会导致错误，例如，指定驱动器以及没有公开该驱动器的提供程序。如果没有指定参数，则 Get-Location 为包含当前工作位置的提供程序返回 PathInfo 对象。

Get-Location cmdlet 用于处理由任何提供程序公开的数据。要列出会话中可用的提供程序，请键入“Get-PSProvider”。有关详细信息，请参阅 about_Providers。

示例 1

C:\PS>get-location

Path
----
C:\WINDOWS

说明
-----------
此命令显示您在当前 Windows PowerShell 驱动器中的位置。

例如，如果您位于 C: 驱动器的 Windows 目录中，则此命令将显示该目录的路径。

示例 2

C:\PS>set-location

说明
-----------
这些命令演示如何使用 Get-Location 来显示您在不同 Windows PowerShell 驱动器中的当前位置。

第一个命令使用 Set-Location cmdlet 将当前位置设置为 C: 驱动器的 Windows 子目录。

    C:\PS> set-location C:\Windows

第二个命令使用 Set-Location cmdlet 将位置更改为 HKLM:\Software\Microsoft 注册表项。更改为 HKLM: 驱动器中的位置时，Windows PowerShell 将保留您在 C: 驱动器中的位置。

    PS C:\WINDOWS> set-location HKLM:\Software\Microsoft
    PS HKLM:\Software\Microsoft>

第三个命令使用 Set-Location cmdlet 将位置更改为“HKCU:\Control Panel\Input Method”注册表项。

    PS HKLM:\Software\Microsoft> set-location 'HKCU:\Control Panel\Input Method'
    PS HKCU:\Control Panel\Input Method>

第四个命令使用 Get-Location cmdlet 来查找 C: 驱动器上的当前位置。它使用 PSDrive 参数来指定驱动器。

    PS HKCU:\Control Panel\Input Method> get-location -psdrive c
    路径
    ----
    C:\WINDOWS

第五个命令使用 Set-Location cmdlet 返回到 C: 驱动器。即使该命令没有指定子目录，Windows PowerShell 也将返回到保存的位置。

    PS HKCU:\Control Panel\Input Method> set-location C:
    PS C:\WINDOWS>

第六个命令使用 Get-Location cmdlet 来查找 Windows PowerShell 注册表提供程序支持的驱动器中的当前位置。Get-Location 将返回最近访问过的注册表驱动器 HKCU: 的位置。

    PS C:\WINDOWS> get-location -psprovider registry
    路径
    ----
    HKCU:\Control Panel\Input Method

要查看 HKLM: 驱动器中的当前位置，需要使用 PSDrive 参数来指定该驱动器。第七个命令执行此操作：

    PS C:\WINDOWS> get-location -psdrive HKLM
    路径
    ----
    HKLM:\Software\Microsoft

示例 3

C:\PS>set-location

说明
-----------
这些命令演示如何使用 Get-Location 的 Stack 参数和 StackName 参数来列出默认路径堆栈和备用路径堆栈中的路径。

第一个命令将当前位置设置为 C: 驱动器上的 Windows 目录。

    C:\PS> set-location C:\Windows

第二个命令使用 Push-Location cmdlet 将当前位置 (C:\Windows) 推入路径堆栈并更改为 System32 子目录。因为没有指定任何堆栈，所以将当前位置推入默认堆栈。
    C:\WINDOWS>push-location System32

第三个命令将当前位置 (C:\Windows\System32) 推入 Stack2 堆栈，并将位置更改为 WindowsPowerShell 子目录。

    C:\Windows\System32>push-location WindowsPowerShell -stack Stack2

第四个命令使用 Get-Location cmdlet 来获取默认路径堆栈中的路径。

    C:\WINDOWS\system32\WindowsPowerShell>get-location -stack

    路径
    ----
    C:\WINDOWS

最后一个命令使用 Get-Location 的 StackName 参数来获取 Stack2 堆栈中的路径。

    C:\WINDOWS\system32\WindowsPowerShell>get-location -stackname Stack2

    路径
    ----
    C:\WINDOWS\system32

示例 4

C:\PS>function prompt { 'PowerShell: ' + (get-location) + '> '}

PowerShell: C:\WINDOWS>

说明
-----------
此示例演示如何自定义 Windows PowerShell 提示符。定义提示符的函数包括 Get-Location 命令，只要提示符出现在控制台中就会运行该命令。

默认 Windows PowerShell 提示符的格式由一个名为“prompt”的特殊函数来定义。可以通过创建一个名为“prompt”的新函数来更改控制台中的提示符。

要查看当前的 prompt 函数，请键入以下命令：

    get-content function:prompt

此命令以“function”关键字开头，其后是函数名称“prompt”。函数体位于大括号 ({}) 内。

此命令定义一个以字符串“PowerShell: ”开头的新提示符。为追加当前位置，它使用 Get-Location 命令，该命令将在调用 prompt 函数时运行。提示符以字符串“> ”结尾。

另请参阅

  • about_Providers
  • Pop-Location
  • Push-Location
  • Set-Location


Get-Member

获取对象的属性和方法。

语法

Get-Member [[-Name] <string[]>] [-Force] [-InputObject <psobject>] [-MemberType {<AliasProperty> | <CodeProperty> | <Property> | <NoteProperty> | <ScriptProperty> | <Properties> | <PropertySet> | <Method> | <CodeMethod> | <ScriptMethod> | <Methods> | <ParameterizedProperty> | <MemberSet> | <Event> | <All>}] [-Static] [-View {<Extended> | <Adapted> | <Base> | <All>}] [<CommonParameters>]

说明

Get-Member 获取对象的“成员”（属性和方法）。

若要指定对象，请使用 InputObject 参数或通过管道将对象传递到 Get-Member。若要检索有关静态成员（类的成员，而不是实例的成员）的信息，请使用 Static 参数。若要仅获取特定类型的成员（如 NoteProperties），请使用 MemberType 参数。

参数

-Force

向显示内容中添加固有成员（PSBase、PSAdapted、PSObject、PSTypeNames）以及编译器生成的 get_ 和 set_ 方法。默认情况下，Get-Member 会在除“Base”和“Adapted”之外的所有视图中获取这些属性，但不会显示它们。

下面的列表描述了使用 Force 参数时添加的属性：

-- PSBase：.NET Framework 对象的原始属性，无任何扩展或改编。这些是为对象类定义的属性并列在 MSDN 中。

-- PSAdapted：在 Windows PowerShell 扩展类型系统中定义的属性和方法。

-- PSExtended：在 Types.ps1xml 文件中添加的或使用 Add-Member cmdlet 添加的属性和方法。

-- PSObject：将基对象转换为 Windows PowerShell PSObject 对象的适配器。

-- PSTypeNames：按专指性顺序描述对象的对象类型的列表。设置对象格式时，Windows PowerShell 会在 Windows PowerShell 安装目录 ($pshome) 下的 Format.ps1xml 文件中搜索类型。它将使用找到的第一个类型的格式定义。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-InputObject <psobject>

指定将检索其成员的对象。

使用 InputObject 参数与通过管道将对象传递到 Get-Member 不同。区别如下：

-- 通过管道将对象集合传递到 Get-Member 时，Get-Member 会获取集合中单个对象的成员，如整数数组中整数的属性。

-- 使用 InputObject 提交对象集合时，Get-Member 会获取集合的成员，如整数数组中数组的属性。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | true (ByValue)
是否接受通配符？ | false

-MemberType <PSMemberTypes>

仅获取具有指定成员类型的成员。默认值为 All。

此参数的有效值为：

-- AliasProperty：一种可为现有属性定义新名称的属性。

-- CodeMethod：一种可引用 .NET Framework 类的静态方法的方法。

-- CodeProperty：一种可引用 .NET Framework 类的静态属性的属性。

-- Event：指示对象将发送消息来指示某项操作或状态更改。

-- MemberSet：属性和方法的预定义集合，如 PSBase、PSObject 和 PSTypeNames。

-- Method：基础 .NET Framework 对象的方法。

-- NoteProperty：具有静态值的属性。

-- ParameterizedProperty：具有参数和参数值的属性。

-- Property：基础 .NET Framework 对象的属性。

-- PropertySet：对象属性的预定义集合。

-- ScriptMethod：其值是脚本输出的方法。

-- ScriptProperty：其值是脚本输出的属性。

-- All：获取全部成员类型。

-- Methods：获取对象的所有方法类型（如 Method、CodeMethod、ScriptMethod）。

-- Properties：获取对象的所有类型的属性（如 Property、CodeProperty、AliasProperty、ScriptProperty）。

并非所有对象都具有成员的全部类型。如果您指定该对象所不具有的成员类型，则 Windows PowerShell 会返回 null 值。

若要获取相关类型的成员（如所有扩展成员），请使用 View 参数。如果将 MemberType 参数与 Static 或 View 参数一起使用，Get-Member 将获取同时属于这两个集合的成员。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Name <string[]>

指定对象的一个或多个属性或方法的名称。Get-Member 仅获取指定的属性和方法。

如果将 Name 参数与 MemberType、View 或 Static 参数一起使用，Get-Member 将仅获取满足所有参数条件的成员。

若要根据名称获取静态成员，请将 Static 参数与 Name 参数一起使用。

是否为必需？ | false
位置？ | 1
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Static

仅获取对象的静态属性和方法。

将在对象的类上定义静态属性和方法，而不是在类的任何特定实例上定义。

如果将 Static 参数与 View 参数一起使用，将忽略 View 参数。如果将 Static 参数与 MemberType 参数一起使用，Get-Member 将仅获取同时属于这两个集合的成员。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-View <PSMemberViewTypes>

仅获取特定类型的成员（属性和方法）。指定一个或多个值。默认值是“Adapted, Extended”。

有效值包括：

-- Base：仅获取 .NET Framework 对象的原始属性和方法（无任何扩展或改编）。

-- Adapted：仅获取 Windows PowerShell 扩展类型系统中定义的属性和方法。

-- Extended：仅获取在 Types.ps1xml 文件中添加的或使用 Add-Member cmdlet 添加的属性和方法。

-- All：获取 Base、Adapted 和 Extended 视图中的成员。

View 参数确定检索到的成员，而不只是这些成员的显示方式。

若要获取特定成员类型（如脚本属性），请使用 MemberType 参数。如果在同一命令中使用 MemberType 和 View 参数，Get-Member 将获取同时属于这两个集合的成员。如果在同一命令中使用 Static 和 View 参数，将忽略 View 参数。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

<CommonParameters>

此 cmdlet 支持通用参数：-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。有关详细信息，请参阅 about_Commonparameters.

输入和输出

输入类型是指可通过管道传递给 cmdlet 的对象的类型。返回类型是指 Cmdlet 所返回对象的类型。

输入 | System.Management.Automation.PSObject 可以通过管道将任何对象传递给 Get-Member。
输出 | Microsoft.PowerShell.Commands.MemberDefinition Get-Member 为所获取的每个属性或方法返回一个对象。

说明

通过使用 InputObject 参数，或通过管道将对象传递到 Get-Member（以逗号为前缀），可以检索有关集合对象的信息。

示例 1

C:\PS>get-service | get-member

   TypeName: System.ServiceProcess.ServiceController

Name                      MemberType    Definition
----                      ----------    ----------
Name                      AliasProperty Name = ServiceName
Close                     Method        System.Void Close()
Continue                  Method        System.Void Continue()
CreateObjRef              Method        System.Runtime.Remoting.ObjRef CreateObjRef(Type requestedType)
Dispose                   Method        System.Void Dispose()
Equals                    Method        System.Boolean Equals(Object obj)
ExecuteCommand            Method        System.Void ExecuteCommand(Int32 command)
GetHashCode               Method        System.Int32 GetHashCode()
GetLifetimeService        Method        System.Object GetLifetimeService()
GetType                   Method        System.Type GetType()
InitializeLifetimeService Method        System.Object InitializeLifetimeService()
Pause                     Method        System.Void Pause()
Refresh                   Method        System.Void Refresh()
Start                     Method        System.Void Start(), System.Void Start(String[] args)
Stop                      Method        System.Void Stop()
ToString                  Method        System.String ToString()
WaitForStatus             Method        System.Void WaitForStatus(ServiceControllerStatus desiredStatus), System.Voi...
CanPauseAndContinue       Property      System.Boolean CanPauseAndContinue {get;}
CanShutdown               Property      System.Boolean CanShutdown {get;}
CanStop                   Property      System.Boolean CanStop {get;}
Container                 Property      System.ComponentModel.IContainer Container {get;}
DependentServices         Property      System.ServiceProcess.ServiceController[] DependentServices {get;}
DisplayName               Property      System.String DisplayName {get;set;}
MachineName               Property      System.String MachineName {get;set;}
ServiceHandle             Property      System.Runtime.InteropServices.SafeHandle ServiceHandle {get;}
ServiceName               Property      System.String ServiceName {get;set;}
ServicesDependedOn        Property      System.ServiceProcess.ServiceController[] ServicesDependedOn {get;}
ServiceType               Property      System.ServiceProcess.ServiceType ServiceType {get;}
Site                      Property      System.ComponentModel.ISite Site {get;set;}
Status                    Property      System.ServiceProcess.ServiceControllerStatus Status {get;}

说明
-----------
此命令显示 Get-Service cmdlet 生成的进程对象 (System.ServiceProcess.ServiceController) 的属性和方法。

此命令使用管道运算符 (|) 将 Get-Service 命令的输出发送到 Get-Member。

因为此命令的 Get-Member 部分没有任何参数，所以它将使用所有默认值。同样，它将获取所有成员类型，但不获取静态成员且不显示固有成员。

示例 2

C:\PS>get-service | get-member -force

C:\PS> (get-service -schedule).psbase

说明
-----------
此示例获取 Get-Service cmdlet 检索的服务对象 (System.ServiceProcess.ServiceController) 的所有成员（属性和方法），包括固有成员（如 PSBase 和 PSObject）以及 get_ 和 set_ 方法。

第一条命令使用 Get-Service cmdlet 来获取表示系统中的服务的对象。它使用管道运算符 (|) 将服务对象传递到 Get-Member cmdlet。

Get-Member 命令使用 Force 参数将对象的固有成员和编译器生成的成员添加到显示内容中。Get-Member 会获取这些成员，但默认情况下会隐藏它们。

可以像使用对象的改编方法一样使用这些属性和方法。第二条命令演示如何显示 Schedule 服务的 PSBase 属性值。

示例 3

C:\PS>get-service	| get-member -view extended

   TypeName: System.ServiceProcess.ServiceController

Name MemberType    Definition
---- ----------    ----------
Name AliasProperty Name = ServiceName

说明
-----------
此命令获取通过使用 Types.ps1xml 文件或 Add-Member cmdlet 扩展的服务对象的方法和属性。

Get-Member 命令使用 View 参数来仅获取服务对象的扩展成员。在本例中，扩展成员是 Name 属性，它是 ServiceName 属性的别名属性。

示例 4

C:\PS>get-eventlog -log system | gm -membertype scriptproperty

   TypeName: System.Diagnostics.EventLogEntry

Name    MemberType     Definition
----    ----------     ----------
EventID ScriptProperty System.Object EventID {get=$this.get_EventID() -band 0xFFFF;}

说明
-----------
此命令获取事件查看器内系统日志中的事件日志对象的脚本属性。在本例中，唯一的脚本属性是 EventID。

示例 5

C:\PS>get-eventlog -log system | get-member -membertype scriptproperty

   TypeName: System.Diagnostics.EventLogEntry

Name    MemberType     Definition
----    ----------     ----------
EventID ScriptProperty System.Object EventID {get=$this.get_EventID() -band 0xFFFF;}

说明
-----------
此命令获取事件查看器内系统日志中的事件日志对象的脚本属性。

此命令使用 MemberType 参数来仅获取其 MemberType 属性值为 AliasProperty 的对象。

此命令返回 EventLog 对象的 EventID 属性。

示例 6

C:\PS>$a = "get-process", "get-service", "get-culture", "get-psdrive", "get-executionpolicy"

C:\PS> foreach ($cmdlet in $a) {invoke-expression $cmdlet | get-member -name machinename}

TypeName: System.Diagnostics.Process

Name        MemberType Definition
----        ---------- ----------
MachineName Property   System.String MachineName {get;}

   TypeName: System.ServiceProcess.ServiceController

Name        MemberType Definition
----        ---------- ----------
MachineName Property   System.String MachineName {get;set;}

说明
-----------
此命令获取 cmdlet 列表中具有 MachineName 属性的对象。

第一个命令在 $a 变量中存储多个 cmdlet 的名称。

第二个命令使用 ForEach 语句调用每个命令，将结果发送到 Get-Member，并将 Get-Member 的结果限制为具有名称“MachineName”的成员。

结果显示仅进程对象 (System.Diagnostics.Process) 和服务对象 (System.ServiceProcess.ServiceController) 具有 MachineName 属性。

示例 7

C:\PS>$a = get-member -inputobject @(1)

C:\PS>$a.count

1

C:\PS> $a = get-member -inputobject 1,2,3

   TypeName: System.Object[]
Name               MemberType    Definition
----               ----------    ----------
Count              AliasProperty Count = Length
Address            Method        System.Object& Address(Int32 )
Clone              Method        System.Object Clone()
...

C:\PS>$a.count
1

说明
-----------
此示例演示了当只具有一个给定类型的对象时如何查找对象数组的属性和方法。

因为此命令的目的是查找数组的属性，所以第一条命令使用 InputObject 参数。该参数使用“at”符号 (@) 来指示数组。在本例中，该数组仅包含一个对象，即整数 1。

第三条命令使用 Get-Member cmdlet 来获取整数数组的属性和方法，然后此命令将它们保存在 $a 变量中。

第四条命令使用数组的 Count 属性来查找 $a 变量中对象的数目。

另请参阅

  • Add-Member
  • Get-Help
  • Get-Command
  • Get-PSDrive


Get-Module

获取已导入或可以导入到当前会话中的模块。

语法

Get-Module [-全部] [-ListAvailable] [-Name <string[]>] [<CommonParameters>]

Get-Module [[-Name] <string[]>] [<CommonParameters>]

说明

Get-Module cmdlet 获取已导入或可以导入到会话中的模块。

Get-Module 只获取模块；但不导入模块。要将模块导入到会话中，请使用 Import-Module。

参数

-全部

获取所有模块文件的模块对象。

如果不使用 All 参数，则 Get-Module 只获取默认模块文件的模块对象。该 cmdlet 选择文件类型的顺序如下：清单 (.psd1) 文件、脚本模块 (.psm1) 文件和二进制模块 (.dll) 文件。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-ListAvailable

获取可以导入到会话中的所有模块。Get-Module 获取由 $env:PSModulePath 环境变量指定的路径中的模块。

如果不使用此参数，Get-Module 只获取已导入到会话中的模块。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Name <string[]>

只获取具有指定名称或名称模式的模块。允许使用通配符。还可以通过管道将名称传送给 Get-Module。

是否为必需？ | false
位置？ | 1
默认值 | All imported or available modules.
是否接受管道输入？ | true (ByValue)
是否接受通配符？ | true

<CommonParameters>

此 cmdlet 支持通用参数：-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。有关详细信息，请参阅 about_Commonparameters.

输入和输出

输入类型是指可通过管道传递给 cmdlet 的对象的类型。返回类型是指 Cmdlet 所返回对象的类型。

输入 | System.String 可以通过管道将模块名称传递给 Get-Module。
输出 | System.Management.Automation.PSModuleInfo Get-Module 返回表示模块的对象。

说明

还可以通过别名“gmo”来引用 Get-Module。有关详细信息，请参阅 about_Aliases。

All 参数返回文件扩展名为 .dll 的所有文件的模块对象，即使它们不实现 cmdlet 或提供程序也是如此。

示例 1

C:\PS>get-module

说明
-----------
此命令获取已导入到当前会话中的模块。

示例 2

C:\PS>get-module -listAvailable

说明
-----------
此命令获取可以导入到当前会话中的模块。

Get-Module 在由 $env:PSModulePath 环境变量指定的路径中查找可用模块。有关 PSModulePath 的详细信息，请参阅 about_Modules 和 about_Environment_Variables。

示例 3

C:\PS>get-module -listAvailable -all

说明
-----------
此命令获取所有可用模块的全部导出文件。

示例 4

C:\PS>get-module | get-member -type property

   TypeName: System.Management.Automation.PSModuleInfo

Name              MemberType Definition
----              ---------- ----------
AccessMode        Property   System.Management.Automation.ModuleAcc
Description       Property   System.String Description {get;set;}
ExportedAliases   Property   System.Collections.Generic.Dictionary`
ExportedCmdlets   Property   System.Collections.Generic.Dictionary`
ExportedFunctions Property   System.Collections.Generic.Dictionary`
ExportedVariables Property   System.Collections.Generic.Dictionary`
Guid              Property   System.Guid Guid {get;}
ModuleBase        Property   System.String ModuleBase {get;}
ModuleType        Property   System.Management.Automation.ModuleTyp
Name              Property   System.String Name {get;}
NestedModules     Property   System.Collections.ObjectModel.ReadOnl
OnRemove          Property   System.Management.Automation.ScriptBlo
Path              Property   System.String Path {get;}
PrivateData       Property   System.Object PrivateData {get;set;}
SessionState      Property   System.Management.Automation.SessionSt
Version           Property   System.Version Version {get;}

说明
-----------
此命令获取 Get-Module 返回的 PSModuleInfo 对象的属性。每个模块文件对应一个对象。

可以使用属性来设置模块对象的格式以及筛选模块对象。有关这些属性的详细信息，请参阅 MSDN (Microsoft Developer Network) Library 中的“PSModule 属性”，网址是 http://go.microsoft.com/fwlink/?LinkId=143624。

示例 5

C:\PS>get-module -listAvailable -all | format-table -property name, moduletype, path -groupby name -auto

   Name: MyTestCmdlets

Name          ModuleType Path
----          ---------- ----
MyTestCmdlets     Script C:\Windows\system32\WindowsPowerShell\v1.0\Modules\TestCmdlets\TestCmdlets.dll

   Name: PSDiagnostics

Name          ModuleType Path
----          ---------- ----
PSDiagnostics   Manifest C:\Windows\system32\WindowsPowerShell\v1.0\Modules\PSDiagnostics\PSDiagnostics.psd1
PSDiagnostics     Script C:\Windows\system32\WindowsPowerShell\v1.0\Modules\PSDiagnostics\PSDiagnostics.psm1

   Name: FileTransfer

Name         ModuleType Path
----         ---------- ----
FileTransfer   Manifest C:\Windows\system32\WindowsPowerShell\v1.0\Modules\FileTransfer\FileTransfer.psd1

说明
-----------
此命令获取所有的模块文件（已导入的和可用的）并按模块名称对其进行分组。这样一来，就可以看到每个脚本正导出的模块文件。

示例 6

C:\PS>$m = get-module -list -name FileTransfer | where {$_.moduletype -eq "Manifest"}

C:\PS> get-content $m.path

@{
GUID="{8FA5064B-8479-4c5c-86EA-0D311FE48875}"
Author="Microsoft Corporation"
CompanyName="Microsoft Corporation"
Copyright="© Microsoft Corporation. All rights reserved."
ModuleVersion="1.0.0.0"
Description="Windows Powershell File Transfer Module"
PowerShellVersion="2.0"
CLRVersion="2.0"
NestedModules="Microsoft.BackgroundIntelligentTransfer.Management"
FormatsToProcess="FileTransfer.Format.ps1xml"
RequiredAssemblies=Join-Path $psScriptRoot "Microsoft.BackgroundIntelligentTransfer.Management.Interop.dll"
}

说明
-----------
这些命令显示了 Windows PowerShell 文件传输模块的模块清单的内容。

第一条命令获取表示文件传输模块的模块清单的 PSModuleInfo 对象它将对象保存在 $m 变量中。

第二条命令使用点表示法获取清单文件的路径，后者存储在对象的 Path 属性中。然后，它使用 Get-Content cmdlet 获取指定路径下的清单文件的内容。

模块不一定要有清单文件。如果模块有清单文件，则清单中只要求包含版本号。不过，清单文件通常会提供有关模块、模块要求以及模块内容的有用信息。

示例 7

C:\PS>get-module -listAvailable  -name FileTransfer | format-list -property *

Name              : FileTransfer
Path              : C:\Windows\system32\WindowsPowerShell\v1.0\Modules\FileTransfer\FileTransfer.psd1
Description       : Powershell File Transfer Module
Guid              : 8fa5064b-8479-4c5c-86ea-0d311fe48875
ModuleBase        : C:\Windows\system32\WindowsPowerShell\v1.0\Modules\FileTransfer
PrivateData       :
Version           : 1.0.0.0
ModuleType        : Manifest
AccessMode        : ReadWrite
ExportedFunctions : {}
ExportedCmdlets   : {}
NestedModules     : {}
ExportedVariables : {}
ExportedAliases   : {}
SessionState      : System.Management.Automation.SessionState
OnRemove          :

说明
-----------
此命令在列表中显示 FileTransfer 模块的所有属性。

因为该模块尚未导入到会话中，所以尚未填充 Exported* 属性和 NestedModules 属性。只有在元素已导出并且嵌套模块已实例化后，才会填充这些属性。

示例 8

C:\PS>dir (get-module -listavailable FileTransfer).modulebase

    Directory: C:\Windows\system32\WindowsPowerShell\v1.0\Modules\FileTransfer

Mode                LastWriteTime     Length Name
----                -------------     ------ ----
d----        12/16/2008  12:36 PM            en-US
-a---        11/19/2008  11:30 PM      16184 FileTransfer.Format.ps1xml
-a---        11/20/2008  11:30 PM       1044 FileTransfer.psd1
-a---        12/16/2008  12:20 AM     108544 Microsoft.BackgroundIntelligentTransfer.Management.Interop.dll

说明
-----------
此命令列出模块的目录中的文件。这是导入模块前确定模块中内容的另一种方式。有些模块可能有帮助文件或描述模块的自述文件。

另请参阅

  • Import-Module
  • New-Module
  • Remove-Module
  • about_Modules


Get-PfxCertificate

获取计算机上 .pfx 证书文件的相关信息。

语法

Get-PfxCertificate [-FilePath] <string[]> [<CommonParameters>]

说明

Get-PfxCertificate cmdlet 获取表示每个指定的 .pfx 证书文件的对象。.pfx 文件包括证书和私钥。

参数

-FilePath <string[]>

指向安全文件的 .pfx 文件的完整路径。参数名（“FilePath”）为可选项。

是否为必需？ | true
位置？ | 1
默认值 |
是否接受管道输入？ | true (ByValue, ByPropertyName)
是否接受通配符？ | false

<CommonParameters>

此 cmdlet 支持通用参数：-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。有关详细信息，请参阅 about_Commonparameters.

输入和输出

输入类型是指可通过管道传递给 cmdlet 的对象的类型。返回类型是指 Cmdlet 所返回对象的类型。

输入 | System.String 可以通过管道将包含文件路径的字符串传递给 Get-PfxCertificate。
输出 | System.Security.Cryptography.X509Certificates Get-PfxCertificate 针对每个所获取的证书返回一个对象。

说明

使用 Invoke-Command cmdlet 远程运行 Get-PfxCertificate 命令时，如果 .pfx 证书文件未受密码保护，则 Invoke-Command 的 Authentication 参数值必须是“CredSSP”。

示例 1

C:\PS>get-pfxcertificate -filepath C:\windows\system32\Test.pfx

Password: ******
Signer Certificate:      Matt Berg (Self Certificate)
Time Certificate:
Time Stamp:
Path:                    C:\windows\system32\zap.pfx

说明
-----------
此命令获取系统中 Test.pfx 证书的相关信息。

示例 2

C:\PS>invoke-command -computername Server01 -scriptblock {get-pfxcertificate -filepath C:\Text\TestNoPassword.pfx} -authentication CredSSP

说明
-----------
此命令将从 Server01 远程计算机上获取 .pfx 证书文件。它使用 Invoke-Command 来远程运行 Get-PfxCertificate 命令。

如果 .pfx 证书文件未受密码保护，则 Invoke-Command 的 Authentication 参数值必须是“CredSSP”。

另请参阅

  • Get-AuthenticodeSignature
  • Set-AuthenticodeSignature
  • about_Signing


Get-Process

获取在本地计算机或远程计算机上运行的进程。

语法

Get-Process [[-Name] <string[]>] [-ComputerName <string[]>] [-FileVersionInfo] [-Module] [<CommonParameters>]

Get-Process -Id <Int32[]> [-ComputerName <string[]>] [-FileVersionInfo] [-Module] [<CommonParameters>]

Get-Process -InputObject <Process[]> [-ComputerName <string[]>] [-FileVersionInfo] [-Module] [<CommonParameters>]

说明

Get-Process cmdlet 获取本地或远程计算机上的进程。

如果没有参数，则 Get-Process 获取本地计算机上的所有进程。还可以通过进程名称或进程 ID (PID) 来指定特定进程，或将进程对象通过管道传送给 Get-Process。

默认情况下，Get-Process 将返回一个进程对象，该对象包含有关进程的详细信息并且支持允许您启动和停止进程的方法。还可以使用 Get-Process 的参数来获取进程中运行的程序的文件版本信息以及获取进程加载的模块。

参数

-ComputerName <string[]>

获取指定计算机上运行的进程。默认值为本地计算机。

键入一台或多台计算机的 NetBIOS 名称、IP 地址或完全限定的域名。要指定本地计算机，请键入计算机名称、句点 (.) 或“localhost”。

此参数不依赖于 Windows PowerShell 远程处理。即使您的计算机未配置为运行远程命令，您也可以使用 Get-Process 的 ComputerName 参数。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | true (ByPropertyName)
是否接受通配符？ | false

-FileVersionInfo

获取进程中运行的程序的文件版本信息。

在 Windows Vista 以及更高版本的 Windows 上，必须使用“以管理员身份运行”选项打开 Windows PowerShell，才能对您不具有所有权的进程使用此参数。

使用此参数等效于获取每个进程对象的 MainModule.FileVersionInfo 属性。如果使用此参数，则 Get-Process 返回 FileVersionInfo 对象 (System.Diagnostics.FileVersionInfo)，而非进程对象。因此，不能通过管道将命令输出传递到需要进程对象的 cmdlet（例如 Stop-Process）。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Id <Int32[]>

通过进程 ID (PID) 指定一个或多个进程。若要指定多个 ID，请使用逗号分隔 ID。要查找进程的 PID，请键入“get-process”。

是否为必需？ | true
位置？ | named
默认值 |
是否接受管道输入？ | true (ByPropertyName)
是否接受通配符？ | false

-InputObject <Process[]>

指定一个或多个进程对象。输入一个包含对象的变量，或键入可获取对象的命令或表达式。

是否为必需？ | true
位置？ | named
默认值 |
是否接受管道输入？ | true (ByValue)
是否接受通配符？ | false

-Module

获取已由进程加载的模块。

在 Windows Vista 以及更高版本的 Windows 上，必须使用“以管理员身份运行”选项打开 Windows PowerShell，才能对您不具有所有权的进程使用此参数。

此参数等效于获取每个进程对象的 Modules 属性。如果使用此参数，则 Get-Process 返回 ProcessModule 对象 (System.Diagnostics.ProcessModule)，而非进程对象。因此，不能通过管道将命令输出传递到需要进程对象的 cmdlet（例如 Stop-Process）。

在同一个命令中同时使用 Module 和 FileVersionInfo 参数时，Get-Process 将返回包含所有模块的文件版本相关信息的 FileVersionInfo 对象。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Name <string[]>

通过进程名称指定一个或多个进程。可以键入多个进程名称（以逗号分隔）或使用通配符。参数名（“Name”）为可选项。

是否为必需？ | false
位置？ | 1
默认值 |
是否接受管道输入？ | true (ByPropertyName)
是否接受通配符？ | true

<CommonParameters>

此 cmdlet 支持通用参数：-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。有关详细信息，请参阅 about_Commonparameters.

输入和输出

输入类型是指可通过管道传递给 cmdlet 的对象的类型。返回类型是指 Cmdlet 所返回对象的类型。

输入 | System.Diagnostics.Process 可以将进程对象通过管道传递给 Get-Process。
输出 | System.Diagnostics.Process, System.Diagnotics.FileVersionInfo, System.Diagnostics.ProcessModule 默认情况下，Get-Process 将返回 System.Diagnostics.Process 对象。如果使用 FileVersionInfo 参数，则将返回 System.Diagnotics.FileVersionInfo 对象。如果使用 Module 参数（不带 FileVersionInfo 参数），则将返回 System.Diagnostics.ProcessModule 对象。

说明

不能在同一个命令中使用 Name、ID 和 InputObject 参数。

还可以通过 Get-Process 的内置别名“ps”和“gps”来对其进行引用。有关详细信息，请参阅 about_Aliases。

也可使用 Windows PowerShell 中的 WMI Win32_Process 对象的属性和方法。有关信息，请参阅 Get-WmiObject 和 Windows Management Instrumentation (WMI) SDK。

进程的默认显示为包括以下列的表：

-- Handles：进程打开的句柄数。

-- NPM(K)：进程正在使用的非分页内存量，以千字节为单位。

-- PM(K)：进程正在使用的可分页的内存量，以千字节为单位。

-- WS(K)：进程工作集的大小，以千字节为单位。工作集包括进程最近引用的内存的页面。

-- VM(M)：进程正在使用的虚拟内存量，以兆字节为单位。虚拟内存包括磁盘上分页文件中的存储。

-- CPU(s)：进程已用于所有处理器的处理器时间量，以秒为单位。

-- ID：进程的进程 ID (PID)。

-- ProcessName：进程的名称。

有关与进程相关的概念的解释，请参阅帮助和支持中心中的词汇表以及任务管理器帮助。

还可以使用 Format-Table 提供的内置式进程可选视图，例如“StartTime”和“Priority”，也可设计自己的视图。有关详细信息，请参阅 Format-Table。

示例 1

C:\PS>Get-Process

说明
-----------
此命令获取本地计算机上运行的所有正在运行的进程列表。有关每列的定义，请参阅 Get-Help 的帮助主题的“附加注释”一节。

示例 2

C:\PS>Get-Process winword, explorer | format-list *

说明
-----------
此命令获取计算机上的有关 Winword 和 Explorer 进程的所有可用的数据。它使用 Name 参数来指定进程，但省略可选的参数名。管道运算符 (|) 将数据传递给 Format-List cmdlet，后者将显示 Winword 和 Explorer 进程对象的所有可用属性 (*)。

也可通过其进程 ID 来标识这些进程。例如，“get-process -id 664, 2060”。

示例 3

C:\PS>get-process | where-object {$_.WorkingSet -gt 20000000}

说明
-----------
此命令获取所有工作集大于 20 MB 的进程。它使用 Get-Process cmdlet 来获取所有正在运行的进程。管道运算符 (|) 将进程对象传递给 Where-Object cmdlet，后者只选择 WorkingSet 属性的值大于 20,000,000 字节的对象。

WorkingSet 是进程对象的许多属性中的一个。要查看所有属性，请键入“Get-Process | Get-Member”。默认情况下，所有数量属性的值以字节为单位，尽管默认显示以千字节和兆字节为单位列出这些值。

示例 4

C:\PS>$a = get-process

C:\PS> get-process -inputobject $a | format-table -view priority

说明
-----------
这些命令根据计算机上进程的优先级类将其分组列出。

第一个命令获取计算机上的所有进程，然后将其存储在 $a 变量中。

第二个命令使用 InputObject 参数将存储在 $a 变量中的进程对象传递给 Get-Process cmdlet。管道运算符将对象传递给 Format-Table cmdlet，该 cmdlet 使用 Priority 视图设置进程的格式。

在 Windows PowerShell 主目录 ($pshome) 中的 PS1XML 格式文件中对 Priority 视图及其他视图进行了定义。

示例 5

C:\PS>get-process powershell -computername S1, localhost | ft @{Label="NPM(K)";Expression={[int]($_.NPM/1024)}}, @{Label="PM(K)";Expression={[int]($_.PM/1024)}},@{Label="WS(K)";Expression={[int]($_.WS/1024)}},@{Label="VM(M)";Expression={[int]($_.VM/1MB)}}, @{Label="CPU(s)";Expression={if ($_.CPU -ne $()) { $_.CPU.ToString("N")}}}, Id, MachineName, ProcessName -auto

NPM(K) PM(K) WS(K) VM(M) CPU(s)   Id MachineName ProcessName
------ ----- ----- ----- ------   -- ----------- -----------
     6 23500 31340   142        1980 S1          powershell
     6 23500 31348   142        4016 S1          powershell
    27 54572 54520   576        4428 localhost   powershell

说明
-----------
此示例提供将 MachineName 属性添加到标准 Get-Process 输出显示的 Format-Table（别名为 ft）命令。

示例 6

C:\PS>get-process powershell -fileversioninfo

ProductVersion   FileVersion      FileName
--------------   -----------      --------
6.1.6713.1       6.1.6713.1 (f... C:\WINDOWS\system32\WindowsPowerShell\v1.0\powershell.exe

说明
-----------
此命令使用 FileVersionInfo 参数来获取 PowerShell.exe 文件的版本信息，该文件是 PowerShell 进程的主模块。

要在 Windows Vista 以及更高版本的 Windows 上对您不具有所有权的进程运行此命令，必须使用“以管理员身份运行”选项打开 Windows PowerShell。

示例 7

C:\PS>get-process sql* -module

说明
-----------
此命令使用 Module 参数来获取已由进程加载的模块。此命令获取名称以“sql”开头的进程的模块。

要在 Windows Vista（以及更高版本的 Windows）上对您不具有所有权的进程运行此命令，必须使用“以管理员身份运行”选项启动 Windows PowerShell。

示例 8

C:\PS>$p = get-wmiobject win32_process -filter "name='powershell.exe'"

C:\PS> $p.getowner()

__GENUS          : 2
__CLASS          : __PARAMETERS
__SUPERCLASS     :
__DYNASTY        : __PARAMETERS
__RELPATH        :
__PROPERTY_COUNT : 3
__DERIVATION     : {}
__SERVER         :
__NAMESPACE      :
__PATH           :
Domain           : DOMAIN01
ReturnValue      : 0
User             : user01

说明
-----------
此命令演示如何查找进程的所有者。因为 Get-Process 返回的 System.Diagnostics.Process 对象没有返回进程所有者的属性和方法，所以该命令将使用
Get-WmiObject cmdlet 来获取表示该进程的 Win32_Process 对象。

第一个命令使用 Get-WmiObject 来获取 PowerShell 进程。此命令将其保存在 $p 变量中。

第二个命令使用 GetOwner 方法来获取 $p 中进程的所有者。此命令显示所有者为 Domain01\user01。

示例 9

C:\PS>get-process powershell

C:\PS> get-process -id $pid

C:\PS> get-process powershell

Handles  NPM(K)    PM(K)      WS(K) VM(M)   CPU(s)     Id ProcessName
-------  ------    -----      ----- -----   ------     -- -----------
    308      26    52308      61780   567     3.18   5632 powershell
    377      26    62676      63384   575     3.88   5888 powershell

C:\PS> get-process -id $pid

Handles  NPM(K)    PM(K)      WS(K) VM(M)   CPU(s)     Id ProcessName
-------  ------    -----      ----- -----   ------     -- -----------
    396      26    56488      57236   575     3.90   5888 powershell

说明
-----------
这些命令演示如何使用 $pid 自动变量来标识承载当前 Windows PowerShell 会话的进程。可以使用此方法将宿主进程与可能要停止或关闭的其他 PowerShell 进程区分开来。

第一个命令获取当前会话中的所有 PowerShell 进程。

第二个命令获取承载当前会话的 PowerShell 进程。

另请参阅

  • Get-Process
  • Start-Process
  • Stop-Process
  • Wait-Process
  • Debug-Process


Get-PSBreakpoint

获取当前会话中设置的断点。

语法

Get-PSBreakpoint [[-Script] <string[]>] [<CommonParameters>]

Get-PSBreakpoint -Command <string[]> [-Script <string[]>] [<CommonParameters>]

Get-PSBreakpoint [-Id] <Int32[]> [<CommonParameters>]

Get-PSBreakpoint [-Type] <BreakpointType[]> [-Script <string[]>] [<CommonParameters>]

Get-PSBreakpoint -Variable <string[]> [-Script <string[]>] [<CommonParameters>]

说明

Get-PSBreakPoint cmdlet 获取当前会话中设置的断点。可以使用 cmdlet 参数来获取特定断点。

断点是命令或脚本中的一个点，可以在该处暂时停止执行，以便您可以检查指令。Get-PSBreakpoint 是设计用于调试 Windows PowerShell 脚本和命令的多个 cmdlet 之一。有关 Windows PowerShell 调试程序的详细信息，请参阅 about_Debuggers。

参数

-Command <string[]>

获取指定命令名称上设置的命令断点。输入命令名称，如 cmdlet 或函数的名称。

是否为必需？ | true
位置？ | named
默认值 | All breakpoints
是否接受管道输入？ | false
是否接受通配符？ | false

-Id <Int32[]>

获取具有指定断点 ID 的断点。以逗号分隔的列表的形式输入 ID。还可以通过管道将断点 ID 传递给 Get-PSBreakpoint。

是否为必需？ | true
位置？ | 1
默认值 | All breakpoints
是否接受管道输入？ | true (ByValue)
是否接受通配符？ | false

-Script <string[]>

仅获取指定脚本中的断点。输入一个或多个脚本文件的路径（可选）和名称。默认位置为当前目录。

是否为必需？ | false
位置？ | named
默认值 | All breakpoints
是否接受管道输入？ | false
是否接受通配符？ | false

-Type <BreakpointType[]>

仅获取指定类型的断点。输入一个或多个类型。有效值为 Line、Command 和 Variable。还可以通过管道将断点类型传递到 Get-PSBreakpoint。

是否为必需？ | true
位置？ | 1
默认值 | All breakpoints
是否接受管道输入？ | true (ByValue)
是否接受通配符？ | false

-Variable <string[]>

获取指定变量名称上设置的变量断点。输入变量名称，不带美元符号。

是否为必需？ | true
位置？ | named
默认值 | All breakpoints
是否接受管道输入？ | false
是否接受通配符？ | false

<CommonParameters>

此 cmdlet 支持通用参数：-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。有关详细信息，请参阅 about_Commonparameters.

输入和输出

输入类型是指可通过管道传递给 cmdlet 的对象的类型。返回类型是指 Cmdlet 所返回对象的类型。

输入 | System.Int32, Microsoft.PowerShell.Commands.BreakpointType 可以通过管道将断点 ID 和断点类型传递到 Get-PSBreakpoint。
输出 | 断点对象（System.Management.Automation.LineBreakpoint、System.Management.Automation.VariableBreakpoint、System.Management.Automation.CommandBreakpoint） Get-PSBreakPoint 返回表示会话中的断点的对象。

说明

可以使用 Get-PSBreakpoint 或其别名“gbp”。

示例 1

C:\PS>get-psbreakpoint

说明
-----------
此命令获取在当前会话中的所有脚本和函数上设置的所有断点。

示例 2

C:\PS>get-psbreakpoint -Id 2

Function   : Increment
Action     :
Enabled    : True
HitCount   : 0
Id         : 2
Script     : C:\ps-test\sample.ps1
ScriptName : C:\ps-test\sample.ps1

说明
-----------
此命令获取断点 ID 为 2 的断点。

示例 3

C:\PS>$b = set-psbreakpoint -script sample.ps1 -function increment

C:\PS> $b.Id | get-psbreakpoint

说明
-----------
这些命令演示了如何通过管道将断点 ID 传递到 Get-PSBreakpoint 来获取断点。

第一个命令使用 Set-PSBreakpoint cmdlet 在 Sample.ps1 脚本中的 Increment 函数上创建一个断点。然后将断点对象保存在 $b 变量中。

第二个命令使用点运算符 (.)来获取 $b 变量中断点对象的 ID 属性。它使用管道运算符 (|) 将 ID 发送到 Get-PSBreakpoint cmdlet。

因此，Get-PSBreakpoint 可获取具有指定 ID 的断点。

示例 4

C:\PS>get-psbreakpoint -script Sample.ps1, SupportScript.ps1

说明
-----------
此命令获取 Sample.ps1 和 SupportScript.ps1 文件中的所有断点。

此命令不获取会话中的其他脚本或函数上可能设置的其他断点。

示例 5

C:\PS>get-psbreakpoint -command Read-Host, Write-Host -script Sample.ps1

说明
-----------
此命令获取 Sample.ps1 文件中的 Read-Host 或 Write-Host 命令上设置的所有 Command 断点。

示例 6

C:\PS>get-psbreakpoint -type Command -script Sample.ps1

说明
-----------
此命令获取 Sample.ps1 文件中的所有命令断点。

示例 7

C:\PS>get-psbreakpoint -variable Index, Swap

说明
-----------
此命令获取当前会话中的 $index 和 $swap 变量上设置的断点。

示例 8

C:\PS>get-psbreakpoint -type line, variable -script Sample.ps1

说明
-----------
此命令获取 Sample.ps1 脚本中的所有行断点和变量断点。

另请参阅

  • about_Debuggers
  • Set-PSBreakpoint
  • Disable-PSBreakpoint
  • Enable-PSBreakpoint
  • Remove-PSBreakpoint
  • Get-PSCallStack


Get-PSCallStack

显示当前调用堆栈。

语法

Get-PSCallStack [<CommonParameters>]

说明

Get-PSCallStack cmdlet 显示当前调用堆栈。

虽然它设计用来与 Windows PowerShell 调试程序配合使用，但是您可以使用此 cmdlet 来显示该调试程序之外的脚本或函数中的调用堆栈。

若要在该调试程序中运行 Get-PSCallStack 命令，请键入“k”或“get-pscallstack”。

参数

<CommonParameters>

此 cmdlet 支持通用参数：-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。有关详细信息，请参阅 about_Commonparameters.

输入和输出

输入类型是指可通过管道传递给 cmdlet 的对象的类型。返回类型是指 Cmdlet 所返回对象的类型。

输入 | None 不能通过管道将对象传递给此 cmdlet。
输出 | System.Management.Automation.CallStackFrame Get-PSCallStack 返回一个表示调用堆栈中的项的对象。

示例 1

C:\PS>function my-alias {
   $p = $args[0]
   get-alias | where {$_.definition -like "*$p"} | ft definition, name -auto
}

PS C:\ps-test> set-psbreakpoint -command my-alias

Command    : my-alias
Action     :
Enabled    : True
HitCount   : 0
Id         : 0
Script     : prompt

PS C:\ps-test> my-alias get-content
Entering debug mode. Use h or ? for help.

Hit Command breakpoint on 'prompt:my-alias'

my-alias get-content

[DBG]: PS C:\ps-test> s
$p = $args[0]

DEBUG: Stepped to ':    $p = $args[0]    '

[DBG]: PS C:\ps-test> s
get-alias | Where {$_.Definition -like "*$p*"} | ft Definition,

[DBG]: PS C:\ps-test>get-pscallstack

Name        CommandLineParameters         UnboundArguments              Location
----        ---------------------         ----------------              --------
prompt      {}                            {}                            prompt
my-alias    {}                            {get-content}                 prompt
prompt      {}                            {}                            prompt

[DBG]: PS C:\ps-test> o

Definition  Name
----------  ----
Get-Content gc
Get-Content cat
Get-Content type

说明
-----------
此命令使用 Get-PSCallStack cmdlet 显示 My-Alias（获取 cmdlet 名称的别名的简单函数）的调用堆栈。

第一个命令在 Windows PowerShell 提示符处输入该函数。第二个命令使用 Set-PSBreakpoint cmdlet 在 My-Alias 函数上设置断点。第三个命令使用 My-Alias 函数获取当前会话中 Get-Content cmdlet 的所有别名。

调试程序在该函数调用时开始工作。两个连续 step-into 命令开始一行接一行执行该函数。然后，使用 Get-PSCallStack 命令检索调用堆栈。

最后一个命令是 Step-Out 命令 (o)，它退出调试程序并继续执行脚本直到完成。

另请参阅

  • about_Debuggers
  • Set-PSBreakpoint
  • Get-PSBreakpoint
  • Enable-PSBreakpoint
  • Disable-PSBreakpoint
  • Remove-PSBreakpoint


Get-PSDrive

获取当前会话中的 Windows PowerShell 驱动器。

语法

Get-PSDrive [-LiteralName] <string[]> [-PSProvider <string[]>] [-Scope <string>] [-UseTransaction] [<CommonParameters>]

Get-PSDrive [[-Name] <string[]>] [-PSProvider <string[]>] [-Scope <string>] [-UseTransaction] [<CommonParameters>]

说明

Get-PSDrive cmdlet 获取当前会话中的 Windows PowerShell 驱动器。可以获取控制台中的特定驱动器或所有驱动器。

Get-PSDrive 获取以下驱动器：

-- 计算机上的 Windows 逻辑驱动器，包括映射到网络共享的驱动器。

-- 由 Windows PowerShell 提供程序公开的驱动器（如 Certificate:、Function: 和 Alias: 驱动器）以及由 Windows PowerShell Registry 提供程序公开的 HKLM: 和 HKCU: 驱动器。

-- 使用 New-PSDrive 创建的驱动器。

Get-PSDrive 不会获取打开 Windows PowerShell 控制台后添加或创建的 Windows 映射驱动器。

参数

-LiteralName <string[]>

指定 Windows PowerShell 驱动器的名称。

LiteralName 的值严格按照所键入的形式使用。不会将任何字符解释为通配符。如果名称包括转义符，请将其括在单引号中。单引号会告知 Windows PowerShell 不要将所有字符都解释为转义序列。

是否为必需？ | true
位置？ | 1
默认值 |
是否接受管道输入？ | true (ByPropertyName)
是否接受通配符？ | false

-Name <string[]>

只获取指定的驱动器。键入驱动器名称或驱动器号，不带冒号 (:)。

是否为必需？ | false
位置？ | 1
默认值 |
是否接受管道输入？ | true (ByPropertyName)
是否接受通配符？ | false

-PSProvider <string[]>

只获取指定的 Windows PowerShell 提供程序支持的驱动器。键入提供程序的名称，如 FileSystem、Registry 或 Certificate。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | true (ByPropertyName)
是否接受通配符？ | false

-Scope <string>

只获取指定范围内的 Windows PowerShell 驱动器。有效值包括“Global”、“Local”、“Script”或者相对于当前作用域的数字（0 到作用域数，其中 0 是指当前作用域，1 是指其父作用域）。默认值为“Local”。有关详细信息，请参阅 about_Scopes。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | true (ByPropertyName)
是否接受通配符？ | false

-UseTransaction

将命令包含在活动事务中。仅当正在执行事务时，此参数才有效。有关详细信息，请参阅 about_Transactions。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

<CommonParameters>

此 cmdlet 支持通用参数：-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。有关详细信息，请参阅 about_Commonparameters.

输入和输出

输入类型是指可通过管道传递给 cmdlet 的对象的类型。返回类型是指 Cmdlet 所返回对象的类型。

输入 | None 不能通过管道将对象传递给 Get-PSDrive。
输出 | System.Management.Automation.PSDriveInfo Get-PSDrive 返回表示会话中的 Windows PowerShell 驱动器的对象。

说明

Get-PSDrive cmdlet 用于处理由任何提供程序公开的数据。要列出会话中可用的提供程序，请键入“get-psprovider”。有关详细信息，请参阅 about_Providers。

示例 1

C:\PS>get-psdrive

Name       Provider      Root
----       --------      ----
Alias      Alias
C          FileSystem    C:\
cert       Certificate   \
D          FileSystem    D:\
Env        Environment
Function   Function
HKCU       Registry      HKEY_CURRENT_USER
HKLM       Registry      HKEY_LOCAL_MACHINE
Variable   Variable
X          FileSystem    X:\

说明
-----------
此命令获取当前会话中的 Windows PowerShell 驱动器。

输出显示计算机上的硬盘驱动器 (C:) 和 CD-ROM 驱动器 (D:)、由 Windows PowerShell 提供程序公开的驱动器（Alias:、Cert:、Env:、Function:、HKCU:、HKLM: 和 Variable:）以及映射到网络共享的驱动器 (X:)。

示例 2

C:\PS>get-psdrive d

Name       Provider      Root
----       --------      ----
D          FileSystem    D:\

说明
-----------
此命令显示计算机上的 D: 驱动器。请注意，驱动器号后面不带冒号。

示例 3

C:\PS>get-psdrive -psprovider filesystem

Name       Provider      Root
----       --------      ----
C          FileSystem    C:\
D          FileSystem    D:\
X          FileSystem    X:\
Y          FileSystem    \\Server01\Public
Z          FileSystem    C:\Windows\System32

说明
-----------
此命令显示 Windows PowerShell FileSystem 提供程序支持的所有驱动器。这包括固定驱动器、逻辑分区、映射的网络驱动器以及使用 New-PSDrive 创建的映射到文件系统驱动器的驱动器。

此示例演示 New-PSDrive 创建的驱动器的 Root 属性值中包含映射位置的名称。Windows 驱动器的根只有驱动器号。

示例 4

C:\PS>if (!(get-psdrive X)) {
    new-psdrive -name X -psprovider Registry -root HKLM:\Network
}
else { write-host "The X: drive is already in use." }

说明
-----------
此命令检查 X 驱动器是否已作为 Windows PowerShell 驱动器名称使用。如果不是，则此命令使用 New-PSDrive cmdlet 创建一个映射到 HKLM:\Network 注册表项的 Windows PowerShell 驱动器。

示例 5

C:\PS>get-psdrive -provider filesystem

C:\PS> get-psdrive -provider filesystem

Name       Provider      Root
----       --------      ----
C          FileSystem    C:\
D          FileSystem    D:\
X          FileSystem    X:\
Y          FileSystem    \\Server01\Public
Z          FileSystem    C:\Windows\System32

C:\PS> net use
New connections will be remembered.

Status       Local     Remote                    Network
-------------------------------------------------------------------------------
             X:        \\Server01\Public         Microsoft Windows Network

C:\PS> [System.IO.DriveInfo]::getdrives()

Name               : C:\
DriveType          : Fixed
DriveFormat        : NTFS
IsReady            : True
AvailableFreeSpace : 39831498752
TotalFreeSpace     : 39831498752
TotalSize          : 79900368896
RootDirectory      : C:\
VolumeLabel        :
Name               : D:\
DriveType          : CDRom
DriveFormat        :
IsReady            : False
AvailableFreeSpace :
TotalFreeSpace     :
TotalSize          :
RootDirectory      : D:\
VolumeLabel        :
Name               : X:\
DriveType          : Network
DriveFormat        : NTFS
IsReady            : True
AvailableFreeSpace : 36340559872
TotalFreeSpace     : 36340559872
TotalSize          : 36413280256
RootDirectory      : X:\
VolumeLabel        : D_Drive

C:\PS> get-wmiobject win32_logicaldisk

DeviceID     : C:
DriveType    : 3
ProviderName :
FreeSpace    : 39831252992
Size         : 79900368896
VolumeName   :
DeviceID     : D:
DriveType    : 5
ProviderName :
FreeSpace    :
Size         :
VolumeName   :
DeviceID     : X:
DriveType    : 4
ProviderName : \\server01\public
FreeSpace    : 36340559872
Size         : 36413280256
VolumeName   : D_Drive

C:\PS> get-wmiobject win32_networkconnection
LocalName                     RemoteName
--------------               ------------
x:                            \\server01\public

说明
-----------
此示例将 Get-PSDrive 显示的文件系统驱动器的类型与使用其他方法显示的文件系统驱动器的类型进行比较。此示例演示在 Windows PowerShell 中显示驱动器的不同方法，并显示使用 New-PSDrive 创建的驱动器仅可在 Windows PowerShell 中访问。

第一个命令使用 Get-PSDrive 来获取 Windows PowerShell 控制台中的所有文件系统驱动器。这包括固定驱动器（C: 和 D:）、映射的网络驱动器 (X:) 以及使用 New-PsDrive 创建的两个 Windows PowerShell 驱动器（Y: 和 Z:）。

显示 Windows 映射的网络驱动器的“net use”命令仅显示 X 驱动器。该命令不显示 New-PSDrive 创建的驱动器。它显示 X: 驱动器还映射到 \\Server01\Public。

第三个命令使用 Microsoft .NET Framework System.IO.DriveInfo 类的 GetDrives 方法。此命令获取 Windows 文件系统驱动器，包括驱动器 X:，但不获取 New-PSDrive 创建的驱动器。

第四个命令使用 Get-WmiObject cmdlet 来显示 Win32_LogicalDisk 类的实例。该命令将返回 C:、D: 和 X: 驱动器，但不返回 New-PSDrive 创建的驱动器。

最后一个命令使用 Get-WmiObject cmdlet 来显示 Win32_NetworkConnection 类的实例。与“net use”相似，该命令只返回 X: 驱动器。

另请参阅

  • about_Providers
  • New-PSDrive
  • Remove-PSDrive
  • Get-Help
  • Get-Command
  • Get-Member


Get-PSProvider

获取有关指定的 Windows PowerShell 提供程序的信息。

语法

Get-PSProvider [[-PSProvider] <string[]>] [<CommonParameters>]

说明

Get-PSProvider cmdlet 获取当前会话中的 Windows PowerShell 提供程序。可以获取会话中的特定驱动器或所有驱动器。

通过 Windows PowerShell 提供程序，可以访问各种数据存储，就好像它们是文件系统驱动器一样。有关 Windows PowerShell 提供程序的信息，请参阅 about_Providers。

参数

-PSProvider <string[]>

指定要检索有关其信息的 Windows PowerShell 提供程序的名称。

是否为必需？ | false
位置？ | 1
默认值 |
是否接受管道输入？ | true (ByPropertyName)
是否接受通配符？ | false

<CommonParameters>

此 cmdlet 支持通用参数：-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。有关详细信息，请参阅 about_Commonparameters.

输入和输出

输入类型是指可通过管道传递给 cmdlet 的对象的类型。返回类型是指 Cmdlet 所返回对象的类型。

输入 | None 不能通过管道将对象传递给此 cmdlet。
输出 | System.Management.Automation.ProviderInfo Get-PSProvider 返回表示会话中的 Windows PowerShell 提供程序的对象。

示例 1

C:\PS>get-psprovider

说明
-----------
此命令显示所有可用 Windows PowerShell 提供程序的列表。

示例 2

C:\PS>get-psprovider f*, r* | format-list

说明
-----------
此命令显示其名称以字母“f”或“r”开头的所有 Windows PowerShell 提供程序的列表。

示例 3

C:\PS>get-psprovider | format-table name, module, pssnapin -auto

Name        Module       PSSnapIn
----        ------       --------
Test        TestModule
WSMan                    Microsoft.WSMan.Management
Alias                    Microsoft.PowerShell.Core
Environment              Microsoft.PowerShell.Core
FileSystem               Microsoft.PowerShell.Core
Function                 Microsoft.PowerShell.Core
Registry                 Microsoft.PowerShell.Core
Variable                 Microsoft.PowerShell.Core
Certificate              Microsoft.PowerShell.Security

C:\PS> get-psprovider | where {$_.pssnapin -eq "Microsoft.PowerShell.Security"}

Name            Capabilities      Drives
----            ------------      ------
Certificate     ShouldProcess     {cert}

说明
-----------
这些命令查找将提供程序添加到会话中的 Windows PowerShell 管理单元或模块。所有 Windows PowerShell 元素（包括提供程序）均源自于管理单元或模块。

这些命令使用 Get-PSProvider 返回的 ProviderInfo 对象的 PSSnapin 和 Module 属性。这些属性的值包含添加提供程序的管理单元或模块的名称。

第一个命令获取会话中的所有提供程序，并将它们的格式设置为表，其中显示其 Name、Module 和 PSSnapin 属性的值。

第二个命令使用 Where-Object cmdlet 来获取来自 Microsoft.PowerShell.Security 管理单元的提供程序。

另请参阅

  • about_Providers


Get-PSSession

获取当前会话中的 Windows PowerShell 会话 (PSSession)。

语法

Get-PSSession [[-ComputerName] <string[]>] [<CommonParameters>]

Get-PSSession [-Id] <Int32[]> [<CommonParameters>]

Get-PSSession [-InstanceId <Guid[]>] [<CommonParameters>]

Get-PSSession [-Name <string[]>] [<CommonParameters>]

说明

Get-PSSession cmdlet 获取当前会话中创建的 Windows PowerShell 会话 (PSSession)。

如果不使用参数，则 Get-PSSession 获取在当前会话中创建的所有 PSSession。可以使用 Get-PSSession 的参数获取连接到特定计算机的会话，也可以通过名称、ID 或实例 ID 来标识会话。

有关 Windows PowerShell 会话的详细信息，请参阅 about_PSSessions。

参数

-ComputerName <string[]>

只获取连接到指定计算机的 PSSession。允许使用通配符。

键入一台或多台计算机的 NetBIOS 名称、IP 地址或完全限定的域名。要指定本地计算机，请键入计算机名称、“localhost”或句点 (.)。

是否为必需？ | false
位置？ | 1
默认值 |
是否接受管道输入？ | true (ByPropertyName)
是否接受通配符？ | true

-Id <Int32[]>

只获取具有指定 ID 的 PSSession。键入一个或多个 ID（以逗号分隔）或使用范围运算符 (..)来指定 ID 的范围。

ID 是一个整数，用于在当前会话中唯一标识 PSSession。它比 InstanceId 更容易记住和键入，但它仅仅在当前会话中是唯一的。要查找 PSSession 的 ID，请使用不带参数的 Get-PSSession。

是否为必需？ | true
位置？ | 1
默认值 | All sessions in the shell
是否接受管道输入？ | true (ByPropertyName)
是否接受通配符？ | false

-InstanceId <Guid[]>

只获取具有指定实例 ID 的 PSSession。

实例 ID 是一个 GUID，用于在本地或远程计算机上唯一地标识 PSSession。即使在 Windows PowerShell 中运行了多个会话，InstanceID 也是唯一的。

InstanceID 存储在表示 PSSession 的对象的 InstanceID 属性中。要查找当前会话中的 PSSession 的 InstanceID，请键入“get-pssession | Format-Table Name, ComputerName, InstanceId”。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | true (ByPropertyName)
是否接受通配符？ | true

-Name <string[]>

只获取具有指定友好名称的 PSSession。允许使用通配符。

要查找当前会话中的 PSSession 的名称，请键入不带参数的“get-pssession”。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | true (ByPropertyName)
是否接受通配符？ | true

<CommonParameters>

此 cmdlet 支持通用参数：-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。有关详细信息，请参阅 about_Commonparameters.

输入和输出

输入类型是指可通过管道传递给 cmdlet 的对象的类型。返回类型是指 Cmdlet 所返回对象的类型。

输入 | None 不能通过管道将输入传递给此 cmdlet。
输出 | System.Management.Automation.Runspaces.PSSession Get-PSSession 为所获取的每个 PSSession 返回一个 PSSession 对象。

说明

Get-PSSession 获取在当前会话中创建的 PSSession。它不会获取在打开 Windows PowerShell 时创建的会话，也不获取在其他会话中或其他计算机上创建的 PSSession，即使它们连接到本地计算机也是如此。

示例 1

C:\PS>get-pssession

说明
-----------
此命令获取在当前会话中创建的所有 PSSession。

该命令不会获取在其他会话中或其他计算机上创建的会话，即使它们连接到本计算机也是如此。

示例 2

C:\PS>$s = get-pssession -computername Server02

说明
-----------
此命令获取连接到 Server02 计算机的 PSSession，并将它们保存在 $p 变量中。

示例 3

C:\PS>new-pssession -computername Server01, Server02, Server03

C:\PS> $s1, $s2, $s3 = get-pssession

说明
-----------
此示例说明如何将 Get-PSSession 命令的结果保存在多个变量中。

第一条命令使用 New-PSSession cmdlet 在三台远程计算机上创建 PSSession。

第二条命令使用 Get-PSSession cmdlet 来获取这三个 PSSession。然后，将其中的每个 PSSession 分别保存在一个单独的变量中。

Windows PowerShell 将对象数组分配给变量数组时，会将第一个对象分配给第一个变量，将第二个对象分配给第二个变量，依此类推。如果对象多于变量，则会将数组中所有剩余的对象均分配给最后一个变量。如果变量多于对象，则弃用额外的变量。

示例 4

C:\PS>get-pssession | format-table -property computername, InstanceID

C:\PS> $s = get-pssession -InstanceID a786be29-a6bb-40da-80fb-782c67f7db0f

C:\PS> remove-pssession -session $s

说明
-----------
此示例说明如何使用实例 ID 获取 PSSession，然后再将其删除。

第一条命令获取本地计算机上的所有 PSSession。该命令将 PSSession 发送给 Format-Table cmdlet，后者显示每个 PSSession 的 ComputerName 和 InstanceID 属性。

第二条命令使用 Get-PSSession cmdlet 来获取特定的 PSSession 并将其保存在 $s 变量中。该命令使用 InstanceID 参数来标识 PSSession。

第三条命令使用 Remove-PSSession cmdlet 删除 $s 变量中的 PSSession。

示例 5

C:\PS>get-pssession -computername Serv*

说明
-----------
此命令获取连接到计算机名称以“Serv”开头的计算机的所有 PSSession。

示例 6

C:\PS>get-pssession -name Test*, Ux*

说明
-----------
此命令获取名称以“Test”或“Ux”开头的 PSSession。

示例 7

C:\PS>get-pssession 2

说明
-----------
此命令获取 ID 为 2 的 PSSession。

另请参阅

  • about_PSSessions
  • about_Remote
  • New-PSSession
  • Remove-PSSession
  • Enter-PSSession
  • Exit-PSSession
  • Invoke-Command


Get-PSSessionConfiguration

获取计算机上已注册的会话配置。

语法

Get-PSSessionConfiguration [[-Name] <string[]>] [<CommonParameters>]

说明

Get-PSSessionConfiguration cmdlet 获取已在本地计算机上注册的会话配置。这是一个高级 cmdlet，供系统管理员为其用户管理自定义会话配置时使用。

要创建并注册会话配置，请使用 Register-PSSessionConfiguration cmdlet。

参数

-Name <string[]>

只获取具有指定的名称或名称模式的会话配置。输入一个或多个会话配置名称。允许使用通配符。

是否为必需？ | false
位置？ | 1
默认值 | All session configurations on the local computer
是否接受管道输入？ | false
是否接受通配符？ | true

<CommonParameters>

此 cmdlet 支持通用参数：-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。有关详细信息，请参阅 about_Commonparameters.

输入和输出

输入类型是指可通过管道传递给 cmdlet 的对象的类型。返回类型是指 Cmdlet 所返回对象的类型。

输入 | None 不能通过管道将输入传递给此 cmdlet。
输出 | Microsoft.PowerShell.Commands.PSSessionConfigurationCommands#PSSessionConfiguration

说明

若要在 Windows Vista、Windows Server 2008 以及更高版本的 Windows 上运行此 cmdlet，您必须使用“以管理员身份运行”选项打开 Windows PowerShell。

若要查看计算机上的会话配置，您必须是该计算机上的 Administrators 组的成员。

若要在远程计算机上运行 Get-PSSessionConfiguration 命令，必须在本地计算机的客户端设置（通过使用 Enable-WSManCredSSP cmdlet）和远程计算机的服务设置中启用凭据安全服务提供程序 (CredSSP) 身份验证，还必须在建立远程会话时使用 Authentication 参数的 CredSSP 值。否则，访问将被拒绝。

示例 1

C:\PS>get-pssessionconfiguration

说明
-----------
此命令获取计算机上的会话配置。

示例 2

C:\PS>get-pssessionconfiguration -name Microsoft*

Name                      PSVersion  StartupScript        Permission
----                      ---------  -------------        ----------
microsoft.powershell      2.0                             BUILTIN\Administrators AccessAll...
microsoft.powershell32    2.0                             BUILTIN\Administrators AccessAll...

说明
-----------
此命令使用 Get-PSSessionConfiguration 的 Name 参数只获取名称以“Microsoft”开头的会话配置。

此命令获取 Windows PowerShell 附带的两个默认会话配置。

示例 3

C:\PS>Get-PSSessionConfiguration -name microsoft.powershell | get-member

   TypeName: Microsoft.PowerShell.Commands.PSSessionConfigurationCommands#PSSessionConfiguration

Name                   MemberType     Definition
----                   ----------     ----------
Equals                 Method         bool Equals(System.Object obj)
GetHashCode            Method         int GetHashCode()
GetType                Method         type GetType()
ToString               Method         string ToString()
Capability             NoteProperty   System.Object[] Capability=System.Object[]
ExactMatch             NoteProperty   System.String ExactMatch=False
Filename               NoteProperty   System.String Filename=%windir%\system32\pwrshplugin.dll
lang                   NoteProperty   System.String lang=en-US
Name                   NoteProperty   System.String Name=microsoft.powershell
PSVersion              NoteProperty   System.String PSVersion=2.0
ResourceUri            NoteProperty   System.String ResourceUri=http://schemas.microsoft.com/powershell/microsoft.powershell
SDKVersion             NoteProperty   System.String SDKVersion=1
SecurityDescriptorSddl NoteProperty   System.String SecurityDescriptorSddl=O:NSG:BAD:P(A;;GA;;;BA)S:P(AU;FA;GA;;;WD)(AU;SA;GXGW;;;WD)
SupportsOptions        NoteProperty   System.String SupportsOptions=true
Uri                    NoteProperty   System.String Uri=http://schemas.microsoft.com/powershell/microsoft.powershell
xmlns                  NoteProperty   System.String xmlns=http://schemas.microsoft.com/wbem/wsman/1/config/PluginConfiguration
XmlRenderingType       NoteProperty   System.String XmlRenderingType=text
Permission             ScriptProperty System.Object Permission {get=trap { continue; }...

C:\PS> Get-PSSessionConfiguration -name microsoft.powershell | format-list -property *

Name                   : microsoft.powershell
Filename               : %windir%\system32\pwrshplugin.dll
SDKVersion             : 1
XmlRenderingType       : text
lang                   : en-US
PSVersion              : 2.0
ResourceUri            : http://schemas.microsoft.com/powershell/microsoft.powershell
SupportsOptions        : true
Capability             : {Shell}
Uri                    : http://schemas.microsoft.com/powershell/microsoft.powershell
SecurityDescriptorSddl : O:NSG:BAD:P(A;;GA;;;BA)S:P(AU;FA;GA;;;WD)(AU;SA;GXGW;;;WD)
ExactMatch             : False
xmlns                  : http://schemas.microsoft.com/wbem/wsman/1/config/PluginConfiguration
Permission             : BUILTIN\Administrators AccessAllowed

说明
-----------
这些命令检查 Get-PSSessionConfiguration 返回的 PSSessionConfiguration 对象。

第一条命令使用 Get-PSSessionConfiguration cmdlet 来获取 Microsoft.PowerShell 默认配置。

第二条命令使用管道运算符 (|) 将 Get-PSSessionConfiguration 返回的对象发送到 Get-Member cmdlet。输出将显示该对象的属性和方法。

第三条命令将该对象发送到 Format-List cmdlet。值为 *（全部）的 Property 参数指示 Format-List 在列表中显示该对象的所有属性和属性值。

此命令的输出包含非常有用的信息，其中包括实现配置类型的 .dll 的位置、所创建的终结点的统一资源标识符 (URI) 以及配置的安全描述符定义语言 (SDDL)。

示例 4

C:\PS>dir wsman:\localhost\plugin

   WSManConfig: Microsoft.WSMan.Management\WSMan::localhost\Plugin

Name                      Type                 Keys
----                      ----                 ----
Event Forwarding Plugin   Container            {Name=Event Forwarding Plugin}
MaintenanceShell          Container            {Name=MaintenanceShell}
microsoft.powershell      Container            {Name=microsoft.powershell}
microsoft.powershell32    Container            {Name=microsoft.powershell32}
WMI Provider              Container            {Name=WMI Provider}

说明
-----------
此命令在 WSMan: 提供程序驱动器中使用 Get-ChildItem cmdlet（别名为 dir）查看 Plugin 节点的内容。

这是在计算机上查看会话配置的另一种方式。

PlugIn 节点包含表示已注册的 Windows PowerShell 会话配置的 ContainerElement 对象 (Microsoft.WSMan.Management.WSManConfigContainerElement) 以及 WS-Management 的其他插件。

示例 5

C:\PS>enable-wsmanCredSSP -delegate server02

C:\PS> connect-wsman server02

C:\PS> set-item wsman:\server02*\service\auth\credSSP -value $true

C:\PS> invoke-command -scriptblock {Get-PSSessionConfiguration} -computername Server02 -authentication CredSSP -credential Domain01\Admin01

Name                      PSVersion  StartupScript        Permission                          PSComputerName
----                      ---------  -------------        ----------                          --------------
microsoft.powershell      2.0                             BUILTIN\Administrators AccessAll... server02.corp.fabrikam.com
microsoft.powershell32    2.0                             BUILTIN\Administrators AccessAll... server02.corp.fabrikam.com
MyX86Shell                2.0        c:\test\x86Shell.ps1 BUILTIN\Administrators AccessAll... server02.corp.fabrikam.com

说明
-----------
此示例说明如何在远程计算机上运行 Get-PSSessionConfiguration 命令。该命令要求在本地计算机的客户端设置中以及远程计算机的服务设置中启用 CredSSP 委派。若要运行此示例中的命令，您必须是本地计算机和远程计算机上的 Administrators 组的成员。

第一条命令使用 Enable-WSManCredSSP cmdlet 启用从本地计算机 Server01 到远程计算机 Server02 的 CredSSP 委派。这会在本地计算机上配置 CredSSP 客户端设置。

第二条命令使用 Connect-WSMan cmdlet 连接到计算机 Server02。此操作在本地计算机上的 WSMan: 驱动器中为计算机 Server02 添加一个节点，从而允许您查看和更改计算机 Server02 上的 WS-Management 设置。

第三条命令使用 Set-Item cmdlet 将计算机 Server02 的 Service 节点中 CredSSP 项的值更改为 True。这会在远程计算机上配置服务设置。

第四条命令使用 Invoke-Command cmdlet 在计算机 Server02 上运行 Get-PSSessionConfiguration 命令。此命令使用 Credential 参数，并使用值为 CredSSP 的 Authentication 参数。

示例 6

C:\PS>(get-PSSessionConfiguration -name CustomShell).resourceURI

http://schemas.microsoft.com/powershell/microsoft.CustomShell

说明
-----------
此命令使用 Get-PSSessionConfiguration cmdlet 获取会话配置的资源 URI。

在设置接受资源 URI 的 $PSSessionConfigurationName 首选项变量的值时，该命令十分有用。

$PSSessionConfiguationName 变量指定创建会话时所用的默认配置。此变量是在本地计算机上设置的，但是它指定远程计算机上的配置。有关 $PSSessionConfiguration 变量的详细信息，请参阅 about_Preference_Variables。

另请参阅

  • about_Session_Configurations
  • Disable-PSSessionConfiguration
  • Enable-PSSessionConfiguration
  • Register-PSSessionConfiguration
  • Set-PSSessionConfiguration
  • Unregister-PSSessionConfiguration
  • WSMan Provider


Get-PSSnapin

获取计算机上的 Windows PowerShell 管理单元。

语法

Get-PSSnapin [[-Name] <string[]>] [-Registered] [<CommonParameters>]

说明

Get-PSSnapin cmdlet 获取已添加到当前会话或已向系统注册的 Windows PowerShell 管理单元。管理单元依照检测到的顺序列出。

Get-PSSnapin 只获取已注册的管理单元。要注册 Windows PowerShell 管理单元，请使用 Microsoft .NET Framework 2.0 中附带的 InstallUtil 工具。有关详细信息，请参阅 MSDN (Microsoft Developer Network) Library 中的“如何注册 Cmdlet、提供程序和主机应用程序”，网址是 http://go.microsoft.com/fwlink/?LinkId=143619。

参数

-Name <string[]>

只获取指定的 Windows PowerShell 管理单元。输入一个或多个 Windows PowerShell 管理单元的名称。允许使用通配符。

参数名（“Name”）为可选项。

是否为必需？ | false
位置？ | 1
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Registered

获取已在系统中注册的 Windows PowerShell 管理单元（即使它们尚未添加到会话中）。

与 Windows PowerShell 一起安装的管理单元不出现在此列表中。

如果不使用此参数，Get-PSSnapin 将获取已添加到会话中的 Windows PowerShell 管理单元。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

<CommonParameters>

此 cmdlet 支持通用参数：-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。有关详细信息，请参阅 about_Commonparameters.

输入和输出

输入类型是指可通过管道传递给 cmdlet 的对象的类型。返回类型是指 Cmdlet 所返回对象的类型。

输入 | None 不能通过管道将输入传递给 Get-PSSnapin。
输出 | System.Management.Automation.PSSnapInInfo Get-PSSnapin 为所获取的每个管理单元返回一个对象。

说明

可以使用 Get-PSSnapin 的内置别名“psnp”来对其进行引用。有关详细信息，请参阅 about_Aliases。

示例 1

C:\PS>get-PSSnapIn

说明
-----------
此命令获取当前加载到会话中的 Windows PowerShell 管理单元。其中包括随 Windows PowerShell 一起安装的管理单元以及那些已添加到会话中的管理单元。

示例 2

C:\PS>get-PSSnapIn -registered

说明
-----------
此命令获取已在计算机中注册的 Windows PowerShell 管理单元，其中包括那些已添加到会话中的管理单元。输出不包括与 Windows PowerShell 一起安装的管理单元和还没有向系统注册的 Windows PowerShell 管理单元动态链接库 (DLL)。

示例 3

C:\PS>get-PSSnapIn smp*

说明
-----------
此命令获取当前会话中名称以“smp”开头的 Windows PowerShell 管理单元。

另请参阅

  • Add-PSSnapin
  • Remove-PSSnapin


Get-Random

从集合中获取随机数或随机选择对象。

语法

Get-Random [-InputObject] <Object[]> [-Count <int>] [-SetSeed <int>] [<CommonParameters>]

Get-Random [[-Maximum] <Object>] [-Minimum <Object>] [-SetSeed <int>] [<CommonParameters>]

说明

Get-Random cmdlet 获取随机选择的数。如果将对象集合提交到 Get-Random，它会从该集合中获取随机选择的一个或多个对象。

没有参数或输入的情况下，Get-Random 命令返回一个在 0（零）和 Int32.MaxValue（0x7FFFFFFF 或 2,147,483,647）之间随机选择的 32 位无符号整数。

可以使用 Get-Random 的参数指定种子数字、最小和最大值，以及从提交的集合返回的对象数。

参数

-Count <int>

确定将返回的对象数。默认值为 1。如果 Count 的值超过集合中的对象数，Get-Random 按随机顺序返回所有对象。

是否为必需？ | false
位置？ | named
默认值 | 1
是否接受管道输入？ | false
是否接受通配符？ | false

-InputObject <Object[]>

指定对象的集合。Get-Random 从该集合中按随机顺序获取随机选择的对象。输入对象、包含对象的变量或用于获取对象的命令或表达式。还可通过管道将对象集合传递到 Get-Random。

是否为必需？ | true
位置？ | 1
默认值 |
是否接受管道输入？ | true (ByValue)
是否接受通配符？ | false

-Maximum <Object>

指定随机数的最大值。Get-Random 返回小于（不等于）最大值的值。输入一个 32 位整数或双精度浮点数，或一个可以转换为整数或双精度的对象，如数字字符串（“100”）。最大值必须大于（不等于）最小值。

如果最大值或最小值是浮点数，Get-Random 返回随机选择的浮点数。

如果最小值是双精度（浮点数），最大值的默认值为 Double.MaxValue。否则，默认值为 Int32.MaxValue（2,147,483,647 或 0x7FFFFFFF）。

是否为必需？ | false
位置？ | 1
默认值 | Int32.MaxValue
是否接受管道输入？ | false
是否接受通配符？ | false

-Minimum <Object>

指定随机数的最小值。输入一个 32 位整数或双精度浮点数，或一个可以转换为整数或双精度的对象，如数字字符串（“100”）。默认值为 0（零）。

最小值必须小于（不等于）最大值。如果最大值或最小值是浮点数，Get-Random 返回随机选择的浮点数。

是否为必需？ | false
位置？ | named
默认值 | 0
是否接受管道输入？ | false
是否接受通配符？ | false

-SetSeed <int>

为随机数生成程序指定种子值。该种子值用于当前会话中的当前命令和所有后续 Get-Random 命令，直到您再次使用 SetSeed 或关闭该会话。您不能将种子重置为其默认的、基于时钟的值。

SetSeed 参数不是必需的。默认情况下，Get-Random 使用系统时钟生成种子值。因为 SetSeed 会导致非随机行为，所以通常仅当尝试重现行为时（例如调试或分析包括 Get-Random 命令的脚本时）才使用该参数。

是否为必需？ | false
位置？ | named
默认值 | System clock
是否接受管道输入？ | false
是否接受通配符？ | false

<CommonParameters>

此 cmdlet 支持通用参数：-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。有关详细信息，请参阅 about_Commonparameters.

输入和输出

输入类型是指可通过管道传递给 cmdlet 的对象的类型。返回类型是指 Cmdlet 所返回对象的类型。

输入 | System.Object 可以通过管道将一个或多个对象传递到 Get-Random。Get-Random 从通过管道传递的对象中随机选择值。
输出 | System.Object Get-Random 返回整数或浮点数，或从提交的集合随机选择的对象。

说明

每个会话启动时，Get-Random 基于系统时钟为该会话设置默认种子。

示例 1

C:\PS>get-random

3951433

说明
-----------
此命令获取处于 0（零）和 Int32.MaxValue 之间的一个随机整数。

示例 2

C:\PS>get-random -maximum 100

47

说明
-----------
此命令获取处于 0（零）和 99 之间的一个随机整数。

示例 3

C:\PS>get-random -minimum -100 -maximum 100

-56

说明
-----------
此命令获取处于 -100 和 99 之间的一个随机整数。

示例 4

C:\PS>get-random -min 10.7 -max 20.93

18.08467273887

说明
-----------
此命令获取一个大于或等于 10.7 且小于 20.92 的随机浮点数。

示例 5

C:\PS>get-random -input 1, 2, 3, 5, 8, 13

8

说明
-----------
此命令从指定的数组中获取一个随机选择的数。

示例 6

C:\PS>get-random -input 1, 2, 3, 5, 8, 13 -count 3

3
1
13

说明
-----------
此命令从数组中按随机顺序获取三个随机选择的数。

示例 7

C:\PS>get-random -input 1, 2, 3, 5, 8, 13 -count ([int]::MaxValue)

2
3
5
1
8
13

说明
-----------
此命令按随机顺序返回整个集合。Count 参数的值是整数的 MaxValue 静态属性。

若要按随机顺序返回整个集合，请输入大于或等于该集合中的对象数的任何数字。

示例 8

C:\PS>get-random -input "red", "yellow", "blue"

yellow

说明
-----------
此命令返回非数字集合中的随机值。

示例 9

C:\PS>get-process | get-random

Handles  NPM(K)    PM(K)      WS(K) VM(M)   CPU(s)     Id ProcessName
-------  ------    -----      ----- -----   ------     -- -----------
    144       4     2080        488    36     0.48   3164 wmiprvse

说明
-----------
此命令从计算机上的进程集合中获取随机选择的进程。

示例 10

C:\PS>get-content servers.txt | get-random -count (get-content servers.txt).count | foreach {invoke-expression -computer $_ -command 'get-process powershell'}

说明
-----------
此命令按随机顺序在一系列远程计算机上运行命令。

示例 11

C:\PS>get-random -max 100 -setseed 23

# Commands with the default seed are pseudorandom
PS C:\ps-test> get-random -max 100
59
PS C:\ps-test> get-random -max 100
65
PS C:\ps-test> get-random -max 100
21

# Commands with the same seed are not random
PS C:\ps-test> get-random -max 100 -setseed 23
74
PS C:\ps-test> get-random -max 100 -setseed 23
74
PS C:\ps-test> get-random -max 100 -setseed 23
74

# SetSeed results in a repeatable series
PS C:\ps-test> get-random -max 100 -setseed 23
74
PS C:\ps-test> get-random -max 100
56
PS C:\ps-test> get-random -max 100
84
PS C:\ps-test> get-random -max 100
46
PS C:\ps-test> get-random -max 100 -setseed 23
74
PS C:\ps-test> get-random -max 100
56
PS C:\ps-test> get-random -max 100
84
PS C:\ps-test> get-random -max 100
46

说明
-----------
此示例演示了使用 SetSeed 参数的效果。因为 SetSeed 会产生非随机行为，所以它通常仅用于重现结果，例如调试或分析脚本时。

示例 12

C:\PS>$files = dir -path c:\* -recurse

C:\PS> $sample = $files | get-random -count 50

说明
-----------
这些命令从本地计算机的 C: 驱动器中获取随机选择的包含 50 个文件的样本。

示例 13

C:\PS>get-random 10001

7600

说明
-----------
此命令获取小于 10001 的随机整数。因为 Maximum 参数具有位置 1，所以当该值是命令中的第一个或唯一的未命名参数时，您可以忽略该参数名称。


Get-Service

获取本地或远程计算机上的服务。

语法

Get-Service [[-Name] <string[]>] [-ComputerName <string[]>] [-DependentServices] [-Exclude <string[]>] [-Include <string[]>] [-RequiredServices] [<CommonParameters>]

Get-Service -DisplayName <string[]> [-ComputerName <string[]>] [-DependentServices] [-Exclude <string[]>] [-Include <string[]>] [-RequiredServices] [<CommonParameters>]

Get-Service [-InputObject <ServiceController[]>] [-ComputerName <string[]>] [-DependentServices] [-Exclude <string[]>] [-Include <string[]>] [-RequiredServices] [<CommonParameters>]

说明

Get-Service cmdlet 获取表示本地计算机或远程计算机上的服务（包括正在运行和已停止的服务）的对象。

通过指定服务的服务名称或显示名称，可以指示 Get-Service 只获取特定服务，也可以将服务对象通过管道传送给 Get-Service。

参数

-ComputerName <string[]>

获取指定计算机上运行的服务。默认值为本地计算机。

键入远程计算机的 NetBIOS 名称、IP 地址或完全限定的域名。要指定本地计算机，请键入计算机名称、句点 (.) 或“localhost”。

此参数不依赖于 Windows PowerShell 远程处理。即使您的计算机未配置为运行远程命令，您也可以使用 Get-Service 的 ComputerName 参数。

是否为必需？ | false
位置？ | named
默认值 | Localhost
是否接受管道输入？ | true (ByPropertyName)
是否接受通配符？ | false

-DependentServices

只获取依赖于指定服务的服务。

默认情况下，Get-Service 获取所有服务。

是否为必需？ | false
位置？ | named
默认值 | False
是否接受管道输入？ | false
是否接受通配符？ | false

-DisplayName <string[]>

指定要检索的服务的显示名称。允许使用通配符。默认情况下，Get-Service 将获取计算机上的所有服务。

是否为必需？ | true
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Exclude <string[]>

忽略指定服务。此参数的值对 Name 参数进行限定。请输入名称元素或模式，例如“s*”。允许使用通配符。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Include <string[]>

只检索指定服务。此参数的值对 Name 参数进行限定。请输入名称元素或模式，例如“s*”。允许使用通配符。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-InputObject <ServiceController[]>

指定表示要检索的服务的 ServiceController 对象。输入一个包含对象的变量，或键入可获取对象的命令或表达式。也可以将服务对象通过管道传递给 Get-Service。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | true (ByValue)
是否接受通配符？ | false

-Name <string[]>

指定要检索的服务的名称。允许使用通配符。默认情况下，Get-Service 将获取计算机上的所有服务。

是否为必需？ | false
位置？ | 1
默认值 |
是否接受管道输入？ | true (ByValue, ByPropertyName)
是否接受通配符？ | true

-RequiredServices

只获取此服务所需的服务。

此参数获取服务的 ServicesDependedOn 属性值。默认情况下，Get-Service 获取所有服务。

是否为必需？ | false
位置？ | named
默认值 | False
是否接受管道输入？ | false
是否接受通配符？ | false

<CommonParameters>

此 cmdlet 支持通用参数：-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。有关详细信息，请参阅 about_Commonparameters.

输入和输出

输入类型是指可通过管道传递给 cmdlet 的对象的类型。返回类型是指 Cmdlet 所返回对象的类型。

输入 | System.ServiceProcess.ServiceController, System.String 可以将服务对象或服务名称通过管道传递给 Get-Service。
输出 | System.ServiceProcess.ServiceController Get-Service 返回表示计算机上服务的对象。

说明

还可以使用 Get-Service 的内置别名“gsv”来对其进行引用。有关详细信息，请参阅 about_Aliases。

Get-Service 只有在当前用户有权查看服务的情况下才显示服务。如果 Get-Service 不显示服务，则您可能无权查看它们。

若要查找您的系统中的每个服务的服务名称及显示名称，请键入“get-service”。服务名称显示在 Name 列中，显示名称显示在 DisplayName 列中。

当按状态值以升序排序时，“Stopped”服务将出现在“Running”服务之前。服务的 Status 属性是一个枚举值，其中状态的名称表示整数值。该排序是基于整数值进行的，而非名称。“Running”出现在“Stopped”之前的原因在于“Stopped”的值为“1”，而“Running”的值为“4”。

示例 1

C:\PS>get-service

说明
-----------
此命令检索系统上的所有服务。此命令所得结果与键入“get-service *”所得结果相同。默认显示将显示每个服务的状态、服务名称和显示名称。

示例 2

C:\PS>get-service wmi*

说明
-----------
此命令检索其服务名称以“WMI”（Windows Management Instrumentation 的首字母缩写）开头的服务。

示例 3

C:\PS>get-service -displayname *network*

说明
-----------
此命令显示其显示名称包含单词“network”的
服务。搜索显示名称可以在服务名称不包含“Net”的情况下查找与网络相关的服务，例如 xmlprov（网络提供服务）。

示例 4

C:\PS>get-service -name win* -exclude winrm

说明
-----------
这些命令只获取服务名称以“win”开头的服务（WinRM 服务除外）。

示例 5

C:\PS>get-service | where-object {$_.Status -eq "Running"}

说明
-----------
此命令只显示当前正在运行的服务。它使用 Get-Service cmdlet 获取计算机上的所有服务。管道运算符 (|) 将结果传递给 Where-Object cmdlet，后者只选择其 Status 属性等于“Running”的服务。

Status 是服务对象的唯一属性。若要查看所有属性，请键入“get-service | get-member”。

示例 6

C:\PS>get-service -computername Server02

说明
-----------
此命令获取 Server02 远程计算机上的服务。

因为 Get-Service 的 ComputerName 参数不使用 Windows PowerShell 远程处理，所以即使未将计算机配置为在 Windows PowerShell 中进行远程处理，您也可以使用此参数。

示例 7

C:\PS>get-service | where-object {$_.DependentServices} | format-list -property Name, DependentServices, @{Label="NoOfDependentS
ervices"; Expression={$_.dependentservices.count}}

Name                  : AudioEndpointBuilder
DependentServices     : {AudioSrv}
NoOfDependentServices : 1

Name                  : Dhcp
DependentServices     : {WinHttpAutoProxySvc}
NoOfDependentServices : 1
...

说明
-----------
这些命令将列出计算机上具有依赖服务的服务。

第一个命令使用 Get-Service cmdlet 来获取计算机上的服务。管道运算符 (|) 将服务发送给 Where-Object cmdlet，该 cmdlet 选择其 DependentServices 属性不为 null 的服务。

另一个管道运算符将结果发送给 Format-List cmdlet。该命令使用其 Property 参数来显示服务名称、依赖服务的名称以及显示每个服务具有的依赖服务数目的计算属性。

示例 8

C:\PS>C:\PS> get-service s* | sort-object status

Status   Name               DisplayName
------   ----               -----------
Stopped  stisvc             Windows Image Acquisition (WIA)
Stopped  SwPrv              MS Software Shadow Copy Provider
Stopped  SysmonLog          Performance Logs and Alerts
Running  Spooler            Print Spooler
Running  srservice          System Restore Service
Running  SSDPSRV            SSDP Discovery Service
Running  ShellHWDetection   Shell Hardware Detection
Running  Schedule           Task Scheduler
Running  SCardSvr           Smart Card
Running  SamSs              Security Accounts Manager
Running  SharedAccess       Windows Firewall/Internet Connectio...
Running  SENS               System Event Notification
Running  seclogon           Secondary Logon

C:\PS> get-service s* | sort-object status -descending

Status   Name               DisplayName
------   ----               -----------
Running  ShellHWDetection   Shell Hardware Detection
Running  SharedAccess       Windows Firewall/Internet Connectio...
Running  Spooler            Print Spooler
Running  SSDPSRV            SSDP Discovery Service
Running  srservice          System Restore Service
Running  SCardSvr           Smart Card
Running  SamSs              Security Accounts Manager
Running  Schedule           Task Scheduler
Running  SENS               System Event Notification
Running  seclogon           Secondary Logon
Stopped  SysmonLog          Performance Logs and Alerts
Stopped  SwPrv              MS Software Shadow Copy Provider
Stopped  stisvc             Windows Image Acquisition (WIA)

说明
-----------
此命令显示按服务的 Status 属性值以升序对服务进行排序时，已停止的服务将出现在正在运行的服务之前。发生这种情况的原因在于 Status 的值是一个枚举值，其中“Stopped”的值为“1”，而“Running”的值为 4。

要首先列出正在运行的服务，请使用 Sort-Object cmdlet 的 Descending 参数。

示例 9

C:\PS>get-service -name winrm -computername localhost, Server01, Server02  | format-table -property MachineName, Status, Name, DisplayName -auto

MachineName    Status  Name  DisplayName
------------   ------  ----  -----------
localhost      Running WinRM Windows Remote Management (WS-Management)
Server01       Running WinRM Windows Remote Management (WS-Management)
Server02       Running WinRM Windows Remote Management (WS-Management)

说明
-----------
此命令使用 Get-Service cmdlet 在两台远程计算机和本地计算机（“localhost”）上运行“Get-Service Winrm”命令。

Get-Service 命令在远程计算机上运行，并将结果返回到本地计算机。管道运算符 (|) 将结果发送给 Format-Table cmdlet，该 cmdlet 将服务格式设置为表。Format-Table 命令使用 Property 参数来指定表中显示的属性，包括 MachineName 属性。

示例 10

C:\PS>get-service winrm -requiredServices

说明
-----------
此命令获取 WinRM 服务所需的服务。

此命令将返回该服务的 ServicesDependedOn 属性的值。

示例 11

C:\PS>"winrm" | get-service

说明
-----------
此命令获取本地计算机上的 WinRM 服务。此示例演示可以将服务名称字符串（括在引号中）通过管道传送给 Get-Service。

另请参阅

  • Start-Service
  • Stop-Service
  • Restart-Service
  • Resume-Service
  • Suspend-Service
  • Set-Service
  • New-Service


Get-TraceSource

获取用于跟踪的 Windows PowerShell 组件。

语法

Get-TraceSource [[-Name] <string[]>] [<CommonParameters>]

说明

Get-TraceSource cmdlet 获取当前正在使用的 Windows PowerShell 组件的跟踪源。使用该数据可以确定可以跟踪哪些 Windows PowerShell 组件。执行跟踪时，该组件将生成其内部处理过程中的每个步骤的详细消息。开发人员使用跟踪数据来监视数据流、程序执行和错误。跟踪 cmdlet 是为 Windows PowerShell 开发人员设计的，但所有用户都可使用它们。

参数

-Name <string[]>

只获取指定的跟踪源。允许使用通配符。参数名（“Name”）为可选项。

是否为必需？ | false
位置？ | 1
默认值 |
是否接受管道输入？ | true (ByValue, ByPropertyName)
是否接受通配符？ | false

<CommonParameters>

此 cmdlet 支持通用参数：-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。有关详细信息，请参阅 about_Commonparameters.

输入和输出

输入类型是指可通过管道传递给 cmdlet 的对象的类型。返回类型是指 Cmdlet 所返回对象的类型。

输入 | System.String 可以将包含跟踪源名称的字符串通过管道传递给 Get-TraceSource。
输出 | System.Management.Automation.PSTraceSource Get-TraceSource 返回表示跟踪源的对象。

示例 1

C:\PS>get-traceSource  *provider*

说明
-----------
此命令获取其名称包含“provider”的所有跟踪源。

示例 2

C:\PS>get-tracesource

说明
-----------
此命令获取可以跟踪的所有 Windows PowerShell 组件。

另请参阅

  • Set-TraceSource
  • Trace-Command


Get-Transaction

获取当前（活动）事务。

语法

Get-Transaction [<CommonParameters>]

说明

Get-Transaction cmdlet 获取表示会话中的当前事务的对象。

此 cmdlet 从不返回多个对象，原因是同一时间只有一个事务处于活动状态。如果启动一个或多个独立事务（使用 Start-Transaction 的 Independent 参数），则最近启动的事务将处于活动状态，并且该事务是 Get-Transaction 返回的事务。

回滚或提交所有活动事务后，Get-Transaction 将显示会话中最近活动的事务。

Get-Transaction cmdlet 是 Windows PowerShell 中支持事务功能的一组 cmdlet 之一。有关详细信息，请参阅 about_Transactions。

参数

<CommonParameters>

此 cmdlet 支持通用参数：-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。有关详细信息，请参阅 about_Commonparameters.

输入和输出

输入类型是指可通过管道传递给 cmdlet 的对象的类型。返回类型是指 Cmdlet 所返回对象的类型。

输入 | None 不能通过管道将对象传递给此 cmdlet。
输出 | System.Management.Automation.PSTransaction Get-Transaction 返回一个表示当前事务的对象。

示例 1

C:\PS>start-transaction

C:\PS> get-transaction

RollbackPreference   SubscriberCount   Status
------------------   ---------------   ------
Error                1                 Active

说明
-----------
此命令使用 Get-Transaction cmdlet 来获取当前事务。

示例 2

C:\PS>get-transaction | get-member

Name               MemberType Definition
----               ---------- ----------
Dispose            Method     System.Void Dispose(), System.Void Dispose(Boolean disposing)
Equals             Method     System.Boolean Equals(Object obj)
GetHashCode        Method     System.Int32 GetHashCode()
GetType            Method     System.Type GetType()
ToString           Method     System.String ToString()
IsCommitted        Property   System.Boolean IsCommitted {get;}
IsRolledBack       Property   System.Boolean IsRolledBack {get;}
RollbackPreference Property   System.Management.Automation.RollbackSeverity RollbackPreference {get;}
SubscriberCount    Property   System.Int32 SubscriberCount {get;set;}

说明
-----------
此命令使用 Get-Member cmdlet 来显示事务对象的属性和方法。

示例 3

C:\PS>cd hklm:\software
HKLM:\SOFTWARE> Start-Transaction
HKLM:\SOFTWARE> New-Item MyCompany -UseTransaction
HKLM:\SOFTWARE> Undo-Transaction
HKLM:\SOFTWARE> Get-Transaction

RollbackPreference   SubscriberCount   Status
------------------   ---------------   ----------
Error                0                 RolledBack

说明
-----------
此命令显示已回滚事务的事务对象属性值。

示例 4

C:\PS>cd hklm:\software
HKLM:\SOFTWARE> Start-Transaction
HKLM:\SOFTWARE> New-Item MyCompany -UseTransaction
HKLM:\SOFTWARE> Complete-Transaction
HKLM:\SOFTWARE> Get-Transaction

RollbackPreference   SubscriberCount   Status
------------------   ---------------   ---------
Error                1                 Committed

说明
-----------
此命令显示已提交事务的事务对象属性值。

示例 5

C:\PS>cd hklm:\software
HKLM:\SOFTWARE> Start-Transaction
HKLM:\SOFTWARE> New-Item MyCompany -UseTransaction

HKLM:\SOFTWARE> Start-Transaction
HKLM:\SOFTWARE> New-Item MyCompany2 -UseTransaction

HKLM:\SOFTWARE> Get-Transaction

RollbackPreference   SubscriberCount   Status
------------------   ---------------   ------
Error                2                 Active

HKLM:\SOFTWARE> Complete-Transaction
HKLM:\SOFTWARE> Get-Transaction

RollbackPreference   SubscriberCount   Status
------------------   ---------------   ------
Error                1                 Active

HKLM:\SOFTWARE> Complete-Transaction
HKLM:\SOFTWARE> Get-Transaction

RollbackPreference   SubscriberCount   Status
------------------   ---------------   ---------
Error                1                 Committed

说明
-----------
此示例演示当一个事务正在运行时，启动另一个事务对事务对象的影响。通常，当运行事务的脚本包括函数或调用包含其他完整事务的脚本时，会发生这种情况。

除非第二个 Start-Transaction 命令包括 Independent 参数，否则 Start-Transaction 不会创建新事务。它会将第二个订阅者添加到原始事务中。

第一个 Start-Transaction 命令启动事务。带有 UseTransaction 参数的 New-Item 命令是该事务的一部分。

第二个 Start-Transaction 命令向该事务中添加订阅者。下一个 New-Item 命令也是该事务的一部分。

第一个 Get-Transaction 命令显示多订阅者事务。请注意，订阅者计数为 2。

第一个 Complete-Transaction 命令不会提交事务，但它会将订阅者计数减少到 1。

第二个 Complete-Transaction 命令提交该事务。

示例 6

C:\PS>HKLM:\SOFTWARE> Start-Transaction

HKLM:\SOFTWARE> Get-Transaction

RollbackPreference   SubscriberCount   IsRolledBack   IsCommitted
------------------   ---------------   ------------   -----------
Error                1                 False          False

HKLM:\SOFTWARE> Start-Transaction -Independent
HKLM:\SOFTWARE> Get-Transaction

RollbackPreference   SubscriberCount   IsRolledBack   IsCommitted
------------------   ---------------   ------------   -----------
Error                1                 False          False

HKLM:\SOFTWARE> Complete-Transaction
HKLM:\SOFTWARE> Get-Transaction

HKLM:\SOFTWARE> Complete-Transaction
HKLM:\SOFTWARE> Get-Transaction

说明
-----------
此示例演示当一个事务正在运行时，启动另一个独立事务对事务对象的影响。

第一个 Start-Transaction 命令启动事务。带有 UseTransaction 参数的 New-Item 命令是该事务的一部分。

第二个 Start-Transaction 命令向该事务中添加订阅者。下一个 New-Item 命令也是该事务的一部分。

第一个 Get-Transaction 命令显示多订阅者事务。请注意，订阅者计数为 2。

Complete-Transaction 命令将订阅者计数减少到 1，但不提交该事务。

第二个 Complete-Transaction 命令提交该事务。

另请参阅

  • about_Transactions
  • about_Providers
  • Start-Transaction
  • Complete-Transaction
  • Undo-Transaction
  • Use-Transaction


Get-UICulture

获取操作系统中当前用户界面 (UI) 区域性设置。

语法

Get-UICulture [<CommonParameters>]

说明

Get-UICulture cmdlet 获取 Windows 的当前 UI 区域性设置的相关信息。UI 区域性确定哪些文本字符串用于用户界面元素（如菜单和消息）。

还可以使用 Get-Culture cmdlet，其获取系统中的当前区域性。区域性确定数字、货币和日期等项的显示格式。

参数

<CommonParameters>

此 cmdlet 支持通用参数：-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。有关详细信息，请参阅 about_Commonparameters.

输入和输出

输入类型是指可通过管道传递给 cmdlet 的对象的类型。返回类型是指 Cmdlet 所返回对象的类型。

输入 | None 不能通过管道将输入传递给此 cmdlet。
输出 | System.Globalization.CultureInfo Get-UICulture 返回一个表示当前 UI 区域性的对象。

说明

还可使用 $PsCulture 和 $PsUICulture 变量。$PsCulture 变量存储当前区域性的名称，$PsUICulture 变量存储当前 UI 区域性的名称。

示例 1

C:\PS>get-uiculture

说明
-----------
此命令获取当前 UI 区域性信息。

示例 2

C:\PS>get-uiculture | format-list *

说明
-----------
此命令在列表中显示当前 UI 区域性的所有属性的值。

示例 3

C:\PS>(get-uiculture).calendar

说明
-----------
此命令显示当前 UI 区域性的 Calendar 属性的当前值。Calendar 只是 UI 区域性的一个属性。若要查看所有属性，请键入“get-uiculture | get-member”。

示例 4

C:\PS>(get-uiculture).datetimeformat.shortdatepattern

说明
-----------
此命令显示当前 UI 区域性的短日期模式。若要查看 UI 区域性的 DateTimeFormat 属性的所有子属性，请键入“(get-uiculture).datetimeformat | gm”。


Get-Unique

从排序列表返回唯一项目。

语法

Get-Unique [-AsString] [-InputObject <psobject>] [<CommonParameters>]

Get-Unique [-OnType] [-InputObject <psobject>] [<CommonParameters>]

说明

Get-Unique cmdlet 将排序列表中的每个项目与下一个项目进行比较，消除重复，并且只返回每个项目的一个实例。该列表必须经过排序，然后 cmdlet 才能正确工作。

参数

-AsString

将数据视为字符串。如果没有此参数，则数据被视为对象，因此，将相同类型的对象集合（例如，文件集合）提交到 Get-Unique 时，它只返回一个（第一个）对象。可以使用此参数查找对象属性的唯一值，例如，文件名。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-InputObject <psobject>

接受 Get-Unique 的输入。请输入包含对象的变量，或者键入可获取对象的命令或表达式。

Get-Unique 将通过使用 InputObject 所提交的输入视为集合；它不枚举集合中的各个项目。因为集合是单个项目，因此通过使用 InputObject 所提交的输入将始终在不作更改的情况下返回。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | true (ByValue)
是否接受通配符？ | false

-OnType

对于每个类型只返回一个对象。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

<CommonParameters>

此 cmdlet 支持通用参数：-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。有关详细信息，请参阅 about_Commonparameters.

输入和输出

输入类型是指可通过管道传递给 cmdlet 的对象的类型。返回类型是指 Cmdlet 所返回对象的类型。

输入 | System.Management.Automation.PSObject 可将任何类型的对象通过管道传递给 Get-Unique。
输出 | System.Management.Automation.PSObject Get-Unique 返回的对象的类型由输入确定。

说明

还可以使用 Get-Unique 的内置别名“gu”来对其进行引用。有关详细信息，请参阅 about_Aliases。

若要对列表排序，请使用 Sort-Object。还可以使用 Sort-Object 的 Unique 参数来查找列表中的唯一项。

示例 1

C:\PS>$a = $(foreach ($line in get-content C:\Test1\File1.txt) {$line.tolower().split(" ")}) | sort | get-unique

C:\PS> $a.count

说明
-----------
这些命令将查找文本文件中的唯一单词数。

第一个命令获取 File.txt 文件的内容。它将文本的每一行转换为小写字母，然后以空格 (" ") 为界将每个单词拆分到单独一行上。然后，它对得到的列表按字母顺序（默认）排序，并使用 Get-Unique cmdlet 消除任何重复的单词。结果存储在 $a 变量中。

第二个命令使用 $a 中的字符串集合的 Count 属性来确定在 $a 中有多少项。

示例 2

C:\PS>1,1,1,1,12,23,4,5,4643,5,3,3,3,3,3,3,3 | sort-object | Get-Unique

说明
-----------
此命令查找该组整数的唯一成员。第一个命令接受在命令行键入的整数数组，通过管道将它们传递给 Sort-Object cmdlet 进行排序，然后通过管道将它们传递给 Get-Unique 以消除重复项。

示例 3

C:\PS>get-childitem | sort-object {$_.GetType()} |  unique -OnType

说明
-----------
此命令使用 Get-ChildItem cmdlet 来检索包含文件和目录的本地目录的内容。管道运算符 (|) 将结果发送到 Sort-Object cmdlet。“$_.GetType()”语句将 GetType 方法应用于每个文件或目录。然后，Sort-Object 按类型对项目排序。另一个管道运算符将结果发送给 Get-Unique。OnType 参数指示 Get-Unique 对每个类型只返回一个对象。

示例 4

C:\PS>get-process | sort-object | select processname | get-unique -asstring

说明
-----------
此命令获取计算机上正在运行的进程的名称，名称已消除重复。

Get-Process 命令获取计算机上的所有进程。管道运算符 (|) 将结果传递给 Sort-Object，后者在默认情况下按 ProcessName 以字母顺序对进程排序。结果将通过管道传递给 Select-Object cmdlet，后者只选择每个对象的 ProcessName 属性的值。然后，将结果通过管道传递给 Get-Unique 以消除重复。

AsString 参数指示 Get-Unique 将 ProcessName 值视为字符串。如果没有此参数，Get-Unique 会将 ProcessName 值视为对象，只返回该对象的一个实例，即列表中的第一个进程名称。

另请参阅

  • Select-Object
  • Sort-Object


Get-Variable

获取当前控制台中的变量。

语法

Get-Variable [[-Name] <string[]>] [-Exclude <string[]>] [-Include <string[]>] [-Scope <string>] [-ValueOnly] [<CommonParameters>]

说明

Get-Variable cmdlet 获取当前控制台中的 Windows PowerShell 变量。通过指定 ValueOnly 参数可以只检索变量的值，还可以按名称筛选返回的变量。

参数

-Exclude <string[]>

忽略指定项。允许使用通配符。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Include <string[]>

指定 cmdlet 只对这些项执行操作，排除其他所有项。允许使用通配符。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Name <string[]>

指定变量的名称。

是否为必需？ | false
位置？ | 1
默认值 |
是否接受管道输入？ | true (ByValue, ByPropertyName)
是否接受通配符？ | false

-Scope <string>

仅获取指定作用域中的变量。有效值包括“Global”、“Local”、“Script”或者相对于当前作用域的数字（0 到作用域数，其中 0 是指当前作用域，1 是指其父作用域）。默认值为“Local”。有关详细信息，请参阅 about_Scopes。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-ValueOnly

只获取变量的值。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

<CommonParameters>

此 cmdlet 支持通用参数：-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。有关详细信息，请参阅 about_Commonparameters.

输入和输出

输入类型是指可通过管道传递给 cmdlet 的对象的类型。返回类型是指 Cmdlet 所返回对象的类型。

输入 | System.String 可以通过管道将包含变量名称的字符串传递给 Get-Variable。
输出 | Variable object Get-Variable 为它所获取的每个变量返回一个 System.Management.Automation 变量对象。对象类型取决于变量。

说明

此 cmdlet 不管理环境变量。若要管理环境变量，可以使用环境变量提供程序。

示例 1

C:\PS>get-variable m*

说明
-----------
此命令显示名称以字母“m”开头的变量。还将显示变量的值。

示例 2

C:\PS>get-variable m* -valueonly

说明
-----------
此命令只显示名称以字母“m”开头的变量的值。

示例 3

C:\PS>get-variable -include M*,P* | sort-object name

说明
-----------
此命令获取以字母“M”或字母“P”开头的变量的相关信息。结果将通过管道传递给 Sort-Object cmdlet，先按名称排序，然后显示。

示例 4

C:\PS>get-variable -scope 0

C:\PS> compare-object (get-variable -scope 0) (get-variable -scope 1)

说明
-----------
第一个命令仅获取当前作用域中定义的变量。它等效于“get-variable -scope local”，可以缩写为“gv -s 0”。

第二个命令使用 Compare-Object cmdlet 来查找在父作用域 (Scope 1) 中定义的、但仅在当前作用域 (Scope 0) 中可见的变量。

另请参阅

  • Set-Variable
  • New-Variable
  • Clear-Variable
  • Remove-Variable


Get-WinEvent

从本地和远程计算机上的事件日志和事件跟踪日志文件中获取事件。

语法

Get-WinEvent [-LogName] <string[]> [-ComputerName <string>] [-Credential <PSCredential>] [-FilterXPath <string>] [-Force <switch>] [-MaxEvents <int64>] [-Oldest] [<CommonParameters>]

Get-WinEvent [-Path] <string[]> [-ComputerName <string>] [-Credential <PSCredential>] [-FilterXPath <string>] [-Force <switch>] [-MaxEvents <int64>] [-Oldest] [<CommonParameters>]

Get-WinEvent [-ProviderName] <string[]> [-ComputerName <string>] [-Credential <PSCredential>] [-FilterXPath <string>] [-Force <switch>] [-MaxEvents <int64>] [-Oldest] [<CommonParameters>]

Get-WinEvent -FilterHashTable <Hashtable[]> [-ComputerName <string>] [-Credential <PSCredential>] [-Force <switch>] [-MaxEvents <int64>] [-Oldest] [<CommonParameters>]

Get-WinEvent [-ListLog] <string[]> [-ComputerName <string>] [-Credential <PSCredential>] [<CommonParameters>]

Get-WinEvent [-ListProvider] <string[]> [-ComputerName <string>] [-Credential <PSCredential>] [<CommonParameters>]

Get-WinEvent -FilterXml <XmlDocument> [-ComputerName <string>] [-Credential <PSCredential>] [-Force <switch>] [-MaxEvents <int64>] [-Oldest] [<CommonParameters>]

说明

Get-WinEvent cmdlet 从包括传统日志（例如系统日志和应用程序日志）在内的事件日志和 Windows Vista 中引入的新 Windows 事件日志技术生成的事件日志中获取事件。它还获取 Windows 事件跟踪 (ETW) 生成的日志文件中的事件。

如果没有参数，则 Get-WinEvent 命令获取计算机上的所有事件日志中的所有事件。若要中断此命令，请按 Ctrl+C。

Get-WinEvent 还列出事件日志和事件日志提供程序。可以从选定日志中或者从选定事件提供程序生成的日志中获取事件。并且可以将来自多个源的事件组合在一个命令中。Get-WinEvent 允许使用 XPath 查询、结构化 XML 查询和简化的哈希表查询来筛选事件。

注意：Get-WinEvent 要求 Windows Vista、Windows Server 2008 R2 或更高版本的 Windows，并且要求 Microsoft .NET Framework 3.5 或更高版本。

参数

-ComputerName <string>

从指定计算机上的事件日志中获取事件。键入计算机的 NetBIOS 名称、Internet 协议 (IP) 地址或完全限定的域名。默认值为本地计算机。

此参数一次仅接受一个计算机名称。要在多台计算机上查找事件日志或事件，请使用 ForEach 语句。有关此参数的详细信息，请参阅示例。

若要从远程计算机获取事件和事件日志，则事件日志服务的防火墙端口必须配置为允许远程访问。

此参数不依赖于 Windows PowerShell 远程处理。即使您的计算机未配置为运行远程命令，您也可以使用 ComputerName 参数。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Credential <PSCredential>

指定有权执行此操作的用户帐户。默认值为当前用户。

键入用户名，例如 User01 或 Domain01\User01。或者，输入 PSCredential 对象，例如由 Get-Credential cmdlet 生成的对象。如果键入用户名，则将提示您输入密码。如果只键入参数名，则将提示您输入用户名和密码。

是否为必需？ | false
位置？ | named
默认值 | Current user
是否接受管道输入？ | false
是否接受通配符？ | false

-FilterHashTable <Hashtable[]>

使用哈希表格式的查询来从一个或多个事件日志中选择事件。该查询包含具有一个或多个键-值对的哈希表。

哈希表查询具有下列规则：

-- 键和值不区分大小写。

-- 通配符仅在与 LogName 和 ProviderName 键关联的值中有效。

-- 每个键只能在每个哈希表中列出一次。

-- Path 值接受 .etl、.evt 和 .evtx 日志文件的路径。

-- LogName、Path 和 ProviderName 键可用在同一查询中。

-- UserID 键可接受有效的安全标识符 (SID) 或可用于构建有效的 System.Security.Principal.NTAccount 对象的域帐户名。

-- Data 值接受未命名字段中的事件数据。这针对传统事件日志中的事件。

-- * 键表示命名事件数据字段。

当 Get-WinEvent 无法解释键-值对时，它将该键解释为事件中事件数据的区分大小写的名称。

有效的键-值对如下所示：

-- LogName=<String[]>

-- ProviderName=<String[]>

-- Path=<String[]>

-- Keywords=<Long[]>

-- ID=<Int32[]>

-- Level=<Int32[]>

-- StartTime=<DateTime>

-- EndTime=<DataTime>

-- UserID=<SID>

-- Data=<String[]>

-- *=<String[]>

是否为必需？ | true
位置？ | named
默认值 |
是否接受管道输入？ | true (ByValue)
是否接受通配符？ | false

-FilterXml <XmlDocument>

使用结构化 XML 查询来从一个或多个事件日志中选择事件。

若要生成有效的 XML 查询，请使用事件查看器中的“创建自定义视图”和“筛选当前日志”功能。使用对话框中的项目来创建查询，然后单击 XML 选项卡，以 XML 格式查看该查询。您可以将 XML 选项卡中的 XML 复制到 FilterXml 参数的值中。有关事件查看器功能的详细信息，请参阅事件查看器帮助。

通常，使用 XML 查询来创建包含多个 XPath 语句的复杂查询。XML 格式还允许您使用将事件排除在查询外的“Suppress”XML 元素。有关事件日志查询的 XML 架构的详细信息，请参阅 MSDN (Microsoft Developer Network) 库中的下列主题。

--“Query Schema（查询架构）”：http://go.microsoft.com/fwlink/?LinkId=143685

--“Event Selection（事件选择）”中的“XML Event Queries（XML 事件查询）”：http://go.microsoft.com/fwlink/?LinkID=143608

是否为必需？ | true
位置？ | named
默认值 | 无
是否接受管道输入？ | true (ByValue)
是否接受通配符？ | false

-FilterXPath <string>

使用 XPath 查询来从一个或多个日志中选择事件。

有关 XPath 语言的详细信息，请参阅 MSDN Library 中“Event Selection（事件选择）”和“XPath Reference（XPath 参考）”中的“Selection Filters（选择筛选器）”。

是否为必需？ | false
位置？ | named
默认值 | 无
是否接受管道输入？ | false
是否接受通配符？ | false

-Force <switch>

获取调试日志和分析日志以及其他事件日志。如果 name 参数的值包含通配符，则需要使用 Force 参数才能获取调试日志或分析日志。

默认情况下，除非指定调试日志或分析日志的全名，否则 Get-WinEvent 不包括这些日志。

是否为必需？ | false
位置？ | named
默认值 | Debugging and analytic logs are not returned in response to queries that use wildcard characters.
是否接受管道输入？ | false
是否接受通配符？ | false

-ListLog <string[]>

获取指定的事件日志。以逗号分隔的列表形式输入事件日志名称。允许使用通配符。若要获取所有日志，请输入值 *。

是否为必需？ | true
位置？ | 1
默认值 | 无
是否接受管道输入？ | false
是否接受通配符？ | true

-ListProvider <string[]>

获取指定的事件日志提供程序。事件日志提供程序是将事件写入事件日志中的程序或服务。

以逗号分隔的列表形式输入提供程序名称。允许使用通配符。若要获取计算机上所有事件日志的提供程序，请输入值 *。

是否为必需？ | true
位置？ | 1
默认值 | 无
是否接受管道输入？ | false
是否接受通配符？ | true

-LogName <string[]>

从指定的事件日志中获取事件。以逗号分隔的列表形式输入事件日志名称。允许使用通配符。还可以将日志名称通过管道传送到 Get-WinEvent。

是否为必需？ | true
位置？ | 1
默认值 | 无
是否接受管道输入？ | true (ByValue)
是否接受通配符？ | true

-MaxEvents <int64>

指定 Get-WinEvent 返回的事件的最大数目。输入一个整数。默认设置为返回日志或文件中的所有事件。

是否为必需？ | false
位置？ | named
默认值 | All events
是否接受管道输入？ | false
是否接受通配符？ | false

-Oldest

按从旧到新的顺序返回事件。默认情况下，事件按从新到旧的顺序返回。

当从 .etl 和 .evt 文件以及从调试日志和分析日志中获取事件时，此参数是必需的。在这些文件中，事件按从旧到新的顺序记录，并且只能按从旧到新的顺序返回。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Path <string[]>

从指定的事件日志文件中获取事件。在逗号分隔列表中输入日志文件的路径，或使用通配符来创建文件路径模式。

Get-WinEvent 支持文件扩展名为 .evt、.evtx 和 .etl 的文件。可以在同一命令中包含来自不同文件和文件类型的事件。

是否为必需？ | true
位置？ | 1
默认值 | 无
是否接受管道输入？ | false
是否接受通配符？ | true

-ProviderName <string[]>

获取指定的事件日志提供程序编写的事件。以逗号分隔的列表形式输入提供程序名称，或使用通配符来创建提供程序名称模式。

事件日志提供程序是将事件写入事件日志中的程序或服务。它不是 Windows PowerShell 提供程序。

是否为必需？ | true
位置？ | 1
默认值 | 无
是否接受管道输入？ | false
是否接受通配符？ | true

<CommonParameters>

此 cmdlet 支持通用参数：-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。有关详细信息，请参阅 about_Commonparameters.

输入和输出

输入类型是指可通过管道传递给 cmdlet 的对象的类型。返回类型是指 Cmdlet 所返回对象的类型。

输入

System.String、System.Xml.XmlDocument、System.Collections.Hashtable。

可以将 LogName（字符串）、FilterXML 查询或 FilterHashTable 查询通过管道传送到 Get-WinEvent。

输出

System.Diagnostics.Eventing.Reader.EventLogConfiguration、System.Diagnostics.Eventing.Reader.EventLogRecord、System.Diagnostics.Eventing.Reader.ProviderMetadata

如果使用 ListLog 参数，则 Get-WinEvent 返回 System.Diagnostics.Eventing.Reader.EventLogConfiguration 对象。如果使用 ListProvider 参数，则 Get-WinEvent 返回 System.Diagnostics.Eventing.Reader.ProviderMetadata 对象。使用所有其他参数，Get-WinEvent 返回 System.Diagnostics.Eventing.Reader.EventLogRecord 对象。

说明

Get-WinEvent 用于替代运行 Windows Vista 及更高版本的 Windows 的计算机上的 Get-EventLog cmdlet。Get-EventLog 只获取传统事件日志中的事件。Windows PowerShell 2.0 为 Windows Vista 以前的系统保留了 Get-EventLog。

示例 1

C:\PS>get-winevent -listlog  *

说明
-----------
此命令获取本地计算机上的所有日志。

日志按 Get-WinEvent 获取它们的顺序列出。通常首先检索传统日志，然后检索新的 Windows 事件日志。

因为通常有一百多个事件日志，所以此参数需要日志名称或名称模式。若要获取所有日志，请使用 *。

示例 2

C:\PS>get-winevent -listlog Setup | format-list -property *

    FileSize                       : 69632
    IsLogFull                      : False
    LastAccessTime                 : 2/14/2008 12:55:12 AM
    LastWriteTime                  : 7/9/2008 3:12:05 AM
    OldestRecordNumber             : 1
    RecordCount                    : 3
    LogName                        : Setup
    LogType                        : Operational
    LogIsolation                   : Application
    IsEnabled                      : True
    IsClassicLog                   : False
    SecurityDescriptor             : O:BAG:SYD:(A;;0xf0007;;;SY)(A;
                                     (A;;0x1;;;S-1-5-32-573)
    LogFilePath                    : %SystemRoot%\System32\Winevt\L
    MaximumSizeInBytes             : 1052672
    LogMode                        : Circular
    OwningProviderName             : Microsoft-Windows-Eventlog
    ProviderNames                  : {Microsoft-Windows-WUSA, Micro
    ProviderLevel                  :
    ProviderKeywords               :
    ProviderBufferSize             : 64
    ProviderMinimumNumberOfBuffers : 0
    ProviderMaximumNumberOfBuffers : 64
    ProviderLatency                : 1000
    ProviderControlGuid            :

说明
-----------
这些命令获取表示本地计算机上的传统系统日志的对象。该对象包括有关日志的有用信息，其中包括日志大小、事件日志提供程序、文件路径以及是否已启用日志。

示例 3

C:\PS>get-winevent -listlog * -computername Server01| where {$_.recordcount}

说明
-----------
此命令只获取 Server01 计算机上含有事件的事件日志。许多日志可能是空的。

此命令使用 Get-WinEvent 在您使用 ListLog 参数时返回的 EventLogConfiguration 对象的 RecordCount 属性。

示例 4

C:\PS>$s = "Server01", "Server02", "Server03"

C:\PS> foreach ($server in $s)
     {$server; get-winevent -listlog "Windows PowerShell" -computername $server}

说明
-----------
此示例中的命令获取表示 Server01、Server02 和 Server03 计算机上的 Windows PowerShell 事件日志的对象。因为 ComputerName 参数只接受一个值，所以第二个命令使用 Foreach 关键字。

第一个命令将计算机名称保存在 $s 变量中。

第二个命令使用 Foreach 语句。对于 $s 变量中的每台计算机，它执行脚本块中（大括号内）的命令。首先，此命令打印计算机的名称。然后，它运行 Get-WinEvent 命令来获取表示 Windows PowerShell 日志的对象。

示例 5

C:\PS>get-winevent -listprovider *

说明
-----------
此命令获取本地计算机上的事件日志提供程序及其写入数据的日志（如果有）。

示例 6

C:\PS>(get-winevent -listlog Application).providernames

说明
-----------
此命令获取向本地计算机上的应用程序日志写入数据的所有提供程序。

示例 7

C:\PS>>get-winevent -listprovider *policy*

说明
-----------
此命令获取其名称包含单词“policy”的事件日志提供程序。

示例 8

C:\PS>(get-winevent -listprovider microsoft-windows-grouppolicy).events | format-table id, description -auto

说明
-----------
此命令列出 Microsoft-Windows-GroupPolicy 事件提供程序生成的事件 ID 以及事件说明。

它使用在您使用 ListProvider 参数时 Get-WinEvent 返回的对象的 Events 属性以及 Events 属性中对象的 ID 和 Description 属性。

示例 9

C:\PS>$events = get-winevent -logname "Windows PowerShell"

C:\PS> $events.count
195

C:\PS> $events | group-object id -noelement | sort-object count -desc
Count Name
----- ----
  147 600
   22 400
   21 601
    3 403
    2 103

 C:\PS> $events | group-object leveldisplayname -noelement
Count Name
----- ----
    2 Warning
  193 Information

说明
-----------
此示例演示如何使用 Get-WinEvent 返回的事件对象的属性来了解事件日志中的事件。

第一个命令使用 Get-WinEvent cmdlet 来获取 Windows PowerShell 事件日志中的所有事件。然后，它将所有事件保存在 $events 变量中。日志名称用引号引起，因为它包含空格。

第二个命令使用对象集合的 Count 属性来查找事件日志中的项数。

第三个命令显示日志中出现的每个事件，首先显示出现频率最高的事件。在此示例中，事件 ID 600 是出现频率最高的事件。

第四个命令按项目的 LevelDisplayName 属性的值将项目分组来显示日志中错误、警告和信息事件的数量。

示例 10

C:\PS>get-winevent -logname *disk*, Microsoft-Windows-Kernel-WHEA

说明
-----------
此命令获取计算机上的所有事件日志中以及 Microsoft-Windows-Kernel-WHEA 事件日志中名称包括“disk”的错误事件。

示例 11

C:\PS>get-winevent -path 'c:\ps-test\Windows PowerShell.evtx'

说明
-----------
此命令从测试目录中的 Windows PowerShell 事件日志文件副本中获取事件。路径用引号引起，因为日志名称包含空格。

示例 12

C:\PS>get-winevent -path 'c:\tracing\tracelog.etl' -maxevents 100 -oldest

C:\PS> get-winevent -path 'c:\tracing\tracelog.etl' -oldest | sort-object -property timecreated -desc | select-object -first 100

说明
-----------
这些命令从 Windows 事件跟踪 (ETW) 事件跟踪日志文件中获取前 100 个事件。

第一个命令获取日志中 100 个最旧的事件。它使用 Get-WinEvent cmdlet 来从 Tracelog.etl 文件中获取事件。它使用 MaxEvents 参数将检索的事件数限制为 100 个。因为事件是按它们写入日志的顺序（从旧到新）列出的，所以需要 Oldest 参数。

第二个命令获取日志中 100 个最新的事件。它使用 Get-WinEvent cmdlet 来从 Tracing.etl 文件中获取所有事件。它将
事件传递给 Sort-Object cmdlet，后者按 TimeCreated 属性值对它们进行降序排序。然后，它将已排序的事件发送到 Select-Object cmdlet 以选择最新的 100 个事件。

示例 13

C:\PS>get-winevent -path "c:\tracing\tracelog.etl", "c:\Logs\Windows PowerShell.evtx" -oldest | where {$_.id -eq "103"}

说明
-----------
此示例演示如何从事件跟踪日志文件 (.etl) 和保存到测试目录中的 Windows PowerShell 日志文件 (.evtx) 副本获取事件。

可以在单个命令中组合多种文件类型。因为文件包含相同类型的 .NET Framework 对象（EventLogRecord 对象），所以可以使用相同的属性来筛选它们。

请注意，此命令需要 Oldest 参数，因为它从 .etl 文件读取数据，但 Oldest 参数同时应用于两个文件。

示例 14

C:\PS># Use the Where-Object cmdlet
C:\PS> $yesterday = (get-date) - (new-timespan -day 1)
C:\PS> get-winevent -logname "Windows PowerShell" | where {$_.timecreated -ge $yesterday}

# Uses FilterHashTable
C:\PS> $yesterday = (get-date) - (new-timespan -day 1)
C:\PS> get-winevent -FilterHashTable @{LogName='Windows PowerShell'; Level=3; StartTime=$yesterday}

# Use FilterXML
C:\PS> get-winevent -FilterXML "<QueryList><Query><Select Path='Windows PowerShell'>*[System[Level=3 and TimeCreated[timediff(@SystemTime) <= 86400000]]]</Select></Query></QueryList>"

# Use FilterXPath
C:\PS> get-winevent -LogName "Windows Powershell" -FilterXPath "*[System[Level=3 and TimeCreated[timediff(@SystemTime) <= 86400000]]]"

说明
-----------
此示例演示用于从事件日志中选择事件的不同筛选方法。所有这些命令都从 Windows PowerShell 事件日志中获取过去 24 小时内发生的事件。

使用筛选方法比使用 Where-Object cmdlet 效率高，因为在检索对象时将应用筛选器，而不是先检索所有对象然后再筛选它们。

因为日期难以用 XML 和 XPath 格式表示，所以为了创建日期的 XML 内容，将使用事件查看器的“筛选当前日志”功能。有关此功能的详细信息，请参阅事件查看器帮助。

示例 15

C:\PS>$date = (get-date).AddDays(-2)

C:\PS> $events = get-winevent -FilterHashTable @{ logname = "Microsoft-Windows-Diagnostics-Performance/Operational"; StartTime = $date; ID = 100 }

说明
-----------
此示例使用筛选器哈希表来从性能日志中获取事件。

第一个命令使用 Get-Date cmdlet 和 AddDays 方法来获取当前日期的两天前的日期。它将该日期保存在 $date 变量中。

第二个命令使用具有 FilterHashTable 参数的 Get-WinEvent cmdlet。哈希表中的键定义从性能日志中选择过去两天内发生的且事件 ID 为 100 的事件的筛选器。

LogName 键指定事件日志，StartTime 键指定日期，ID 键指定事件 ID。

示例 16

C:\PS>$starttime = (get-date).adddays(-7)

C:\PS> $ie-error = Get-WinEvent -FilterHashtable @{logname="application"; providername="Application Error"; data="iexplore.exe"; starttime=$starttime}

说明
-----------
此示例使用筛选器哈希表来查找上周发生的 Internet Explorer 应用程序错误。

第一个命令获取当前日期的七天前的日期，并将它存储在 $starttime 变量中。

第二个命令使用具有 FilterHashTable 参数的 Get-WinEvent cmdlet。哈希表中的键定义从应用程序日志中选择由应用程序错误提供程序编写的且包括短语“iexplore.exe”的事件的筛选器。

LogName 键指定事件日志。ProviderName 键指定事件提供程序，StartTime 键指定事件的开始日期，Data 键指定事件消息中的文本。

另请参阅

  • Get-EventLog
  • Get-Counter
  • about_Eventlogs


Get-WmiObject

获取 Windows Management Instrumentation (WMI) 类的实例或可用类的相关信息。

语法

Get-WmiObject [-Authority <string>] [-Amended] [-AsJob] [-Authentication {<Default> | <None> | <Connect> | <Call> | <Packet> | <PacketIntegrity> | <PacketPrivacy> | <Unchanged>}] [-ComputerName <string[]>] [-Credential <PSCredential>] [-EnableAllPrivileges] [-Impersonation {<Default> | <Anonymous> | <Identify> | <Impersonate> | <Delegate>}] [-Locale <string>] [-命名空间 <string>] [-ThrottleLimit <int>] [<CommonParameters>]

Get-WmiObject [[-类] <string>] [-Authority <string>] [-List] [-Recurse] [-Amended] [-AsJob] [-Authentication {<Default> | <None> | <Connect> | <Call> | <Packet> | <PacketIntegrity> | <PacketPrivacy> | <Unchanged>}] [-ComputerName <string[]>] [-Credential <PSCredential>] [-EnableAllPrivileges] [-Impersonation {<Default> | <Anonymous> | <Identify> | <Impersonate> | <Delegate>}] [-Locale <string>] [-命名空间 <string>] [-ThrottleLimit <int>] [<CommonParameters>]

Get-WmiObject [-Authority <string>] [-Amended] [-AsJob] [-Authentication {<Default> | <None> | <Connect> | <Call> | <Packet> | <PacketIntegrity> | <PacketPrivacy> | <Unchanged>}] [-ComputerName <string[]>] [-Credential <PSCredential>] [-EnableAllPrivileges] [-Impersonation {<Default> | <Anonymous> | <Identify> | <Impersonate> | <Delegate>}] [-Locale <string>] [-命名空间 <string>] [-ThrottleLimit <int>] [<CommonParameters>]

Get-WmiObject [-类] <string> [[-Property] <string[]>] [-Authority <string>] [-DirectRead] [-Filter <string>] [-Amended] [-AsJob] [-Authentication {<Default> | <None> | <Connect> | <Call> | <Packet> | <PacketIntegrity> | <PacketPrivacy> | <Unchanged>}] [-ComputerName <string[]>] [-Credential <PSCredential>] [-EnableAllPrivileges] [-Impersonation {<Default> | <Anonymous> | <Identify> | <Impersonate> | <Delegate>}] [-Locale <string>] [-命名空间 <string>] [-ThrottleLimit <int>] [<CommonParameters>]

Get-WmiObject -Query <string> [-Authority <string>] [-DirectRead] [-Amended] [-AsJob] [-Authentication {<Default> | <None> | <Connect> | <Call> | <Packet> | <PacketIntegrity> | <PacketPrivacy> | <Unchanged>}] [-ComputerName <string[]>] [-Credential <PSCredential>] [-EnableAllPrivileges] [-Impersonation {<Default> | <Anonymous> | <Identify> | <Impersonate> | <Delegate>}] [-Locale <string>] [-命名空间 <string>] [-ThrottleLimit <int>] [<CommonParameters>]

说明

Get-WmiObject cmdlet 获取 WMI 类的实例或可用的 WMI 类的相关信息。ComputerName 参数可始终用于指定远程计算机。如果指定了 List 参数，则 cmdlet 将获取有关指定的命名空间中可用的 WMI 类的信息。如果指定了 Query 参数，则 cmdlet 将运行 WMI 查询语言 (WQL) 语句。

Get-WmiObject cmdlet 不使用 Windows PowerShell 远程处理基础架构来执行远程操作。即使计算机不符合 Windows PowerShell 远程处理的要求，或者计算机未配置为在 Windows PowerShell 中进行远程处理，也可以使用 Get-WmiObject 的 ComputerName 参数。

参数

-Amended

获取或设置一个值，该值指示从 WMI 返回的对象是否应包含修正信息。通常，修正信息是附加到 WMI 对象的可本地化信息，如对象和属性说明。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-AsJob

将命令作为后台作业运行。使用此参数可运行需要较长时间才能完成的命令。

使用 AsJob 参数时，该命令返回表示后台作业的对象，然后显示命令提示符。当作业完成时，您可以继续在此会话中工作。如果 Get-WmiObject 用于远程计算机，则作业在本地计算机上创建，并且来自远程计算机的结果将自动返回本地计算机。若要管理作业，请使用包含 Job 名词的 cmdlet (Job cmdlet)。要获取作业结果，请使用 Receive-Job cmdlet。

注意：若要将此参数用于远程计算机，必须为本地和远程计算机配置远程处理。此外，在 Windows Vista 和更高版本的 Windows 中，必须使用“以管理员身份运行”选项启动 Windows PowerShell。有关详细信息，请参阅 about_Remote_Requirements。

有关 Windows PowerShell 后台作业的详细信息，请参阅 about_Jobs 和 about_Remote_Jobs。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Authentication <AuthenticationLevel>

指定用于 WMI 连接的身份验证级别。有效值包括：

-1：不变

0：默认值

1：无（不执行身份验证。）

2：连接（仅当客户端与应用程序建立了关系时才执行身份验证。）

3：调用（应用程序收到请求时只在每次调用的开始执行身份验证。）

4：数据包（对从客户端收到的所有数据执行身份验证。）

5：数据包整体性（所有在客户端和应用程序之间传送的数据都经过身份验证和验证。）

6：数据包保密性（使用其他身份验证等级的属性，并且所有数据都加密。）

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Authority <string>

指定用于对 WMI 连接进行身份验证的授权机构。可以指定标准 NTLM 或 Kerberos 身份验证。若要使用 NTLM，请将授权机构设置设为“ntlmdomain:<DomainName>”，其中 <DomainName> 标识有效的 NTLM 域名。若要使用 Kerberos，请指定“kerberos:<DomainName>\<ServerName>”。连接到本地计算机时不能包含授权机构设置。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-类 <string>

指定 WMI 类的名称。如果使用此参数，则 cmdlet 将检索 WMI 类的实例。

是否为必需？ | false
位置？ | 2
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-ComputerName <string[]>

指定要对其运行管理操作的计算机。值可以是完全限定的域名、NetBIOS 名称或 IP 地址。使用本地计算机名称、localhost 或点 (.)指定本地计算机。默认值为本地计算机。当远程计算机与用户位于不同的域时，必须使用完全限定的域名。此参数还可通过管道传送给 cmdlet。

此参数不依赖于 Windows PowerShell 远程处理，后者使用 WS-Management。即使您的计算机未配置为运行 WS-Management 远程命令，也可以使用 Get-WmiObject 的 ComputerName 参数。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Credential <PSCredential>

指定有权执行此操作的用户帐户。默认值为当前用户。键入用户名，例如“User01”、“Domain01\User01”或 User@Contoso.com。或者，输入 PSCredential 对象，例如 Get-Credential cmdlet 返回的对象。键入用户名时，将会提示您键入密码。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-DirectRead

指定无论其基类或派生类如何，是否都要求指定类直接访问 WMI 提供程序。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-EnableAllPrivileges

在命令进行 WMI 调用之前，启用当前用户的所有权限。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Filter <string>

指定要用作筛选器的 Where 子句。使用 WMI 查询语言 (WQL) 的语法。

重要说明：请不要在参数的值中包含 Where 关键字。例如，以下命令不使用 Where 关键字，返回 DeviceID 等于 'c:' 的逻辑磁盘以及 name 等于 'WinRM' 的服务：

get-WmiObject Win32_LogicalDisk -filter "DeviceID = 'c:' "

get-wmiobject win32_service -filter "name='WinRM'"

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Impersonation <ImpersonationLevel>

指定要使用的模拟级别。有效值包括：

0：默认值（读取本地注册表的默认模拟级别，通常设置为“3：模拟”。）

1：匿名（隐藏调用方的凭据。）

2：标识（允许对象查询调用方的凭据。）

3：模拟（允许对象使用调用方的凭据。）

4：委派（允许对象允许其他对象使用调用方的凭据。）

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-List

指定是否检索和显示 Namespace 参数中指定的 WMI 存储库命名空间中的 WMI 类的名称。此 cmdlet 不使用 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WBEM\Scripting 注册表项中的 Default Namespace 注册表条目来确定默认的命名空间。如果指定了 List 参数，但未指定 Namespace 参数，则默认情况下将使用 root\CIMV2 命名空间。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Locale <string>

指定 WMI 对象的首选区域设置。按喜爱顺序将 Locale 参数的值指定为 MS_<LCID> 格式的数组。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-命名空间 <string>

当此参数与 Class 参数一起使用时，它将指定引用的 WMI 类所在的 WMI 存储库命名空间。当此参数与 List 参数一起使用时，它将指定从其中收集 WMI 类信息的命名空间。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Property <string[]>

指定要检索的 WMI 类属性或属性组。

是否为必需？ | false
位置？ | 2
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Query <string>

指定要运行的 WMI 查询语言 (WQL) 语句。此参数不支持事件查询。

是否为必需？ | true
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Recurse

使该命令在当前命名空间和所有其他命名空间中搜索 Class 参数中指定的类名。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-ThrottleLimit <int>

允许用户为可同时执行的 WMI 操作数目指定一个限制值。此参数与 AsJob 参数一起使用。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

<CommonParameters>

此 cmdlet 支持通用参数：-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。有关详细信息，请参阅 about_Commonparameters.

输入和输出

输入类型是指可通过管道传递给 cmdlet 的对象的类型。返回类型是指 Cmdlet 所返回对象的类型。

输入 | None 不能通过管道将输入传递给 Get-WmiObject。
输出 | PSObject or System.Management.Automation.RemotingJob 如果使用 AsJob 参数，则此 cmdlet 返回作业对象。否则，Get-WmiObject 返回的对象取决于 Class 参数的值。

说明

若要访问远程计算机上的 WMI 的信息，则 cmdlet 必须在远程计算机上的本地管理员组的成员帐户下运行。或者，可以更改远程存储库的 WMI 命名空间上的默认访问控制，以授予其他帐户访问权限。

默认情况下，只显示 WMI 类的部分属性。在 Types.ps1xml 配置文件中指定将为每个 WMI 类显示的属性组。此帮助主题中包含的示例之一演示了如何通过使用 Format-List cmdlet 来覆盖此行为。

示例 1

C:\PS>get-wmiobject win32_process

__GENUS                    : 2
__CLASS                    : Win32_Process
__SUPERCLASS               : CIM_Process
__DYNASTY                  : CIM_ManagedSystemElement
__RELPATH                  : Win32_Process.Handle="0"
__PROPERTY_COUNT           : 45
__DERIVATION               : {CIM_Process, CIM_LogicalElement, CIM_ManagedSystemElement}
__SERVER                   : SYSTEM01
__NAMESPACE                : root\cimv2
__PATH                     : \\SYSTEM01\root\cimv2:Win32_Process.Handle="0"
Caption                    : System Idle Process
CommandLine                :
CreationClassName          : Win32_Process
CreationDate               :
CSCreationClassName        : Win32_ComputerSystem
CSName                     : SYSTEM01
Description                : System Idle Process
ExecutablePath             :
ExecutionState             :
Handle                     : 0
HandleCount                : 0
InstallDate                :
KernelModeTime             : 6138394740432
MaximumWorkingSetSize      :
MinimumWorkingSetSize      :
Name                       : System Idle Process
OSCreationClassName        : Win32_OperatingSystem
OSName                     : Microsoftr Windows VistaT Ultimate |C:\Windows|\Device\Harddisk0\Partition3
OtherOperationCount        : 0
OtherTransferCount         : 0
PageFaults                 : 0
PageFileUsage              : 0
ParentProcessId            : 0
PeakPageFileUsage          : 0
PeakVirtualSize            : 0
PeakWorkingSetSize         : 0
Priority                   : 0
PrivatePageCount           : 0
ProcessId                  : 0
QuotaNonPagedPoolUsage     : 0
QuotaPagedPoolUsage        : 0
QuotaPeakNonPagedPoolUsage : 0
QuotaPeakPagedPoolUsage    : 0
ReadOperationCount         : 0
ReadTransferCount          : 0
SessionId                  : 0
Status                     :
TerminationDate            :
ThreadCount                : 2
UserModeTime               : 0
VirtualSize                : 0
WindowsVersion             : 6.0.6001
WorkingSetSize             : 24576
WriteOperationCount        : 0
WriteTransferCount         : 0
ProcessName                : System Idle Process
Handles                    : 0
VM                         : 0
WS                         : 24576
Path                       :

...

说明
-----------
此命令显示有关在计算机上运行的所有进程的信息。

示例 2

C:\PS>get-wmiobject win32_service -computername 127.0.0.1

__GENUS                    : 2
__CLASS                    : Win32_Process
__SUPERCLASS               : CIM_Process
__DYNASTY                  : CIM_ManagedSystemElement
__RELPATH                  : Win32_Process.Handle="0"
__PROPERTY_COUNT           : 45
__DERIVATION               : {CIM_Process, CIM_LogicalElement, CIM_ManagedSystemElement}
__SERVER                   : SYSTEM02
__NAMESPACE                : root\cimv2
__PATH                     : \\SYSTEM02\root\cimv2:Win32_Process.Handle="0"
Caption                    : System Idle Process
CommandLine                :
CreationClassName          : Win32_Process
CreationDate               :
CSCreationClassName        : Win32_ComputerSystem
CSName                     : SYSTEM02
Description                : System Idle Process
ExecutablePath             :
ExecutionState             :
Handle                     : 0
HandleCount                : 0
InstallDate                :
KernelModeTime             : 6138394740432
MaximumWorkingSetSize      :
MinimumWorkingSetSize      :
Name                       : System Idle Process
OSCreationClassName        : Win32_OperatingSystem
OSName                     : Microsoftr Windows VistaT Ultimate |C:\Windows|\Device\Harddisk0\Partition3
OtherOperationCount        : 0
OtherTransferCount         : 0
PageFaults                 : 0
PageFileUsage              : 0
ParentProcessId            : 0
PeakPageFileUsage          : 0
PeakVirtualSize            : 0
PeakWorkingSetSize         : 0
Priority                   : 0
PrivatePageCount           : 0
ProcessId                  : 0
QuotaNonPagedPoolUsage     : 0
QuotaPagedPoolUsage        : 0
QuotaPeakNonPagedPoolUsage : 0
QuotaPeakPagedPoolUsage    : 0
ReadOperationCount         : 0
ReadTransferCount          : 0
SessionId                  : 0
Status                     :
TerminationDate            :
ThreadCount                : 2
UserModeTime               : 0
VirtualSize                : 0
WindowsVersion             : 6.0.6001
WorkingSetSize             : 24576
WriteOperationCount        : 0
WriteTransferCount         : 0
ProcessName                : System Idle Process
Handles                    : 0
VM                         : 0
WS                         : 24576
Path                       :

...

说明
-----------
此命令显示有关远程计算机上的服务的信息。它通过指定 Internet 协议 (IP) 地址 127.0.0.1 来显示信息。可以将此 IP 地址更改为您的网络上的任何其他有效 IP 地址，以便显示有关该远程计算机上的服务的信息。默认情况下，您运行所使用的帐户必须是您指定的远程计算机上本地管理员组的成员。

示例 3

C:\PS>get-wmiobject -namespace "root/default" -list

   NameSpace: ROOT\default

Name                                Methods              Properties
----                                -------              ----------
__NotifyStatus                      {}                   {StatusCode}
__ExtendedStatus                    {}                   {Description, Operation, ParameterInfo, ProviderName...}
__SecurityRelatedClass              {}                   {}
__Trustee                           {}                   {Domain, Name, SID, SidLength...}
__NTLMUser9X                        {}                   {Authority, Flags, Mask, Name...}
__ACE                               {}                   {AccessMask, AceFlags, AceType, GuidInheritedObjectType...}
__SecurityDescriptor                {}                   {ControlFlags, DACL, Group, Owner...}
__PARAMETERS                        {}                   {}
__SystemClass                       {}                   {}
__ProviderRegistration              {}                   {provider}
__EventProviderRegistration         {}                   {EventQueryList, provider}
__ObjectProviderRegistration        {}                   {InteractionType, provider, QuerySupportLevels, SupportsBat...
__ClassProviderRegistration         {}                   {CacheRefreshInterval, InteractionType, PerUserSchema, prov...
__InstanceProviderRegistration      {}                   {InteractionType, provider, QuerySupportLevels, SupportsBat...
__MethodProviderRegistration        {}                   {provider}
__PropertyProviderRegistration      {}                   {provider, SupportsGet, SupportsPut}
__EventConsumerProviderRegistration {}                   {ConsumerClassNames, provider}
__thisNAMESPACE                     {}                   {SECURITY_DESCRIPTOR}
__NAMESPACE                         {}                   {Name}
__IndicationRelated                 {}                   {}
__FilterToConsumerBinding           {}                   {Consumer, CreatorSID, DeliverSynchronously, DeliveryQoS...}
__EventConsumer                     {}                   {CreatorSID, MachineName, MaximumQueueSize}
LogFileEventConsumer                {}                   {CreatorSID, Filename, IsUnicode, MachineName...}
ActiveScriptEventConsumer           {}                   {CreatorSID, KillTimeout, MachineName, MaximumQueueSize...}
NTEventLogEventConsumer             {}                   {Category, CreatorSID, EventID, EventType...}
SMTPEventConsumer                   {}                   {BccLine, CcLine, CreatorSID, FromLine...}
CommandLineEventConsumer            {}                   {CommandLineTemplate, CreateNewConsole, CreateNewProcessGro...
__AggregateEvent                    {}                   {NumberOfEvents, Representative}
__TimerNextFiring                   {}                   {NextEvent64BitTime, TimerId}
__EventFilter                       {}                   {CreatorSID, EventAccess, EventNamespace, Name...}
__Event                             {}                   {SECURITY_DESCRIPTOR, TIME_CREATED}
__NamespaceOperationEvent           {}                   {SECURITY_DESCRIPTOR, TargetNamespace, TIME_CREATED}
__NamespaceModificationEvent        {}                   {PreviousNamespace, SECURITY_DESCRIPTOR, TargetNamespace, T...
__NamespaceDeletionEvent            {}                   {SECURITY_DESCRIPTOR, TargetNamespace, TIME_CREATED}
__NamespaceCreationEvent            {}                   {SECURITY_DESCRIPTOR, TargetNamespace, TIME_CREATED}
__ClassOperationEvent               {}                   {SECURITY_DESCRIPTOR, TargetClass, TIME_CREATED}
__ClassDeletionEvent                {}                   {SECURITY_DESCRIPTOR, TargetClass, TIME_CREATED}
__ClassModificationEvent            {}                   {PreviousClass, SECURITY_DESCRIPTOR, TargetClass, TIME_CREA...
__ClassCreationEvent                {}                   {SECURITY_DESCRIPTOR, TargetClass, TIME_CREATED}
__InstanceOperationEvent            {}                   {SECURITY_DESCRIPTOR, TargetInstance, TIME_CREATED}
__InstanceCreationEvent             {}                   {SECURITY_DESCRIPTOR, TargetInstance, TIME_CREATED}

...

说明
-----------
此命令显示本地计算机的根目录或默认命名空间中的 WMI 类。

示例 4

C:\PS>get-wmiobject -query "select * from win32_service where name='WinRM'" -computername server01, server02

ExitCode  : 0
Name      : WinRM
ProcessId : 1708
StartMode : Auto
State     : Running
Status    : OK

ExitCode  : 0
Name      : WinRM
ProcessId : 948
StartMode : Auto
State     : Running
Status    : OK

说明
-----------
此命令显示 ComputerName 参数中指定的计算机上的 WinRM 服务的相关信息。

示例 5

C:\PS>(get-wmiobject win32_service -filter "name='WinRM'" -computername server01).StopService()

__GENUS          : 2
__CLASS          : __PARAMETERS
__SUPERCLASS     :
__DYNASTY        : __PARAMETERS
__RELPATH        :
__PROPERTY_COUNT : 1
__DERIVATION     : {}
__SERVER         :
__NAMESPACE      :
__PATH           :
ReturnValue      : 0

Another query using get-wmiobject -query "select * from win32_service where name='WinRM'" -computername server01, shows the service as stopped.

ExitCode  : 0
Name      : WinRM
ProcessId : 0
StartMode : Auto
State     : Stopped
Status    : OK

说明
-----------
此命令停止远程计算机 Server01 上的 WinRM 服务。此命令使用标准 Get-WmiObject 命令，并添加了对 Win32_Service WMI 类的 StopService 方法的调用。

示例 6

C:\PS>get-wmiobject win32_bios | format-list *

Status                : OK
Name                  : Phoenix ROM BIOS PLUS Version 1.10 2.3.1
Caption               : Phoenix ROM BIOS PLUS Version 1.10 2.3.1
SMBIOSPresent         : True
__GENUS               : 2
__CLASS               : Win32_BIOS
__SUPERCLASS          : CIM_BIOSElement
__DYNASTY             : CIM_ManagedSystemElement
__RELPATH             : Win32_BIOS.Name="Phoenix ROM BIOS PLUS Version 1.10 2.3.1 ",SoftwareElementID="Phoenix ROM BIOS
                         PLUS Version 1.10 2.3.1 ",SoftwareElementState=3,TargetOperatingSystem=0,Version="DELL   - 14"
__PROPERTY_COUNT      : 27
__DERIVATION          : {CIM_BIOSElement, CIM_SoftwareElement, CIM_LogicalElement, CIM_ManagedSystemElement}
__SERVER              : SERVER01
__NAMESPACE           : root\cimv2
__PATH                : \\SERVER01\root\cimv2:Win32_BIOS.Name="Phoenix ROM BIOS PLUS Version 1.10 2.3.1 ",Software
                        ElementID="Phoenix ROM BIOS PLUS Version 1.10 2.3.1 ",SoftwareElementState=3,TargetOperatingSys
                        tem=0,Version="DELL   - 14"
BiosCharacteristics   : {7, 9, 10, 11...}
BIOSVersion           : {DELL   - 14, Phoenix ROM BIOS PLUS Version 1.10 2.3.1 , Phoenix ROM BIOS PLUS Version 1.10 2.3
                        .1 , Phoenix ROM BIOS PLUS Version 1.10 2.3.1 }
BuildNumber           :
CodeSet               :
CurrentLanguage       : en|US|iso8859-1
Description           : Phoenix ROM BIOS PLUS Version 1.10 2.3.1
IdentificationCode    :
InstallableLanguages  : 1
InstallDate           :
LanguageEdition       :
ListOfLanguages       : {en|US|iso8859-1}
Manufacturer          : Dell Inc.
OtherTargetOS         :
PrimaryBIOS           : True
ReleaseDate           : 20070521000000.000000+000
SerialNumber          : 8PWRVD1
SMBIOSBIOSVersion     : 2.3.1
SMBIOSMajorVersion    : 2
SMBIOSMinorVersion    : 3
SoftwareElementID     : Phoenix ROM BIOS PLUS Version 1.10 2.3.1
SoftwareElementState  : 3
TargetOperatingSystem : 0
Version               : DELL   - 14
Scope                 : System.Management.ManagementScope
Path                  : \\SERVER01\root\cimv2:Win32_BIOS.Name="Phoenix ROM BIOS PLUS Version 1.10 2.3.1 ",Software
                        ElementID="Phoenix ROM BIOS PLUS Version 1.10 2.3.1 ",SoftwareElementState=3,TargetOperatingSys
                        tem=0,Version="DELL   - 14"
Options               : System.Management.ObjectGetOptions
ClassPath             : \\SERVER01\root\cimv2:Win32_BIOS
Properties            : {BiosCharacteristics, BIOSVersion, BuildNumber, Caption...}
SystemProperties      : {__GENUS, __CLASS, __SUPERCLASS, __DYNASTY...}
Qualifiers            : {dynamic, Locale, provider, UUID}
Site                  :
Container             :

说明
-----------
此命令显示 BIOS 信息。它显示 WMI 类的所有属性，而不仅仅是 Types.ps1xml 配置文件中指定的那些属性。

示例 7

C:\PS>get-wmiobject win32_service -credential FABRIKAM\administrator -computer fabrikam

ExitCode  : 0
Name      : AeLookupSvc
ProcessId : 0
StartMode : Manual
State     : Stopped
Status    : OK

ExitCode  : 1077
Name      : ALG
ProcessId : 0
StartMode : Manual
State     : Stopped
Status    : OK

ExitCode  : 1077
Name      : AppIDSvc
ProcessId : 0
StartMode : Manual
State     : Stopped
Status    : OK

ExitCode  : 0
Name      : Appinfo
ProcessId : 888
StartMode : Manual
State     : Running
Status    : OK

ExitCode  : 1077
Name      : AppMgmt
ProcessId : 0
StartMode : Manual
State     : Stopped
Status    : OK

...

说明
-----------
此命令显示名为 Fabrikam 的计算机上的服务信息。它通过使用 Credential 参数来指定用户帐户名，使用该参数将显示一个对话框供您输入对应的密码。

另请参阅

  • Invoke-WmiMethod
  • Remove-WmiObject
  • Set-WmiInstance
  • Get-WSManInstance
  • Invoke-WSManAction
  • New-WSManInstance
  • Remove-WSManInstance


Get-WSManCredSSP

获取客户端的与凭据安全服务提供程序相关的配置。

语法

Get-WSManCredSSP [<CommonParameters>]

说明

Get-WSManCredSPP cmdlet 用于获取客户端和服务器的与凭据安全服务提供程序相关的配置。其输出指示凭据安全服务提供程序 (CredSSP) 已启用还是已禁用。它还显示 CredSSP 的 AllowFreshCredentials 策略的配置信息。使用 CredSSP 身份验证时，用户凭据将传递给要进行身份验证的远程计算机。这种身份验证用于从一个远程会话中创建另一个远程会话的命令。例如，如果要在远程计算机上运行后台作业，可以使用这种身份验证。

该 cmdlet 将执行以下操作：

- 获取客户端上的 WS-Management CredSSP 设置 (<localhost|computername>\Client\Auth\CredSSP)。

- 获取 Windows CredSSP 策略设置 AllowFreshCredentials。

- 获取服务器上的 WS-Management CredSSP 设置 (<localhost|computername>\Service\Auth\CredSSP)。

注意：CredSSP 身份验证将本地计算机中的用户凭据委派给远程计算机。此操作增加了远程操作的安全风险。如果远程计算机的安全受到威胁，则在向该计算机传递凭据时，可使用这些凭据来控制网络会话。

若要禁用 CredSSP 身份验证，请使用 Disable-WSManCredSSP cmdlet。若要启用 CredSSP 身份验证，请使用 Enable-WSManCredSSP cmdlet。

参数

<CommonParameters>

此 cmdlet 支持通用参数：-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。有关详细信息，请参阅 about_Commonparameters.

输入和输出

输入类型是指可通过管道传递给 cmdlet 的对象的类型。返回类型是指 Cmdlet 所返回对象的类型。

输入 | None 此 cmdlet 不接受任何输入。
输出 | None 此 cmdlet 将不产生任何输出。

示例 1

C:\PS>get-wsmancredssp

说明
-----------
此命令显示客户端和服务器的 CredSSP 配置信息。

其输出确定此计算机是否配置了 CredSSP。

如果该计算机配置了 CredSSP，则输出如下：

“已将计算机配置为允许将新凭据委派到下列目标: wsman/server02.accounting.fabrikam.com”

如果该计算机未配置 CredSSP，则输出如下：

“未将计算机配置为允许委派新凭据。”

另请参阅

  • Connect-WSMan
  • Disable-WSManCredSSP
  • Disconnect-WSMan
  • Enable-WSManCredSSP
  • Get-WSManInstance
  • Invoke-WSManAction
  • New-WSManInstance
  • New-WSManSessionOption
  • Remove-WSManInstance
  • Set-WSManInstance
  • Set-WSManQuickConfig
  • Test-WSMan


Get-WSManInstance

显示由资源 URI 指定的资源实例的管理信息。

语法

Get-WSManInstance -SelectorSet <hashtable> [-ApplicationName <string>] [-ComputerName <string>] [-Credential <PSCredential>] [-Fragment <string>] [-Port <int>] [-UseSSL] [-ResourceURI] <Uri> [-Authentication <Authentication>] [-Dialect <Uri>] [-OptionSet <hashtable>] [-SessionOption <hashtable>] [<CommonParameters>]

Get-WSManInstance [-ApplicationName <string>] [-BasePropertiesOnly <switch>] [-ComputerName <string>] [-Credential <PSCredential>] [-Enumerate] [-filter <string>] [-Port <int>] [-References <switch>] [-ReturnType <string>] [-Shallow <switch>] [-UseSSL] [-ResourceURI] <Uri> [-Authentication <Authentication>] [-Dialect <Uri>] [-OptionSet <hashtable>] [-SessionOption <hashtable>] [<CommonParameters>]

Get-WSManInstance -ConnectionURI <Uri> -SelectorSet <hashtable> [-Fragment <string>] [-ResourceURI] <Uri> [-Authentication <Authentication>] [-Dialect <Uri>] [-OptionSet <hashtable>] [-SessionOption <hashtable>] [<CommonParameters>]

Get-WSManInstance -ConnectionURI <Uri> [-BasePropertiesOnly <switch>] [-Enumerate] [-filter <string>] [-References <switch>] [-ReturnType <string>] [-Shallow <switch>] [-ResourceURI] <Uri> [-Authentication <Authentication>] [-Dialect <Uri>] [-OptionSet <hashtable>] [-SessionOption <hashtable>] [<CommonParameters>]

说明

Get-WSManInstance cmdlet 用于检索由资源 URI 指定的管理资源的实例。检索到的信息可以是一个复杂的 XML 信息集（对象），也可以是一个简单值。此 cmdlet 等效于标准 WS-Management Get 命令。

此 cmdlet 使用 WS-Management 连接/传输层来检索信息。

参数

-ApplicationName <string>

指定连接中的应用程序名称。ApplicationName 参数的默认值为“WSMAN”。远程终结点的完整标识符采用以下格式：

<transport>://<server>:<port>/<ApplicationName>

例如：

http://server01:8080/WSMAN

承载会话的 Internet 信息服务 (IIS) 将请求连同此终结点转发到指定的应用程序。默认设置“WSMAN”适用于大多数使用情况。当有许多计算机建立了与运行 Windows PowerShell 的一台计算机的远程连接时，需要用到此参数。这种情况下，IIS 托管 Web Services for Management (WS-Management)，以保证效率。

是否为必需？ | false
位置？ | named
默认值 | wsman
是否接受管道输入？ | false
是否接受通配符？ | false

-Authentication <Authentication>

指定服务器上要使用的身份验证机制。可能值为：

- Basic：Basic 是一种方案，在该方案中，用户名和密码以明文形式发送到服务器或代理。

- Default：使用 WS-Management 协议实现的身份验证方法。这是默认设置。

- Digest：Digest 是一种质询响应方案，该方案将服务器指定的数据字符串用于质询。

- Kerberos：客户端计算机和服务器使用 Kerberos 证书相互进行身份验证。

- Negotiate：Negotiate 是一种质询响应方案，该方案与服务器或代理协商以确定要使用的身份验证方案。例如，此参数值允许进行协商以确定是使用 Kerberos 协议还是 NTLM。

- CredSSP：使用凭据安全服务提供程序 (CredSSP) 身份验证，这种方法允许用户委派凭据。此选项用于这样的命令：在一台远程计算机上运行，但从其他远程计算机上收集数据或者在其他远程计算机上运行其他命令。

注意：CredSSP 将本地计算机中的用户凭据委派给远程计算机。此操作增加了远程操作的安全风险。如果远程计算机的安全受到威胁，则在向该计算机传递凭据时，可使用这些凭据来控制网络会话。

是否为必需？ | false
位置？ | named
默认值 | Default
是否接受管道输入？ | false
是否接受通配符？ | false

-BasePropertiesOnly <switch>

仅枚举属于 ResourceURI 参数指定的基类的属性。如果指定了 Shallow 参数，则此参数将不起任何作用。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-ComputerName <string>

指定要对其运行管理操作的计算机。值可以是完全限定的域名、NetBIOS 名称或 IP 地址。使用本地计算机名称、localhost 或点 (.)指定本地计算机。默认值为本地计算机。当远程计算机与用户位于不同的域时，必须使用完全限定的域名。可以通过管道将此参数的值传递给 cmdlet。

是否为必需？ | false
位置？ | named
默认值 | localhost
是否接受管道输入？ | false
是否接受通配符？ | false

-ConnectionURI <Uri>

指定连接终结点。此字符串的格式为：

<Transport>://<Server>:<Port>/<ApplicationName>

以下字符串是此参数的格式正确的值：

http://Server01:8080/WSMAN

URI 必须完全限定。

是否为必需？ | true
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Credential <PSCredential>

指定有权执行此操作的用户帐户。默认值为当前用户。键入用户名，例如“User01”、“Domain01\User01”或“User@Domain.com”。或者，输入 PSCredential 对象，例如由 Get-Credential cmdlet 返回的对象。键入用户名时，将会提示您键入密码。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Dialect <Uri>

指定在筛选器谓词中使用的方言。这可以是远程服务支持的任何方言。以下别名可用于方言 URI：

- WQL：http://schemas.microsoft.com/wbem/wsman/1/WQL

- Selector：http://schemas.microsoft.com/wbem/wsman/1/wsman/SelectorFilter

- Association：http://schemas.dmtf.org/wbem/wsman/1/cimbinding/associationFilter

是否为必需？ | false
位置？ | named
默认值 | http://schemas.microsoft.com/wbem/wsman/1/WQL
是否接受管道输入？ | false
是否接受通配符？ | false

-Enumerate

返回管理资源的所有实例。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-filter <string>

指定枚举的筛选器表达式。如果使用此参数，则还必须指定 Dialect 参数。

此参数的有效值取决于 Dialect 参数中指定的方言。例如，如果 Dialect 参数设置为 WQL，则 Filter 参数必须包含一个字符串，而该字符串又必须包含有效的 WQL 查询，如下面的查询：

“Select * from Win32_Service where State != Running”

如果 Dialect 参数设置为 Association，则 Filter 参数必须包含一个字符串，而该字符串又必须包含有效的筛选器，如下面的筛选器：

-filter:Object=EPR[;AssociationClassName=AssocClassName][;ResultClassName=ClassName][;Role=RefPropertyName][;ResultRole=RefPropertyName]}

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Fragment <string>

指定实例中要针对指定操作更新或检索的部分。例如，要获取后台处理程序服务的状态，请指定“-Fragment Status”。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-OptionSet <hashtable>

将一组开关传递到服务以修改或调整请求的性质。这些与命令行 shell 中使用的开关的类似之处在于，它们也是特定于服务的。可以指定任意多个选项。

以下示例演示分别为 a、b 和 c 参数传递值 1、2 和 3 的语法：

-OptionSet @{a=1;b=2;c=3}

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | true (ByValue, ByPropertyName)
是否接受通配符？ | false

-Port <int>

指定要在客户端连接到 WinRM 服务时使用的端口。如果传输方式为 HTTP，则默认端口为 80。如果传输方式为 HTTPS，则默认端口为 443。使用 HTTPS 作为传输方式时，ComputerName 参数的值必须与服务器的证书公用名 (CN) 匹配。但是，如果 SkipCNCheck 参数指定为 SessionOption 参数的一部分，则服务器的证书公用名不必与服务器的主机名称相匹配。SkipCNCheck 参数应仅用于受信任的计算机。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-References <switch>

指示应检索关联实例（而不是关联的实例）。仅当 Dialect 参数设置为值“Association”时才能使用此参数。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-ResourceURI <Uri>

包含资源类或实例的统一资源标识符 (URI)。URI 用于标识特定类型的资源，例如，计算机上的磁盘或进程。

URI 由前缀和资源的路径组成。例如：

http://schemas.microsoft.com/wbem/wsman/1/wmi/root/cimv2/Win32_LogicalDisk

http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2/CIM_NumericSensor

是否为必需？ | true
位置？ | 1
默认值 |
是否接受管道输入？ | true (ByValue, ByPropertyName)
是否接受通配符？ | false

-ReturnType <string>

指定要返回的数据类型。有效值包括：

Object（默认值）

EPR

ObjectAndEPR

如果指定了 Object，或者未使用此参数，则将仅返回对象。如果指定了 EPR（终结点引用），则仅返回对象的终结点引用。终结点引用包含有关实例的资源 URI 和选择器的信息。如果指定了 ObjectAndEPR，则将同时返回对象及其关联的终结点引用。

是否为必需？ | false
位置？ | named
默认值 | Object
是否接受管道输入？ | false
是否接受通配符？ | false

-SelectorSet <hashtable>

指定一组用于选择特定管理资源实例的值对。当相应资源存在多个实例时，将使用 SelectorSet 参数。SelectorSet 参数的值必须为哈希表。

以下示例说明如何为此参数输入值：

-SelectorSet @{Name="WinRM";ID="yyy"}

是否为必需？ | true
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-SessionOption <hashtable>

为 WS-Management 会话定义一组扩展选项。输入使用 New-WSManSessionOption cmdlet 创建的 SessionOption 对象。有关可用选项的详细信息，请参阅 New-WSManSessionOption。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Shallow <switch>

导致仅返回资源 URI 中指定的基类的实例。如果未指定此开关，则将返回 URI 及其所有派生类中指定的基类的实例。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-UseSSL

指定应使用安全套接字层 (SSL) 协议来建立与远程计算机的连接。默认情况下，不使用 SSL。

WS-Management 加密通过网络传输的所有 Windows PowerShell 内容。利用 UseSSL 参数，可以指定 HTTPS（而非 HTTP）的额外保护措施。如果在连接端口上 SSL 不可用并且指定了此参数，则命令将失败。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

<CommonParameters>

此 cmdlet 支持通用参数：-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。有关详细信息，请参阅 about_Commonparameters.

输入和输出

输入类型是指可通过管道传递给 cmdlet 的对象的类型。返回类型是指 Cmdlet 所返回对象的类型。

输入 | None 此命令不接受任何输入。
输出 | System.Xml.XmlElement Get-WSManInstance cmdlet 生成一个 XMLElement 对象。

示例 1

C:\PS>get-wsmaninstance wmicimv2/win32_service -selectorset @{name="winrm"} -computername server01

xsi                     : http://www.w3.org/2001/XMLSchema-instance
p                       : http://schemas.microsoft.com/wbem/wsman/1/wmi/root/cimv2/Win32_Service
cim                     : http://schemas.dmtf.org/wbem/wscim/1/common
type                    : p:Win32_Service_Type
lang                    : en-US
AcceptPause             : false
AcceptStop              : true
Caption                 : Windows Remote Management (WS-Management)
CheckPoint              : 0
CreationClassName       : Win32_Service
Description             : Windows Remote Management (WinRM) service implements the WS-Management protocol for remote
                          management. WS-Management is a standard web services protocol used for remote software and
                          hardware management. The WinRM service listens on the network for WS-Management requests
                          and processes them. The WinRM Service needs to be configured with a listener using the
                          winrm.cmd command line tool or through Group Policy in order for it to listen over the
                          network. The WinRM service provides access to WMI data and enables event collection. Event
                          collection and subscription to events require that the service is running. WinRM messages
                          use HTTP and HTTPS as transports. The WinRM service does not depend on IIS but is
                          preconfigured to share a port with IIS on the same machine.  The WinRM service reserves the
                          /wsman URL prefix. To prevent conflicts with IIS, administrators should ensure that any
                          websites hosted on IIS do not use the /wsman URL prefix.
DesktopInteract         : false
DisplayName             : Windows Remote Management (WS-Management)
ErrorControl            : Normal
ExitCode                : 0
InstallDate             : InstallDate
Name                    : winrm
PathName                : C:\Windows\System32\svchost.exe -k NetworkService
ProcessId               : 948
ServiceSpecificExitCode : 0
ServiceType             : Share Process
Started                 : true
StartMode               : Auto
StartName               : NT AUTHORITY\NetworkService
State                   : Running
Status                  : OK
SystemCreationClassName : Win32_ComputerSystem
SystemName              : SERVER01
TagId                   : 0
WaitHint                : 0

说明
-----------
此命令将返回 Windows Management Instrumentation (WMI) 公开的有关 server01 远程计算机上的 WinRM 服务的全部信息。

示例 2

C:\PS>get-wsmaninstance wmicimv2/win32_service -selectorset @{name="spooler"} -fragment status -computername server01

XmlFragment=OK

说明
-----------
此命令只返回 server01 远程计算机上后台处理程序服务的状态。

示例 3

C:\PS>get-wsmaninstance -enumerate wmicimv2/win32_process

OSName                     : Microsoft Windows Vista Ultimate |C:\Windows|\Device\Harddisk0\Partition3
OtherOperationCount        : 11441
OtherTransferCount         : 428570
PageFaults                 : 27346
PageFileUsage              : 16428
ParentProcessId            : 604
PeakPageFileUsage          : 17588
PeakVirtualSize            : 93876224
PeakWorkingSetSize         : 12472
Priority                   : 8
PrivatePageCount           : 16822272
ProcessId                  : 1160
QuotaNonPagedPoolUsage     : 14
QuotaPagedPoolUsage        : 126
QuotaPeakNonPagedPoolUsage : 16
QuotaPeakPagedPoolUsage    : 159
ReadOperationCount         : 29568
ReadTransferCount          : 1660581404
SessionId                  : 0
Status                     : Status
TerminationDate            : TerminationDate
ThreadCount                : 23
UserModeTime               : 763156892
VirtualSize                : 80846848
WindowsVersion             : 6.0.6001
WorkingSetSize             : 11624448
WriteOperationCount        : 1913
WriteTransferCount         : 6825768

xsi                        : http://www.w3.org/2001/XMLSchema-instance
p                          : http://schemas.microsoft.com/wbem/wsman/1/wmi/root/cimv2/Win32_Process
cim                        : http://schemas.dmtf.org/wbem/wscim/1/common
type                       : p:Win32_Process_Type
lang                       : en-US
Caption                    : svchost.exe
CommandLine                : C:\Windows\System32\svchost.exe -k LocalSystemNetworkRestricted
CreationClassName          : Win32_Process
CreationDate               : CreationDate
CSCreationClassName        : Win32_ComputerSystem
CSName                     : COMPUTER01
Description                : svchost.exe
ExecutablePath             : C:\Windows\System32\svchost.exe
ExecutionState             : ExecutionState
Handle                     : 1192
HandleCount                : 832

...

说明
-----------
此命令将返回本地计算机上 WMI Win32_Process 类的所有实例。

示例 4

C:\PS>get-wsmaninstance -enumerate wmicimv2/win32_service -returntype epr

xsi                     : http://www.w3.org/2001/XMLSchema-instance
p                       : http://schemas.microsoft.com/wbem/wsman/1/wmi/root/cimv2/Win32_Service
cim                     : http://schemas.dmtf.org/wbem/wscim/1/common
type                    : p:Win32_Service_Type
lang                    : en-US
AcceptPause             : false
AcceptStop              : false
Caption                 : Visual Studio 2008 Remote Debugger
CheckPoint              : 0
CreationClassName       : Win32_Service
Description             : Allows members of the Administrators group to remotely debug server applications using Visual
                           Studio 2008. Use the Visual Studio 2008 Remote Debugging Configuration Wizard to enable this
                           service.
DesktopInteract         : false
DisplayName             : Visual Studio 2008 Remote Debugger
ErrorControl            : Ignore
ExitCode                : 1077
InstallDate             : InstallDate
Name                    : msvsmon90
PathName                : "C:\Program Files\Microsoft Visual Studio 9.0\Common7\IDE\Remote Debugger\x86\msvsmon.exe" /s
                          ervice msvsmon90
ProcessId               : 0
ServiceSpecificExitCode : 0
ServiceType             : Own Process
Started                 : false
StartMode               : Disabled
StartName               : LocalSystem
State                   : Stopped
Status                  : OK
SystemCreationClassName : Win32_ComputerSystem
SystemName              : COMPUTER01
TagId                   : 0
WaitHint                : 0

...

说明
-----------
此命令将返回对应于本地计算机上的所有服务的终结点引用。

示例 5

C:\PS>Get-WSManInstance -Enumerate wmicimv2/* -filter "select * from win32_service where StartMode = 'Auto' and State = 'Stopped'" -computername server01

xsi                     : http://www.w3.org/2001/XMLSchema-instance
p                       : http://schemas.microsoft.com/wbem/wsman/1/wmi/root/cimv2/Win32_Service
cim                     : http://schemas.dmtf.org/wbem/wscim/1/common
type                    : p:Win32_Service_Type
lang                    : en-US
AcceptPause             : false
AcceptStop              : false
Caption                 : Windows Media Center Service Launcher
CheckPoint              : 0
CreationClassName       : Win32_Service
Description             : Starts Windows Media Center Scheduler and Windows Media Center Receiver services
                          at startup if TV is enabled within Windows Media Center.
DesktopInteract         : false
DisplayName             : Windows Media Center Service Launcher
ErrorControl            : Ignore
ExitCode                : 0
InstallDate             : InstallDate
Name                    : ehstart
PathName                : C:\Windows\system32\svchost.exe -k LocalServiceNoNetwork
ProcessId               : 0
ServiceSpecificExitCode : 0
ServiceType             : Share Process
Started                 : false
StartMode               : Auto
StartName               : NT AUTHORITY\LocalService
State                   : Stopped
Status                  : OK
SystemCreationClassName : Win32_ComputerSystem
SystemName              : Server01
TagId                   : 0
WaitHint                : 0

...

说明
-----------
此命令列出 server01 远程计算机上符合以下条件的所有服务：

   - 服务的启动类型为“Automatic”。
   - 服务已停止。

示例 6

C:\PS>get-wsmaninstance winrm/config/listener -selectorset @{Address="*";Transport="http"}

cfg                   : http://schemas.microsoft.com/wbem/wsman/1/config/listener
xsi                   : http://www.w3.org/2001/XMLSchema-instance
lang                  : en-US
Address               : *
Transport             : HTTP
Port                  : 80
Hostname              :
Enabled               : true
URLPrefix             : wsman
CertificateThumbprint :
ListeningOn           : {100.0.0.1, 123.123.123.123, ::1, 2001:4898:0:fff:0:5efe:123.123.123.123...}

说明
-----------
此命令列出本地计算机上与选择器集中的条件相符的侦听器的 WS-Management 侦听器配置。

示例 7

C:\PS>get-wsmaninstance winrm/config/listener -selectorset @{Address="*";Transport="http"} -computername server01

cfg                   : http://schemas.microsoft.com/wbem/wsman/1/config/listener
xsi                   : http://www.w3.org/2001/XMLSchema-instance
lang                  : en-US
Address               : *
Transport             : HTTP
Port                  : 80
Hostname              :
Enabled               : true
URLPrefix             : wsman
CertificateThumbprint :
ListeningOn           : {100.0.0.1, 123.123.123.124, ::1, 2001:4898:0:fff:0:5efe:123.123.123.124...}

说明
-----------
此命令列出 server01 远程计算机上与选择器集中的条件相符的侦听器的 WS-Management 侦听器配置。

示例 8

C:\PS>Get-WSManInstance -Enumerate -Dialect association -filter "{Object=win32_service?name=winrm}" -res wmicimv2/*

xsi                       : http://www.w3.org/2001/XMLSchema-instance
p                         : http://schemas.microsoft.com/wbem/wsman/1/wmi/root/cimv2/Win32_ComputerSystem
cim                       : http://schemas.dmtf.org/wbem/wscim/1/common
type                      : p:Win32_ComputerSystem_Type
lang                      : en-US
AdminPasswordStatus       : 1
AutomaticManagedPagefile  : true
AutomaticResetBootOption  : true
AutomaticResetCapability  : true
BootOptionOnLimit         : BootOptionOnLimit
BootOptionOnWatchDog      : BootOptionOnWatchDog
BootROMSupported          : true
BootupState               : Normal boot
Caption                   : SERVER01
ChassisBootupState        : 3
CreationClassName         : Win32_ComputerSystem
CurrentTimeZone           : -480
DaylightInEffect          : false
Description               : AT/AT COMPATIBLE
DNSHostName               : server01
Domain                    : site01.corp.fabrikam.com
DomainRole                : 1
EnableDaylightSavingsTime : true
FrontPanelResetStatus     : 2
InfraredSupported         : false
InstallDate               : InstallDate
KeyboardPasswordStatus    : 2
LastLoadInfo              : LastLoadInfo
Manufacturer              : Dell Inc.
Model                     : OptiPlex 745
Name                      : SERVER01
NameFormat                : NameFormat
NetworkServerModeEnabled  : true
NumberOfLogicalProcessors : 2
NumberOfProcessors        : 1
OEMStringArray            : www.dell.com
PartOfDomain              : true
PauseAfterReset           : -1
PCSystemType              : 5
PowerManagementSupported  : PowerManagementSupported
PowerOnPasswordStatus     : 1
PowerState                : 0
PowerSupplyState          : 3
PrimaryOwnerContact       : PrimaryOwnerContact
PrimaryOwnerName          : testuser01
ResetCapability           : 1
ResetCount                : -1
ResetLimit                : -1
Roles                     : {LM_Workstation, LM_Server, SQLServer, NT}
Status                    : OK
SystemStartupDelay        : SystemStartupDelay
SystemStartupSetting      : SystemStartupSetting
SystemType                : X86-based PC
ThermalState              : 3
TotalPhysicalMemory       : 3217760256
UserName                  : FABRIKAM\testuser01
WakeUpType                : 6
Workgroup                 : Workgroup

xsi                     : http://www.w3.org/2001/XMLSchema-instance
p                       : http://schemas.microsoft.com/wbem/wsman/1/wmi/root/cimv2/Win32_Service
cim                     : http://schemas.dmtf.org/wbem/wscim/1/common
type                    : p:Win32_Service_Type
lang                    : en-US
AcceptPause             : false
AcceptStop              : false
Caption                 : Remote Procedure Call (RPC)
CheckPoint              : 0
CreationClassName       : Win32_Service
Description             : Serves as the endpoint mapper and COM Service Control Manager. If this service is stopped
                          or disabled, programs using COM or Remote Procedure Call (RPC) services will not function
                          properly.
DesktopInteract         : false
DisplayName             : Remote Procedure Call (RPC)
ErrorControl            : Normal
ExitCode                : 0
InstallDate             : InstallDate
Name                    : RpcSs
PathName                : C:\Windows\system32\svchost.exe -k rpcss
ProcessId               : 1100
ServiceSpecificExitCode : 0
ServiceType             : Share Process
Started                 : true
StartMode               : Auto
StartName               : NT AUTHORITY\NetworkService
State                   : Running
Status                  : OK
SystemCreationClassName : Win32_ComputerSystem
SystemName              : SERVER01
TagId                   : 0
WaitHint                : 0

xsi                     : http://www.w3.org/2001/XMLSchema-instance
p                       : http://schemas.microsoft.com/wbem/wsman/1/wmi/root/cimv2/Win32_SystemDriver
cim                     : http://schemas.dmtf.org/wbem/wscim/1/common
type                    : p:Win32_SystemDriver_Type
lang                    : en-US
AcceptPause             : false
AcceptStop              : true
Caption                 : HTTP
CreationClassName       : Win32_SystemDriver
Description             : HTTP
DesktopInteract         : false
DisplayName             : HTTP
ErrorControl            : Normal
ExitCode                : 0
InstallDate             : InstallDate
Name                    : HTTP
PathName                : C:\Windows\system32\drivers\HTTP.sys
ServiceSpecificExitCode : 0
ServiceType             : Kernel Driver
Started                 : true
StartMode               : Manual
StartName               :
State                   : Running
Status                  : OK
SystemCreationClassName : Win32_ComputerSystem
SystemName              : SERVER01
TagId                   : 0

说明
-----------
此命令获取与指定实例 (winrm) 相关的关联的实例。

重要说明：您必须将筛选器用引号括起，如示例所示。

示例 9

C:\PS>Get-WSManInstance -Enumerate -Dialect association -References -filter "{Object=win32_service?name=winrm}" -res wmicimv2/*

说明
-----------
此命令获取与指定实例 (winrm) 相关的关联实例。因为 Dialect 参数设置为“association”并且使用了 Reference 参数，所以此命令将返回关联实例而不是关联的实例。

重要说明：您必须将筛选器用引号括起，如示例所示。

另请参阅

  • Connect-WSMan
  • Disable-WSManCredSSP
  • Disconnect-WSMan
  • Enable-WSManCredSSP
  • Get-WSManCredSSP
  • Invoke-WSManAction
  • New-WSManInstance
  • New-WSManSessionOption
  • Remove-WSManInstance
  • Set-WSManInstance
  • Set-WSManQuickConfig
  • Test-WSMan


Group-Object

指定的属性包含相同值的组对象。

语法

Group-Object [-AsHashTable] [-AsString] [[-Property] <Object[]>] [-CaseSensitive] [-Culture <string>] [-InputObject <psobject>] [-NoElement] [<CommonParameters>]

说明

Group-Object cmdlet 基于指定属性的值以组的形式显示对象。Group-Object 返回一个表，其中每个属性值对应一行，同时一个列显示具有该值的项目数。

如果指定多个属性，Group-Object 首先根据第一个属性的值对它们进行分组，然后在每个属性组内，根据下一个属性的值进行分组。

参数

-AsHashTable

以哈希表形式返回组。哈希表的键是对象分组所根据的属性值。哈希表的值是具有该属性值的对象。

AsHashTable 参数通过自身返回每个哈希表，其中每个键是分组对象的实例。当与 AsString 参数一起使用时，哈希表中的键是字符串。

是否为必需？ | false
位置？ | named
默认值 | GroupInfo object
是否接受管道输入？ | false
是否接受通配符？ | false

-AsString

将哈希表键转换为字符串。默认情况下，哈希表键是分组对象的实例。此参数只有在与 AsHashTable 参数一起使用时才有效。

是否为必需？ | false
位置？ | named
默认值 | GroupInfo objects
是否接受管道输入？ | false
是否接受通配符？ | false

-CaseSensitive

使分组区分大小写。如果没有此参数，组中对象的属性值可能具有不同的大小写。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Culture <string>

指定比较字符串时要使用的区域性。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-InputObject <psobject>

指定要分组的对象。输入一个包含对象的变量，或键入可获取对象的命令或表达式。

使用 InputObject 参数将对象集合提交到 Group-Object 时，Group-Object 会收到表示该集合的一个对象。结果，它会创建包含该对象为其成员的单个组。

若要将集合中的对象分组，请通过管道将对象传递到 Group-Object。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | true (ByValue)
是否接受通配符？ | false

-NoElement

从结果中忽略某个组的成员。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Property <Object[]>

指定用于分组的属性。对象将基于指定属性的值排列到组中。

Property 参数的值可以是新的计算属性。若要创建计算属性，请创建具有 Expression 键的哈希表，该键指定字符串或脚本块值。

是否为必需？ | false
位置？ | 1
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

<CommonParameters>

此 cmdlet 支持通用参数：-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。有关详细信息，请参阅 about_Commonparameters.

输入和输出

输入类型是指可通过管道传递给 cmdlet 的对象的类型。返回类型是指 Cmdlet 所返回对象的类型。

输入 | System.Management.Automation.PSObject 可以通过管道将任何对象传递给 Group-Object。
输出 | Microsoft.PowerShell.Commands.GroupInfo 或 System.Collections.Hashtable 使用 AsHashTable 参数时，Group-Object 会返回哈希表。否则，它返回 GroupInfo 对象。

说明

还可以使用格式化 cmdlet（如 Format-Table [m2] 和 Format-List [m2]）的 GroupBy 参数将对象分组。与 Group-Object（用于创建单个表，其中每个属性值对应一行）不同，GroupBy 参数为每个属性值创建一个表，其中具有该属性值的每个项目对应一行。

Group-Object 不要求被分组的对象属于相同的 Microsoft .NET Framework 类型。对不同 .NET Framework 类型的对象分组时，Group-Object 使用以下规则：

-- 相同属性名称和类型：如果对象的属性具有指定名称，且属性值具有相同的 .NET Framework 类型，则使用相同类型的对象适用的规则对属性值进行分组。

-- 相同属性名称，不同类型：如果对象的属性具有指定名称，但在不同的对象中属性值具有不同的 .NET Framework 类型，则 Group-Object 使用该属性第一次出现时的 .NET Framework 类型作为该属性组的 .NET Framework 类型。对象具有不同类型的属性时，属性值将转换为该组的类型。如果类型转换失败，则该对象将不包括在该组中。

-- 缺少属性：不具有指定属性的对象将被视为不可分组。不可分组的对象出现在名为 AutomationNull.Value 的组中最后 GroupInfo 对象的输出中。

示例 1

C:\PS>get-childitem *.doc | group-object -property length

说明
-----------
此命令获取当前位置中具有 .doc 扩展名的文件，并按大小分组。

示例 2

C:\PS>get-childitem | sort-object -property extension | group-object -property extension

说明
-----------
此命令获取当前位置中的文件，按文件扩展名排序，然后按文件扩展名分组。请注意，文件是在分组之前进行排序的。

示例 3

C:\PS>1..35 | group-object -property {$_ % 2},{$_ % 3}

说明
-----------
此示例演示了如何将脚本块用作 Property 参数的值。

此命令显示从 1 到 35 的整数，并按除以 2 或 3 后的余数分组。

示例 4

C:\PS>$events = get-eventlog -logname system -newest 1000

C:\PS> $events | group-object -property eventID

Count Name                      Group
----- ----                      -----
   44 Information               {System.Diagnostics.EventLogEntry,
    5 Error                     {System.Diagnostics.EventLogEntry,
    1 Warning                   {System.Diagnostics.EventLogEntry}

说明
-----------
这些命令显示系统事件日志中的 1,000 个最新条目，它们按事件 ID 分组。

第一个命令使用 Get-EventLog cmdlet 检索事件和赋值运算符 (=) 以将其保存在 $events 变量中。

第二个命令使用管道运算符 (|) 将 $events 变量中的事件发送到 Group-Object cmdlet。该命令使用 Property 参数指定事件应根据其 EventID 属性的值进行分组。

在输出中，Count 列表示每组中的条目数，Name 列表示用于定义一个组的 EventID 值，而 Group 列表示每组中的对象。

示例 5

C:\PS>get-process | group-object -property priorityclass

Count Name                Group
----- ----                -----
   55 Normal              {System.Diagnostics.Process (AdtAgent), System.Diagnostics.Process (alg), System.Dia...
    1                     {System.Diagnostics.Process (Idle)}
    3 High                {System.Diagnostics.Process (Newproc), System.Diagnostics.Process (winlogon), System.D...
    2 BelowNormal         {System.Diagnostics.Process (winperf),

C:\PS>get-process | group-object -property company -noelement
Count Name
----- ----
   55 Normal
    1
    3 High
    2 BelowNormal

说明
-----------
此示例演示了 NoElement 参数的效果。这些命令将计算机上的进程按优先级类分组。

第一个命令使用 Get-Process cmdlet 来获取计算机上的进程。它使用管道运算符 (|) 将结果发送到 Group-Object，其根据进程的 PriorityClass 属性的值将对象分组。

第二个命令与第一个相同，但是它使用 NoElement 参数将组的成员从输出中清除。结果是一个仅包含计数和属性值名称的表。

结果显示在下面的示例输出中。

示例 6

C:\PS>get-eventlog -logname system -newest 1000 | group-object -property {$_.TimeWritten - $_.TimeGenerated}

说明
-----------
此命令演示了如何以脚本块形式提供 Property 参数的值。

此命令显示系统事件日志中最新的 1,000 个条目，它们按从生成到写入日志之间的时间进行分组。

该命令使用 Get-EventLog cmdlet 获取事件日志条目。它使用管道运算符 (|) 将条目发送到 Group-Object cmdlet。Property 参数的值被指定为一个脚本块（大括号内的表达式）。计算该脚本块的结果是日志条目从生成到写入日志之间的时间。该值用于对 1000 个最新的事件进行分组。

示例 7

C:\PS>get-childitem | group-object extension -noelement

Count Name
----- ----
   21
   82 .txt
    9 .cmd
    5 .log
   12 .xml
    5 .htm
   36 .ps1
    1 .psc1
    3 .exe
    6 .csv
    1 .psd1
    2 .bat

说明
-----------
此命令按文件扩展名对当前目录中的项目分组。它使用 NoElement 参数忽略组的成员。

结果显示在下面的示例输出中。

示例 8

C:\PS>"a", "b", "c", "c", "d" | get-unique

a
b
c
d

C:\PS> "a", "b", "c", "c", "d" | group-object -noelement | where {$_.Count -gt 1}
Count Name
----- ----
    2 c

C:\PS> get-process | group-object -property Name -noelement | where {$_.count -gt 1}
Count Name
----- ----
    2 csrss
    5 svchost
    2 winlogon
    2 wmiprvse

说明
-----------
此示例演示了如何查找集合中的唯一和非唯一（重复）属性值。

第一个命令通过管道将某个数组传递到 Get-Unique cmdlet 来获取该数组的唯一元素。

第二个命令获取某个数组的非唯一元素。它通过管道将该数组传递到 Group-Object cmdlet，其根据值将对象分组。所得到的组将通过管道传递到 Where-Object cmdlet，其选择具有包含多个成员的组的对象。

第三个命令演示了此技术的实际用途。它使用相同的方法查找计算机上具有相同进程名称的进程。

结果显示在下面的示例输出中。

示例 9

C:\PS>$a = get-command get-*, set-* -type cmdlet | group-object -property verb -ashashtable -asstring

C:\PS> $a

Name    Value
----    -----
Get     {Get-PSCallStack, Get-PSBreakpoint, Get-PSDrive, Get-PSSession...}
Set     {Set-Service, Set-StrictMode, Set-PSDebug, Set-PSSessionConfiguration...}

C:\PS> $a.get

CommandType     Name                 Definition
-----------     ----                 ----------
Cmdlet          Get-PSCallStack      Get-PSCallStack [-Verbose] [-Debug] [-ErrorAction <ActionPrefer...
Cmdlet          Get-PSBreakpoint     Get-PSBreakpoint [[-Id] <Int32[]>] [-Verbose] [-Debug] [-ErrorA...
Cmdlet          Get-PSDrive          Get-PSDrive [[-Name] <String[]>] [-Scope <String>] [-PSProvider...
...

说明
-----------
此示例使用 AsHashTable 和 AsString 参数在哈希表中返回组，即以键-值对集合的形式。

在所得的哈希表中，每个属性值是一个键，而组元素是值。因为每个键是哈希表对象的一个属性，所以可以使用点标记来显示这些值。

第一个命令获取会话中的 Get 和 Set cmdlet，将它们按谓词分组，以哈希表形式返回这些组，然后将该哈希表保存在 $a 变量中。

第二个命令显示 $a 变量中的哈希表。有两个键-值对，一个对应 Get cmdlet，一个对应 Set cmdlet。

第三个命令使用点标记显示 $a 中的 Get 键的值。这些值是 CmdletInfo 对象。AsString 参数不会将组中的对象转换为字符串。


Import-Alias

从文件导入别名列表。

语法

Import-Alias [-Path] <string> [-Force] [-PassThru] [-Scope <string>] [-Confirm] [-WhatIf] [<CommonParameters>]

说明

Import-Alias cmdlet 可以从文件导入别名列表。

参数

-Force

允许该 cmdlet 导入已定义的只读别名。可以使用以下命令显示有关 currently-defined 别名的信息：

get-alias | Select-Object name,Options

如果相应的别名是只读的，则 Options 属性的值将包括“ReadOnly”。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-PassThru

返回一个表示别名的对象。默认情况下，此 cmdlet 将不产生任何输出。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Path <string>

指定包含导出的别名信息的文件的路径。允许使用通配符，但它们必须解析为单个名称。

是否为必需？ | true
位置？ | 1
默认值 |
是否接受管道输入？ | true (ByValue, ByPropertyName)
是否接受通配符？ | false

-Scope <string>

指定别名要导入的作用域。有效值包括“Global”、“Local”、“Script”或者相对于当前作用域的数字（0 到作用域数，其中 0 是指当前作用域，1 是指其父作用域）。默认值为“Local”。有关详细信息，请参阅 about_Scopes。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Confirm

在执行命令之前提示您进行确认。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-WhatIf

描述如果执行该命令会发生什么情况（无需实际执行该命令）。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

<CommonParameters>

此 cmdlet 支持通用参数：-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。有关详细信息，请参阅 about_Commonparameters.

输入和输出

输入类型是指可通过管道传递给 cmdlet 的对象的类型。返回类型是指 Cmdlet 所返回对象的类型。

输入 | System.String 可以通过管道将包含路径的字符串传递给 Import-Alias。
输出 | None 或 System.Management.Automation.AliasInfo 如果使用 Passthru 参数，则 Import-Alias 返回一个表示别名的 System.Management.Automation.AliasInfo 对象。否则，此 cmdlet 将不产生任何输出。

示例 1

C:\PS>import-alias test.txt

说明
-----------
此命令从名为 test.txt 的文件中导入别名信息。

另请参阅

  • Export-Alias
  • Get-Alias
  • New-Alias
  • Set-Alias


Import-Clixml

导入 CLIXML 文件，并在 Windows PowerShell 中创建相应的对象。

语法

Import-Clixml [-Path] <string[]> [<CommonParameters>]

说明

Import-Clixml cmdlet 导入包含表示 Microsoft .NET Framework 对象的数据的 CLIXML 文件，并在 Windows PowerShell 中创建这些对象。

参数

-Path <string[]>

指定要转换成 Windows PowerShell 对象的 XML 文件的位置。

是否为必需？ | true
位置？ | 1
默认值 |
是否接受管道输入？ | true (ByValue, ByPropertyName)
是否接受通配符？ | false

<CommonParameters>

此 cmdlet 支持通用参数：-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。有关详细信息，请参阅 about_Commonparameters.

输入和输出

输入类型是指可通过管道传递给 cmdlet 的对象的类型。返回类型是指 Cmdlet 所返回对象的类型。

输入 | System.String 可以通过管道将包含路径的字符串传递给 Import-Clixml。
输出 | PSObject Import-Clixml 返回已从存储的 XML 文件进行反序列化的对象。

说明

在为一个参数指定多个值时，请使用逗号分隔这些值。例如，“<参数名> <值 1>, <值 2>”。

示例 1

C:\PS>get-process | export-clixml pi.xml

C:\PS> $processes = import-clixml pi.xml

说明
-----------
此命令使用 Export-Clixml cmdlet 保存 Get-Process 所返回的进程信息的序列化副本。然后，它使用 Import-Clixml 检索该序列化文件的内容，并重新创建存储于 $processes 变量中的对象。


Import-Counter

导入性能计数器日志文件（.blg、.csv、.tsv）并创建表示日志中的每个计数器样本的对象。

语法

Import-Counter [-Path] <string[]> [-Counter <string[]>] [-EndTime <DateTime>] [-MaxSamples <Int64>] [-StartTime <DateTime>] [<CommonParameters>]

Import-Counter [-Path] <string[]> -ListSet <string[]> [<CommonParameters>]

Import-Counter [-Path] <string[]> -Summary <switch> [<CommonParameters>]

说明

Import-Counter cmdlet 从性能计数器日志文件中导入性能计数器数据并为文件中的每个计数器样本创建对象。它创建的 PerformanceCounterSampleSet 对象与 Get-Counter 在收集性能计数器数据时返回的对象相同。

可以从逗号分隔值 (.csv)、制表符分隔值 (.tsv) 和二进制性能日志 (.blg) 性能日志文件中导入数据。如果使用的是 .blg 文件，则可以在每个命令中导入多个文件（最多可导入 32 个不同文件）。并且可以使用 Import-Counter 的参数来筛选导入的数据。

此功能与 Get-Counter 和 Export-Counter 结合使用，使您能够在 Windows PowerShell 中收集、导出、导入、合并、筛选、操作和重新导出性能计数器数据。

参数

-Counter <string[]>

只导入指定的性能计数器的数据。默认情况下，Import-Counter 导入输入文件中的所有计数器的所有数据。输入一个或多个计数器路径。允许在路径的 Instance 部分中使用通配符。

每个计数器路径具有以下格式。请注意，ComputerName 值在路径中是必需的，即使在本地计算机上，也是如此。

"\\<ComputerName>\<CounterSet>(<Instance>)\<CounterName>"

例如：

"\\Server01\Processor(2)\% User Time"

"\Processor(*)\% Processor Time

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | true

-EndTime <DateTime>

只导入时间戳小于或等于指定的日期和时间的计数器数据。输入 DateTime 对象，例如 Get-Date cmdlet 创建的 DateTime 对象。默认情况下，Import-Counter 导入 Path 参数指定的文件中的所有计数器数据。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-ListSet <string[]>

获取导出的文件中所包含的性能计数器集。使用此参数的命令不会导入任何数据。

输入一个或多个计数器集名称。允许使用通配符。要获取文件中的所有计数器集，请键入“import-counter -listset *”。

是否为必需？ | true
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | true

-MaxSamples <Int64>

指定要导入的每个计数器的样本的最大数目。默认情况下，Get-Counter 导入 Path 参数指定的文件中的所有数据。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Path <string[]>

指定要导入的文件的文件路径。此参数是必需的。

输入您使用 Export-Counter cmdlet 导出的 .csv、.tsv 或 .blg 文件的路径和文件名。在每个命令中只能指定一个 .csv 或 .tsv 文件，但可以指定多个 .blg 文件（最多 32 个）。还可以将文件路径字符串（引号中）通过管道传送到 Import-Counter。

是否为必需？ | true
位置？ | 2
默认值 |
是否接受管道输入？ | true (ByValue)
是否接受通配符？ | true

-StartTime <DateTime>

只导入时间戳大于或等于指定的日期和时间的计数器数据。输入 DateTime 对象，例如 Get-Date cmdlet 创建的 DateTime 对象。默认情况下，Import-Counter 导入 Path 参数指定的文件中的所有计数器数据。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-摘要 <switch>

获取导入的数据的摘要，而不是获取各个计数器数据样本。

是否为必需？ | true
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

<CommonParameters>

此 cmdlet 支持通用参数：-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。有关详细信息，请参阅 about_Commonparameters.

输入和输出

输入类型是指可通过管道传递给 cmdlet 的对象的类型。返回类型是指 Cmdlet 所返回对象的类型。

输入

System.String

可以将性能计数器日志路径通过管道传送到 Import-Counter。

输出

Microsoft.PowerShell.Commands.GetCounter.PerformanceCounterSampleSet, Microsoft.PowerShell.Commands.GetCounter.CounterSet, Microsoft.PowerShell.Commands.GetCounter.CounterFileInfo

默认情况下，Import-Counter 返回 Microsoft.PowerShell.Commands.GetCounter.PerformanceCounterSampleSet。如果使用 ListSet 参数，则 Import-Command 返回 Microsoft.PowerShell.Commands.GetCounter.CounterSet 对象。如果使用 Summary 参数，则 Import-Command 返回 Microsoft.PowerShell.Commands.GetCounter.CounterFileInfo 对象。

说明

Import-Counter cmdlet 没有 ComputerName 参数。但是，如果已对计算机进行相应配置以进行 Windows PowerShell 远程处理，则可以使用 Invoke-Command cmdlet 来对远程计算机运行 Import-Counter 命令。

示例 1

C:\PS># Import-Counter

说明
-----------
此命令将 ProcessorData.csv 文件中的所有计数器数据导入到 $data 变量中。

C:\PS> $data = import-counter -path ProcessorData.csv

示例 2

C:\PS># Import-Counter

说明
-----------
此命令只将 ProcessorData.blg 文件中的 Processor(_total)\Interrupts\sec 计数器数据导入到 $i 变量中。

C:\PS> $i = import-counter -path ProcessorData.blg -counter "\\SERVER01\Processor(_Total)\Interrupts/sec"

示例 3

C:\PS># Import-Counter

说明
-----------
此示例演示如何从性能计数器日志文件 (.blg) 中选择数据，然后将选定的数据导出到 .csv 文件中。

前四个命令从文件中获取计数器路径并将它们保存在变量中。后两个命令导入选择的数据，然后只导出选择的数据。

第一个命令使用 Import-Counter 来导入 ProcessorData.blg 文件中的所有性能计数器数据。此命令将数据保存在 $data 变量中。

C:\PS> $data = import-counter .\processordata.blg

第二个命令显示 $data 变量中的计数器路径。命令输出中展示了此显示内容。

C:\PS> $data[0].countersamples | format-table path

Path
----
\\SERVER01\Processor(_Total)\DPC Rate
\\SERVER01\Processor(1)\DPC Rate
\\SERVER01\Processor(0)\DPC Rate
\\SERVER01\Processor(_Total)\% Idle Time
\\SERVER01\Processor(1)\% Idle Time
\\SERVER01\Processor(0)\% Idle Time
\\SERVER01\Processor(_Total)\% C3 Time
\\SERVER01\Processor(1)\% C3 Time
...

第三个命令获取以“Interrupts/sec”结尾的计数器路径并将路径保存在 $IntCtrs 变量中。

C:\PS> $IntCtrs = $data[0].countersamples | where {$_.path -like "*interrupts/sec"} | foreach {$_.path}

第四个命令显示选择的计数器路径。

C:\PS> $IntCtrs

\\SERVER01\Processor(_Total)\Interrupts/sec
\\SERVER01\Processor(1)\Interrupts/sec
\\SERVER01\Processor(0)\Interrupts/sec

第五个命令使用 Import-Counter cmdlet 来导入数据。它使用 Counter 参数和 $IntCtrs 变量来只导入 $IntCtrs 中的计数器路径的数据。

C:\PS> $i = import-counter -path .\processordata.blg -counter $intCtrs

第六个命令使用 Export-Counter cmdlet 来导出数据。

C:\PS> $i | export-counter -path .\interrupts.csv -format CSV

示例 4

C:\PS># Import-Counter

说明
-----------
此示例演示如何显示一组导入的计数器集中的所有计数器路径。

第一个命令使用 ListSet 参数来获取计数器数据文件中所包含的所有计数器集。

C:\PS> import-counter -path processordata.csv -listset *

CounterSetName     : Processor
MachineName        : \\SERVER01
CounterSetType     : MultiInstance
Description        :
Paths              : {\\SERVER01\Processor(*)\DPC Rate, \\SERVER01\Processor(*)\% Idle Time, \\SERVER01
                     \Processor(*)\% C3 Time, \\SERVER01\Processor(*)\% Interrupt Time...}
PathsWithInstances : {\\SERVER01\Processor(_Total)\DPC Rate, \\SERVER01\Processor(1)\DPC Rate, \\SERVER01
                     \Processor(0)\DPC Rate, \\SERVER01\Processor(_Total)\% Idle Time...}
Counter            : {\\SERVER01\Processor(*)\DPC Rate, \\SERVER01\Processor(*)\% Idle Time, \\SERVER01
                     \Processor(*)\% C3 Time, \\SERVER01\Processor(*)\% Interrupt Time...}

第二个命令从列表集中获取所有计数器路径。

C:\PS> import-counter -path processordata.csv -listset * | foreach {$_.paths}

\\SERVER01\Processor(*)\DPC Rate
\\SERVER01\Processor(*)\% Idle Time
\\SERVER01\Processor(*)\% C3 Time
\\SERVER01\Processor(*)\% Interrupt Time
\\SERVER01\Processor(*)\% C2 Time
\\SERVER01\Processor(*)\% User Time
\\SERVER01\Processor(*)\% C1 Time
\\SERVER01\Processor(*)\% Processor Time
\\SERVER01\Processor(*)\C1 Transitions/sec
\\SERVER01\Processor(*)\% DPC Time
\\SERVER01\Processor(*)\C2 Transitions/sec
\\SERVER01\Processor(*)\% Privileged Time
\\SERVER01\Processor(*)\C3 Transitions/sec
\\SERVER01\Processor(*)\DPCs Queued/sec
\\SERVER01\Processor(*)\Interrupts/sec

示例 5

C:\PS># Import-Counter

说明
-----------
此示例只导入时间戳介于命令中指定的开始和结束范围中的计数器数据。

第一个命令列出 ProcessorData.blg 文件中所有数据的时间戳。

  C:\PS> import-counter -path .\disk.blg | format-table timestamp

第二个和第三个命令将特定时间戳保存在 $start 和 $end 变量中。将字符串转换为 DateTime 对象。

  C:\PS> $start = [datetime]"7/9/2008 3:47:00 PM"
  C:\PS> $end = [datetime]"7/9/2008 3:47:59 PM"

第四个命令使用 Import-Counter 来只获取时间戳介于开始和结束时间之间（含开始和结束时间）的计数器数据。此命令使用 StartTime 和 EndTime 参数来指定范围。

  C:\PS> $t-data = import-counter -path disk.blg -starttime $start -endtime $end

示例 6

C:\PS># Import-Counter

说明
-----------
此示例演示如何从性能计数器日志文件中导入五个最旧的样本和五个最新的样本。

第一个命令使用 Import-Counter cmdlet 从 Disk.blg 文件中导入数据。此命令使用 MaxSamples 参数将导入的计数器样本数限制为五个。此命令获取文件中前（最旧的）五个样本。

C:\PS> import-counter -path disk.blg -maxSamples 5

第二个命令使用数组表示法和 Windows PowerShell 范围运算符 (..)来获取文件中最后五个计数器样本。这五个样本是最新的样本。

C:\PS> (import-counter -path disk.blg)[-1 ..-5]

示例 7

C:\PS># Import-Counter

说明
-----------
此命令使用 Summary 参数来获取 Memory.blg 文件中的计数器数据摘要。

C:\PS> import-counter D:\Samples\memory.blg -summary

OldestRecord            NewestRecord            SampleCount
------------            ------------            -----------
7/10/2008 2:59:18 PM    7/10/2008 3:00:27 PM    1000

示例 8

C:\PS># Import-Counter

说明
-----------
此示例更新性能计数器日志文件。

第一个命令使用 Import-Counter 的 ListSet 参数来获取现有计数器日志文件 OldData.blg 中的计数器。此命令使用管道运算符 (|) 将数据发送到 Foreach-Object 命令（该命令仅获取每个对象的 PathsWithInstances 属性的值）。

C:\PS> $counters = import-counter olddata.blg -ListSet * | foreach {$_.PathsWithInstances}

第二个命令在新的 Get-Counter 命令中使用相同的计数器来获取当前样本，然后将它导出到 NewData.blg 文件中。

C:\PS> get-counter -counter $counters -maxSamples 20 | export-counter c:\Logs\newdata.blg

示例 9

C:\PS># Import-Counter

说明
-----------
此命令从两个日志中导入性能日志数据并将数据保存在 $counters 变量中。此命令使用管道运算符将性能日志路径发送到 Import-Counter。

C:\PS> $counters = "d:\test\pdata.blg", "d:\samples\netlog.blg" | import-counter

请注意，每个路径用引号引起，并且各个路径之间用逗号分隔开。

另请参阅

  • Get-Counter
  • Export-Counter


Import-CSV

将逗号分隔值 (CSV) 文件中的对象属性转换为原始对象的 CSV 版本。

语法

Import-CSV [[-Delimiter] <char>] [-Path] <string[]> [-Header <string[]>] [<CommonParameters>]

Import-CSV -UseCulture [-Path] <string[]> [-Header <string[]>] [<CommonParameters>]

说明

Import-CSV cmdlet 从 Export-CSV cmdlet 生成的 CSV 可变长度文件来创建对象。

可使用 Import-CSV cmdlet 的参数来指定列标题行（该行确定结果对象的属性名称）和项目分隔符，或指示 Import-CSV 使用当前区域性的列表分隔符作为项目分隔符。

Import-CSV 创建的对象是原始对象的 CSV 版本。CSV 对象的属性值是原始对象的属性值的字符串版本。对象的 CSV 版本不含任何方法。

还可使用 ConvertTo-CSV cmdlet 和 ConvertFrom-CSV cmdlet 将对象转换为 CSV 字符串（或将 CSV 字符串转换为对象）。这些 cmdlet 与 Export-CSV 和 Import-CSV cmdlet 一样，只是它们不将 CSV 字符串保存在文件中。

参数

-Delimiter <char>

指定在 CSV 文件中分隔属性值的分隔符。默认值为逗号 (,)。输入字符，例如冒号 (:)。若要指定分号 (;)，请将它括在引号内。

如果指定了文件中的实际字符串分隔符之外的字符，则 Import-CSV 无法基于 CSV 字符串创建对象。相反，它将返回字符串。

是否为必需？ | false
位置？ | 2
默认值 | ,
是否接受管道输入？ | false
是否接受通配符？ | false

-Header <string[]>

为导入的文件指定备用的列标题行。列标题确定由 Import-CSV 创建的对象的属性名称。

输入以逗号分隔的列标题列表。用引号（单引号或双引号）括起每一项。不要将标题字符串括在引号内。如果您输入的列标题比现有的列数少，其余的列将没有标题。如果您输入的标题比现有的列数多，将忽略多余的标题。

使用 Header 参数时，请从 CSV 文件中删除原始标题行。否则，Import-CSV 将基于标题行中的项创建额外对象。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Path <string[]>

指定要导入的 CSV 文件的路径。还可以将路径通过管道传递给 Import-CSV。

是否为必需？ | true
位置？ | 1
默认值 | 无
是否接受管道输入？ | true (ByValue, ByPropertyName)
是否接受通配符？ | false

-UseCulture

使用当前区域性的列表分隔符作为项目分隔符。默认值为逗号 (,)。

要查找区域性的列表分隔符，请使用下面的命令：(Get-Culture).TextInfo.ListSeparator。如果指定了除 CSV 字符串中使用的分隔符之外的字符，则 ConvertFrom-CSV 无法基于 CSV 字符串创建对象。相反，它将返回字符串。

是否为必需？ | true
位置？ | named
默认值 | Comma
是否接受管道输入？ | false
是否接受通配符？ | false

<CommonParameters>

此 cmdlet 支持通用参数：-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。有关详细信息，请参阅 about_Commonparameters.

输入和输出

输入类型是指可通过管道传递给 cmdlet 的对象的类型。返回类型是指 Cmdlet 所返回对象的类型。

输入 | System.String 可以通过管道将包含路径的字符串传递给 Import-CSV。
输出 | 对象。 Import-CSV 返回 CSV 文件中的内容所描述的对象。

说明

因为导入的对象是该对象类型的 CSV 版本，所以 Windows PowerShell 类型格式化条目无法对其进行识别和格式化，而只能对该对象类型的非 CSV 版本进行格式化。

在 CSV 文件中，通过以逗号分隔的对象属性值列表来表示每个对象。将属性值转换为字符串（通过使用对象的 ToString() 方法），这样它们通常就可由属性值的名称来表示。Export-CSV 无法导出对象的方法。

示例 1

C:\PS>get-process | export-csv processes.csv

C:\PS> $p = import-CSV processes.csv

C:\PS> $p | get-member

   TypeName: CSV:System.Diagnostics.Process

Name                       MemberType   Definition
----                       ----------   ----------
Equals                     Method       System.Boolean Equals(Object obj)
GetHashCode                Method       System.Int32 GetHashCode()
GetType                    Method       System.Type GetType()
ToString                   Method       System.String ToString()
BasePriority               NoteProperty System.String BasePriority=8
Company                    NoteProperty System.String Company=Microsoft Corporation
...

C:\PS> $p | out-gridview

说明
-----------
此示例演示如何导出然后导入 Microsoft .NET Framework 对象的 CSV 文件。

第一个命令使用 Get-Process cmdlet 来获取本地计算机上的进程。它使用管道运算符 (|) 将进程对象发送到 Export-CSV cmdlet，其将进程对象导出到当前目录中的 Processes.csv 文件。

第二个命令使用 Import-CSV cmdlet 导入 Import-CSV 文件中的进程。然后它将生成的进程对象保存在 $p 变量中。

第三个命令使用管道运算符通过管道将导入的对象传递到 Get-Member cmdlet。结果显示它们是 CSV:System.Diagnostic.Process 对象，而不是 Get-Process 返回的 System.Diagnostic.Process 对象。

另外，因为格式化文件中没有对应于进程对象的 CSV 版本的条目类型，所以这些对象的格式化方法与标准进程对象的格式化方法不同。

若要显示这些对象，请使用格式化 cmdlet，如 Format-Table 和 Format-List，或通过管道将对象传递到 Out-GridView。

示例 2

C:\PS>get-process | export-csv processes.csv -Delimiter :

C:\PS> $p = import-csv processes.csv -Delimiter :

说明
-----------
此示例演示了如何使用 Import-CSV 的 Delimiter 参数。在此示例中，进程将导出到使用冒号 (:) 作为分隔符的文件。

导入时，Import-CSV 文件使用 Delimiter 参数来指示该文件中使用的分隔符。

示例 3

C:\PS>$p = import-csv processes.csv -UseCulture

C:\PS> (get-culture).textinfo.listseparator

,

说明
-----------
此示例说明如何使用 Import-CSV 的 UseCulture 参数。

第一个命令将 Processes.csv 文件中的对象导入 $p 变量中。它使用 UseCulture 参数来指示 Import-CSV 使用为当前区域性定义的列表分隔符。

第二个命令显示当前区域性的列表分隔符。它使用 Get-Culture cmdlet 来获取当前区域性。它使用点 (.)方法获取当前区域性的 TextInfo 属性以及 TextInfo 中的对象的 ListSeparator 属性。在此示例中，该命令返回逗号。

示例 4

C:\PS>start-job -scriptblock { get-process } | export-csv jobs.csv

C:\PS> $header = "MoreData","StatusMessage","Location","Command","State","Finished","InstanceId","SessionId","Name","ChildJobs","Output","Error","Progress","Verbose","Debug","Warning","StateChanged"

# Delete header from file
C:\PS> $a = (get-content jobs.csv)
C:\PS> $a = $a[0], $a[2..($a.count - 1)]
C:\PS> $a > jobs.csv

C:\PS> $j = import-csv jobs.csv -header $header

C:\PS> $j

MoreData      : True
StatusMessage :
Location      : localhost
Command       : get-process
State         : Running
Finished      : System.Threading.ManualResetEvent
InstanceId    : 135bdd25-40d6-4a20-bd68-05282a59abd6
SessionId     : 1
Name          : Job1
ChildJobs     : System.Collections.Generic.List`1[System.Management.Automation.Job]
Output        : System.Management.Automation.PSDataCollection`1[System.Management.Automation.PSObject]
Error         : System.Management.Automation.PSDataCollection`1[System.Management.Automation.ErrorRecord]
Progress      : System.Management.Automation.PSDataCollection`1[System.Management.Automation.ProgressRecord]
Verbose       : System.Management.Automation.PSDataCollection`1[System.String]
Debug         : System.Management.Automation.PSDataCollection`1[System.String]
Warning       : System.Management.Automation.PSDataCollection`1[System.String]
StateChanged  :

说明
-----------
此示例演示如何使用 Import-CSV 的 Header 参数来更改所得到的导入对象中的属性名称。

第一条命令使用 Start-Job cmdlet 启动一个后台作业，该作业在本地计算机上运行 Get-Process 命令。管道运算符 (|) 将生成的作业对象发送至 Export-CSV cmdlet，该 cmdlet 将作业对象转换为 CSV 格式。赋值运算符 (=) 将生成的 CSV 保存在 Jobs.csv 文件中。

第二条命令将标题保存在 $header 变量中。与默认标题不同，该标题使用“MoreData”和“State”，而不是“HasMoreData”和“JobStateInfo”。

接下来的三个命令从 Jobs.csv 文件中删除原始标题（第二行）。

第六个命令使用 Import-CSV cmdlet 导入 Jobs.csv 文件并将 CSV 字符串转换为作业对象的 CSV 版本。该命令使用 Header 参数提交备用标题。结果存储在 $j 变量中。

第七个命令显示 $j 变量中的对象。所得到的对象具有“MoreData”和“State”属性，如命令输出中所示。

示例 5

C:\PS>".\processes.csv" | import-csv

说明
-----------
此命令从 Processes.csv 文件导入对象。

另请参阅

  • Export-CSV
  • ConvertTo-CSV
  • ConvertFrom-CSV


Import-LocalizedData

根据为操作系统选择的 UI 区域性，将语言特定的数据导入脚本和函数。

语法

Import-LocalizedData [-BindingVariable] <string> [[-UICulture] <string>] [-BaseDirectory <string>] [-FileName <string>] [-SupportedCommand <string[]>] [<CommonParameters>]

说明

Import-LocalizedData cmdlet 从其名称与为操作系统的当前用户设置的 UI 语言相匹配的子目录中动态检索字符串。它用于使脚本以当前用户所选的 UI 语言显示用户消息。

Import-LocalizedData 从脚本目录的语言特定子目录中的 .psd1 文件导入数据，并将数据保存在该命令中指定的局部变量中。该 cmdlet 根据 $PSUICulture 自动变量的值选择子目录和文件。使用脚本中的本地变量显示用户消息时，将以用户的 UI 语言显示该消息。

可以使用 Import-LocalizedData 的参数来指定备用 UI 区域性、路径和文件名，添加支持的命令，取消显示在未找到 .psd1 文件时出现的错误消息。

在 Windows PowerShell 2.0 中，Import-LocalizedData cmdlet 支持脚本国际化。此计划的目的在于通过使脚本更易于以当前用户的 UI 语言显示用户消息，从而更好地为全世界的用户服务。有关此方面以及 .psd1 文件的格式的详细信息，请参阅 about_Script_Internationalization。

参数

-BaseDirectory <string>

指定 .psd1 文件所在的基目录。默认值为脚本所在的目录。Import-LocalizedData 在基目录的语言特定子目录中搜索脚本的 .psd1 文件。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-BindingVariable <string>

指定文本字符串将导入到的变量。输入变量名称，不带美元符号 ($)。

使用 Import-LocalizedData 替换在脚本的 DATA 节中指定的默认文本字符串时，请将 DATA 节赋予一个变量，然后在 BindingVariable 参数的值中输入 DATA 节变量的名称。然后，当 Import-LocalizedData 将导入的内容保存在 BindingVariable 中时，导入的数据将替换默认文本字符串。如果没有指定默认文本字符串，则可以选择任何变量名称。

是否为必需？ | true
位置？ | 1
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-FileName <string>

指定要导入的 .psd1 文件的名称。输入不带 .psd1 文件扩展名的文件名。

默认值为脚本的名称。例如，如果脚本为 FindFiles.ps1，Import-LocalizedData 会搜索 FindFiles.psd1。可以使用此参数来指示 Import-LocalizedData 搜索其他 .psd1 文件。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-SupportedCommand <string[]>

指定仅生成数据的 cmdlet 和函数。

可使用此参数包含已编写或已测试的 cmdlet 和函数。有关详细信息，请参阅 about_Script_Internationalization。

是否为必需？ | false
位置？ | named
默认值 | 无
是否接受管道输入？ | false
是否接受通配符？ | false

-UICulture <string>

指定备用 UI 区域性。默认值为 $PsUICulture 自动变量的值。以“<语言>-<区域>”格式输入 UI 区域性，如 en-US、de-DE 或 ar-SA。

UICulture 参数的值确定语言特定的子目录（在基目录内），Import-LocalizedData 从该子目录获取脚本的 .psd1 文件。

该 cmdlet 搜索与 UICulture 参数或 $PsUICulture 自动变量的值具有相同名称的子目录（如“de-DE”或“ar-SA”）。如果该 cmdlet 找不到该目录或该目录不包含脚本的 .psd1 文件，它会搜索具有语言代码名称的子目录（如“de”或“ar”）。如果它找不到该子目录或 .psd1 文件，该命令将失败，并以脚本中指定的默认语言显示数据。

是否为必需？ | false
位置？ | 2
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

<CommonParameters>

此 cmdlet 支持通用参数：-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。有关详细信息，请参阅 about_Commonparameters.

输入和输出

输入类型是指可通过管道传递给 cmdlet 的对象的类型。返回类型是指 Cmdlet 所返回对象的类型。

输入 | None 不能通过管道将输入传递给此 cmdlet。
输出 | System.Collections.Hashtable Import-LocalizedData 将哈希表保存在由 BindingVariable 参数的值指定的变量中。

说明

使用 Import-LocalizedData 之前，请对用户消息进行本地化。在由键/值对组成的哈希表中，设置每个区域设置（UI 区域性）的消息的格式，然后将哈希表保存在与脚本同名、文件扩展名为 .psd1 的文件中。在脚本目录下为每个受支持的 UI 区域性创建一个目录，然后将每个 UI 区域性的 .psd1 文件保存在具有该 UI 区域性名称的目录中。

例如，对 de-DE 区域设置的用户消息进行本地化并在哈希表中对它们进行格式化。将该哈希表保存在 <ScriptName>.psd1 文件中。然后在脚本目录下创建 de-DE 子目录，并将 de-DE <ScriptName>.psd1 文件保存在该 de-DE 子目录中。对支持的每个区域设置重复此方法。

Import-LocalizedData 执行结构化搜索，以便获得脚本的本地化的用户消息。

Import-LocalizedData 在脚本文件所在的目录（或 BaseDirectory 参数的值）中开始该搜索。然后，它会在基目录中搜索与 $PsUICulture 变量的值（或 UICulture 参数的值）具有相同名称的子目录（如“de-DE”或“ar-SA”）。接着，它会在该子目录中搜索与脚本（或 FileName 参数的值）具有相同名称的 .psd1 文件。

如果 Import-LocalizedData 找不到具有 UI 区域性名称的子目录或子目录不包含脚本的 .psd1 文件，它会在具有语言代码名称的子目录（如“de”或“ar”）中搜索脚本的 .psd1 文件。如果它找不到该子目录或 .psd1 文件，该命令将失败，将以脚本中的默认语言显示数据，并且会显示一条错误消息，说明无法导入数据。若要取消该消息，从而正常失败，请使用具有 SilentlyContinue 值的 ErrorAction 通用参数。

如果 Import-LocalizedData 找到子目录和 .psd1 文件，它会将用户消息的哈希表导入命令中的 BindingVariable 参数的值中。然后，当您显示该变量中的哈希表中的消息时，将显示本地化的消息。

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

示例 1

C:\PS>import-localizeddata -bindingVariable messages

说明
-----------
此命令将文本字符串导入 $messages 变量中。它使用 cmdlet 参数的所有默认值。

如果该命令包含在 C:\test 目录中的 Archives.ps1 脚本中，且 $PsUICulture 自动变量的值为 zh-CN，则 Import-LocalizedData 会导入 C:\test\zh-CN 目录中的 Archives.psd1 文件。

示例 2

C:\PS>import-localizeddata -bindingVariable msgTbl -uiculture ar-SA -filename Simple -baseDirectory C:\Data\Localized

说明
-----------
此命令将文本字符串导入脚本的 $msgTbl 变量中。

它使用 UICulture 参数来指示该 cmdlet 从 C:\Data\Localized 的 ar-SA 子目录中的 Simple.psd1 文件导入数据。

示例 3

C:\PS># In C:\Test\en-US\test.psd1:

ConvertFrom-StringData @'
 # English strings
Msg1 = "The Name parameter is missing from the command."
Msg2 = "This command requires the credentials of a member of the Administrators group on the computer."
Msg3 = "Use $_ to represent the object that is being processed."
'@

# In C:\Test\Test.ps1

import-localizeddata -bindingvariable messages
write-host $messages.msg2

# In Windows PowerShell

C:\PS> .\test.ps1
This command requires the credentials of a member of the Administrators group on the computer.

说明
-----------
此示例演示了如何在简单的脚本中使用本地化的数据。

该示例的第一部分显示 Test.psd1 文件的内容。它包含 ConvertFrom-StringData 命令，可以将一系列命名文本字符串转换为哈希表。test.psd1 文件位于包含脚本的 C:\Test 目录的 en-US 子目录中。

该示例的第二部分显示 Test.ps1 脚本的内容。它包含一个 Import-LocalizedData 命令（用于将匹配的 .psd1 文件中的数据导入到 $Messages 变量中）和一个 Write-Host 命令（用于将 $Messages 变量中的一条消息写入主机程序）。

该示例的最后部分运行脚本。输出表明，它用为操作系统的当前用户设置的 UI 语言显示正确的用户消息。

示例 4

C:\PS># In TestScript.ps1

$UserMessages = DATA {
    ConvertFrom-StringData @'
    # English strings
        Msg1 = "Enter a name."
        Msg2 = "Enter your employee ID."
        Msg3 = "Enter your building number."
'@ }

Import-LocalizedData -bindingVariable UserMessages

$UserMessages.Msg1
...

说明
-----------
此示例演示如何使用 Import-LocalizedData 替换在脚本的 DATA 节中定义的默认文本字符串。

在此示例中，TestScript.ps1 脚本的 DATA 节包含一个 ConvertFrom-StringData 命令，该命令将 DATA 节的内容转换为哈希表，并将其存储在 $UserMessages 变量的值中。

该脚本还包含一个 Import-LocalizedData 命令，该命令从 $PsUICulture 变量的值所指定的子目录中的 TestScript.psd1 文件中导入已翻译文本字符串的哈希表。如果该命令找到该 .psd1 文件，则将文件中的已翻译字符串保存到 $UserMessages 变量的值中，覆盖由 DATA 节逻辑保存的哈希表。

第三个命令显示 $UserMessages 变量中的第一条消息。

如果 Import-LocalizedData 命令找到 $PsUICulture 语言的 .psd1 文件，则 $UserMessages 变量的值将包含已翻译文本字符串。如果由于任何原因而导致命令失败，则该命令显示在脚本的 DATA 节中定义的默认文本字符串。

示例 5

C:\PS># In Day1.ps1
Import-LocalizedData -bindingVariable Day
Day.MessageDate

# In Day2.ps1
Import-LocalizedData -bindingVariable Day -errorAction:silentlycontinue
Day.MessageDate

C:\PS> .\Day1.ps1

Import-LocalizedData : Cannot find PowerShell data file 'Day1.psd1' in directory 'C:\ps-test\fr-BE\' or any parent culture directories.
At C:\ps-test\Day1.ps1:17 char:21
+ Import-LocalizedData <<<<  Day
Today is Tuesday

C:\PS> .\Day2.ps1

Today is Tuesday

说明
-----------
此示例演示了当 Import-LocalizedData 找不到与用户的 UI 区域性匹配的目录或在那些目录中找不到脚本的 .psd1 文件时，如何取消显示的错误消息。

可以使用具有“SilentlyContinue”值的 ErrorAction 通用参数来取消错误消息。当您已经使用默认或“回退”语言提供了用户消息并且不需要任何错误消息时，以上操作尤其有用。

此示例比较包含 Import-LocalizedData 命令的两个脚本：Day1.ps1 和 Day2.ps1。这两个脚本是相同的，但是 Day2 使用具有 SilentlyContinue 值的 ErrorAction 通用参数。

示例输出显示了当 UI 区域性设置为 fr-BE 且该 UI 区域性没有匹配的文件或目录时运行这两个脚本的结果。Day1.ps1 显示一条错误消息和英文输出。Day2.ps1 只显示英文输出。

另请参阅

  • about_Script_Internationalization


Import-Module

向当前会话中添加模块。

语法

Import-Module [-Name] <string[]> [-Alias <string[]>] [-ArgumentList <Object[]>] [-AsCustomObject] [-Cmdlet <string[]>] [-Force] [-Function <string[]>] [-Global] [-PassThru] [-Prefix <string>] [-Variable <string[]>] [-Version <Version>] [<CommonParameters>]

Import-Module [-程序集] <Assembly[]> [-Alias <string[]>] [-ArgumentList <Object[]>] [-AsCustomObject] [-Cmdlet <string[]>] [-Force] [-Function <string[]>] [-Global] [-PassThru] [-Prefix <string>] [-Variable <string[]>] [-Version <Version>] [<CommonParameters>]

Import-Module [-ModuleInfo] <PSModuleInfo[]> [-Alias <string[]>] [-ArgumentList <Object[]>] [-AsCustomObject] [-Cmdlet <string[]>] [-Force] [-Function <string[]>] [-Global] [-PassThru] [-Prefix <string>] [-Variable <string[]>] [-Version <Version>] [<CommonParameters>]

说明

Import-Module cmdlet 将一个或多个模块添加到当前会话中。

模块就是一个程序包，可以包含可在 Windows PowerShell 中使用的成员（如 cmdlet、提供程序、脚本、函数、变量以及其他工具和文件）。导入模块后，即可在会话中使用模块成员。

要导入模块，请使用 Name、Assembly 或 ModuleInfo 参数来标识要导入的模块。默认情况下，Import-Module 导入模块所导出的所有成员，但您可以使用 Alias、Function、Cmdlet 和 Variable 参数限制导入的成员。

Import-Module 只将模块导入到当前会话中。要将模块导入到所有的会话，请将 Import-Module 命令添加到 Windows PowerShell 配置文件。有关配置文件的详细信息，请参阅 about_Profiles。

有关模块的详细信息，请参阅 about_Modules。

参数

-Alias <string[]>

仅将模块中的指定别名导入当前会话。输入以逗号分隔的别名列表。允许使用通配符。

在您导入某些模块时，这些模块会自动将选定的别名导出到您的会话中。该参数使您可以从导出的别名中进行选择。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | true

-ArgumentList <Object[]>

指定在 Import-Module 命令期间传递给脚本模块的实际参数（形式参数的值）。只有在导入脚本模块时此参数才有效。

还可以使用 ArgumentList 的别名“args”来对其进行引用。有关详细信息，请参阅 about_Aliases。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-AsCustomObject

返回具有表示所导入模块成员的成员的自定义对象。该参数仅对脚本模块有效。

使用 AsCustomObject 参数时，Import-Module 将模块成员导入会话，然后返回一个 PSCustomObject 对象而不是 PSModuleInfo 对象。可以将自定义对象保存在变量中并使用点表示法来调用成员。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-程序集 <Assembly[]>

导入指定程序集对象中实现的 cmdlet 和提供程序。输入一个包含程序集对象的变量或创建程序集对象的命令。还可以通过管道将程序集对象传递给 Import-Module。

使用此参数时，仅导入由指定的程序集实现的 cmdlet 和提供程序。如果模块包含其他文件，将不会导入这些文件，您将因此而缺少模块的重要成员。在调试和测试模块时使用此参数，或者在模块作者的指导下使用此参数。

是否为必需？ | true
位置？ | 1
默认值 |
是否接受管道输入？ | true (ByValue)
是否接受通配符？ | false

-Cmdlet <string[]>

仅将模块中的指定 cmdlet 导入当前会话。输入 cmdlet 列表。允许使用通配符。

在您导入某些模块时，这些模块会自动将选定的 cmdlet 导出到您的会话中。该参数使您可以从导出的 cmdlet 中进行选择。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | true

-Force

重新导入模块及其成员，即使该模块或其成员的访问模式为只读也是如此。

是否为必需？ | false
位置？ | named
默认值 | False
是否接受管道输入？ | false
是否接受通配符？ | false

-Function <string[]>

仅将模块中的指定函数导入当前会话。输入函数列表。允许使用通配符。

在您导入某些模块时，这些模块会自动将选定的函数导出到您的会话中。该参数使您可以从导出的函数中进行选择。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | true

-Global

当在脚本模块 (.psm1) 中使用此参数时，该参数将模块导入全局会话状态。

此参数只有包含在脚本模块中时才有效。否则，将忽略该参数。

默认情况下，脚本模块中的命令（包括嵌套模块中的命令）将导入到调用方的会话状态。若要限制脚本模块导出的命令，请在该模块中使用 Export-ModuleMember 命令。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-ModuleInfo <PSModuleInfo[]>

指定要导入的模块对象。输入一个包含模块对象的变量或一个获取模块对象的命令（如“get-module -listavailable”命令）。还可以将模块对象通过管道传递给 Import-Module。

是否为必需？ | true
位置？ | 1
默认值 |
是否接受管道输入？ | true (ByValue)
是否接受通配符？ | false

-Name <string[]>

指定要导入的模块的名称。输入模块的名称或模块中某个文件（例如 .psd1、.psm1、.dll 或 ps1 文件）的名称。文件路径是可选的。不允许使用通配符。还可以将模块名称和文件名通过管道传送到 Import-Module。

如果省略路径，Import-Module 将查找 PSModulePath 环境变量 ($env:PSModulePath) 中保存的路径中的模块。

请尽可能只指定模块名称。如果指定文件名，将仅导入在该文件中实现的成员。如果模块包含其他文件，将不会导入这些文件，您将因此而缺少模块的重要成员。

是否为必需？ | true
位置？ | 1
默认值 |
是否接受管道输入？ | true (ByValue)
是否接受通配符？ | false

-PassThru

返回表示已导入的模块的对象。默认情况下，此 cmdlet 将不产生任何输出。

说明

-- 将“get-module -listavailable”命令的输出通过管道传递给带有 PassThru 参数的 Import-Module 命令时，Import-Module 返回 Get-Module 传递给它的对象，而不更新该对象。结果是，仍未填充 Exported 和 NestedModules 属性。

-- 使用 Prefix 参数来指定成员的前缀时，前缀并不显示在模块对象属性的成员名称中。该对象记录在应用前缀之前导出的内容。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Prefix <string>

将指定前缀添加到所导入模块成员的名称中的名词中。

使用此参数可以避免当会话中的不同成员具有相同名称时可能发生的名称冲突。此参数不会更改模块，并且不会影响模块导入供自己使用的文件（称为“嵌套模块”），它仅影响当前会话中的成员的名称。

例如，如果指定前缀“UTC”，然后导入一个 Get-Date cmdlet，则该 cmdlet 在会话中称为 Get-UTCDate，因而不会与原始 Get-Date cmdlet 混淆。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Variable <string[]>

仅将模块中的指定变量导入当前会话。输入变量列表。允许使用通配符。

在您导入某些模块时，这些模块会自动将选定的变量导出到您的会话中。该参数使您可以从导出的变量中进行选择。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | true

-Version <Version>

指定要导入的模块的版本。当系统上有同一模块的不同版本时使用此参数。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

<CommonParameters>

此 cmdlet 支持通用参数：-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。有关详细信息，请参阅 about_Commonparameters.

输入和输出

输入类型是指可通过管道传递给 cmdlet 的对象的类型。返回类型是指 Cmdlet 所返回对象的类型。

输入 | System.String, System.Management.Automation.PSModuleInfo, System.Reflection.Assembly 可以通过管道将模块名称、模块对象或程序集对象传递给 Import-Module。
输出 | None, System.Management.Automation.PSModuleInfo, or System.Management.Automation.PSCustomObject 默认情况下，Import-Module 不产生任何输出。如果使用 PassThru 参数，则生成表示模块的 System.Management.Automation.PSModuleInfo 对象。如果使用 AsCustomObject 参数，则生成 PSCustomObject 对象。

说明

还可以使用别名“ipmo”来引用 Import-Module。有关详细信息，请参阅 about_Aliases。

导入模块前，必须将模块目录复制到可由本地计算机访问的某个目录中。有关详细信息，请参阅 about_Modules。

模块成员在自己的私有模块会话状态中运行，因此它们用于内部处理的命令不会影响您的会话状态。

如果将具有相同名称和相同类型的成员导入您的会话中，Windows PowerShell 默认情况下将使用最后导入的成员。将替换变量和别名，且原始元素将不可访问。函数、cmdlet 和提供程序只是被新成员“遮盖”，但可以通过用其管理单元、模块或函数路径的名称限定命令名称来进行访问。

若要更新已从模块中导入的命令的格式数据，请使用 Update-FormatData cmdlet。Update-FormatData 还将在会话中更新已从模块中导入的命令的格式数据。如果模块的格式设置文件发生更改，可以运行 Update-FormatData 命令以更新已导入命令的格式数据。无需重新导入模块。

若要导入 Import-PSSession 或 Export-PSSession 创建的模块，当前会话中的执行策略不能为 Restricted 或 AllSigned，因为 Import-PSSession 和 Export-PSSession 创建的模块包含这些策略禁止的未签名脚本文件。若要在不更改本地计算机的执行策略的情况下使用 Import-Module，请使用 Set-ExecutionPolicy 的 Scope 参数为单个进程设置限制性较弱的执行策略。

示例 1

C:\PS>import-module -name BitsTransfer

说明
-----------
此命令将 BitsTransfer 模块的成员导入当前会话中。

Name 参数名 (-Name) 是可选的，可以省略。

默认情况下，Import-Module 在导入模块时不生成任何输出。若要请求输出，可使用 PassThru 或 AsCustomObject 参数，或者 Verbose 通用参数。

示例 2

C:\PS>get-module -listAvailable | import-module

说明
-----------
此命令将 PSModulePath 环境变量 ($env:psmodulepath) 指定的路径中的所有可用模块导入当前会话中。

示例 3

C:\PS>$m = get-module -ListAvailable BitsTransfer, ServerBackup

C:\PS> import-module -moduleInfo $m

说明
-----------
这些命令将 BitsTransfer 和 ServerBackup 模块的成员导入当前会话中。

第一个命令使用 Get-Module cmdlet 获取表示 BitsTransfer 和 ServerBackup 模块的 PSModuleInfo 对象。它将对象保存在 $m 变量中。要获取尚未导入到会话的模块，需要使用 ListAvailable 参数。

第二个命令使用 Import-Module 的 ModuleInfo 参数将模块导入当前会话中。

这些命令等效于使用管道运算符 (|) 将 Get-Module 命令的输出发送到 Import-Module。

示例 4

C:\PS>import-module -name c:\ps-test\modules\test -verbose

VERBOSE: Loading module from path 'C:\ps-test\modules\Test\Test.psm1'.
VERBOSE: Exporting function 'my-parm'.
VERBOSE: Exporting function 'get-parm'.
VERBOSE: Exporting function 'get-spec'.
VERBOSE: Exporting function 'get-specDetails'.

说明
-----------
此命令使用显式路径来标识要导入的模块。

它还使用 Verbose 通用参数来获取从模块导入的项列表。如果不使用 Verbose、PassThru 或 AsCustomObject 参数，Import-Module 在导入模块时将不会产生任何输出。

示例 5

C:\PS>import-module BitsTransfer -cmdlet Add-BitsTransferFile, Get-BitsTransfer

C:\PS> get-module BitsTransfer

Name              : BitsTransfer
Path              : C:\Windows\system32\WindowsPowerShell\v1.0\Modules\BitsTransfer\BitsTransfer.psd1
Description       :
Guid              : 8fa5064b-8479-4c5c-86ea-0d311fe48875
Version           : 1.0.0.0
ModuleBase        : C:\Windows\system32\WindowsPowerShell\v1.0\Modules\BitsTransfer
ModuleType        : Manifest
PrivateData       :
AccessMode        : ReadWrite
ExportedAliases   : {}
ExportedCmdlets   : {[Add-BitsTransfer, Add-BitsTransfer], [Complete-BitsTransfer, Complete-BitsTransfer], [Get-BitsTransfer, Get-BitsTransfer], [Rem
                    ove-BitsTransfer, Remove-BitsTransfer]...}
ExportedFunctions : {}
ExportedVariables : {}
NestedModules     : {Microsoft.BackgroundIntelligentTransfer.Management}

C:\PS> get-command -module BitsTransfer

CommandType Name                Definition
----------- ----                ----------
Cmdlet      Add-BitsTransfer    Add-BitsTransfer [-BitsJob] <BitsJob[]> [-Source] <String[]> [[-Destination] <String[]>] [-Verbose] [-Debug] [-ErrorA...
Cmdlet      Get-BitsTransfer    Get-BitsTransfer [[-Name] <String[]>] [-AllUsers] [-Verbose] [-Debug] [-ErrorAction <ActionPreference>] [-WarningActi...

说明
-----------
此命令说明如何限制导入到会话的模块成员以及对会话使用此命令的效果。

第一条命令仅导入 BitsTransfer 模块中的 Add-BitsTransfer 和 Get-BitsTransfer cmdlet。该命令使用 Cmdlet 参数限制模块导入的 cmdlet。还可以使用 Alias、Variable 和 Function 参数限制模块导入的其他成员。

第二条命令使用 Get-Module cmdlet 获取表示 BitsTransfer 模块的对象。ExportedCmdlets 属性列出该模块导出的所有 cmdlet，即使它们并未全部导入也是如此。

第三条命令使用 Get-Command cmdlet 的 Module 参数获取已从 BitsTransfer 模块导入的命令。结果证实只导入了 Add-BitsTransfer 和 Get-BitsTransfer cmdlet。

示例 6

C:\PS>import-module BitsTransfer -prefix PS -passthru

Name              : bitstransfer
Path              : C:\Windows\system32\WindowsPowerShell\v1.0\Modules\bitstransfer\bitstransfer.psd1
Description       :
Guid              : 8fa5064b-8479-4c5c-86ea-0d311fe48875
Version           : 1.0.0.0
ModuleBase        : C:\Windows\system32\WindowsPowerShell\v1.0\Modules\bitstransfer
ModuleType        : Manifest
PrivateData       :
AccessMode        : ReadWrite
ExportedAliases   : {}
ExportedCmdlets   : {[Add-BitsTransfer, Add-BitsTransfer], [Remove-BitsTransfer, Remove-BitsTransfer], [Complete-BitsTransfer, Complete-BitsTransfer]
                    , [Get-BitsTransfer, Get-BitsTransfer]...}
ExportedFunctions : {}
ExportedVariables : {}
NestedModules     : {Microsoft.BackgroundIntelligentTransfer.Management}

C:\PS> get-command -module bitstransfer

CommandType     Name                        Definition
-----------     ----                        ----------
Cmdlet          Add-PSBitsTransfer          Add-PSBitsTransfer [-BitsJob] <BitsJob[]> [-Source] <String[]> ...
Cmdlet          Complete-PSBitsTransfer     Complete-PSBitsTransfer [-BitsJob] <BitsJob[]> [-Verbose] [-Deb...
Cmdlet          Get-PSBitsTransfer          Get-PSBitsTransfer [[-Name] <String[]>] [-AllUsers] [-Verbose] ...
Cmdlet          Remove-PSBitsTransfer       Remove-PSBitsTransfer [-BitsJob] <BitsJob[]> [-Verbose] [-Debug...
Cmdlet          Resume-PSBitsTransfer       Resume-PSBitsTransfer [-BitsJob] <BitsJob[]> [-Asynchronous] [-...
Cmdlet          Set-PSBitsTransfer          Set-PSBitsTransfer [-BitsJob] <BitsJob[]> [-DisplayName <String...
Cmdlet          Start-PSBitsTransfer        Start-PSBitsTransfer [[-Source] <String[]>] [[-Destination] <St...
Cmdlet          Suspend-PSBitsTransfer      Suspend-PSBitsTransfer [-BitsJob] <BitsJob[]> [-Verbose] [-Debu...

说明
-----------
这些命令将 BitsTransfer 模块导入当前会话中，向其中的成员名称添加前缀，然后显示带有前缀的成员名称。

第一条命令使用 Import-Module cmdlet 导入 BitsTransfer 模块。它使用 Prefix 参数向从模块导入的所有成员添加 PS 前缀，并使用 PassThru 参数返回表示所导入模块的模块对象。

该命令返回的模块对象具有一个 ExportedCmdlets 属性，该属性列出所导出的成员。该前缀不显示在 cmdlet 名称中，因为它是在成员导出之后（但在它们导入之前）应用的。

第二条命令使用 Get-Command cmdlet 获取已从模块导入的成员。它使用 Module 参数来指定模块。输出显示出这些模块成员已加上了正确的前缀。

所使用的前缀仅应用于当前会话中的成员。它不会更改模块。

示例 7

C:\PS>get-module -list | format-table -property name, moduletype -auto

Name          ModuleType
----          ----------
Show-Calendar     Script
BitsTransfer    Manifest
PSDiagnostics   Manifest
TestCmdlets       Script

C:\PS> $a = import-module -name Show-Calendar -asCustomObject

C:\PS> $a | get-member

   TypeName: System.Management.Automation.PSCustomObject

Name          MemberType   Definition
----          ----------   ----------
Equals        Method       bool Equals(System.Object obj)
GetHashCode   Method       int GetHashCode()
GetType       Method       type GetType()
ToString      Method       string ToString()
Show-Calendar ScriptMethod System.Object Show-Calendar();

C:\PS> $a."show-calendar"()

说明
-----------
这些命令演示如何获取和使用 Import-Module 返回的自定义对象。

自定义对象包括表示每个导入的模块成员的合成成员。例如，模块中的 cmdlet 和函数转换为自定义对象的脚本方法。

自定义对象在脚本编写中非常有用。当若干导入的对象具有相同名称时，也可以使用自定义对象。使用对象的脚本方法等效于指定导入成员的完全限定名称（包括其模块名称）。

AsCustomObject 参数只能用于脚本模块，因此第一个任务是确定哪个可用模块是脚本模块。

第一个命令使用 Get-Module cmdlet 获取可用模块。此命令使用管道运算符 (|) 将模块对象传递到 Format-Table cmdlet，后者在一个表中列出每个模块的 Name 和 ModuleType。

第二个命令使用 Import-Module cmdlet 导入 Show-Calendar 脚本模块。此命令使用 AsCustomObject 参数请求自定义对象。此命令将生成的自定义对象保存在 $a 变量中。

第三个命令使用管道运算符将 $a 变量发送到 Get-Member cmdlet，后者获取 $a 中的 PSCustomObject 的属性和方法。输出显示一个 Show-Calendar 脚本方法。

最后一个命令使用 Show-Calendar 脚本方法。方法名称必须用引号括起，因为它包含一个连字符。

示例 8

C:\PS>import-module BitsTransfer

C:\PS> import-module BitsTransfer -force -prefix PS

说明
-----------
此示例说明如何使用 Import-Module 的 Force 参数将模块重新导入同一会话。

第一条命令导入 BitsTransfer 模块。第二条命令再次导入该模块，这一次使用的是 Prefix 参数。

第二条命令还包含 Force 参数，该参数将删除该模块然后重新导入它。如果不使用此参数，则会话包含的每个 BitsTransfer cmdlet 将有两个副本，其中一个使用标准名称，另一个使用带前缀的名称。

示例 9

C:\PS>get-date

Saturday, September 12, 2009 6:47:04 PM

C:\PS> import-module TestModule

C:\PS> get-date
09255

C:\PS> get-command get-date | format-table -property commandtype, name, pssnapin, module -auto

CommandType  Name       pssnapin                       Module
-----------  ----       --------                       ------
   Function  Get-Date                                  TestModule
     Cmdlet  Get-Date   Microsoft.PowerShell.Utility

C:\PS> Microsoft.PowerShell.Utility\get-date

Saturday, September 12, 2009 6:33:23 PM

说明
-----------
此示例说明如何运行已由导入的命令隐藏的命令。

第一条命令运行 Windows PowerShell 附带的 Get-Date cmdlet。它返回一个具有当前日期的 DateTime 对象。

第二条命令导入 TestModule 模块。此模块包含一个名为 Get-Date 的函数，该函数返回儒略历日期。

第三条命令重新运行 Get-Date 命令。因为函数优先于 cmdlet，所以运行的是 TestModule 模块中的 Get-Date 函数，而不是 Get-Date cmdlet。

第四条命令显示会话中有两个 Get-Date 命令：即 TestModule 模块中的函数和 Microsoft.PowerShell.Utility 管理单元中的 cmdlet。

第五条命令通过使用管理单元名称来限定命令名称，以便运行隐藏的 cmdlet。

有关 Windows PowerShell 中命令优先级的详细信息，请参阅 about_command_precedence。

另请参阅

  • Get-Module
  • New-Module
  • Remove-Module
  • Export-ModuleMember
  • about_Modules


Import-PSSession

将来自其他会话的命令导入到当前会话中。

语法

Import-PSSession [-Session] <PSSession> [[-CommandName] <string[]>] [[-FormatTypeName] <string[]>] [-AllowClobber] [-ArgumentList <Object[]>] [-CommandType {<Alias> | <Function> | <Filter> | <Cmdlet> | <ExternalScript> | <Application> | <Script> | <All>}] [-Module <string[]>] [-Prefix <string>] [<CommonParameters>]

说明

Import-PSSession cmdlet 将命令（如 cmdlet、函数和别名）从本地或远程计算机上的 PSSession 导入到当前会话中。可以导入 Get-Command 能够在 PSSession 中找到的任何命令。

使用 Import-PSSession 命令可以从自定义 shell（如 Microsoft Exchange Server shell）导入命令，也可以从会话（如果包含当前会话所不具有的 Windows PowerShell 模块和管理单元或其他元素）导入命令。

若要导入命令，请首先使用 New-PSSession cmdlet 创建 PSSession。然后，使用 Import-PSSession cmdlet 导入命令。默认情况下，Import-PSSession 导入所有命令，但与当前会话中的命令同名的命令除外。若要导入所有命令，请使用 AllowClobber 参数。

可以像使用会话中的任何命令那样使用导入的命令。使用导入的命令时，该命令的导入部分是在从中导入该命令的会话中隐式运行。但是，远程操作完全由 Windows PowerShell 进行处理。除了必须保持与另一会话 (PSSession) 的连接之外，您甚至不需要知道这些操作。如果关闭该连接，导入的命令将不再可用。

因为导入的命令需要花费比本地命令更长的时间来运行，所以 Import-PSSession 会向每个导入的命令添加 AsJob 参数。该参数允许您将命令作为 Windows PowerShell 后台作业运行。有关详细信息，请参阅 about_Jobs。

使用 Import-PSSession 时，Windows PowerShell 将导入的命令添加到仅存在于您的会话中的临时模块，并返回表示该模块的对象。若要创建可在将来会话中使用的永久性模块，请使用 Export-PSSession cmdlet。

Import-PSSession cmdlet 使用 Windows PowerShell 的隐式远程处理功能。将命令导入当前会话后，导入的命令将在原始会话中或在源计算机上的一个相似会话中隐式运行。

参数

-AllowClobber

导入指定命令，即使它们与当前会话中的命令同名。

如果导入与当前会话中的命令同名的命令，则导入的命令会隐藏或替换原始命令。有关详细信息，请参阅 about_Command_Precedence。

默认情况下，Import-PSSession 不会导入与当前会话中的命令同名的命令。

是否为必需？ | false
位置？ | named
默认值 | False
是否接受管道输入？ | false
是否接受通配符？ | false

-ArgumentList <Object[]>

导入使用指定的实际参数（形式参数值）得到的命令的变体。

例如，若要导入 $s 中 PSSession 中的证书 (Cert:) 驱动器中 Get-Item 命令的变体，请键入“import-pssession -session $s -command Get-Item -argumentlist cert:”。

是否为必需？ | false
位置？ | named
默认值 | All command in the PSSession, except for commands with the same names as commands in the current session.
是否接受管道输入？ | false
是否接受通配符？ | false

-CommandName <string[]>

仅导入具有指定名称或名称模式的命令。允许使用通配符。使用“CommandName”或其别名“Name”。

默认情况下，Import-PSSession 导入会话中的所有命令，但与当前会话中的命令具有相同名称的命令除外。这样可以防止导入的命令隐藏或替换会话中的命令。若要导入所有命令（甚至是那些隐藏或替换其他命令的命令），请使用 AllowClobber 参数。

如果使用 CommandName 参数，除非使用 FormatTypeName 参数，否则不导入命令的格式设置文件。同样，如果使用 FormatTypeName 参数，除非使用 CommandName 参数，否则不导入命令。

是否为必需？ | false
位置？ | 3
默认值 | All commands in the PSSession, except for commands with the same names as commands in the current session.
是否接受管道输入？ | false
是否接受通配符？ | true

-CommandType <CommandTypes>

仅导入指定类型的命令对象。默认值为 Cmdlet。使用“CommandType”或它的别名“Type”。

有效值包括：

-- Alias：远程会话中的 Windows PowerShell 别名。

-- All：远程会话中的 cmdlet 和函数。

-- Application：位于远程会话中 Path 环境变量 ($env:path) 所列路径中的 Windows-PowerShell 文件以外的所有文件，包括 .txt、.exe. 和 .dll 文件。

-- Cmdlet：远程会话中的 cmdlet。默认值为“Cmdlet”。

-- ExternalScript：位于远程会话中 Path 环境变量 ($env:path) 所列路径中的 .ps1 文件。

-- Filter 和 Function：远程会话中的 Windows PowerShell 函数。

-- Script：远程会话中的脚本块。

是否为必需？ | false
位置？ | named
默认值 | All command in the PSSession, except for commands with the same names as commands in the current session.
是否接受管道输入？ | false
是否接受通配符？ | false

-FormatTypeName <string[]>

导入针对指定的 Microsoft .NET Framework 类型的格式设置指令。输入类型名称。允许使用通配符。

此参数的值必须是从其中导入命令的会话中的 Get-FormatData 命令所返回的类型的名称。若要获取远程会话中的所有格式数据，请键入 *。

如果该命令不包含 CommandName 或 FormatTypeName 参数，则 Import-PSSession

导入远程会话中的 Get-FormatData 命令所返回的所有 .NET Framework 类型的格式设置指令。

如果使用 FormatTypeName 参数，除非使用 CommandName 参数，否则不导入命令。

同样，如果使用 CommandName 参数，除非使用 FormatTypeName 参数，否则不导入命令的格式设置文件。

是否为必需？ | false
位置？ | 4
默认值 | Types in the System.Management.Automation namespace
是否接受管道输入？ | false
是否接受通配符？ | true

-Module <string[]>

仅导入指定的 Windows PowerShell 管理单元和模块中的命令。输入管理单元和模块的名称。不允许使用通配符。

有关详细信息，请参阅 about_Pssnapins 和 Import-Module。

是否为必需？ | false
位置？ | named
默认值 | All command in the PSSession, except for commands with the same names as commands in the current session.
是否接受管道输入？ | false
是否接受通配符？ | false

-Prefix <string>

将指定前缀添加到所导入命令的名称中的名词中。

使用此参数可以避免当会话中的不同命令具有相同名称时可能发生的名称冲突。

例如，如果指定前缀“Remote”，然后导入一个 Get-Date cmdlet，则该 cmdlet 在会话中称为 Get-RemoteDate，因而不会与原始 Get-Date cmdlet 混淆。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Session <PSSession>

指定从中导入 cmdlet 的 PSSession。输入包含会话对象的变量或获取会话对象的命令，如 New-PSSession 或 Get-PSSession 命令。只能指定一个会话。此参数是必需的。

是否为必需？ | true
位置？ | 1
默认值 | 无
是否接受管道输入？ | false
是否接受通配符？ | false

<CommonParameters>

此 cmdlet 支持通用参数：-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。有关详细信息，请参阅 about_Commonparameters.

输入和输出

输入类型是指可通过管道传递给 cmdlet 的对象的类型。返回类型是指 Cmdlet 所返回对象的类型。

输入 | None 不能通过管道将对象传递给此 cmdlet。
输出 | System.Management.Automation.PSModuleInfo Import-PSSession 返回的模块对象与 New-Module 和 Get-Module 返回的模块对象相同。但是，导入的模块是临时的，仅存在于当前会话中。若要在磁盘上创建永久性模块，请使用 Export-PSSession cmdlet。

说明

Import-PSSession 依赖于 Windows PowerShell 远程处理基础结构。若要使用此 cmdlet，必须对计算机进行相应配置以进行 WS-Management 远程处理。有关详细信息，请参阅 about_Remote and about_Remote_Requirements。

不能使用 Import-PSSession 来导入变量或 Windows PowerShell 提供程序。

当导入与当前会话中的命令同名的命令时，导入的命令可隐藏会话中的别名、函数和 cmdlet，还可以替换会话中的函数和变量。有关详细信息，请参阅 about_Command_Precedence。

Import-PSSession 在导入命令之前，将所有命令转换为函数。因此，导入的命令与保持其原始命令类型的命令的行为略有不同。例如，如果从 PSSession 导入一个 cmdlet，然后从模块或管理单元导入一个同名的 cmdlet，则在默认情况下，始终运行从 PSSession 导入的 cmdlet，因为函数优先于 cmdlet。相反，如果将别名导入到含有同名别名的会话中，则始终使用原始别名，因为别名优先于函数。有关详细信息，请参阅 about_Command_Precedence。

Import-PSSession 使用 Write-Progress cmdlet 来显示该命令的进度。该命令正在运行时，您可能会看到进度条。

为了查找要导入的命令，Import-PSSession 使用 Invoke-Command cmdlet 在 PSSession 中运行 Get-Command 命令。为了获取命令的格式数据，它使用 Get-FormatData cmdlet。运行 Import-PSSession 命令时，您可能会看到来自 Invoke-Command、Get-Command 和 Get-FormatData 的错误消息。另外，Import-PSSession 不能从不包含 Get-Command、Get-FormatData、Select-Object 和 Get-Help cmdlet 的 PSSession 中导入命令。

导入的命令与其他远程命令具有相同的限制（包括无法启动具有用户界面的程序，如记事本）。

因为 Windows PowerShell 配置文件不在 PSSession 中运行，所以配置文件添加到会话中的命令无法用于 Import-PSSession。若要从配置文件导入命令，请在导入命令之前使用 Invoke-Command 命令在 PSSession 中手动运行该配置文件。

即使 Import-PSSession 命令不导入格式数据，该命令所创建的临时模块也可能包含一个格式设置文件。如果该命令不导入格式数据，则创建的任何格式设置文件都不包含格式数据。

若要使用 Import-PSSession，当前会话中的执行策略不能为 Restricted 或 AllSigned，因为 Import-PSSession 创建的模块包含被这些策略禁止的未签名脚本文件。若要在不更改本地计算机的执行策略的情况下使用 Import-PSSession，请使用 Set-ExecutionPolicy 的 Scope 参数为单个进程设置限制性较弱的执行策略。

示例 1

C:\PS>$s = new-pssession -computername Server01

C:\PS> import-pssession -session $s

说明
-----------
此命令将 Server01 计算机上某个 PSSession 中的所有命令导入当前会话，但与当前会话中的命令同名的命令除外。

因为此命令不使用 CommandName 参数，所以它还将导入所导入的命令所必需的所有格式数据。

示例 2

C:\PS>$s = new-pssession https://ps.testlabs.com/powershell

C:\PS> import-pssession -session $s -commandname *-test -formatTypeName *

C:\PS> new-test -name test1

C:\PS> get-test test1 | run-test

说明
-----------
这些命令将 PSSession 中名称以“-test”结尾的命令导入本地会话，然后说明如何使用导入的 cmdlet。

第一个命令使用 New-PSSession cmdlet 创建 PSSession。它将 PSSession 保存在 $s 变量中。

第二个命令使用 Import-PSSession cmdlet 从 $s 中的 PSSession 将命令导入当前会话。它使用 CommandName 参数来指定带有 Test 名词的命令，使用 FormatTypeName 参数来导入各 Test 命令的格式数据。

第三个和第四个命令使用当前会话中导入的命令。因为导入的命令实际添加到当前会话，所以您可以使用本地语法来运行这些命令。不需要使用 Invoke-Command cmdlet 来运行导入的命令。

示例 3

C:\PS>$s1 = new-pssession -computername s1

C:\PS> $s2 = new-pssession -computername s2

C:\PS> import-pssession -session s1 -type cmdlet -name New-Test, Get-Test -FormatTypeName *

C:\PS> import-pssession -session s2 -type cmdlet -name Set-Test -FormatTypeName *

C:\PS> new-test Test1 | set-test -runtype full

说明
-----------
此示例说明您可以像使用本地 cmdlet 那样使用导入的 cmdlet。

这些命令导入 Server01 计算机上某个 PSSession 中的 New-Test 和 Get-Test cmdlet，并导入 Server02 计算机上某个 PSSession 中的 Set-Test cmdlet。

即使 cmdlet 是从不同 PSSession 导入的，也可以通过管道将对象从一个 cmdlet 传递到另一个 cmdlet，而不会发生错误。

示例 4

C:\PS>$s = new-pssession -computername Server01

C:\PS> import-pssession -session $s -commandname *-test* -formattypename *

C:\PS> $batch = new-test -name Batch -asjob

C:\PS> receive-job $batch

说明
-----------
此示例演示了如何将导入的命令作为后台作业运行。

因为导入的命令需要花费比本地命令更长的时间来运行，所以 Import-PSSession 会向每个导入的命令添加 AsJob 参数。AsJob 参数允许您将命令作为后台作业运行。

第一个命令在 Server01 计算机上创建一个 PSSession，并将该 PSSession 对象保存在 $s 变量中。

第二个命令使用 Import-PSSession 将 Test cmdlet 从 $s 中的 PSSession 导入当前会话。

第三个命令使用导入的 New-Test cmdlet 的 AsJob 参数将 New-Test 命令作为后台作业运行。该命令将 New-Test 返回的作业对象保存在 $batch 变量中。

第四个命令使用 Receive-Job cmdlet 来获取 $batch 变量中的作业的结果。

示例 5

C:\PS>$s = new-pssession -comp Server01

C:\PS> invoke-command -session $s {import-module TestManagement}

C:\PS> import-pssession -session $s -module TestManagement

说明
-----------
此示例演示如何将远程计算机上某个 Windows PowerShell 模块中的 cmdlet 和函数导入当前会话。

第一条命令在 Server01 计算机上创建一个 PSSession，并将它保存在 $s 变量中。

第二个命令使用 Invoke-Command cmdlet 在 $s 中的 PSSession 中运行 Import-Module 命令。

通常，该模块将通过 Windows PowerShell 配置文件中的 Import-Module 命令添加到所有会话，但是配置文件不在 PSSession 中运行。

第三个命令使用 Import-PSSession 的 Module 参数将模块中的 cmdlet 和函数导入当前会话。

示例 6

C:\PS>import-pssession $s -CommandName Get-Date, SearchHelp  -formatTypeName * -AllowClobber

Name              : tmp_79468106-4e1d-4d90-af97-1154f9317239_tcw1zunz.ttf
Path              : C:\Users\User01\AppData\Local\Temp\tmp_79468106-4e1d-4d90-af97-1154f9317239_tcw1zunz.ttf\tmp_79468106-4e1d-4d90-af97-1154f9317239_
                    tcw1zunz.ttf.psm1
Description       : Implicit remoting for http://server01.corp.fabrikam.com/wsman
Guid              : 79468106-4e1d-4d90-af97-1154f9317239
Version           : 1.0
ModuleBase        : C:\Users\User01\AppData\Local\Temp\tmp_79468106-4e1d-4d90-af97-1154f9317239_tcw1zunz.ttf
ModuleType        : Script
PrivateData       : {ImplicitRemoting}
AccessMode        : ReadWrite
ExportedAliases   : {}
ExportedCmdlets   : {}
ExportedFunctions : {[Get-Date, Get-Date], [SearchHelp, SearchHelp]}
ExportedVariables : {}
NestedModules     : {}

说明
-----------
此示例说明 Import-PSSession 在磁盘上的临时文件中创建一个模块。还说明所有命令在导入到当前会话之前都已转换为函数。

该命令使用 Import-PSSession cmdlet 将 Get-Date cmdlet 和 SearchHelp 函数导入当前会话。

Import-PSSession cmdlet 返回一个表示临时模块的 PSModuleInfo 对象。Path 属性的值表明 Import-PSSession 在临时位置创建了一个脚本模块 (.psm1) 文件。ExportedFunctions 属性表明 Get-Date cmdlet 和 SearchHelp 函数都是作为函数导入的。

示例 7

C:\PS>import-pssession $s -CommandName Get-Date -formatTypeName * -AllowClobber

C:\PS> get-command get-date

CommandType   Name       Definition
-----------   ----       ----------
Function      Get-Date   ...
Cmdlet        Get-Date   Get-Date [[-Date] <DateTime>] [-Year <Int32>] [-Month <Int32>]

C:\PS> Get-Date
09074

C:\PS> (get-command -type cmdlet -name get-date).pssnapin.name
Microsoft.PowerShell.Utility

C:\PS> Microsoft.PowerShell.Utility\get-date

Sunday, March 15, 2009 2:08:26 PM

说明
-----------
此示例演示如何运行由导入的命令隐藏的命令。

第一个命令从 $s 变量中的 PSSession 导入 Get-Date cmdlet。因为当前会话包含 Get-Date cmdlet，所以 AllowClobber 参数在该命令中是必需的。

第二个命令使用 Get-Command cmdlet 获取当前会话中的 Get-Date 命令。输出表明该会话包含原始 Get-Date cmdlet 和一个 Get-Date 函数。Get-Date 函数运行在 $s 中的 PSSession 中导入的 Get-Date cmdlet。

第三个命令运行 Get-Date 命令。因为函数优先于 cmdlet，所以 Windows PowerShell 运行导入的 Get-Date 函数，该函数返回一个儒略历日期。

第四和第五个命令演示如何使用限定名称运行由导入的命令隐藏的命令。

第四个命令获取将原始 Get-Date cmdlet 添加到当前会话的 Windows PowerShell 管理单元的名称。

第五个命令使用 Get-Date cmdlet 的管理单元限定名称来运行 Get-Date 命令。

有关命令优先级和隐藏的命令的详细信息，请参阅 about_Command_Precedence。

示例 8

C:\PS>import-pssession -session $s -commandName *Item* -AllowClobber

说明
-----------
此命令从 $s 中的 PSSession 导入名称中包含“Item”的命令。因为该命令包含 CommandName 参数但不包含 FormatTypeData 参数，所以仅导入该命令。

如果要使用 Import-PSSession 在远程计算机上运行命令，并且当前会话中已有该命令的格式数据，可使用此命令。

示例 9

C:\PS>$m = import-pssession -session $s -CommandName *bits* -formattypename *bits*

C:\PS> get-command -module $m

CommandType     Name
-----------     ----
Function        Add-BitsFile
Function        Complete-BitsTransfer
Function        Get-BitsTransfer
Function        Remove-BitsTransfer
Function        Resume-BitsTransfer
Function        Set-BitsTransfer
Function        Start-BitsTransfer
Function        Suspend-BitsTransfer

说明
-----------
此命令演示如何使用 Get-Command 的 Module 参数来查明 Import-PSSession 命令将哪些命令导入到会话中。

第一个命令使用 Import-PSSession cmdlet 从 $s 变量中的 PSSession 导入名称中包含“bits”的命令。Import-PSSession 命令返回一个临时模块，并将该模块保存在 $m 变量中。

第二个命令使用 Get-Command cmdlet 获取由该模块导出到 $m 变量中的命令。

Module 参数接受一个字符串值，该字符串值用作模块名称。但是，在提交模块对象时，Windows PowerShell 使用模块对象的 ToString 方法，该方法返回模块名称。

Get-Command 命令与“get-command $m.name”等效。

另请参阅

  • about_Command_Precedence
  • New-PSSession
  • Export-PSSession
  • about_Jobs
  • about_PSSessions


Invoke-Command

在本地和远程计算机上运行命令。

语法

Invoke-Command [-ScriptBlock] <scriptblock> [[-ComputerName] <string[]>] [-ApplicationName <string>] [-AsJob] [-Authentication {<Default> | <Basic> | <Negotiate> | <NegotiateWithImplicitCredential> | <Credssp> | <Digest> | <Kerberos>}] [-CertificateThumbprint <string>] [-ConfigurationName <string>] [-Credential <PSCredential>] [-HideComputerName] [-JobName <string>] [-Port <int>] [-SessionOption <PSSessionOption>] [-ThrottleLimit <int>] [-UseSSL] [-ArgumentList <Object[]>] [-InputObject <psobject>] [<CommonParameters>]

Invoke-Command [-FilePath] <string> [[-ComputerName] <string[]>] [-ApplicationName <string>] [-AsJob] [-Authentication {<Default> | <Basic> | <Negotiate> | <NegotiateWithImplicitCredential> | <Credssp> | <Digest> | <Kerberos>}] [-ConfigurationName <string>] [-Credential <PSCredential>] [-HideComputerName] [-JobName <string>] [-Port <int>] [-SessionOption <PSSessionOption>] [-ThrottleLimit <int>] [-UseSSL] [-ArgumentList <Object[]>] [-InputObject <psobject>] [<CommonParameters>]

Invoke-Command [-FilePath] <string> [[-Session] <PSSession[]>] [-AsJob] [-HideComputerName] [-JobName <string>] [-ThrottleLimit <int>] [-ArgumentList <Object[]>] [-InputObject <psobject>] [<CommonParameters>]

Invoke-Command [-FilePath] <string> [[-ConnectionURI] <Uri[]>] [-AllowRedirection] [-AsJob] [-Authentication {<Default> | <Basic> | <Negotiate> | <NegotiateWithImplicitCredential> | <Credssp> | <Digest> | <Kerberos>}] [-ConfigurationName <string>] [-Credential <PSCredential>] [-HideComputerName] [-JobName <string>] [-SessionOption <PSSessionOption>] [-ThrottleLimit <int>] [-ArgumentList <Object[]>] [-InputObject <psobject>] [<CommonParameters>]

Invoke-Command [-ScriptBlock] <scriptblock> [-ArgumentList <Object[]>] [-InputObject <psobject>] [<CommonParameters>]

Invoke-Command [-ScriptBlock] <scriptblock> [[-Session] <PSSession[]>] [-AsJob] [-HideComputerName] [-JobName <string>] [-ThrottleLimit <int>] [-ArgumentList <Object[]>] [-InputObject <psobject>] [<CommonParameters>]

Invoke-Command [-ScriptBlock] <scriptblock> [[-ConnectionURI] <Uri[]>] [-AllowRedirection] [-AsJob] [-Authentication {<Default> | <Basic> | <Negotiate> | <NegotiateWithImplicitCredential> | <Credssp> | <Digest> | <Kerberos>}] [-CertificateThumbprint <string>] [-ConfigurationName <string>] [-Credential <PSCredential>] [-HideComputerName] [-JobName <string>] [-SessionOption <PSSessionOption>] [-ThrottleLimit <int>] [-ArgumentList <Object[]>] [-InputObject <psobject>] [<CommonParameters>]

说明

Invoke-Command cmdlet 在本地或远程计算机上运行命令，并从命令返回所有输出，包括错误。使用一个 Invoke-Command 命令，可以在多台计算机上运行命令。

若要在一台远程计算机上运行一个命令，请使用 ComputerName 参数。若要运行一系列共享数据的相关命令，请在远程计算机上创建一个 PSSession（持续性连接），然后使用 Invoke-Command 的 Session 参数在 PSSession 中运行命令。

还可以在本地计算机上使用 Invoke-Command 将脚本块中的字符串作为命令来评估或运行。Windows PowerShell 将脚本块转换为命令，并立即在当前作用域内运行此命令，而不是仅仅在命令行中回显该字符串。

使用 Invoke-Command 在远程计算机上运行命令之前，请阅读 about_Remote。

参数

-AllowRedirection

允许将此连接重定向到备用 URI。

使用 ConnectionURI 参数时，远程目标可以返回重定向到另一 URI 的指令。默认情况下，Windows PowerShell 不会重定向连接，但您可以使用 AllowRedirection 参数允许它重定向连接。

也可以通过设置 $PSSessionOption 首选项变量的 MaximumConnectionRedirectionCount 属性或 SessionOption 参数值的 MaximumConnectionRedirectionCount 属性来限制重定向连接的次数。默认值为 5。有关详细信息，请参阅 SessionOption 参数的说明以及 New-PSSessionOption cmdlet 的帮助主题。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-ApplicationName <string>

指定连接 URI 的应用程序名称段。使用此参数可在命令中未使用 ConnectionURI 参数时指定应用程序名称。

默认值为本地计算机上的 $PSSessionApplicationName 首选项变量的值。如果未定义此首选项变量，则默认值为 WSMAN。该值适用于大多数使用情况。有关详细信息，请参阅 about_Preference_Variables。

WinRM 服务使用该应用程序名称来选择为连接请求提供服务的侦听器。此参数的值应与远程计算机上的侦听器的 URLPrefix 属性值匹配。

是否为必需？ | false
位置？ | named
默认值 | WSMAN
是否接受管道输入？ | true (ByPropertyName)
是否接受通配符？ | false

-ArgumentList <Object[]>

提供命令中的局部变量的值。在远程计算机上运行此命令之前，将用这些值替换此命令中的变量。以逗号分隔的列表形式输入值。值按列出顺序与变量关联。ArgumentList 的别名为“Args”。

ArgumentList 中的值可以是实际值（如“1024”），也可以是对局部变量的引用（如“$max”）。

要在命令中使用局部变量，请使用如下命令格式：

{param($<name1>[, $<name2>]...)<command-with-local-variables>} -ArgumentList <value | $local-variable>

“param”关键字列出命令中使用的局部变量。ArgumentList 参数按变量列出的顺序提供变量的值。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-AsJob

在远程计算机上将命令作为后台作业运行。使用此参数可运行需要较长时间才能完成的命令。

使用 AsJob 时，此命令返回代表作业的对象，然后显示命令提示符。当作业完成时，您可以继续在此会话中工作。要管理作业，请使用 Job cmdlet。要获取作业结果，请使用 Receive-Job。

AsJob 参数类似于使用 Invoke-Command 远程运行 Start-Job 命令。但是，对于 AsJob，作业是在本地计算机上创建的，即使作业运行在远程计算机上也是如此，而且远程作业的结果会自动返回本地计算机。

有关 Windows PowerShell 后台作业的详细信息，请参阅 about_Jobs 和 about_Remote_Jobs。

是否为必需？ | false
位置？ | named
默认值 | 无
是否接受管道输入？ | false
是否接受通配符？ | false

-Authentication <AuthenticationMechanism>

指定用于对用户的凭据进行身份验证的机制。有效值为 Default、Basic、Credssp、Digest、Kerberos、Negotiate 和 NegotiateWithImplicitCredential。默认值为 Default。

CredSSP 身份验证仅在 Windows Vista、Windows Server 2008 和更高版本的 Windows 中可用。

有关该参数的值的信息，请参阅 MSDN 中 System.Management.Automation.Runspaces.AuthenticationMechanism 枚举的说明。

注意：在凭据安全服务提供程序 (CredSSP) 身份验证中，用户凭据传递到远程计算机中以进行验证，这种验证用于要求对多个资源（例如访问远程网络共享）进行验证的命令。此机制增加了远程操作的安全风险。如果远程计算机的安全受到威胁，则传递给该计算机的凭据可用于控制网络会话。

是否为必需？ | false
位置？ | named
默认值 | Default
是否接受管道输入？ | false
是否接受通配符？ | false

-CertificateThumbprint <string>

指定有权执行此操作的用户帐户的数字公钥证书 (X509)。输入证书的证书指纹。

证书用于基于客户端证书的身份验证。它们只能映射到本地用户帐户，而不适用于域帐户。

若要获取证书指纹，请在 Windows PowerShell Cert: 驱动器中使用 Get-Item 或 Get-ChildItem 命令。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-ComputerName <string[]>

指定运行此命令的计算机。默认值为本地计算机。

使用 ComputerName 参数时，Windows PowerShell 会创建一个临时连接，此连接仅用于运行指定的命令，之后将关闭。如果需要持续性连接，请使用 Session 参数。

在一个逗号分隔列表中键入一台或多台计算机的 NETBIOS 名称、IP 地址或完全限定的域名。要指定本地计算机，请键入计算机名称、“localhost”或句点 (.)。

若要在 ComputerName 参数的值中使用 IP 地址，命令必须包括 Credential 参数。另外，必须为计算机配置 HTTPS 传输，或者必须在本地计算机上的 WinRM TrustedHosts 列表中包含远程计算机的 IP 地址。有关将计算机名称添加到 TrustedHosts 列表的说明，请参阅 about_Remote_Troubleshooting 中的“如何将计算机添加到受信任主机列表中”。

注意：在 Windows Vista 以及更高版本的 Windows 上，要在 ComputerName 参数的值中包括本地计算机，必须使用“以管理员身份运行”选项打开 Windows PowerShell。

是否为必需？ | false
位置？ | 1
默认值 |
是否接受管道输入？ | true (ByPropertyName)
是否接受通配符？ | false

-ConfigurationName <string>

指定用于新 PSSession 的会话配置。

输入会话配置的配置名称或完全限定的资源 URI。如果只指定配置名称，那么将在该名称前面添加以下架构 URI：http://schemas.microsoft.com/powershell。

会话的会话配置位于远程计算机上。如果远程计算机上不存在指定的会话配置，命令会失败。

默认值为本地计算机上的 $PSSessionConfigurationName 首选项变量的值。如果未设置此首选项变量，则默认为 Microsoft.PowerShell。有关详细信息，请参阅 about_preference_variables。

是否为必需？ | false
位置？ | named
默认值 | http://Schemas.Microsoft.com/PowerShell/Microsoft.PowerShell
是否接受管道输入？ | true (ByPropertyName)
是否接受通配符？ | false

-ConnectionURI <Uri[]>

指定定义连接终结点的统一资源标识符 (URI)。URI 必须完全限定。

此字符串的格式为：

<Transport>://<ComputerName>:<Port>/<ApplicationName>

默认值为：

http://localhost:80/WSMAN

URI 的 Transport 段的有效值为 HTTP 和 HTTPS。如果未指定 ConnectionURI，则可以使用 UseSSL、ComputerName、Port 和 ApplicationName 参数指定 URI 值。

如果目标计算机将连接重定向到另一个 URI，Windows PowerShell 将阻止重定向，除非您在命令中使用了 AllowRedirection 参数。

是否为必需？ | false
位置？ | 1
默认值 | http://localhost:80/wsman
是否接受管道输入？ | true (ByPropertyName)
是否接受通配符？ | false

-Credential <PSCredential>

指定有权执行此操作的用户帐户。默认值为当前用户。

键入用户名（如“User01”或“Domain01\User01”），或输入包含 PSCredential 对象（如 Get-Credential cmdlet 生成的一个 PSCredential 对象）的变量。键入用户名时，将会提示您键入密码。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | true (ByPropertyName)
是否接受通配符？ | false

-FilePath <string>

在一台或多台远程计算机上运行指定的本地脚本。输入脚本的路径和文件名，或通过管道将脚本路径传递给 Invoke-Command。脚本必须位于本地计算机上或者本地计算机能够访问的目录中。使用 ArgumentList 参数指定脚本中的参数的值。

使用此参数时，Windows PowerShell 将指定脚本文件的内容转换为脚本块，并将此脚本块传输到远程计算机，然后在该远程计算机上运行此脚本块。

是否为必需？ | true
位置？ | 2
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-HideComputerName

在输出显示中省略每个对象的计算机名。默认情况下，显示内容中包括生成该对象的计算机的名称。

此参数仅影响输出显示。它不更改对象。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-InputObject <psobject>

指定命令的输入。请输入包含对象的变量，或者键入可获取对象的命令或表达式。

当使用 InputObject 时，在 ScriptBlock 参数的值中使用 $input 自动变量可表示输入对象。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | true (ByValue)
是否接受通配符？ | false

-JobName <string>

为后台作业指定一个友好名称。默认情况下，作业命名为“Job<n>”，其中 <n> 是一个序数。此参数只有在与 AsJob 参数一起使用时才有效。

如果在命令中使用 JobName 参数，该命令将作为作业运行，并且 Invoke-Command 将返回作业对象，即使您没有在命令中包括 AsJob 参数也是如此。

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

是否为必需？ | false
位置？ | named
默认值 | Job<n>
是否接受管道输入？ | false
是否接受通配符？ | false

-Port <int>

指定远程计算机上用于此命令的网络端口。默认值为端口 80（HTTP 端口）。

使用备用端口之前，必须将远程计算机上的 WinRM 侦听器配置为侦听该端口。若要配置侦听器，请在 Windows PowerShell 提示符下键入以下两条命令：

remove-item -path wsman:\Localhost\listener\listener* -recurse

new-item -path wsman:\Localhost\listener -Transport http -Address * -port <port-number>

除非确有必要，否则不要使用 Port 参数。命令中设置的 Port 应用于运行该命令的所有计算机或会话。备用端口设置可能使该命令无法在所有计算机上运行。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-ScriptBlock <scriptblock>

指定要运行的命令。用大括号 ({ }) 括起命令以形成脚本块。此参数是必需的。

默认情况下，将在远程计算机上对命令中的所有变量求值。要在命令中包括局部变量，请使用 ArgumentList 参数。

是否为必需？ | true
位置？ | 1
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Session <PSSession[]>

在指定的 Windows PowerShell 会话 (PSSession) 中运行此命令。输入包含 PSSessions 的变量或者用来创建或获取 PSSessions 的命令，如 New-PSSession 或 Get-PSSession 命令。

通过创建 PSSession，Windows PowerShell 可以建立与远程计算机的持续性连接。使用 PSSession 可以运行共享数据的一系列相关命令。若要运行单个命令或一系列不相关的命令，请使用 ComputerName 参数。

若要创建 PSSession，请使用 New-PSSession cmdlet。有关详细信息，请参阅 about_PSSessions。

是否为必需？ | false
位置？ | 1
默认值 |
是否接受管道输入？ | true (ByPropertyName)
是否接受通配符？ | false

-SessionOption <PSSessionOption>

为会话设置高级选项。输入使用 New-PSSessionOption cmdlet 创建的 SessionOption 对象。

这些选项的默认值由 $PSSessionOption 首选项变量的值（如果设置了该变量）确定。否则，会话使用系统默认值。

有关会话选项（包括默认值）的说明，请参阅 New-PSSessionOption cmdlet 的帮助主题。有关 $PSSessionOption 首选项变量的信息，请参阅 about_Preference_Variables。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-ThrottleLimit <int>

指定为运行此命令可建立的并发连接的最大数目。如果省略此参数或输入 0 值，则使用默认值 32。

节流限制仅适用于当前命令，而不适用于会话或计算机。

是否为必需？ | false
位置？ | named
默认值 | 32
是否接受管道输入？ | false
是否接受通配符？ | false

-UseSSL

使用安全套接字层 (SSL) 协议来建立与远程计算机的连接。默认情况下，不使用 SSL。

WS-Management 加密通过网络传输的所有 Windows PowerShell 内容。UseSSL 是一种额外的保护措施，它通过 HTTPS（而不是 HTTP）发送数据。

如果使用此参数，但 SSL 在用于此命令的端口上不可用，命令将失败。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

<CommonParameters>

此 cmdlet 支持通用参数：-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。有关详细信息，请参阅 about_Commonparameters.

输入和输出

输入类型是指可通过管道传递给 cmdlet 的对象的类型。返回类型是指 Cmdlet 所返回对象的类型。

输入 | System.Management.Automation.ScriptBlock 您可以将脚本块中的命令通过管道传送到 Invoke-Command。使用 $input 自动变量可表示命令中的输入对象。
输出 | System.Management.Automation.PSRemotingJob or the output of the invoked command 使用 AsJob 参数时，Invoke-Command 会返回作业对象。在其他情况下，它返回所调用命令（ScriptBlock 参数的值）的输出。

说明

-- 在 Windows Vista 以及更高版本的 Windows 上，要使用 Invoke-Command 的 ComputerName 参数在本地计算机上运行命令，必须使用“以管理员身份运行”选项打开 Windows PowerShell。

-- 在多台计算机上运行命令时，Windows PowerShell 会按列表中显示的顺序连接到各台计算机。但是，显示命令输出的顺序是从远程计算机接收命令的顺序。这两个顺序可能不同。

-- 命令结果中包括 Invoke-Command 运行的命令的结果。属于本地命令中的终止错误的错误被视为远程命令中的非终止错误。此策略可以确保一台计算机上的终止错误不会在运行该命令的所有计算机上终止该命令。即使在一台计算机上运行远程命令，也使用这种做法。

-- 如果远程计算机不在本地计算机信任的域中，该计算机可能无法对用户凭据进行身份验证。若要将远程计算机添加到 WS-Management 中的“受信任的主机”列表中，请在 WSMAN 提供程序中使用以下命令，其中 <Remote-Computer-Name> 是远程计算机的名称：

set-item -path wsman:\Localhost\Client\TrustedHosts -value <Remote-Computer-Name>。

示例 1

C:\PS>invoke-command -filepath c:\scripts\test.ps1 -computerName Server01

Disks: C:, D:, E:
Status: Warning, Normal, Normal

说明
-----------
此命令在 Server01 计算机上运行 Test.ps1 脚本。

该命令使用 FilePath 参数指定位于本地计算机的脚本。该脚本在远程计算机上运行，而结果将返回到本地计算机。

示例 2

C:\PS>invoke-command -computername server01 -credential domain01\user01 -scriptblock {get-culture}

说明
-----------
此命令在 Server01 远程计算机上运行 Get-Culture 命令。

它使用 ComputerName 参数指定计算机名，使用 Credential 参数在“Domain01\User01”（有权运行命令的用户）的安全上下文中运行命令。它使用 ScriptBlock 参数来指定要在远程计算机上运行的命令。

作为响应，Windows PowerShell 显示一个对话框，请求提供 User01 帐户的密码和身份验证方法。然后，在 Server01 计算机上运行该命令并返回结果。

示例 3

C:\PS>$s = new-pssession -computername server02 -credential domain01\user01

C:\PS> invoke-command -session $s -scriptblock {get-culture}

说明
-----------
此示例在 Server02 远程计算机上的一个会话（持续性连接）中运行相同的“Get-Culture”命令。通常，仅当要在远程计算机上运行一系列命令时，才创建会话。

第一个命令使用 New-PSSession cmdlet 在 Server02 远程计算机上创建一个会话，然后，将该会话保存在 $s 变量中。

第二个命令使用 Invoke-Command cmdlet 在 Server02 上运行 Get-Culture 命令。它使用 Session 参数指定保存在 $s 变量中的会话。

作为响应，Windows PowerShell 在 Server02 计算机上的会话中运行此命令。

示例 4

C:\PS>invoke-command -computername Server02 -scriptblock {$p = get-process powershell}

C:\PS> invoke-command -computername Server02 -scriptblock {$p.virtualmemorysize}
C:\PS>

C:\PS> $s = new-pssession -computername Server02
C:\PS> invoke-command -session $s -scriptblock {$p = get-process powershell}
C:\PS> invoke-command -session $s -scriptblock {$p.virtualmemorysize}
17930240

说明
-----------
此示例比较使用 Invoke-Command 的 ComputerName 和 Session 参数的效果。它说明如何使用一个会话来运行一系列共享相同数据的命令。

前两个命令使用 Invoke-Command 的 ComputerName 参数在 Server02 远程计算机上运行命令。第一个命令使用 Get-Process 命令获取远程计算机上的 PowerShell 进程，并将它保存在 $p 变量中。第二个命令获取 PowerShell 进程的 VirtualMemorySize 属性的值。

第一条命令执行成功。但第二条命令失败，因为当您使用 ComputerName 参数时，Windows PowerShell 创建一个用于运行该命令的连接。然后，当该命令完成后，Windows PowerShell 会关闭该连接。$p 变量是在一个连接中创建的，但在为第二个命令创建的连接中不存在。

解决此问题的方法是：在远程计算机上创建一个会话（持续性连接），然后在同一会话中运行这两个相关的命令。

第三个命令使用 New-PSSession cmdlet 在 Server02 计算机上创建一个会话，然后，将该会话保存在 $s 变量中。第四个和第五个命令重复在第一个集合中使用的一系列命令，但在本例中，Invoke-Command 命令使用 Session 参数在同一会话中运行这两个命令。

在本例中，由于两个命令在同一会话中运行，因此命令会成功，且 $p 值在 $s 会话中保持活动状态以供将来使用。

示例 5

C:\PS>$command = { get-eventlog -log "windows powershell" | where {$_.message -like "*certificate*"} }

C:\PS> invoke-command -computername S1, S2 -scriptblock $command

说明
-----------
此示例说明如何输入保存在局部变量中的命令。

整个命令保存在局部变量中时，可以将变量指定为 ScriptBlock 参数的值。您不必使用“param”关键字或 ArgumentList 变量来提交局部变量的值。

第一个命令将 Get-Eventlog 命令保存在 $command 变量中。此命令设置为脚本块格式。

第二个命令使用 Invoke-Command cmdlet 在 S1 和 S2 远程计算机上运行 $command 中的命令。

示例 6

C:\PS>invoke-command -computername server01, server02, TST-0143, localhost -configurationname MySession.PowerShell -scriptblock {get-eventlog "windows powershell"}

说明
-----------
此示例演示如何使用 Invoke-Command cmdlet 在多台计算机上运行一个命令。

此命令使用 ComputerName 参数来指定计算机。计算机名在以逗号分隔的列表中提供。计算机列表包括表示本地计算机的“localhost”值。

该命令使用 ConfigurationName 参数来指定 Windows PowerShell 的替代会话配置，并使用 ScriptBlock 参数来指定命令。

在本例中，脚本块中的命令获取每台远程计算机上的 Windows PowerShell 事件日志中的事件。

示例 7

C:\PS>$version = invoke-command -computername (get-content machines.txt) -scriptblock {(get-host).version}

说明
-----------
此命令获取在 200 台远程计算机上运行的 Windows PowerShell 主机的版本。

由于只运行一个命令，因此不必创建与每台计算机的持续性连接（会话），而是由此命令使用 ComputerName 参数来指定计算机。

此命令使用 Invoke-Command cmdlet 来运行 Get-Host 命令。它使用点表示法来获取 Windows PowerShell 主机的 Version 属性。

为了指定计算机，它使用 Get-Content cmdlet 来获取 Machine.txt 文件（计算机名称文件）的内容。

这些命令同步运行（一次一个）。这些命令完成时，来自所有计算机的命令输出保存在 $version 变量中。输出包括数据来源计算机的名称。

示例 8

C:\PS>$s = new-pssession -computername Server01, Server02

C:\PS> invoke-command -session $s -scriptblock {get-eventlog system} -AsJob

Id   Name    State      HasMoreData   Location           Command
---  ----    -----      -----         -----------        --------             -------
1    Job1    Running    True          Server01,Server02  get-eventlog system

C:\PS> $j = Get-Job

C:\PS> $j | format-list -property *

HasMoreData   : True
StatusMessage :
Location      : Server01,Server02
Command       : get-eventlog system
JobStateInfo  : Running
Finished      : System.Threading.ManualResetEvent
InstanceId    : e124bb59-8cb2-498b-a0d2-2e07d4e030ca
Id            : 1
Name          : Job1
ChildJobs     : {Job2, Job3}
Output        : {}
Error         : {}
Progress      : {}
Verbose       : {}
Debug         : {}
Warning       : {}
StateChanged  :

C:\PS> $results = $j | Receive-Job

说明
-----------
这些命令在两台远程计算机上运行一个后台作业。因为 Invoke-Command 命令使用 AsJob 参数，所以这些命令在远程计算机上运行，但作业实际驻留在本地计算机中，并且结果也传送到本地计算机。

第一个命令使用 New-PSSession cmdlet 在 Server01 和 Server02 远程计算机上创建会话，

第二个命令使用 Invoke-Command cmdlet 在每个会话中运行后台作业。此命令使用 AsJob 参数将命令作为后台作业运行。该命令返回一个包含两个子作业对象的作业对象，每个子作业对象分别对应于在两台远程计算机上运行的每个作业。

第三个命令使用 Get-Job 命令将作业对象保存在 $j 变量中。

第四个命令使用管道运算符 (|) 将 $j 变量的值发送到 Format-List cmdlet，后者在列表中显示作业对象的所有属性。

第五个命令获取作业的结果。它将 $j 中的作业对象通过管道传送给 Receive-Job cmdlet，并将结果存储在 $results 变量中。

示例 9

C:\PS>$MWFO-LOg = Microsoft-Windows-Forwarding/Operational

C:\PS> invoke-command -computername server01 -scriptblock {param($log, $num) get-eventlog -logname $log -newest $num} -ArgumentList $MWFO-log, 10

说明
-----------
此示例说明如何在运行于远程计算机上的命令中包括局部变量的值。

第一个命令将 Microsoft-Windows-Forwarding/Operational 事件日志的名称保存在 $MWFO-Log 变量中。

第二个命令使用 Invoke-Command cmdlet 在 Server01 远程计算机上运行一个 Get-EventLog 命令，以获取 Server01 上的 Microsoft-Windows-Forwarding/Operational 事件日志中的 10 个最新事件。

此命令使用“param”关键字创建两个变量 $log 和 $num，这两个变量在 Get-EventLog 命令中用作占位符。这些占位符的名称是任意的，不需要匹配为其提供值的局部变量的名称。

ArgumentList 参数的值演示了指定参数列表中的值的两种不同方法。$log 占位符的值是在第一个命令中定义的 $MFWO-Log 变量。$num 变量的值为 10。

在命令发送到远程计算机之前，变量将替换为指定的值。

示例 10

C:\PS>invoke-command -computername S1, S2 -scriptblock {get-process powershell}

PSComputerName    Handles  NPM(K)    PM(K)      WS(K) VM(M)   CPU(s)     Id   ProcessName
--------------    -------  ------    -----      ----- -----   ------     --   -----------
S1                575      15        45100      40988   200     4.68     1392 powershell
S2                777      14        35100      30988   150     3.68     67   powershell

C:\PS> invoke-command -computername S1, S2 -scriptblock {get-process powershell} -HideComputerName

Handles  NPM(K)    PM(K)      WS(K) VM(M)   CPU(s)     Id   ProcessName
-------  ------    -----      ----- -----   ------     --   -----------
575      15        45100      40988   200     4.68     1392 powershell
777      14        35100      30988   150     3.68     67   powershell

说明
-----------
此示例说明使用 Invoke-Command 的 HideComputerName 参数的效果。

前两个命令使用 Invoke-Command cmdlet 对 PowerShell 进程运行 Get-Process 命令。第一个命令的输出包括 PsComputerName 属性，此属性包含运行该命令的计算机的名称。第二个命令使用 HideComputerName 参数，该命令的输出不包括 PsComputerName 列。

使用 HideComputerName 参数不会更改该对象。您仍然可以使用 Format cmdlet 来显示任何受影响的对象的 PsComputerName 属性。

示例 11

C:\PS>invoke-command -comp (get-content servers.txt) -filepath c:\scripts\sample.ps1 -argumentlist Process, Service

说明
-----------
此示例使用 Invoke-Command cmdlet 在 Servers.txt 文件中列出的所有计算机上运行 Sample.ps1 脚本。该命令使用 FilePath 参数来指定脚本文件。使用该命令可以在远程计算机上运行脚本，即使远程计算机无法访问脚本文件也是如此。

提交该命令时，Sample.ps1 文件的内容复制到脚本块中，且脚本块在每台远程计算机上运行。此过程等效于使用 ScriptBlock 参数来提交脚本的内容。

示例 12

C:\PS>$LiveCred = Get-Credential

C:\PS> Invoke-Command -ConfigurationName Microsoft.Exchange `
         -ConnectionUri https://ps.exchangelabs.com/powershell `
         -Credential $LiveCred  -Authentication Basic `
         -scriptblock {Invoke-Command {Set-Mailbox dan -DisplayName "Dan Park"}

说明
-----------
此示例说明如何在由 URI（Internet 地址）标识的远程计算机上运行命令。此特定示例在远程 Exchange 服务器上运行一个 Set-Mailbox 命令。命令中的倒引号 (`) 是 Windows PowerShell 继续符。

第一条命令使用 Get-Credential cmdlet 将 Windows Live ID 凭据存储在 $LiveCred 变量中。在出现凭据对话框时，输入 Windows Live ID 凭据。

第二条命令使用 Invoke-Command cmdlet 运行 Set-Mailbox 命令。该命令使用 ConfigurationName 参数来指定该命令应在使用 Microsoft.Exchange 会话配置的会话中运行。ConnectionURI 参数指定 Exchange 服务器终结点的 URL。

credential 参数指定 $LiveCred 变量中存储的 Windows Live 凭据。AuthenticationMechanism 参数指定基本身份验证的使用。ScriptBlock 参数指定包含命令的脚本块。

示例 13

C:\PS>$max = New-PSSessionOption -MaximumRedirection 1

C:\PS> Invoke-Command -ConnectionUri https://ps.exchangelabs.com/powershell `
         -scriptblock {Invoke-Command {Get-Mailbox dan} `
         -AllowRedirection -SessionOption $max

说明
-----------
此命令说明如何使用 AllowRedirection 和 SessionOption 参数来管理远程命令中的 URI 重定向。

第一个命令使用 New-PSSessionOption cmdlet 来创建 PSSessionOpption 对象，并将该对象保存在 $max 变量中。该命令使用 MaximumRedirection 参数将 PSSessionOption 对象的 MaximumConnectionRedirectionCount 属性设置为 1。

第二个命令使用 Invoke-Command cmdlet 在运行 Microsoft Exchange Server 的远程服务器上运行 Get-Mailbox 命令。此命令使用 AllowRedirection 参数来提供将连接重定向到替代终结点的显式许可。它还使用 SessionOption 参数指定 $max 变量中的会话对象。

因此，如果 ConnectionURI 参数指定的远程计算机返回一个重定向消息，Windows PowerShell 将重定向该连接，但如果新目的地返回另一个重定向消息，则超过了重定向计数值 1，Invoke-Command 将返回一个非终止错误。

示例 14

C:\PS>$so = New-PSSessionOption -SkipCACheck

PS C:\> invoke-command $s { get-hotfix } -SessionOption $so -credential server01\user01

说明
-----------
此示例说明如何创建和使用 SessionOption 参数。

第一个命令使用 New-PSSessionOption cmdlet 创建会话选项。它将生成的 SessionOption 对象保存在 $so 参数中。

第二个命令使用 Invoke-Command cmdlet 远程运行一个 Get-Hotfix 命令。SessionOption 参数的值是 $so 变量中的 SessionOption 对象。

示例 15

C:\PS>enable-wsmanCredSSP -delegate server02

C:\PS> connect-wsman Server02

C:\PS> set-item wsman:\server02*\service\auth\credSSP -value $true

C:\PS> $s = new-pssession server02

C:\PS> invoke-command -session $s -script {get-item \\Net03\Scripts\LogFiles.ps1} -authentication credssp -credential domain01\admin01

说明
-----------
此示例说明如何从远程会话中访问网络共享。

该命令要求在本地计算机的客户端设置中以及远程计算机的服务设置中启用 CredSSP 委派。若要运行此示例中的命令，您必须是本地计算机和远程计算机上的 Administrators 组的成员。

第一条命令使用 Enable-WSManCredSSP cmdlet 启用从本地计算机 Server01 到远程计算机 Server02 的 CredSSP 委派。这会在本地计算机上配置 CredSSP 客户端设置。

第二条命令使用 Connect-WSman cmdlet 连接到计算机 Server02。此操作在本地计算机上的 WSMan: 驱动器中为计算机 Server02 添加一个节点，从而允许您查看和更改计算机 Server02 上的 WS-Management 设置。

第三条命令使用 Set-Item cmdlet 将计算机 Server02 的 Service 节点中 CredSSP 项的值更改为 True。此操作会在远程计算机上的服务设置中启用 CredSSP。

第四条命令使用 New-PSSession cmdlet 在计算机 Server02 上创建一个 PSSession。它将 PSSession 保存在 $s 变量中。

第五条命令使用 Invoke-Command cmdlet 在 $s 中的会话中运行从 Net03\Scripts 网络共享获取脚本的 Get-Item 命令。该命令使用 Credential 参数，并使用值为 CredSSP 的 Authentication 参数。

另请参阅

  • about_Remote
  • about_PSSessions
  • New-PSSession
  • Get-PSSession
  • Remove-PSSession
  • Enter-PSSession
  • Exit-PSSession
  • WSMan Provider


Invoke-Expression

在本地计算机上运行命令或表达式。

语法

Invoke-Expression [-Command] <string> [<CommonParameters>]

说明

Invoke-Expression cmdlet 以命令形式计算或运行指定的字符串，并返回表达式或命令的结果。如果没有 Invoke-Expression，在命令行提交的字符串将原样返回（回显）。

参数

-Command <string>

指定要运行的命令或表达式。键入该命令或表达式，或输入包含该命或表达式的变量。 Command 参数是必需的。

是否为必需？ | true
位置？ | 1
默认值 |
是否接受管道输入？ | true (ByValue)
是否接受通配符？ | false

<CommonParameters>

此 cmdlet 支持通用参数：-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。有关详细信息，请参阅 about_Commonparameters.

输入和输出

输入类型是指可通过管道传递给 cmdlet 的对象的类型。返回类型是指 Cmdlet 所返回对象的类型。

输入 | System.String 或 PSObject 可以通过管道将表示命令的对象传递到 Invoke-Expression。使用 $input 自动变量可表示命令中的输入对象。
输出 | PSObject 返回所调用的命令生成的输出（Command 参数的值）。

说明

-- 表达式是可以计算并生成结果的语句，如 Windows PowerShell 命令。

-- 在脚本中使用 Invoke-Expression cmdlet 时一定要谨慎。使用 Invoke-Expression 运行用户输入的命令时，在运行前需要验证该命令是安全的。通常，最好设计脚本包含预定义的输入选项，而不允许随意输入。

示例 1

C:\PS>$command = "Get-Process"

C:\PS> $command
Get-Process

C:\PS> invoke-expression $command

Handles  NPM(K)    PM(K)      WS(K) VM(M)   CPU(s)     Id ProcessName
-------  ------    -----      ----- -----   ------     -- -----------
    296       4     1572       1956    20     0.53   1348 AdtAgent
    270       6     1328        800    34     0.06   2396 alg
     67       2      620        484    20     0.22    716 ati2evxx
   1060      15    12904      11840    74    11.48    892 CcmExec
   1400      33    25280      37544   223    38.44   2564 communicator
...

说明
-----------
此示例演示了如何使用 Invoke-Expression 计算表达式。如果没有 Invoke-Expression，将输出表达式，但不计算。

第一个命令将“Get-Process”的值（字符串）赋值给 $command 变量。

第二个命令显示在命令行键入变量名称的效果。Windows PowerShell 回显该字符串。

第三个命令使用 Invoke-Expression 计算该字符串。

示例 2

C:\PS>invoke-expression -command "C:\ps-test\testscript.ps1"

C:\PS> "C:\ps-test\testscript.ps1" | invoke-expression

说明
-----------
这些命令使用 Invoke-Expression 在本地计算机上运行脚本 TestScript.ps1。这两个命令是等效的。第一个命令使用 Command 参数来指定要运行的命令。第二个命令使用管道运算符 (|) 将命令字符串发送到 Invoke-Expression。

示例 3

C:\PS>$cmd = 'get-process | where {$_.cpu -gt 1000}'

C:\PS> iex $command

说明
-----------
此示例运行 $cmd 变量中保存的一个命令字符串。

该命令字符串括在单引号中，因为它包含一个变量 $_，该变量表示当前对象。如果该命令字符串括在双引号中，$_ 变量在被保存在 $command 字符串中之前将被它自己的值所替换。

示例 4

C:\PS>$cmdlet_name = "get-eventlog"

C:\PS> $example_number = 1

C:\PS> $example_code = (get-help $cmdlet_name).examples.example[($example_number-1)].code

C:\PS> invoke-expression $example_code

说明
-----------
此命令检索和运行 Get-EventLog cmdlet 帮助主题中的第一个示例。

若要运行其他 cmdlet 的示例，请将 $cmdlet_name 变量的值更改为该 cmdlet 的名称。另外，请要将 $example_number 变量更改为要运行的示例编号。如果示例数字无效，该命令将失败。

另请参阅

  • Invoke-Command


Invoke-History

从会话历史记录中运行命令。

语法

Invoke-History [[-Id] <string>] [-Confirm] [-WhatIf] [<CommonParameters>]

说明

Invoke-History cmdlet 从会话历史记录中运行命令。您可以将表示命令的对象从 Get-History 传递给 Invoke-History，或者通过使用命令 ID 号来标识当前历史记录中的命令。若要查找命令的标识号，请使用 Get-History。

参数

-Id <string>

标识历史记录中的命令。您可以键入命令的 ID 号或命令的头几个字符。

如果键入字符，则 Invoke-History 首先匹配最近的命令。如果省略此参数，则 Invoke-History 运行最后一个（最近的）命令。参数名（“id”）为可选项。若要查找命令的 ID 号，请使用 Get-History。

是否为必需？ | false
位置？ | 1
默认值 |
是否接受管道输入？ | true (ByPropertyName)
是否接受通配符？ | false

-Confirm

在执行命令之前提示您进行确认。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-WhatIf

描述如果执行该命令会发生什么情况（无需实际执行该命令）。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

<CommonParameters>

此 cmdlet 支持通用参数：-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。有关详细信息，请参阅 about_Commonparameters.

输入和输出

输入类型是指可通过管道传递给 cmdlet 的对象的类型。返回类型是指 Cmdlet 所返回对象的类型。

输入 | None 不能通过管道将输入传递给此 cmdlet。
输出 | None Invoke-History 不生成任何输出，但 Invoke-History 运行的命令可能会生成输出。

说明

会话历史记录是会话期间输入的命令（包含 ID）的列表。会话历史记录表示命令的执行顺序、状态以及开始和结束时间。输入每条命令时，Windows PowerShell 会将其添加到历史记录中，以便对其进行重复利用。有关会话历史记录的详细信息，请参阅 about_History。

还可以使用 Invoke-History 的内置别名“r”和“ihy”来对其进行引用。有关详细信息，请参阅 about_Aliases。

示例 1

C:\PS>invoke-history

说明
-----------
此命令运行会话历史记录中的最后一个（最近的）命令。您可以将此命令缩写为“r”（指“repeat”或“rerun”），这是 Invoke-History 的别名。

示例 2

C:\PS>invoke-history -id 132

说明
-----------
此命令运行会话历史记录中 ID 为 132 的命令。由于 Id 参数的名称是可选的，因此，可以将此命令缩写为“Invoke-History 132”、“ihy 132”或“r 132”。

示例 3

C:\PS>invoke-history get-pr

说明
-----------
此命令运行会话历史记录中的最近的 Get-Process 命令。在键入 Id 参数的字符时，Invoke-History 运行它发现的匹配该模式的第一个命令（从最近的命令开始）。此命令使用 ID 参数，但省略可选的参数名。

示例 4

C:\PS>invoke-history (16..24), 27

说明
-----------
此命令运行命令 16 至 24 及命令 27。您可以列出用逗号分隔的多个 ID 和 ID 范围。

示例 5

C:\PS>get-history -id 255 -count 7 | invoke-history

说明
-----------
此命令运行历史记录中以命令 255 结束的 7 个命令（通常是 249 到 255）。它使用 Get-History cmdlet 检索命令。管道运算符 (|) 将命令传递给 Invoke-History，后者执行这些命令。

另请参阅

  • about_History
  • Get-History
  • Add-History
  • Clear-History


Invoke-Item

对指定项执行默认操作。

语法

Invoke-Item [-LiteralPath] <string[]> [-Credential <PSCredential>] [-Exclude <string[]>] [-Filter <string>] [-Include <string[]>] [-Confirm] [-WhatIf] [-UseTransaction] [<CommonParameters>]

Invoke-Item [-Path] <string[]> [-Credential <PSCredential>] [-Exclude <string[]>] [-Filter <string>] [-Include <string[]>] [-Confirm] [-WhatIf] [-UseTransaction] [<CommonParameters>]

说明

Invoke-Item cmdlet 对指定项执行默认操作。例如，它运行可执行文件或在与某一文档文件类型关联的应用程序中打开该文档文件。默认操作具体取决于项类型，并由提供对数据的访问的 Windows PowerShell 提供程序确定。

参数

-Credential <PSCredential>

指定有权执行此操作的用户帐户。默认值为当前用户。

键入用户名，如“User01”或“Domain01\User01”；或输入 PSCredential 对象，如 Get-Credential cmdlet 生成的一个 PSCredential 对象。如果键入用户名，则将提示您输入密码。

随同 Windows PowerShell 一起安装的任何提供程序都不支持此参数。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | true (ByPropertyName)
是否接受通配符？ | false

-Exclude <string[]>

忽略指定项。此参数的值对 Path 参数进行限定。请输入路径元素或模式，例如“*.txt”。允许使用通配符。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Filter <string>

以提供程序的格式或语言指定筛选器。此参数的值对 Path 参数进行限定。筛选器的语法（包括通配符的使用）取决于提供程序。筛选器比其他参数更有效，因为提供程序是在检索对象时应用筛选器，而不是在检索对象后再由 Windows PowerShell 筛选对象。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Include <string[]>

仅对指定项执行默认操作。此参数的值对 Path 参数进行限定。请输入路径元素或模式，例如“*.txt”。允许使用通配符。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-LiteralPath <string[]>

指定项的路径。LiteralPath 的值严格按照所键入的形式使用。不会将任何字符解释为通配符。如果路径包括转义符，请将其括在单引号中。单引号会告知 Windows PowerShell 不要将所有字符都解释为转义序列。

是否为必需？ | true
位置？ | 1
默认值 |
是否接受管道输入？ | true (ByPropertyName)
是否接受通配符？ | false

-Path <string[]>

指定所选项的路径。

是否为必需？ | true
位置？ | 1
默认值 |
是否接受管道输入？ | true (ByValue, ByPropertyName)
是否接受通配符？ | false

-Confirm

在执行命令之前提示您进行确认。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-WhatIf

描述如果执行该命令会发生什么情况（无需实际执行该命令）。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-UseTransaction

将命令包含在活动事务中。仅当正在执行事务时，此参数才有效。有关详细信息，请参阅 about_Transactions。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

<CommonParameters>

此 cmdlet 支持通用参数：-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。有关详细信息，请参阅 about_Commonparameters.

输入和输出

输入类型是指可通过管道传递给 cmdlet 的对象的类型。返回类型是指 Cmdlet 所返回对象的类型。

输入 | System.String 可以通过管道将包含路径的字符串传递给 Invoke-Item。
输出 | None 此命令不产生任何输出。但它调用的项可能会产生输出。

说明

Invoke-Item cmdlet 用于处理由任何提供程序公开的数据。若要列出会话中可用的提供程序，请键入“Get-PsSProvider”。有关详细信息，请参阅 about_Providers。

示例 1

C:\PS>invoke-item C:\Test\aliasApr04.doc

说明
-----------
此命令在 Microsoft Office Word 中打开文件 aliasApr04.doc。在本例中，默认操作是在 Word 中打开（对于 .doc 文件）。

示例 2

C:\PS>invoke-item "C:\Documents and Settings\Lister\My Documents\*.xls"

说明
-----------
此命令打开 C:\Documents and Settings\Lister\My Documents 文件夹中所有的 Microsoft Office Excel 电子表格。每个电子表格均在 Excel 的新实例中打开。在本例中，默认操作是在 Excel 中打开（对于 .xls 文件）。

另请参阅

  • about_Providers
  • Clear-Item
  • Get-Item
  • Move-Item
  • Set-Item
  • New-Item
  • Remove-Item
  • Rename-Item
  • Copy-Item


Invoke-WmiMethod

调用 Windows Management Instrumentation (WMI) 方法。

语法

Invoke-WmiMethod [-类] <string> [[-ArgumentList] <Object[]>] [-Authentication {<Default> | <None> | <Connect> | <Call> | <Packet> | <PacketIntegrity> | <PacketPrivacy> | <Unchanged>}] [-Authority <string>] [-ComputerName <string[]>] [-Credential <PSCredential>] [-EnableAllPrivileges] [-Impersonation {<Default> | <Anonymous> | <Identify> | <Impersonate> | <Delegate>}] [-Locale <string>] [-命名空间 <string>] [-Name] <string> [-AsJob] [-ThrottleLimit <int>] [-Confirm] [-WhatIf] [<CommonParameters>]

Invoke-WmiMethod [-Authentication {<Default> | <None> | <Connect> | <Call> | <Packet> | <PacketIntegrity> | <PacketPrivacy> | <Unchanged>}] [-Authority <string>] [-ComputerName <string[]>] [-Credential <PSCredential>] [-EnableAllPrivileges] [-Impersonation {<Default> | <Anonymous> | <Identify> | <Impersonate> | <Delegate>}] [-Locale <string>] [-命名空间 <string>] [-Name] <string> [-AsJob] [-ThrottleLimit <int>] [-Confirm] [-WhatIf] [<CommonParameters>]

Invoke-WmiMethod -InputObject <ManagementObject> [-ArgumentList <Object[]>] [-Name] <string> [-AsJob] [-ThrottleLimit <int>] [-Confirm] [-WhatIf] [<CommonParameters>]

Invoke-WmiMethod -Path <string> [-ArgumentList <Object[]>] [-Authentication {<Default> | <None> | <Connect> | <Call> | <Packet> | <PacketIntegrity> | <PacketPrivacy> | <Unchanged>}] [-Authority <string>] [-ComputerName <string[]>] [-Credential <PSCredential>] [-EnableAllPrivileges] [-Impersonation {<Default> | <Anonymous> | <Identify> | <Impersonate> | <Delegate>}] [-Locale <string>] [-命名空间 <string>] [-Name] <string> [-AsJob] [-ThrottleLimit <int>] [-Confirm] [-WhatIf] [<CommonParameters>]

Invoke-WmiMethod [-Authentication {<Default> | <None> | <Connect> | <Call> | <Packet> | <PacketIntegrity> | <PacketPrivacy> | <Unchanged>}] [-Authority <string>] [-ComputerName <string[]>] [-Credential <PSCredential>] [-EnableAllPrivileges] [-Impersonation {<Default> | <Anonymous> | <Identify> | <Impersonate> | <Delegate>}] [-Locale <string>] [-命名空间 <string>] [-Name] <string> [-AsJob] [-ThrottleLimit <int>] [-Confirm] [-WhatIf] [<CommonParameters>]

Invoke-WmiMethod [-Authentication {<Default> | <None> | <Connect> | <Call> | <Packet> | <PacketIntegrity> | <PacketPrivacy> | <Unchanged>}] [-Authority <string>] [-ComputerName <string[]>] [-Credential <PSCredential>] [-EnableAllPrivileges] [-Impersonation {<Default> | <Anonymous> | <Identify> | <Impersonate> | <Delegate>}] [-Locale <string>] [-命名空间 <string>] [-Name] <string> [-AsJob] [-ThrottleLimit <int>] [-Confirm] [-WhatIf] [<CommonParameters>]

说明

Invoke-WmiMethod cmdlet 调用 WMI 方法。

参数

-ArgumentList <Object[]>

指定要传递给被调用方法的参数。此参数的值必须是对象数组，这些对象必须按被调用方法所需的顺序进行显示。

重要说明：需要有另外一个 $null 值，否则此命令将生成一个错误，例如“Unable to cast object of type 'System.Byte' to type 'System.Array'.”。

下面的示例使用一个对象数组 ($binSD)，并且后跟一个 null 值 ($null)：

PS C:\> $acl = Get-Acl test.txt

PS C:\> $binSD = $acl.GetSecurityDescriptorBinaryForm()

PS C:\> invoke-wmimethod -class Win32_SecurityDescriptorHelper -Name BinarySDToSDDL -argumentlist $binSD, $null

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-AsJob

将命令作为后台作业运行。使用此参数可运行需要较长时间才能完成的命令。

使用 AsJob 参数时，该命令返回表示后台作业的对象，然后显示命令提示符。当作业完成时，您可以继续在此会话中工作。如果 Invoke-WmiMethod 用于远程计算机，则作业在本地计算机上创建，并且来自远程计算机的结果将自动返回本地计算机。若要管理作业，请使用包含 Job 名词的 cmdlet (Job cmdlet)。要获取作业结果，请使用 Receive-Job cmdlet。

注意：若要将此参数用于远程计算机，必须为本地和远程计算机配置远程处理。此外，在 Windows Vista 和更高版本的 Windows 中，必须使用“以管理员身份运行”选项启动 Windows PowerShell。有关详细信息，请参阅 about_Remote_Requirements。

有关 Windows PowerShell 后台作业的详细信息，请参阅 about_Jobs 和 about_Remote_Jobs。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Authentication <AuthenticationLevel>

指定用于 WMI 连接的身份验证级别。有效值包括：

-1：不变

0：默认值

1：无（不执行身份验证。）

2：连接（仅当客户端与应用程序建立了关系时才执行身份验证。）

3：调用（应用程序收到请求时只在每次调用的开始执行身份验证。）

4：数据包（对从客户端收到的所有数据执行身份验证。）

5：数据包整体性（所有在客户端和应用程序之间传送的数据都经过身份验证和验证。）

6：数据包保密性（使用其他身份验证等级的属性，并且所有数据都加密。）

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Authority <string>

指定用于对 WMI 连接进行身份验证的授权机构。可以指定标准 NTLM 或 Kerberos 身份验证。若要使用 NTLM，请将授权机构设置设为“ntlmdomain:<DomainName>”，其中 <DomainName> 标识有效的 NTLM 域名。若要使用 Kerberos，请指定 kerberos:<DomainName\ServerName>。连接到本地计算机时不能包含授权机构设置。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-类 <string>

指定包含要调用的静态方法的 WMI 类。

是否为必需？ | true
位置？ | 1
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-ComputerName <string[]>

指定要对其运行管理操作的计算机。值可以是完全限定的域名、NetBIOS 名称或 Internet 协议 (IP) 地址。使用本地计算机名称、localhost 或点 (.)指定本地计算机。默认值为本地计算机。当远程计算机与用户位于不同的域时，必须使用完全限定的域名。还可以通过使用管道将值传递给此参数来设置该参数的值。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Credential <PSCredential>

指定有权执行此操作的用户帐户。默认值为当前用户。键入用户名，例如“User01”、“Domain01\User01”或 User@Contoso.com。或者，输入 PSCredential 对象，例如 Get-Credential cmdlet 返回的对象。键入用户名时，将会提示您键入密码。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-EnableAllPrivileges

在命令进行 WMI 调用之前，启用当前用户的所有权限。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Impersonation <ImpersonationLevel>

指定要使用的模拟级别。有效值包括：

0：默认值（读取本地注册表的默认模拟级别，通常设置为“3：模拟”。）

1：匿名（隐藏调用方的凭据。）

2：标识（允许对象查询调用方的凭据。）

3：模拟（允许对象使用调用方的凭据。）

4：委派（允许对象允许其他对象使用调用方的凭据。）

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-InputObject <ManagementObject>

指定要用作输入的 ManagementObject 对象。如果使用此参数，则忽略 Flag 和 Argument 参数之外的所有其他参数。

是否为必需？ | true
位置？ | named
默认值 |
是否接受管道输入？ | true (ByValue)
是否接受通配符？ | false

-Locale <string>

指定 WMI 对象的首选区域设置。按喜爱顺序将 Locale 参数的值指定为 MS_<LCID> 格式的数组。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Name <string>

指定要调用的方法的名称。此参数是必需的，不能为 null 或为空。

是否为必需？ | true
位置？ | 2
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-命名空间 <string>

当此参数与 Class 参数一起使用时，它将指定引用的 WMI 类或对象所在的 WMI 存储库命名空间。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Path <string>

指定 WMI 类的 WMI 对象路径，或指定 WMI 类实例的 WMI 对象路径。指定的类或实例必须包含 Name 参数中指定的方法。

是否为必需？ | true
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-ThrottleLimit <int>

允许用户为可同时执行的 WMI 操作数目指定一个限制值。此参数与 AsJob 参数一起使用。节流限制仅适用于当前命令，而不适用于会话或计算机。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Confirm

在执行命令之前提示您进行确认。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-WhatIf

描述如果执行该命令会发生什么情况（无需实际执行该命令）。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

<CommonParameters>

此 cmdlet 支持通用参数：-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。有关详细信息，请参阅 about_Commonparameters.

输入和输出

输入类型是指可通过管道传递给 cmdlet 的对象的类型。返回类型是指 Cmdlet 所返回对象的类型。

输入 | None 此 cmdlet 不接受任何输入。
输出 | None 此 cmdlet 将不产生任何输出。

示例 1

C:\PS>invoke-wmimethod -path win32_process -name create -argumentlist notepad.exe

__GENUS          : 2
__CLASS          : __PARAMETERS
__SUPERCLASS     :
__DYNASTY        : __PARAMETERS
__RELPATH        :
__PROPERTY_COUNT : 2
__DERIVATION     : {}
__SERVER         :
__NAMESPACE      :
__PATH           :
ProcessId        : 4844
ReturnValue      : 0

说明
-----------
此命令通过调用 Win32_Process 类的 Create 方法来启动记事本实例。

注意：如果命令完成，则以 0 填充 ReturnValue 属性，以一个整数（下一进程 ID 号）填充 ProcessId 属性。

示例 2

C:\PS>invoke-wmimethod -path "CIM_DataFile.Name='C:\scripts\test.txt'" -Name Rename -ArgumentList "C:\scripts\test_bu.txt"

__GENUS          : 2
__CLASS          : __PARAMETERS
__SUPERCLASS     :
__DYNASTY        : __PARAMETERS
__RELPATH        :
__PROPERTY_COUNT : 1
__DERIVATION     : {}
__SERVER         :
__NAMESPACE      :
__PATH           :
ReturnValue      : 0

说明
-----------
此命令重命名文件。它使用 Path 参数来引用 CIM_DataFile 类的实例。然后，它将 Rename 方法应用于该特定实例。

注意：如果命令完成，则以 0 填充 ReturnValue 属性。

另请参阅

  • Get-WmiObject
  • Remove-WmiObject
  • Set-WmiInstance
  • Get-WSManInstance
  • Invoke-WSManAction
  • New-WSManInstance
  • Remove-WSManInstance


Invoke-WSManAction

对资源 URI 和选择器指定的对象调用操作。

语法

Invoke-WSManAction [-ApplicationName <string>] [-ComputerName <string>] [-Credential <PSCredential>] [-Credential <PSCredential>] [-Credential <PSCredential>] [-Credential <PSCredential>] [-Credential <PSCredential>] [-Credential <PSCredential>] [-Credential <PSCredential>] [-Credential <PSCredential>] [-Credential <PSCredential>] [-Port <int>] [-Port <int>] [-Port <int>] [-Port <int>] [-Port <int>] [-Port <int>] [-Port <int>] [-Port <int>] [-Port <int>] [-UseSSL] [-ResourceURI] <Uri> [-Action] <string> [-Authentication <AuthenticationMechanism>] [-FilePath <File>] [-OptionSet <hashtable>] [-SelectorSet <hashtable>] [-SessionOption <hashtable>] [-ValueSet <hashtable>] [<CommonParameters>]

Invoke-WSManAction [-ConnectionURI <Uri>] [-ResourceURI] <Uri> [-Action] <string> [-Authentication <AuthenticationMechanism>] [-FilePath <File>] [-OptionSet <hashtable>] [-SelectorSet <hashtable>] [-SessionOption <hashtable>] [-ValueSet <hashtable>] [<CommonParameters>]

说明

Invoke-WSManAction 对 RESOURCE_URI（其中的参数由键值对指定）指定的对象运行操作。

此 cmdlet 使用 WSMan 连接/传输层来运行操作。

参数

-Action <string>

指示需要对 ResourceURI 和选择器指定的管理对象执行的方法。

是否为必需？ | true
位置？ | 2
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-ApplicationName <string>

指定连接中的应用程序名称。ApplicationName 参数的默认值为 WSMAN。远程终结点的完整标识符采用以下格式：

<transport>://<server>:<port>/<ApplicationName>

例如：

http://server01:8080/WSMAN

承载会话的 Internet 信息服务 (IIS) 将请求连同此终结点转发到指定的应用程序。默认设置“WSMAN”适用于大多数使用情况。当有许多计算机建立了与运行 Windows PowerShell 的一台计算机的远程连接时，需要用到此参数。这种情况下，IIS 托管 Web Services for Management (WS-Management)，以保证效率。

是否为必需？ | false
位置？ | named
默认值 | wsman
是否接受管道输入？ | false
是否接受通配符？ | false

-Authentication <AuthenticationMechanism>

指定服务器上要使用的身份验证机制。可能值为：

- Basic：Basic 是一种方案，在该方案中，用户名和密码以明文形式发送到服务器或代理。

- Default：使用 WS-Management 协议实现的身份验证方法。这是默认设置。

- Digest：Digest 是一种质询响应方案，该方案将服务器指定的数据字符串用于质询。

- Kerberos：客户端计算机和服务器使用 Kerberos 证书相互进行身份验证。

- Negotiate：Negotiate 是一种质询响应方案，该方案与服务器或代理协商以确定要使用的身份验证方案。例如，此参数值允许进行协商以确定是使用 Kerberos 协议还是 NTLM。

- CredSSP：使用凭据安全服务提供程序 (CredSSP) 身份验证，这种方法允许用户委派凭据。此选项用于这样的命令：在一台远程计算机上运行，但从其他远程计算机上收集数据或者在其他远程计算机上运行其他命令。

注意：CredSSP 将本地计算机中的用户凭据委派给远程计算机。此操作增加了远程操作的安全风险。如果远程计算机的安全受到威胁，则在向该计算机传递凭据时，可使用这些凭据来控制网络会话。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-ComputerName <string>

指定要对其运行管理操作的计算机。值可以是完全限定的域名、NetBIOS 名称或 IP 地址。使用本地计算机名称、localhost 或点 (.)指定本地计算机。默认值为本地计算机。当远程计算机与用户位于不同的域时，必须使用完全限定的域名。可以通过管道将此参数的值传递给 cmdlet。

是否为必需？ | false
位置？ | named
默认值 | localhost
是否接受管道输入？ | false
是否接受通配符？ | false

-ConnectionURI <Uri>

指定连接终结点。此字符串的格式为：

<Transport>://<Server>:<Port>/<ApplicationName>

以下字符串是此参数的格式正确的值：

http://Server01:8080/WSMAN

URI 必须完全限定。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Credential <PSCredential>

指定有权执行此操作的用户帐户。默认值为当前用户。键入用户名，例如“User01”、“Domain01\User01”或 User@Domain.com。或者，输入 PSCredential 对象，例如由 Get-Credential cmdlet 返回的对象。键入用户名时，将会提示您键入密码。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-FilePath <File>

指定用于更新管理资源的文件的路径。通过使用 ResourceURI 参数和 SelectorSet 参数来指定管理资源。例如，以下命令使用 FilePath 参数：

invoke-wsmanaction -action stopservice -resourceuri wmicimv2/Win32_Service -SelectorSet @{Name="spooler"} -FilePath:c:\input.xml -authentication default

此命令使用来自文件的输入对后台处理程序服务调用 StopService 方法。文件 Input.xml 包含以下内容：

<p:StopService_INPUT xmlns:p="http://schemas.microsoft.com/wbem/wsman/1/wmi/root/cimv2/Win32_Service"/>

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-OptionSet <hashtable>

将一组开关传递到服务以修改或调整请求的性质。这些与命令行 shell 中使用的开关的类似之处在于，它们也是特定于服务的。可以指定任意多个选项。

以下示例演示分别为 a、b 和 c 参数传递值 1、2 和 3 的语法：

-OptionSet @{a=1;b=2;c=3}

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | true (ByValue, ByPropertyName)
是否接受通配符？ | false

-Port <int>

指定要在客户端连接到 WinRM 服务时使用的端口。如果传输方式为 HTTP，则默认端口为 80。如果传输方式为 HTTPS，则默认端口为 443。使用 HTTPS 作为传输方式时，ComputerName 参数的值必须与服务器的证书公用名 (CN) 匹配。但是，如果 SkipCNCheck 参数指定为 SessionOption 参数的一部分，则服务器的证书公用名不必与服务器的主机名称相匹配。SkipCNCheck 参数应仅用于受信任的计算机。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-ResourceURI <Uri>

包含资源类或实例的统一资源标识符 (URI)。URI 用于标识特定类型的资源，例如，计算机上的磁盘或进程。

URI 由前缀和资源的路径组成。例如：

http://schemas.microsoft.com/wbem/wsman/1/wmi/root/cimv2/Win32_LogicalDisk

http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2/CIM_NumericSensor

是否为必需？ | true
位置？ | 1
默认值 |
是否接受管道输入？ | true (ByValue, ByPropertyName)
是否接受通配符？ | false

-SelectorSet <hashtable>

指定一组用于选择特定管理资源实例的值对。当相应资源存在多个实例时，将使用 SelectorSet 参数。SelectorSet 参数的值必须为哈希表。

以下示例说明如何为此参数输入值：

-SelectorSet @{Name="WinRM";ID="yyy"}

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-SessionOption <hashtable>

为 WS-Management 会话定义一组扩展选项。输入使用 New-WSManSessionOption cmdlet 创建的 SessionOption 对象。有关可用选项的详细信息，请参阅 New-WSManSessionOption。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-UseSSL

指定应使用安全套接字层 (SSL) 协议来建立与远程计算机的连接。默认情况下，不使用 SSL。

WS-Management 加密通过网络传输的所有 Windows PowerShell 内容。利用 UseSSL 参数，可以指定 HTTPS（而非 HTTP）的额外保护措施。如果在连接端口上 SSL 不可用并且指定了此参数，则命令将失败。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-ValueSet <hashtable>

指定一个用于帮助修改管理资源的哈希表。通过使用 ResourceURI 参数和 SelectorSet 参数来指定管理资源。ValueSet 参数的值必须为哈希表。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

<CommonParameters>

此 cmdlet 支持通用参数：-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。有关详细信息，请参阅 about_Commonparameters.

输入和输出

输入类型是指可通过管道传递给 cmdlet 的对象的类型。返回类型是指 Cmdlet 所返回对象的类型。

输入 | None 此 cmdlet 不接受任何输入。
输出 | None 此 cmdlet 将不产生任何输出。

示例 1

C:\PS>invoke-wsmanaction -action startservice -resourceuri wmicimv2/win32_service  -selectorset @{name="spooler"} -authentication default

xsi         : http://www.w3.org/2001/XMLSchema-instance
p           : http://schemas.microsoft.com/wbem/wsman/1/wmi/root/cimv2/Win32_Service
cim         : http://schemas.dmtf.org/wbem/wscim/1/common
lang        : en-US
ReturnValue : 0

说明
-----------
此命令调用对应于后台处理程序服务的 Win32_Service WMI 类实例的 StartService 方法。

返回值指示该操作是否成功。在这种情况下，返回值 0 指示该操作成功。返回值 5 指示该服务已启动。

示例 2

C:\PS>invoke-wsmanaction -action stopservice -resourceuri wmicimv2/Win32_Service -SelectorSet @{Name="spooler"} -FilePath:input.xml -authentication default

xsi         : http://www.w3.org/2001/XMLSchema-instance
p           : http://schemas.microsoft.com/wbem/wsman/1/wmi/root/cimv2/Win32_Service
cim         : http://schemas.dmtf.org/wbem/wscim/1/common
lang        : en-US
ReturnValue : 0

说明
-----------
此命令使用来自文件的输入对后台处理程序服务调用 StopService 方法。文件 Input.xml 包含以下内容：

 <p:StopService_INPUT xmlns:p="http://schemas.microsoft.com/wbem/wsman/1/wmi/root/cimv2/Win32_Service"/>

返回值指示该操作是否成功。在这种情况下，返回值 0 指示该操作成功。返回值 5 指示该服务已启动。

示例 3

C:\PS>invoke-wsmanaction -action create -resourceuri wmicimv2/win32_process -valueset @{commandline="notepad.exe";currentdirectory="C:\"}

xsi         : http://www.w3.org/2001/XMLSchema-instance
p           : http://schemas.microsoft.com/wbem/wsman/1/wmi/root/cimv2/Win32_Process
cim         : http://schemas.dmtf.org/wbem/wscim/1/common
lang        : en-US
ProcessId   : 6356
ReturnValue : 0

说明
-----------
此命令调用 Win32_Process 类的 Create 方法。它向该方法传递两个参数值，Notepad.exe 和“C:\”。结果是，创建了一个运行记事本的新进程，并将该新进程的当前目录设置为“C:\”。

示例 4

C:\PS>invoke-wsmanaction -action startservice -resourceuri wmicimv2/win32_service  -selectorset @{name="spooler"} -computername server01 -authentication default

xsi         : http://www.w3.org/2001/XMLSchema-instance
p           : http://schemas.microsoft.com/wbem/wsman/1/wmi/root/cimv2/Win32_Service
cim         : http://schemas.dmtf.org/wbem/wscim/1/common
lang        : en-US
ReturnValue : 0

说明
-----------
此命令调用对应于后台处理程序服务的 Win32_Service WMI 类实例的 StartService 方法。由于指定了 ComputerName 参数，因此此命令针对 server01 远程计算机运行。

返回值指示该操作是否成功。在这种情况下，返回值 0 指示该操作成功。返回值 5 指示该服务已启动。

另请参阅

  • Connect-WSMan
  • Disable-WSManCredSSP
  • Disconnect-WSMan
  • Enable-WSManCredSSP
  • Get-WSManCredSSP
  • Get-WSManInstance
  • New-WSManInstance
  • New-WSManSessionOption
  • Remove-WSManInstance
  • Set-WSManInstance
  • Set-WSManQuickConfig
  • Test-WSMan
  • Invoke-WmiMethod


Join-Path

将路径和子路径合并到单个路径中。提供程序将提供路径分隔符。

语法

Join-Path [-Path] <string[]> [-ChildPath] <string> [-Credential <PSCredential>] [-Resolve] [-UseTransaction] [<CommonParameters>]

说明

Join-Path cmdlet 将路径和子路径合并到单个路径中。提供程序将提供路径分隔符。

参数

-ChildPath <string>

指定要追加到 Path 的值中的元素。允许使用通配符。ChildPath 参数是必需的，但参数名（“ChildPath”）是可选的。

是否为必需？ | true
位置？ | 2
默认值 |
是否接受管道输入？ | true (ByPropertyName)
是否接受通配符？ | false

-Credential <PSCredential>

指定有权执行此操作的用户帐户。默认值为当前用户。

键入用户名，例如“User01”或“Domain01\User01”。或者，输入 PSCredential 对象，例如由 Get-Credential cmdlet 生成的对象。如果键入用户名，则将提示您输入密码。

随同 Windows PowerShell 一起安装的任何提供程序都不支持此参数。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | true (ByPropertyName)
是否接受通配符？ | false

-Path <string[]>

指定子路径追加到的主路径。允许使用通配符。

Path 的值可确定哪个提供程序将联接路径并添加路径分隔符。Path 参数是必需的，但参数名（“Path”）是可选的。

是否为必需？ | true
位置？ | 1
默认值 |
是否接受管道输入？ | true (ByValue, ByPropertyName)
是否接受通配符？ | false

-Resolve

显示联接的路径所引用的项。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-UseTransaction

将命令包含在活动事务中。仅当正在执行事务时，此参数才有效。有关详细信息，请参阅 about_Transactions。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

<CommonParameters>

此 cmdlet 支持通用参数：-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。有关详细信息，请参阅 about_Commonparameters.

输入和输出

输入类型是指可通过管道传递给 cmdlet 的对象的类型。返回类型是指 Cmdlet 所返回对象的类型。

输入 | System.String 可以通过管道将包含路径的字符串传递给 Join-Path。
输出 | System.String Join-Path 返回一个包含结果路径的字符串。

说明

包含 Path 名词的 cmdlet (Path cmdlet) 采用路径名称作为参数，以所有 Windows PowerShell 提供程序都能够解释的简明格式返回名称。这些 cmdlet 用于需要在其中以特定格式显示全部或部分路径名称的程序或脚本中。您可以像使用 Dirname、Normpath、Realpath、Join 或其他路径操作程序那样使用这些 cmdlet。

可以将路径 cmdlet 与某些提供程序一起使用，包括 FileSystem、Registry 和 Certificate 提供程序。

Join-Path cmdlet 可使用由任何提供程序公开的数据。要列出会话中可用的提供程序，请键入“Get-PSProvider”。有关详细信息，请参阅 about_Providers。

示例 1

C:\PS>join-path -path c:\win* -childpath System*

说明
-----------
此命令使用 Join-Path 将“c:\Win*”路径与“System*”子路径合并。FileSystem（Windows PowerShell 文件系统提供程序）联接路径并添加“\”分隔符。

示例 2

C:\PS>join-path c:\win* System* -resolve

说明
-----------
此命令显示通过联接“c:\Win*”路径和“System*”子路径而引用的文件和文件夹。此命令显示与 Get-ChildItem 相同的文件和文件夹，但它还显示每个项的完全限定路径。在此命令中，省略了 Path 和 ChildPath 可选参数名称。

示例 3

C:\PS>PS HKLM:\> join-path System *ControlSet* -resolve

说明
-----------
此命令显示 HKLM\System 注册表子项中包括“ControlSet”的注册表项。此示例演示如何将 Join-Path 与 Windows PowerShell 注册表提供程序一起使用。

示例 4

C:\PS>join-path -path C:, D:, E:, F: -childpath New

说明
-----------
此命令使用 Join-Path 将多个路径根与一个子路径组合在一起。

示例 5

C:\PS>get-psdrive -psprovider filesystem | foreach {$_.root} | join-path -childpath Subdir

说明
-----------
此命令将控制台中每个 Windows PowerShell 文件系统驱动器的根与 Subdir 子路径组合在一起。

该命令使用 Get-PSDrive cmdlet 获取 FileSystem 提供程序支持的 Windows PowerShell 驱动器。ForEach 语句仅选择 PSDriveInfo 对象的 Root 属性并将其与指定的子路径组合在一起。

输出显示计算机上的 Windows PowerShell 驱动器包含映射到 C:\Program Files 目录的驱动器。

另请参阅

  • about_Providers
  • Test-Path
  • Split-Path
  • Resolve-Path
  • Convert-Path


Limit-EventLog

设置限制事件日志大小及其条目存在时间的事件日志属性。

语法

Limit-EventLog [-LogName] <string[]> [-ComputerName <string[]>] [-MaximumSize <Int64>] [-OverFlowAction {<OverwriteAsNeeded> | <OverwriteOlder> | <DoNotOverwrite>}] [-RetentionDays <int>] [-Confirm] [-WhatIf] [<CommonParameters>]

说明

Limit-EventLog cmdlet 设置传统事件日志的最大大小，每个事件必须保留多长时间以及该日志达到其最大大小时会发生什么情况。您可以使用它来限制本地或远程计算机上的事件日志。

包含 EventLog 名词的 cmdlet (EventLog cmdlet) 仅适用于传统事件日志。要从使用 Windows Vista 以及 Windows 更高版本中的 Windows 事件日志技术的日志中获取事件，请使用 Get-WinEvent。

参数

-ComputerName <string[]>

指定远程计算机。默认值为本地计算机。

键入远程计算机的 NetBIOS 名称、Internet 协议 (IP) 地址或完全限定的域名。要指定本地计算机，请键入计算机名称、句点 (.) 或“localhost”。

此参数不依赖于 Windows PowerShell 远程处理。即使您的计算机未配置为运行远程命令，您也可以使用 Limit-EventLog 的 ComputerName 参数。

是否为必需？ | false
位置？ | named
默认值 | Local computer
是否接受管道输入？ | false
是否接受通配符？ | false

-LogName <string[]>

指定事件日志。输入一个或多个事件日志的日志名称（Log 属性的值，而不是 LogDisplayName），名称之间用逗号分隔。不允许使用通配符。此参数是必需的。

是否为必需？ | true
位置？ | 1
默认值 | 无
是否接受管道输入？ | false
是否接受通配符？ | false

-MaximumSize <Int64>

指定事件日志的最大大小（以字节为单位）。输入一个介于 64 千字节 (KB) 和 4 千兆字节 (GB) 之间的值。该值必须能够被 64 KB (65536) 整除。

此参数指定表示传统事件日志的 System.Diagnostics.EventLog 对象的 MaximumKilobytes 属性值。

是否为必需？ | false
位置？ | named
默认值 | 无
是否接受管道输入？ | false
是否接受通配符？ | false

-OverFlowAction <OverflowAction>

指定事件日志达到其最大大小时会发生什么情况。

有效值包括：

-- DoNotOverwrite：保留现有条目并丢弃新条目。

-- OverwriteAsNeeded：每个新条目覆盖最旧条目。

-- OverwriteOlder：新事件覆盖早于 MinimumRetentionDays 属性所指定的值的事件。如果没有早于 MinimumRetentionDays 属性所指定的值的事件，则将丢弃新事件。

此参数指定表示传统事件日志的 System.Diagnostics.EventLog 对象的 OverflowAction 属性值。

是否为必需？ | false
位置？ | named
默认值 | 无
是否接受管道输入？ | false
是否接受通配符？ | false

-RetentionDays <int>

指定事件必须保留在事件日志中的最短天数。

此参数指定表示传统事件日志的 System.Diagnostics.EventLog 对象的 MinimumRetentionDays 属性值。

是否为必需？ | false
位置？ | named
默认值 | 无
是否接受管道输入？ | false
是否接受通配符？ | false

-Confirm

在执行命令之前提示您进行确认。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-WhatIf

描述如果执行该命令会发生什么情况（无需实际执行该命令）。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

<CommonParameters>

此 cmdlet 支持通用参数：-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。有关详细信息，请参阅 about_Commonparameters.

输入和输出

输入类型是指可通过管道传递给 cmdlet 的对象的类型。返回类型是指 Cmdlet 所返回对象的类型。

输入 | None 无
输出 | None 无

说明

若要在 Windows Vista 以及 Windows 的更高版本上使用 Limit-EventLog，请使用“以管理员身份运行”选项打开 Windows PowerShell。

Limit-EventLog 可更改表示传统事件日志的 System.Diagnostics.EventLog 对象的属性。要查看事件日志属性的当前设置，请键入“get-eventlog -list”。

示例 1

C:\PS>limit-eventLog -logname "Windows PowerShell" -MaximumSize 20KB

说明
-----------
此命令将本地计算机上的 Windows PowerShell 事件日志的最大大小增加到 20480 字节 (20 KB)。

示例 2

C:\PS>limit-eventlog -logname Security -comp Server01, Server02 -retentionDays 7

说明
-----------
此命令确保计算机 Server01 和 Server02 上的安全日志中的事件至少保留 7 天。

示例 3

C:\PS>$logs = get-eventlog -list | foreach {$_.log}

C:\PS> limit-eventlog -overflowaction OverwriteOlder -logname $logs

C:\PS> get-eventlog -list

Max(K) Retain OverflowAction     Entries  Log
------ ------ --------------     -------  ---
15,168      0 OverwriteOlder       3,412  Application
   512      0 OverwriteOlder           0  DFS Replication
   512      0 OverwriteOlder          17  DxStudio
10,240      7 OverwriteOlder           0  HardwareEvents
   512      0 OverwriteOlder           0  Internet Explorer
   512      0 OverwriteOlder           0  Key Management Service
16,384      0 OverwriteOlder           4  ODiag
16,384      0 OverwriteOlder         389  OSession
                                          Security
15,168      0 OverwriteOlder      19,360  System
15,360      0 OverwriteOlder      15,828  Windows PowerShell

说明
-----------
这些命令将本地计算机上所有事件日志的溢出操作更改为“OverwriteOlder”。

第一条命令获取本地计算机上所有日志的日志名称。第二条命令设置溢出操作。第三条命令显示结果。

另请参阅

  • Clear-EventLog
  • Get-EventLog
  • Limit-EventLog
  • New-EventLog
  • Remove-EventLog
  • Show-EventLog
  • Write-EventLog
  • Get-WinEvent


Measure-Command

度量运行脚本块和 cmdlet 所用的时间。

语法

Measure-Command [-表达式] <scriptblock> [-InputObject <psobject>] [<CommonParameters>]

说明

Measure-Command cmdlet 在内部运行脚本块或 cmdlet，并度量执行操作的时间，然后返回执行时间。

参数

-表达式 <scriptblock>

指定被度量时间的表达式。将表达式放在大括号 ({}) 中。参数名称（“Expression”）为可选项。

是否为必需？ | true
位置？ | 1
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-InputObject <psobject>

指定表示要度量的表达式的对象。请输入包含对象的变量，或者键入可获取对象的命令或表达式。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | true (ByValue)
是否接受通配符？ | false

<CommonParameters>

此 cmdlet 支持通用参数：-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。有关详细信息，请参阅 about_Commonparameters.

输入和输出

输入类型是指可通过管道传递给 cmdlet 的对象的类型。返回类型是指 Cmdlet 所返回对象的类型。

输入 | System.Management.Automation.PSObject 可以通过管道将对象传递给 Measure-Command。
输出 | System.TimeSpan Measure-Command 返回表示结果的时间跨度对象。

说明

有关详细信息，请键入“Get-Help Measure-Command -detailed”。有关技术信息，请键入“Get-Help Measure-Command -full”。

在为一个参数指定多个值时，请使用逗号分隔这些值。例如，“<参数名> <值 1>, <值 2>”。

示例 1

C:\PS>Measure-Command { get-eventlog "windows powershell" }

说明
-----------
此命令度量运行一个获取 Windows PowerShell 事件日志中的事件的“get-eventlog”命令所用的时间。

示例 2

C:\PS>measure-command {get-childitem c:\windows -include *.txt -recurse}

Days              : 0
Hours             : 0
Minutes           : 0
Seconds           : 8
Milliseconds      : 618
Ticks             : 86182763
TotalDays         : 9.9748568287037E-05
TotalHours        : 0.00239396563888889
TotalMinutes      : 0.143637938333333
TotalSeconds      : 8.6182763
TotalMilliseconds : 8618.2763

C:\PS>measure-command {get-childitem c:\windows -filter "*.txt" -recurse}

Days              : 0
Hours             : 0
Minutes           : 0
Seconds           : 1
Milliseconds      : 140
Ticks             : 11409189
TotalDays         : 1.32050798611111E-05
TotalHours        : 0.000316921916666667
TotalMinutes      : 0.019015315
TotalSeconds      : 1.1409189
TotalMilliseconds : 1140.9189

说明
-----------
这些命令显示在 Windows PowerShell 命令中使用特定于提供程序的筛选器的值。第一个命令度量处理使用 Include 参数的递归 Get-ChildItem 命令所用的时间。第二个命令度量处理使用提供程序特定 Filter 参数的递归 Get-ChildItem 命令所用的时间。

另请参阅

  • Trace-Command
  • Invoke-Command


Measure-Object

计算对象的数字属性以及字符串对象（如文本文件）中的字符数、单词数和行数。

语法

Measure-Object [-Average] [-Maximum] [-Minimum] [-Sum] [[-Property] <string[]>] [-InputObject <psobject>] [<CommonParameters>]

Measure-Object [-Character] [-IgnoreWhiteSpace] [-Line] [-Word] [[-Property] <string[]>] [-InputObject <psobject>] [<CommonParameters>]

说明

Measure-Object cmdlet 计算某些类型对象的属性值。Measure-Object 执行三种类型测量，具体取决于命令中的参数。

Measure-Object cmdlet 计算对象的属性值。它可以对对象计数并计算数字值的最小值、最大值、总和及平均值。对于文本对象，它可以计数并计算行数、单词数和字符数。

参数

-Average

显示指定属性的平均值。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Character

计算输入对象中的字符数。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-IgnoreWhiteSpace

在单词计数和字符计数时忽略空白。默认情况下，不忽略空白。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-InputObject <psobject>

指定要度量的对象。输入一个包含对象的变量，或键入可获取对象的命令或表达式。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | true (ByValue)
是否接受通配符？ | false

-Line

计算输入对象中的行数。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Maximum

显示指定属性的最大值。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Minimum

显示指定属性的最小值。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Property <string[]>

指定要度量的一个或多个数字属性。默认值是对象的 Count (Length) 属性。

是否为必需？ | false
位置？ | 1
默认值 | Count
是否接受管道输入？ | false
是否接受通配符？ | false

-Sum

显示指定属性的值的总和。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Word

计算输入对象中的单词数。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

<CommonParameters>

此 cmdlet 支持通用参数：-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。有关详细信息，请参阅 about_Commonparameters.

输入和输出

输入类型是指可通过管道传递给 cmdlet 的对象的类型。返回类型是指 Cmdlet 所返回对象的类型。

输入 | System.Management.Automation.PSObject 可以通过管道将对象传递给 Measure-Object。
输出 | GenericMeasureInfo 或 TextMeasureInfoObject

示例 1

C:\PS>get-childitem | measure-object

说明
-----------
此命令对当前目录中的文件数和文件夹数进行计数。

示例 2

C:\PS>get-childitem | measure-object -property length -minimum -maximum -average

说明
-----------
此命令显示当前目录中所有文件的最小、最大和总大小，以及目录中文件的平均大小。

示例 3

C:\PS>get-content C:\test.txt | measure-object -character -line -word

说明
-----------
此命令显示 Text.txt 文件中的字符数、单词数和行数。

示例 4

C:\PS>get-process | measure-object -property workingset -minimum -maximum -average

说明
-----------
此命令显示计算机上进程的工作集的最小、最大和平均大小。

示例 5

C:\PS>import-csv d:\test\serviceyrs.csv | measure-object -property years -minimum -maximum -average

说明
-----------
此命令计算公司员工的平均服务年数。

ServiceYrs.csv 文件是一个包含员工编号以及每个员工的服务年数的 CSV 文件。该表中的第一行是标题行“EmpNo、Years”。

使用 Import-Csv 导入该文件时，结果是具有 EmpNo 和 Years 的注释属性的 PSCustomObject。可以使用 Measure-Object 计算这些属性的值，就像计算对象的任何其他属性。

示例 6

C:\PS>get-childitem | measure-object -property psiscontainer -max -sum -min -average

Count    : 126
Average  : 0.0634920634920635
Sum      : 8
Maximum  : 1
Minimum  : 0
Property : PSIsContainer

说明
-----------
此示例说明 Measure-Object 能够度量布尔值。在此示例中，它使用 PSIsContainer 布尔属性来度量当前目录中文件夹（相对于文件）的出现频率。

另请参阅

  • Compare-Object
  • ForEach-Object
  • Group-Object
  • New-Object
  • Select-Object
  • Sort-Object
  • Tee-Object
  • Where-Object


Move-Item

将项从一个位置移动到另一个位置。

语法

Move-Item [-LiteralPath] <string[]> [[-Destination] <string>] [-Credential <PSCredential>] [-Exclude <string[]>] [-Filter <string>] [-Force] [-Include <string[]>] [-PassThru] [-Confirm] [-WhatIf] [-UseTransaction] [<CommonParameters>]

Move-Item [-Path] <string[]> [[-Destination] <string>] [-Credential <PSCredential>] [-Exclude <string[]>] [-Filter <string>] [-Force] [-Include <string[]>] [-PassThru] [-Confirm] [-WhatIf] [-UseTransaction] [<CommonParameters>]

说明

Move-Item cmdlet 将项（包括其属性、内容以及子项）从一个位置移动到另一个位置。但这些位置必须由同一提供程序支持。例如，它可以将文件或子目录从一个目录移动到另一个目录，或将注册表子项从一个项移动到另一个项。在您移动某个项时，该属性将被添加到新位置，并从其原来的位置删除。

参数

-Credential <PSCredential>

指定有权执行此操作的用户帐户。默认值为当前用户。

键入用户名，如“User01”或“Domain01\User01”；或输入 PSCredential 对象，如 Get-Credential cmdlet 生成的一个 PSCredential 对象。如果键入用户名，则将提示您输入密码。

随同 Windows PowerShell 一起安装的任何提供程序都不支持此参数。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | true (ByPropertyName)
是否接受通配符？ | false

-Destination <string>

指定指向要移动其中的项的位置的路径。默认值为当前目录。允许使用通配符，但结果必须指定单个位置。

要重命名正移动的项，请在 Destination 参数的值中指定新名称。

是否为必需？ | false
位置？ | 2
默认值 |
是否接受管道输入？ | true (ByPropertyName)
是否接受通配符？ | false

-Exclude <string[]>

忽略指定项。此参数的值对 Path 参数进行限定。请输入路径元素或模式，例如“*.txt”。允许使用通配符。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Filter <string>

以提供程序的格式或语言指定筛选器。此参数的值对 Path 参数进行限定。筛选器的语法（包括通配符的使用）取决于提供程序。筛选器比其他参数更有效，因为提供程序是在检索对象时应用筛选器，而不是在检索对象后再由 Windows PowerShell 筛选对象。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Force

允许 cmdlet 移动项以覆盖现有只读项。不同提供程序有不同的实现。有关详细信息，请参阅 about_Providers。即使使用 Force 参数，该 cmdlet 也无法覆盖安全限制。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Include <string[]>

只移动指定项。此参数的值对 Path 参数进行限定。请输入路径元素或模式，例如“*.txt”。允许使用通配符。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-LiteralPath <string[]>

指定指向项的当前位置的路径。与 Path 不同，LiteralPath 的值严格按照所键入的形式使用。不会将任何字符解释为通配符。如果路径包括转义符，请将其括在单引号中。单引号会告知 Windows PowerShell 不要将所有字符都解释为转义序列。

是否为必需？ | true
位置？ | 1
默认值 |
是否接受管道输入？ | true (ByPropertyName)
是否接受通配符？ | false

-PassThru

将表示项的对象传递到管道。默认情况下，此 cmdlet 将不产生任何输出。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Path <string[]>

指定指向项的当前位置的路径。默认值为当前目录。允许使用通配符。

是否为必需？ | true
位置？ | 1
默认值 |
是否接受管道输入？ | true (ByValue, ByPropertyName)
是否接受通配符？ | false

-Confirm

在执行命令之前提示您进行确认。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-WhatIf

描述如果执行该命令会发生什么情况（无需实际执行该命令）。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-UseTransaction

将命令包含在活动事务中。仅当正在执行事务时，此参数才有效。有关详细信息，请参阅 about_Transactions。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

<CommonParameters>

此 cmdlet 支持通用参数：-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。有关详细信息，请参阅 about_Commonparameters.

输入和输出

输入类型是指可通过管道传递给 cmdlet 的对象的类型。返回类型是指 Cmdlet 所返回对象的类型。

输入 | System.String 可以通过管道将包含路径的字符串传递给 Move-Item。
输出 | None 或一个表示已移动项的对象。 如果使用 Passthru 参数，则 Move-Item 生成一个表示已移动项的对象。否则，此 cmdlet 将不产生任何输出。

说明

Move-Item 将在由同一提供程序支持的驱动器之间移动文件，但它只在同一驱动器内移动目录。

因为 Move-Item 命令移动项的属性、内容和子项，所以，默认情况下，所有移动都是递归的。

还可以通过 Move-Item 的内置别名“move”、“mv”以及“mi”来对其进行引用。有关详细信息，请参阅 about_Aliases。

Move-Item cmdlet 用于处理由任何提供程序公开的数据。要列出会话中可用的提供程序，请键入“Get-PsProvider”。有关详细信息，请参阅 about_Providers。

示例 1

C:\PS>move-item -path C:\test.txt -destination E:\Temp\tst.txt

说明
-----------
此命令将 Test.txt 文件从 C: 驱动器移动到 E:\Temp 目录，并将其由“test.txt”重命名为“tst.txt”。

示例 2

C:\PS>move-item -path C:\Temp -destination C:\Logs

说明
-----------
此命令将 C:\Temp 目录及其内容移动到 C:\Logs 目录下。Temp 目录及其所有子目录和文件随后将显示在 Logs 目录下。

示例 3

C:\PS>move-item -path .\*.txt -destination C:\Logs

说明
-----------
此命令将当前目录（由点 (.) 表示）中的所有文本文件 (*.txt) 移动到 C:\Logs 目录下。

示例 4

C:\PS>get-childitem -path . -recurse -include *.txt | move-item -destination C:\TextFiles

说明
-----------
此命令将所有文本文件从当前目录及其所有子目录递归地移动到 C:\TextFiles 目录下。

该命令使用 Get-ChildItem cmdlet 获取当前目录（由点 [.] 表示）及其子目录中带有 *.txt 文件扩展名的所有子项。它使用 Recurse 参数使检索操作实现递归，并使用 Include 参数将检索限制为只针对 *.txt 文件。

管道运算符 (|) 将此命令的结果发送给 Move-Item，后者将文本文件移动到 TextFiles 目录下。

如果正移到 C:\Textfiles 的文件具有相同名称，则 Move-Item 会显示错误并继续执行，但只将具有不同名称的文件移到 C:\Textfiles。其他文件仍保留在其原始目录下。

如果 Textfiles 目录（或目标路径的任何其他元素）不存在，则该命令将失败。将不会为您创建缺少的目录，即使使用 Force 参数也是如此。Move-Item 会将第一项移到一个名为“Textfiles”的文件中，然后显示一个错误，指出该文件已存在。

此外，默认情况下，Get-ChildItem 不移动隐藏文件。要移动隐藏文件，请对 Get-ChildItem 使用 Force 参数。

示例 5

C:\PS>move-item hklm:\software\mycompany\* hklm:\software\mynewcompany

说明
-----------
此命令将 HKLM\Software 中 MyCompany 注册表项中的注册表项及其值移动到 MyNewCompany 项。通配符 (*) 指示应移动 MyCompany 项的内容，而非移动项本身。此命令中省略了可选的 Path 和 Destination 参数名。

示例 6

C:\PS>move-item -literalpath 'Logs[Sept`06]' -destination 'Logs[2006]'

说明
-----------
此命令将 Logs[Sept`06] 目录（及其内容）移动到 Logs[2006] 目录下。

LiteralPath 参数可用于代替 Path，因为原始目录名称包含左方括号和右方括号字符（“[”和“]”）。也可将路径括在单引号 (' ') 中，以便不会曲解倒引号 (`)。

Destination 参数不需要文本路径，因为 Destination 变量也必须括在单引号中，因为它包括可能被曲解的方括号。

另请参阅

  • about_Providers
  • Clear-Item
  • Get-Item
  • Invoke-Item
  • Set-Item
  • New-Item
  • Remove-Item
  • Rename-Item
  • Copy-Item


Move-ItemProperty

将属性从一个位置移动到另一个位置。

语法

Move-ItemProperty [-LiteralPath] <string[]> [-Destination] <string> [-Name] <string[]> [-Credential <PSCredential>] [-Exclude <string[]>] [-Filter <string>] [-Force] [-Include <string[]>] [-PassThru] [-Confirm] [-WhatIf] [-UseTransaction] [<CommonParameters>]

Move-ItemProperty [-Path] <string[]> [-Destination] <string> [-Name] <string[]> [-Credential <PSCredential>] [-Exclude <string[]>] [-Filter <string>] [-Force] [-Include <string[]>] [-PassThru] [-Confirm] [-WhatIf] [-UseTransaction] [<CommonParameters>]

说明

Move-ItemProperty cmdlet 将项的属性从一个项移动到另一个项。例如，它可以将注册表条目从一个注册表项移到另一个注册表项。在您移动某个项属性时，该属性将被添加到新位置，并从其原来的位置删除。

参数

-Credential <PSCredential>

指定有权执行此操作的用户帐户。默认值为当前用户。

键入用户名，如“User01”或“Domain01\User01”；或输入 PSCredential 对象，如 Get-Credential cmdlet 生成的一个 PSCredential 对象。如果键入用户名，则将提示您输入密码。

随同 Windows PowerShell 一起安装的任何提供程序都不支持此参数。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | true (ByPropertyName)
是否接受通配符？ | false

-Destination <string>

指定目标位置的路径。

是否为必需？ | true
位置？ | 2
默认值 |
是否接受管道输入？ | true (ByPropertyName)
是否接受通配符？ | false

-Exclude <string[]>

忽略指定项。此参数的值对 Path 参数进行限定。请输入路径元素或模式，例如“*.txt”。允许使用通配符。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Filter <string>

以提供程序的格式或语言指定筛选器。此参数的值对 Path 参数进行限定。筛选器的语法（包括通配符的使用）取决于提供程序。筛选器比其他参数更有效，因为提供程序是在检索对象时应用筛选器，而不是在检索对象后再由 Windows PowerShell 筛选对象。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Force

允许 cmdlet 向或从用户非此不能访问的项中移动属性。不同提供程序有不同的实现。有关详细信息，请参阅 about_Providers。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Include <string[]>

只移动指定项。此参数的值对 Path 参数进行限定。请输入路径元素或模式，例如“*.txt”。允许使用通配符。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-LiteralPath <string[]>

指定此属性的当前位置的路径。与 Path 不同，LiteralPath 的值严格按照所键入的形式使用。不会将任何字符解释为通配符。如果路径包括转义符，请将其括在单引号中。单引号会告知 Windows PowerShell 不要将所有字符都解释为转义序列。

是否为必需？ | true
位置？ | 1
默认值 |
是否接受管道输入？ | true (ByPropertyName)
是否接受通配符？ | false

-Name <string[]>

指定要移动的属性的名称。

是否为必需？ | true
位置？ | 3
默认值 |
是否接受管道输入？ | true (ByPropertyName)
是否接受通配符？ | false

-PassThru

传递一个表示项属性的对象。默认情况下，此 cmdlet 将不产生任何输出。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Path <string[]>

指定此属性的当前位置的路径。允许使用通配符。

是否为必需？ | true
位置？ | 1
默认值 |
是否接受管道输入？ | true (ByValue, ByPropertyName)
是否接受通配符？ | false

-Confirm

在执行命令之前提示您进行确认。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-WhatIf

描述如果执行该命令会发生什么情况（无需实际执行该命令）。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-UseTransaction

将命令包含在活动事务中。仅当正在执行事务时，此参数才有效。有关详细信息，请参阅 about_Transactions。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

<CommonParameters>

此 cmdlet 支持通用参数：-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。有关详细信息，请参阅 about_Commonparameters.

输入和输出

输入类型是指可通过管道传递给 cmdlet 的对象的类型。返回类型是指 Cmdlet 所返回对象的类型。

输入 | System.String 可以通过管道将包含路径的字符串传递给 Move-ItemProperty。
输出 | None 或 System.Management.Automation.PSCustomObject 如果使用 PassThru 参数，则 Move-ItemProperty 生成一个 PSCustomObject 对象，该对象表示已移动的项属性。否则，此 cmdlet 将不产生任何输出。

说明

Path、Destination 和 Name 参数的名称为可选项。如果省略参数名称，则未命名参数值必须按以下顺序出现：Path、Destination、Name。如果包括参数名称，则参数能够以任何顺序出现。

还可以使用 Move-ItemProperty 的内置别名“mp”来对其进行引用。有关详细信息，请参阅 about_Aliases。

Move-ItemProperty cmdlet 用于处理由任何提供程序公开的数据。要列出会话中可用的提供程序，请键入“Get-PSProvider”。有关详细信息，请参阅 about_Providers。

示例 1

C:\PS>move-itemproperty HKLM:\Software\MyCompany\MyApp -Name `
Version -Destination HKLM:\Software\MyCompany\NewApp

说明
-----------
此命令将“Version”注册表值及其数据从 HKLM\Software\MyCompany 注册表项的 MyApp 子项移动到 NewApp 子项。

另请参阅

  • about_Providers
  • Clear-ItemProperty
  • New-ItemProperty
  • Copy-ItemProperty
  • Rename-ItemProperty
  • Get-ItemProperty
  • Set-ItemProperty
  • Remove-ItemProperty


New-Alias

创建新别名。

语法

New-Alias [-Name] <string> [-Value] <string> [-Description <string>] [-Force] [-Option {<None> | <ReadOnly> | <Constant> | <Private> | <AllScope>}] [-PassThru] [-Scope <string>] [-Confirm] [-WhatIf] [<CommonParameters>]

说明

New-Alias cmdlet 在当前 Windows PowerShell 会话中创建新别名。退出会话或关闭 Windows PowerShell 之后，不保存通过使用 New-Alias 创建的别名。可以使用 Export-Alias cmdlet 将别名信息保存在文件中。以后可以使用 Import-Alias 检索所保存的别名信息。

参数

-Description <string>

指定别名的说明。可以键入任何字符串。如果说明包括空格，请将其括在引号中。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Force

如果设置，并且已经存在该命名别名，则其行为像 set-alias。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Name <string>

指定新别名。别名中可以使用任何字母数字字符，但第一个字符不能是数字。

是否为必需？ | true
位置？ | 1
默认值 |
是否接受管道输入？ | true (ByPropertyName)
是否接受通配符？ | false

-Option <ScopedItemOptions>

设置别名的一个或多个可选属性。有效值包括：

-- None：不设置任何选项。（默认）

-- ReadOnly：除非使用 Force 参数，否则无法更改别名。

-- Constant：即使使用 Force 参数，也无法更改别名。

-- Private：别名只在 Scope 参数指定的作用域内可用。在所有其他作用域中它都不可见。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-PassThru

返回一个表示新别名的对象。默认情况下，此 cmdlet 将不产生任何输出。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Scope <string>

指定新别名的作用域。有效值包括“Global”、“Local”、“Script”或者相对于当前作用域的数字（0 到作用域数，其中 0 是指当前作用域，1 是指其父作用域）。默认值为“Local”。有关详细信息，请参阅 about_Scopes。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Value <string>

指定作为别名的 cmdlet 或命令元素的名称。

是否为必需？ | true
位置？ | 2
默认值 |
是否接受管道输入？ | true (ByPropertyName)
是否接受通配符？ | false

-Confirm

在执行命令之前提示您进行确认。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-WhatIf

描述如果执行该命令会发生什么情况（无需实际执行该命令）。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

<CommonParameters>

此 cmdlet 支持通用参数：-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。有关详细信息，请参阅 about_Commonparameters.

输入和输出

输入类型是指可通过管道传递给 cmdlet 的对象的类型。返回类型是指 Cmdlet 所返回对象的类型。

输入 | None 不能通过管道将输入传递给此 cmdlet。
输出 | None 或 System.Management.Automation.AliasInfo 如果使用 Passthru 参数，则 New-Alias 生成一个表示新别名的 System.Management.Automation.AliasInfo 对象。否则，此 cmdlet 将不产生任何输出。

说明

若要创建新别名，请使用 Set-Alias 或 New-Alias。若要更改别名，请使用 Set-Alias。若要删除别名，请使用 Remove-Item。

示例 1

C:\PS>new-alias list get-childitem

说明
-----------
此命令创建名为“list”的别名，以表示 Get-ChildItem cmdlet。

示例 2

C:\PS>new-alias -name w -value get-wmiobject -description "quick wmi alias" -option ReadOnly

C:\PS> get-alias -name w | format-list *

说明
-----------
此命令创建名为“w”的别名，以表示 Get-WMIObject cmdlet。它为别名创建说明“quick wmi alias”，并使其为只读。该命令的最后一行使用 Get-Alias 获取新别名，并通过管道将它传递给 Format-List 以显示它的所有相关信息。

另请参阅

  • Set-Alias
  • Get-Alias
  • Export-Alias
  • Import-Alias


New-Event

创建新事件。

语法

New-Event [-SourceIdentifier] <string> [[-Sender] <psobject>] [[-EventArguments] <PSObject[]>] [[-MessageData] <psobject>] [<CommonParameters>]

说明

New-Event cmdlet 创建新自定义事件。

可以使用自定义事件通知用户您程序中的状态更改以及您的程序可以检测到的任何更改，包括硬件或系统状况、应用程序状态、磁盘状态、网络状态或后台作业的完成。

每次引发自定义事件时，它们都会自动添加到会话中的事件队列，您无需订阅这些事件。但是，如果希望将事件转发到本地会话或指定一个操作来响应该事件，请使用 Register-EngineEvent cmdlet 来订阅自定义事件。

订阅自定义事件时，会向会话中添加事件订阅程序。如果通过使用 Unregister-Event cmdlet 取消事件订阅，将从会话中删除事件订阅程序和自定义事件。如果不订阅自定义事件，若要删除事件，必须更改程序状况或关闭 Windows PowerShell 会话。

参数

-EventArguments <PSObject[]>

指定包含事件选项的对象。

是否为必需？ | false
位置？ | 3
默认值 | 无
是否接受管道输入？ | false
是否接受通配符？ | false

-MessageData <psobject>

指定与事件关联的其他数据。此参数的值显示在事件对象的 MessageData 属性中。

是否为必需？ | false
位置？ | 4
默认值 | 无
是否接受管道输入？ | false
是否接受通配符？ | false

-Sender <psobject>

指定引发事件的对象。默认值是 Windows PowerShell 引擎。

是否为必需？ | false
位置？ | 2
默认值 | 无
是否接受管道输入？ | false
是否接受通配符？ | false

-SourceIdentifier <string>

指定新事件的名称。此参数是必需的，并且在会话中必须是唯一的。

此参数的值显示在事件的 SourceIdentifier 属性中。

是否为必需？ | true
位置？ | 1
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

<CommonParameters>

此 cmdlet 支持通用参数：-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。有关详细信息，请参阅 about_Commonparameters.

输入和输出

输入类型是指可通过管道传递给 cmdlet 的对象的类型。返回类型是指 Cmdlet 所返回对象的类型。

输入 | None 不能通过管道将输入传递给此 cmdlet。
输出 | System.Management.Automation.PSEventArgs

说明

新自定义事件、事件订阅和事件队列仅存在于当前会话中。如果关闭当前会话，将丢弃事件队列并取消事件订阅。

示例 1

C:\PS>new-event -sourceidentifier Timer -sender windows.timer  -messagedata "Test"

说明
-----------
此命令在 Windows PowerShell 事件队列中创建一个新事件。它使用 Windows.Timer 对象来发送该事件。

示例 2

C:\PS>function Enable-ProcessCreationEvent
{
   $query = New-Object System.Management.WqlEventQuery "__InstanceCreationEvent", (New-Object TimeSpan 0,0,1), "TargetInstance isa 'Win32_Process'"
   $processWatcher = New-Object System.Management.ManagementEventWatcher $query
   $identifier = "WMI.ProcessCreated"

   Register-ObjectEvent $processWatcher "EventArrived" -SupportEvent $identifier -Action {
       [void] (New-Event -sourceID "PowerShell.ProcessCreated" -Sender $args[0] -EventArguments $args[1].SourceEventArgs.NewEvent.TargetInstance)
   }
}

说明
-----------
此示例函数使用 New-Event cmdlet 引发一个事件来响应另一个事件。该命令使用 Register-ObjectEvent cmdlet 来订阅创建新进程时引发的 Windows Management Instrumentation (WMI) 事件。该命令使用该 cmdlet 的 Action 参数来调用 New-Event cmdlet，其将创建新事件。

因为 New-Event 引发的事件将自动添加到 Windows PowerShell 事件队列，所以您不需要注册该事件。

另请参阅

  • Register-ObjectEvent
  • Register-EngineEvent
  • Register-WmiEvent
  • Unregister-Event
  • Get-Event
  • Remove-Event
  • Wait-Event


New-EventLog

在本地或远程计算机上创建新事件日志和新事件源。

语法

New-EventLog [-LogName] <string> [-Source] <string[]> [[-ComputerName] <string[]>] [-CategoryResourceFile <string>] [-MessageResourceFile <string>] [-ParameterResourceFile <string>] [<CommonParameters>]

说明

此 cmdlet 在本地或远程计算机上创建新的传统事件日志。此外，它还会注册写入新日志或现有日志的事件源。

包含 EventLog 名词的 cmdlet (EventLog cmdlet) 仅适用于传统事件日志。要从使用 Windows Vista 以及 Windows 更高版本中的 Windows 事件日志技术的日志中获取事件，请使用 Get-WinEvent。

参数

-CategoryResourceFile <string>

指定某一文件的路径，该文件包含源事件的类别字符串。此文件也称为“类别消息文件”。

文件必须存在于正在创建事件日志的计算机上。此参数不会创建或移动文件。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-ComputerName <string[]>

在指定计算机上创建新事件日志。默认值为本地计算机。

键入远程计算机的 NetBIOS 名称、Internet 协议 (IP) 地址或完全限定的域名。要指定本地计算机，请键入计算机名称、句点 (.) 或“localhost”。

此参数不依赖于 Windows PowerShell 远程处理。即使您的计算机未配置为运行远程命令，您也可以使用 Get-EventLog 的 ComputerName 参数。

是否为必需？ | false
位置？ | 3
默认值 | .
是否接受管道输入？ | false
是否接受通配符？ | false

-LogName <string>

指定事件日志的名称。

如果日志不存在，则 New-EventLog 会创建新事件日志并对该日志的 Log 和 LogDisplayName 属性使用此值。如果日志存在，则 New-EventLog 会为该事件日志注册新源。

是否为必需？ | true
位置？ | 1
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-MessageResourceFile <string>

指定某一文件的路径，该文件包含源事件的消息格式设置字符串。此文件也称为“事件消息文件”。

文件必须存在于正在创建事件日志的计算机上。此参数不会创建或移动文件。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-ParameterResourceFile <string>

指定某一文件的路径，该文件包含用于事件说明中的参数替换的字符串。此文件也称为“参数消息文件”。

文件必须存在于正在创建事件日志的计算机上。此参数不会创建或移动文件。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Source <string[]>

指定事件日志源（如写入事件日志的应用程序）的名称。此参数是必需的。

是否为必需？ | true
位置？ | 2
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

<CommonParameters>

此 cmdlet 支持通用参数：-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。有关详细信息，请参阅 about_Commonparameters.

输入和输出

输入类型是指可通过管道传递给 cmdlet 的对象的类型。返回类型是指 Cmdlet 所返回对象的类型。

输入 | None 不能通过管道将输入传递给此 cmdlet。
输出 | System.Diagnostics.EventLogEntry

说明

若要在 Windows Vista 以及 Windows 的更高版本上使用 New-EventLog，请使用“以管理员身份运行”选项打开 Windows PowerShell。

要在 Windows Vista、Windows XP Professional 或 Windows Server 2003 中创建事件源，您必须是计算机上 Administrators 组的成员。

创建新事件日志和新事件源时，系统会为新日志注册新源，但只有在新日志中写入首个条目时才会创建该日志。

操作系统将事件日志存储为文件。创建新事件日志时，会将关联的文件存储在指定计算机上的 %SystemRoot%\System32\Config 目录中。文件名是带有 .evt 文件扩展名的 Log 属性的前八个字符。

示例 1

C:\PS>new-eventlog -source TestApp -logname TestLog -MessageResourceFile C:\Test\TestApp.dll

说明
-----------
此命令在本地计算机上创建 TestLog 事件日志并为该日志注册新源。

示例 2

C:\PS>$file = "C:\Program Files\TestApps\NewTestApp.dll"

C:\PS> new-eventlog -computername Server01 -source NewTestApp -logname Application -MessageResourceFile $file -CategoryResourceFile $file

说明
-----------
此命令将一个新事件源 NewTestApp 添加到 Server01 远程计算机上的应用程序日志。

该命令要求 NewTestApp.dll 文件位于 Server01 计算机上。

另请参阅

  • Clear-EventLog
  • Get-EventLog
  • Limit-EventLog
  • New-EventLog
  • Remove-EventLog
  • Show-EventLog
  • Write-EventLog
  • Get-WinEvent


New-Item

创建新项。

语法

New-Item [-URI <Uri>] [-SDDL <string>] [-ExactMatch] [-Confirm] [-WhatIf] [<CommonParameters>]

说明

New-Item cmdlet 创建新项并设置该项的值。可创建项的类型取决于该项所在位置。例如，在文件系统中，New-Item 用于创建文件和文件夹。在注册表中，New-Item 用于创建注册表项和注册表条目。

在 Security 目录中，可以使用 New-Item cmdlet 创建和配置插件安全。

参数

-URI <Uri>

标识基于 Sddl 参数的值授权对其访问的 URI。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-SDDL <string>

指定访问控制条目的安全描述符定义语言 (SDDL)。这标识用于

授权对指定的资源 URI 进行访问的安全设置。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-ExactMatch

指定如何使用 Sddl 参数中指定的安全设置。如果 ExactMatch 参数设置为 True，

则 Sddl 中的安全设置仅用于授权严格按照 URI 指定的方式对 URI 进行访问尝试。

如果 ExactMatch 设置为 False，则 Sddl 中的安全设置用于授权对 URI 进行访问尝试，这些 URI 以

URI 中指定的字符串开头。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Confirm

在执行命令之前提示您进行确认。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-WhatIf

描述如果执行该命令会发生什么情况（无需实际执行该命令）。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

<CommonParameters>

此 cmdlet 支持通用参数：-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。有关详细信息，请参阅 about_Commonparameters.

输入和输出

输入类型是指可通过管道传递给 cmdlet 的对象的类型。返回类型是指 Cmdlet 所返回对象的类型。

输入 | System.Object 可以通过管道将新项的值传递给 New-Item cmdlet。
输出 | Any

说明

New-Item cmdlet 用于处理由任何提供程序公开的数据。要列出会话中可用的提供程序，请键入“Get-PsProvider”。有关详细信息，请参阅 About_Providers。

示例 1

C:\PS>New-Item -path WSMan:\localhost\Plugin\TestPlugin\Resources\Resource_5967683\Security -Sddl "O:NSG:BAD:P(A;;GA;;;BA)S:P(AU;FA;GA;;;WD)(AU;SA;GWGX;;;WD)"

此命令在 Resource_5967683（一个特定资源）的 Security 目录中创建一个安全条目。

另请参阅

  • about_Providers
  • Get-Item
  • Set-Item
  • Remove-Item
  • Clear-Item
  • Invoke-Item
  • Rename-Item
  • Move-Item
  • Copy-Item


New-ItemProperty

为项创建新属性并设置该属性的值。例如，可以使用 New-ItemProperty 创建和更改注册表值和数据，它们是注册表项的属性。

语法

New-ItemProperty [-LiteralPath] <string[]> [-Name] <string> [-Credential <PSCredential>] [-Exclude <string[]>] [-Filter <string>] [-Force] [-Include <string[]>] [-PropertyType <string>] [-Value <Object>] [-Confirm] [-WhatIf] [-UseTransaction] [<CommonParameters>]

New-ItemProperty [-Path] <string[]> [-Name] <string> [-Credential <PSCredential>] [-Exclude <string[]>] [-Filter <string>] [-Force] [-Include <string[]>] [-PropertyType <string>] [-Value <Object>] [-Confirm] [-WhatIf] [-UseTransaction] [<CommonParameters>]

说明

New-ItemProperty cmdlet 为指定项创建新属性并设置该属性的值。此 cmdlet 通常用于创建新注册表值，因为注册表值是注册表项的属性。

此 cmdlet 不能向对象添加属性。要向对象实例添加属性，请使用 Add-Member cmdlet。要向特定类型的所有对象添加属性，请编辑 Types.ps1xml 文件。

参数

-Credential <PSCredential>

指定有权执行此操作的用户帐户。默认值为当前用户。

键入用户名，如“User01”或“Domain01\User01”；或输入 PSCredential 对象，如 Get-Credential cmdlet 生成的一个 PSCredential 对象。如果键入用户名，则将提示您输入密码。

随同 Windows PowerShell 一起安装的任何提供程序都不支持此参数。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | true (ByPropertyName)
是否接受通配符？ | false

-Exclude <string[]>

忽略指定项。允许使用通配符。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Filter <string>

以提供程序的格式或语言指定筛选器。此参数的值对 Path 参数进行限定。

筛选器的语法（包括通配符的使用）取决于提供程序。筛选器比其他参数更有效，因为提供程序是在检索对象时应用筛选器，而不是在检索对象后再由 Windows PowerShell 筛选对象。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Force

允许 cmdlet 创建用户非此不能访问的对象的属性。不同提供程序有不同的实现。有关详细信息，请参阅 about_Providers。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Include <string[]>

此参数的值对 Path 参数进行限定。请输入路径元素或模式，例如“*.txt”。允许使用通配符。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-LiteralPath <string[]>

指定指向项属性的路径。LiteralPath 的值严格按照所键入的形式使用。不会将任何字符解释为通配符。如果路径包括转义符，请将其括在单引号中。单引号会告知 Windows PowerShell 不要将所有字符都解释为转义序列。

是否为必需？ | true
位置？ | 1
默认值 |
是否接受管道输入？ | true (ByPropertyName)
是否接受通配符？ | false

-Name <string>

指定新属性的名称。如果该属性是注册表条目，则此参数指定该条目的名称。

是否为必需？ | true
位置？ | 2
默认值 |
是否接受管道输入？ | true (ByPropertyName)
是否接受通配符？ | false

-Path <string[]>

指定项的路径。此参数标识要向其中添加新属性的项。

是否为必需？ | true
位置？ | 1
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-PropertyType <string>

指定要添加的属性的类型。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | true (ByPropertyName)
是否接受通配符？ | false

-Value <Object>

指定属性值。如果该属性是注册表条目，则此参数指定该条目的值。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | true (ByPropertyName)
是否接受通配符？ | false

-Confirm

在执行命令之前提示您进行确认。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-WhatIf

描述如果执行该命令会发生什么情况（无需实际执行该命令）。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-UseTransaction

将命令包含在活动事务中。仅当正在执行事务时，此参数才有效。有关详细信息，请参阅 about_Transactions。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

<CommonParameters>

此 cmdlet 支持通用参数：-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。有关详细信息，请参阅 about_Commonparameters.

输入和输出

输入类型是指可通过管道传递给 cmdlet 的对象的类型。返回类型是指 Cmdlet 所返回对象的类型。

输入 | None 不能通过管道将输入传递给 New-ItemProperty。
输出 | System.Management.Automation.PSCustomObject New-ItemProperty 返回一个包含新属性的自定义对象。

说明

New-ItemProperty cmdlet 用于处理由任何提供程序公开的数据。要列出会话中可用的提供程序，请键入“Get-PSProvider”。有关详细信息，请参阅 about_Providers。

示例 1

C:\PS>new-itemproperty -path HKLM:\Software\MyCompany -name NoOfEmployees -value 822

C:\PS> get-itemproperty hklm:\software\mycompany

PSPath        : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\software\mycompany
PSParentPath  : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\software
PSChildName   : mycompany
PSDrive       : HKLM
PSProvider    : Microsoft.PowerShell.Core\Registry
NoOfLocations : 2
NoOfEmployees : 822

说明
-----------
此命令将一个新注册表条目 NoOfEmployees 添加到 HKLM:\Software 配置单元的 MyCompany 项。

第一条命令使用 Path 参数指定 MyCompany 注册表项的路径。该命令使用 Name 参数指定该条目的名称，使用 Value 参数指定该条目的值。

第二条命令使用 Get-ItemProperty cmdlet 查看新的注册表条目。

示例 2

C:\PS>get-item -path HKLM:\Software\MyCompany | new-Itemproperty -name NoOfLocations -value 3

说明
-----------
此命令向注册表项添加新的注册表条目。为指定该项，该命令使用管道运算符 (|) 将表示该项的对象发送给 New-ItemProperty cmdlet。

该命令的第一部分使用 Get-Item cmdlet 获取 MyCompany 注册表项。管道运算符 (|) 将该部分命令的结果发送给 New-ItemProperty cmdlet，后者将新的注册表条目 NoOfLocations 及其值 3 添加到 MyCompany 项。

此命令的工作原理是：Windows PowerShell 的参数绑定功能将 Get-Item 返回的 RegistryKey 对象的路径与 New-ItemProperty 的 LiteralPath 参数关联。有关详细信息，请参阅 about_Pipelines。

另请参阅

  • about_Providers
  • Clear-ItemProperty
  • Copy-ItemProperty
  • Move-ItemProperty
  • Rename-ItemProperty
  • Get-ItemProperty
  • Set-ItemProperty
  • Remove-ItemProperty


New-Module

创建一个仅存在于内存中的新动态模块。

语法

New-Module [-Name] <string> [-ScriptBlock] <scriptblock> [-ArgumentList <Object[]>] [-AsCustomObject] [-Cmdlet <string[]>] [-Function <string[]>] [-ReturnResult] [<CommonParameters>]

New-Module [-ScriptBlock] <scriptblock> [-ArgumentList <Object[]>] [-AsCustomObject] [-Cmdlet <string[]>] [-Function <string[]>] [-ReturnResult] [<CommonParameters>]

说明

New-Module cmdlet 通过脚本块创建一个动态模块。该动态模块的成员（如函数和变量）立即在会话中可用，且在您关闭会话之前一直保持可用。

与静态模块一样，默认情况下，动态模块中的 cmdlet 和函数会导出，变量和别名则不会导出。但是，可以使用 Export-ModuleMember cmdlet 和 New-Module 的参数覆盖默认设置。

动态模块仅存在于内存中，而不存在于磁盘中。与所有模块一样，动态模块的成员在私有模块作用域（作为全局作用域的子作用域）中运行。Get-Module 无法获取动态模块，但 Get-Command 可以获取导出的成员。

若要使动态模块可用于 Get-Module，可以通过管道将一个 New-Module 命令传递给 Import-Module，或者通过管道将 New-Module 返回的模块对象传递给 Import-Module。此操作将动态模块添加到 Get-Module 列表，但不会将模块保存到磁盘或使它成为永久性的。

参数

-ArgumentList <Object[]>

指定传递给脚本块的实际参数（形式参数的值）。

是否为必需？ | false
位置？ | named
默认值 | 无
是否接受管道输入？ | false
是否接受通配符？ | false

-AsCustomObject

返回具有表示模块成员的成员的自定义对象。

使用 AsCustomObject 参数时，New-Module 创建动态模块，将模块成员导入当前会话，然后返回一个 PSCustomObject 对象而不是 PSModuleInfo 对象。可以将自定义对象保存在变量中并使用点表示法来调用成员。

如果模块具有多个名称相同的成员，例如一个函数和一个变量均命名为“A”，则每个名称只有一个成员能从自定义对象访问。

是否为必需？ | false
位置？ | named
默认值 | 无
是否接受管道输入？ | false
是否接受通配符？ | false

-Cmdlet <string[]>

仅将模块中的指定 cmdlet 导出到当前会话中。输入以逗号分隔的 cmdlet 列表。允许使用通配符。默认情况下，导出模块中的所有 cmdlet。

不能在脚本块中定义 cmdlet，但是如果从二进制模块中导入 cmdlet，则动态模块中可以包含 cmdlet。

是否为必需？ | false
位置？ | named
默认值 | 无
是否接受管道输入？ | false
是否接受通配符？ | true

-Function <string[]>

仅将模块中的指定函数导出到当前会话中。输入以逗号分隔的函数列表。允许使用通配符。默认情况下，导出模块中定义的所有函数。

是否为必需？ | false
位置？ | named
默认值 | 无
是否接受管道输入？ | false
是否接受通配符？ | true

-Name <string>

指定新模块的名称。也可将模块名称通过管道传送到 New-Module。

默认值是一个自动生成的名称，以“__DynamicModule_”开头，后面跟随指定动态模块路径的 GUID。

是否为必需？ | true
位置？ | 1
默认值 | "__DynamicModule_" + GUID
是否接受管道输入？ | true (ByValue)
是否接受通配符？ | false

-ReturnResult

运行脚本块，并返回脚本块结果而不是返回模块对象。

是否为必需？ | false
位置？ | named
默认值 | False
是否接受管道输入？ | false
是否接受通配符？ | false

-ScriptBlock <scriptblock>

指定动态模块的内容。用大括号 ({ }) 括起内容以形成脚本块。此参数是必需的。

是否为必需？ | true
位置？ | 1
默认值 | 无
是否接受管道输入？ | false
是否接受通配符？ | false

<CommonParameters>

此 cmdlet 支持通用参数：-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。有关详细信息，请参阅 about_Commonparameters.

输入和输出

输入类型是指可通过管道传递给 cmdlet 的对象的类型。返回类型是指 Cmdlet 所返回对象的类型。

输入 | System.String 可以将模块名称字符串通过管道传送到 New-Module。
输出 | System.Management.Automation.PSModuleInfo, System.Management.Automation.PSCustomObject, or None 默认情况下，New-Module 生成 PSModuleInfo 对象。如果使用 AsCustomObject 参数，则生成 PSCustomObject 对象。如果使用 ReturnResult 参数，则返回对动态模块中的脚本块的评估结果。

说明

还可以使用别名“nmo”来引用 New-Module。有关详细信息，请参阅 about_Aliases。

示例 1

C:\PS>new-module -scriptblock {function Hello {"Hello!"}}

Name              : __DynamicModule_2ceb1d0a-990f-45e4-9fe4-89f0f6ead0e5
Path              : 2ceb1d0a-990f-45e4-9fe4-89f0f6ead0e5
Description       :
Guid              : 00000000-0000-0000-0000-000000000000
Version           : 0.0
ModuleBase        :
ModuleType        : Script
PrivateData       :
AccessMode        : ReadWrite
ExportedAliases   : {}
ExportedCmdlets   : {}
ExportedFunctions : {[Hello, Hello]}
ExportedVariables : {}
NestedModules     : {}

说明
-----------
此命令使用名为“Hello”的函数创建一个新的动态模块。此命令返回一个表示该新动态模块的模块对象。

示例 2

C:\PS>new-module -scriptblock {function Hello {"Hello!"}}

Name              : __DynamicModule_2ceb1d0a-990f-45e4-9fe4-89f0f6ead0e5
Path              : 2ceb1d0a-990f-45e4-9fe4-89f0f6ead0e5
Description       :
Guid              : 00000000-0000-0000-0000-000000000000
Version           : 0.0
ModuleBase        :
ModuleType        : Script
PrivateData       :
AccessMode        : ReadWrite
ExportedAliases   : {}
ExportedCmdlets   : {}
ExportedFunctions : {[Hello, Hello]}
ExportedVariables : {}
NestedModules     : {}

C:\PS> get-module
C:\PS>

C:\PS> get-command Hello

CommandType     Name   Definition
-----------     ----   ----------
Function        Hello  "Hello!"

说明
-----------
此示例演示动态模块不是由 Get-Module cmdlet 返回的，但它们导出的成员是由 Get-Command cmdlet 返回的。

示例 3

C:\PS>New-Module -scriptblock {$SayHelloHelp="Type 'SayHello', a space, and a name."; function SayHello ($name) { "Hello, $name" }; Export-ModuleMember -function SayHello -Variable SayHelloHelp}

C:\PS> $SayHelloHelp
Type 'SayHello', a space, and a name.

C:\PS> SayHello Jeffrey
Hello, Jeffrey

说明
-----------
此命令使用 Export-ModuleMember cmdlet 将一个变量导出到当前会话中。如果不使用 Export-ModuleMember 命令，则仅导出函数。

输出显示出变量和函数均导出到会话中。

示例 4

C:\PS>new-module -scriptblock {function Hello {"Hello!"}} -name GreetingModule | import-module

C:\PS> get-module

Name              : GreetingModule
Path              : d54dfdac-4531-4db2-9dec-0b4b9c57a1e5
Description       :
Guid              : 00000000-0000-0000-0000-000000000000
Version           : 0.0
ModuleBase        :
ModuleType        : Script
PrivateData       :
AccessMode        : ReadWrite
ExportedAliases   : {}
ExportedCmdlets   : {}
ExportedFunctions : {[Hello, Hello]}
ExportedVariables : {}
NestedModules     : {}

C:\PS> get-command hello

CommandType     Name                                                               Definition
-----------     ----                                                               ----------
Function        Hello                                                              "Hello!"

说明
-----------
此命令演示您可以通过将动态模块通过管道传送到 Import-Module cmdlet，使该动态模块可用于 Get-Module cmdlet。

第一个命令使用管道运算符 (|) 将 New-Module 生成的模块对象发送到 Import-Module cmdlet。该命令使用 New-Module 的 Name 参数为模块分配一个友好名称。由于 Import-Module 默认情况下不返回任何对象，因此该命令没有输出。

第二个命令使用 Get-Module cmdlet 获取会话中的模块。结果显示出 Get-Module 可以获取新动态模块。

第三个命令使用 Get-Command cmdlet 获取动态模块导出的 Hello 函数。

示例 5

C:\PS>$m = new-module -scriptblock {function Hello ($name) {"Hello, $name"}; function Goodbye ($name) {"Goodbye, $name"}} -AsCustomObject

C:\PS> $m

C:\PS> $m | get-member

   TypeName: System.Management.Automation.PSCustomObject

Name        MemberType   Definition
----        ----------   ----------
Equals      Method       bool Equals(System.Object obj)
GetHashCode Method       int GetHashCode()
GetType     Method       type GetType()
ToString    Method       string ToString()
Goodbye     ScriptMethod System.Object Goodbye();
Hello       ScriptMethod System.Object Hello();

PS C:\ps-test> $m.goodbye("Jane")
Goodbye, Jane

PS C:\ps-test> $m.hello("Manoj")
Hello, Manoj

PS C:\ps-test> goodbye Jane
Goodbye, Jane

PS C:\ps-test> hello Manoj
Hello, Manoj

说明
-----------
此示例说明如何使用 New-Module 的 AsCustomObject 参数生成一个自定义对象，该对象带有表示导出的函数的脚本方法。

第一个命令使用 New-Module cmdlet 生成一个动态模块，该模块带有两个函数 Hello 和 Goodbye。此命令使用 AsCustomObject 参数生成自定义对象，而不是 New-Module 默认生成的 PSModuleInfo 对象。它将该自定义对象保存在 $m 变量中。

第二个命令尝试显示 $m 变量的值。未显示任何内容。

第三个命令使用管道运算符 (|) 将该自定义对象发送到 Get-Member cmdlet，后者显示该自定义对象中的属性和方法。输出显示出该对象具有表示 Hello 和 Goodbye 函数的脚本方法。

第四个和第五个命令使用该脚本方法格式调用 Hello 和 Goodbye 函数。

第六个和第七个命令通过指定函数名和参数值来调用这些函数。

示例 6

C:\PS>new-module -scriptblock {function SayHello {"Hello, World!"}; SayHello} -returnResult

Hello, World!

说明
-----------
此命令使用 ReturnResult 参数请求运行脚本块的结果，而不是请求模块对象。

新模块中的脚本块定义 SayHello 函数，然后调用该函数。

另请参阅

  • Get-Module
  • Import-Module
  • Remove-Module
  • Export-ModuleMember
  • about_Modules


New-ModuleManifest

创建一个新的模块清单。

语法

New-ModuleManifest [-Path] <string> -Author <string> -CompanyName <string> -Copyright <string> -Description <string> -FileList <string[]> -FormatsToProcess <string[]> -ModuleToProcess <string> -NestedModules <string[]> -RequiredAssemblies <string[]> -TypesToProcess <string[]> [-AliasesToExport <string[]>] [-ClrVersion <Version>] [-CmdletsToExport <string[]>] [-DotNetFrameworkVersion <Version>] [-FunctionsToExport <string[]>] [-Guid <Guid>] [-ModuleList <Object[]>] [-ModuleVersion <Version>] [-PassThru] [-PowerShellHostName <string>] [-PowerShellHostVersion <Version>] [-PowerShellVersion <Version>] [-PrivateData <Object>] [-ProcessorArchitecture {<None> | <MSIL> | <X86> | <IA64> | <Amd64>}] [-RequiredModules <Object[]>] [-ScriptsToProcess <string[]>] [-VariablesToExport <string[]>] [-Confirm] [-WhatIf] [<CommonParameters>]

说明

New-ModuleManifest cmdlet 创建一个新的模块清单 (.psd1) 文件，填入它的值，并将该清单文件保存在指定的路径。

模块作者可以使用该 cmdlet 为其模块创建清单。模块清单是一个包含哈希表的 .psd1 文件。此哈希表中的键和值描述模块的内容和属性，定义先决条件，并确定如何处理组件。清单不是模块所必需的。

New-ModuleManifest 创建一个包含所有常用清单键的清单，因此您可以使用默认输出作为清单模板。若要添加或更改值，或者添加该 cmdlet 不添加的模块键，请在文本编辑器中打开生成的文件。

该 cmdlet 的每个参数（Path 和 PassThru 除外）都创建一个模块清单键及其值。在模块清单中，只有 ModuleVersion 键是必需的。但是，该 cmdlet 的其他若干参数是强制性的。因此，您可以键入不带参数的“New-ModuleManifest”命令，该 cmdlet 将提示您提供其他常用键的值。要将值保留为空，请按 Enter。

有关模块清单的格式、效果和要求的完整说明，请参阅 MSDN (Microsoft Developer Network) Library 中的“如何编写模块清单”，地址是：http://go.microsoft.com/fwlink/?LinkId=143613。

参数

-AliasesToExport <string[]>

指定模块导出的别名。允许使用通配符。

使用此参数可以限定模块导出的别名。它可以从导出的别名列表中删除别名，但不能向列表中添加别名。

如果省略此参数，New-ModuleManifest 将创建一个值为 * (all) 的 AliasesToExport 键，表示清单将导出该模块导出的所有别名。

是否为必需？ | false
位置？ | named
默认值 | * (all)
是否接受管道输入？ | false
是否接受通配符？ | true

-Author <string>

指定模块作者。

cmdlet 需要此参数，但在清单中 Author 键不是必需的。如果省略此参数，并且在提示时不输入值，New-ModuleManifest 将创建一个具有当前用户名称的 Author 键。

是否为必需？ | true
位置？ | named
默认值 | Name of the current user
是否接受管道输入？ | false
是否接受通配符？ | false

-ClrVersion <Version>

指定模块要求的 Microsoft .NET Framework 公共语言运行时 (CLR) 的版本。

如果省略此参数，New-ModuleManifest 将创建一个值为空字符串的 CLRVersion 键。

是否为必需？ | false
位置？ | named
默认值 | 无
是否接受管道输入？ | false
是否接受通配符？ | false

-CmdletsToExport <string[]>

指定模块导出的 cmdlet。允许使用通配符。

使用此参数可以限定模块导出的 cmdlet。它可以从导出的 cmdlet 列表中删除 cmdlet，但不能向列表中添加 cmdlet。

如果省略此参数，New-ModuleManifest 将创建一个值为 * (all) 的 CmdletsToExport 键，表示清单将导出该模块导出的所有 cmdlet。

是否为必需？ | false
位置？ | named
默认值 | * (all)
是否接受管道输入？ | false
是否接受通配符？ | true

-CompanyName <string>

标识创建模块的公司或供应商。

cmdlet 需要此参数，但 CompanyName 键在清单中不是必需的。如果省略此参数，并且在提示时不输入值，New-ModuleManifest 将创建一个值为“Unknown”的 CompanyName 键。

是否为必需？ | true
位置？ | named
默认值 | "Unknown"
是否接受管道输入？ | false
是否接受通配符？ | false

-Copyright <string>

指定模块的版权声明。

cmdlet 需要此参数，但 Copyright 键在清单中不是必需的。如果省略此参数，并且在提示时不输入值，New-ModuleManifest 将创建一个 Copyright 键，其值为“(c) <year> <username>。All rights reserved."其中，<year> 为当前年份，<username> 是 Author 键的值（如果有指定）或当前用户的名称。

是否为必需？ | true
位置？ | named
默认值 | (c) <year> <username>. All rights reserved.
是否接受管道输入？ | false
是否接受通配符？ | false

-Description <string>

描述模块的内容。

cmdlet 需要此参数，但 Description 键在清单中不是必需的。如果省略此参数，并且在提示时不输入值，New-ModuleManifest 将创建一个值为空字符串的 Description 键。

是否为必需？ | true
位置？ | named
默认值 | 无
是否接受管道输入？ | false
是否接受通配符？ | false

-DotNetFrameworkVersion <Version>

指定模块要求的 Microsoft .NET Framework 的版本。

如果省略此参数，New-ModuleManifest 将创建一个值为空字符串的 DotNetFrameWorkVersion 键。

是否为必需？ | false
位置？ | named
默认值 | 无
是否接受管道输入？ | false
是否接受通配符？ | false

-FileList <string[]>

指定模块中包含的所有项。

该键设计用作模块清单。这些文件不会自动随模块导出。

cmdlet 需要此参数，但在清单中 FileList 键不是必需的。如果省略此参数，并且在提示时不输入值，New-ModuleManifest 将创建一个值为空数组的 FileList 键。

是否为必需？ | true
位置？ | named
默认值 | 无
是否接受管道输入？ | false
是否接受通配符？ | false

-FormatsToProcess <string[]>

指定要在导入模块时运行的格式文件 (.ps1xml)。

在导入模块时，Windows PowerShell 使用指定的文件运行 Update-FormatData cmdlet。由于没有确定格式文件的作用域，因此它们会影响到会话中的所有会话状态。

cmdlet 需要此参数，但 FormatsToProcess 键在清单中不是必需的。如果省略此参数，并且在提示时不输入值，New-ModuleManifest 将创建一个值为空数组的 FormatsToProcess 键。

是否为必需？ | true
位置？ | named
默认值 | 无
是否接受管道输入？ | false
是否接受通配符？ | false

-FunctionsToExport <string[]>

指定模块导出的函数。允许使用通配符。

使用此参数可以限定模块导出的函数。它可以从导出的别名列表中删除函数，但不能向列表中添加函数。

如果省略此参数，New-ModuleManifest 将创建一个值为 * (all) 的 FunctionsToExport 键，表示清单将导出该模块导出的所有函数。

是否为必需？ | false
位置？ | named
默认值 | * (all)
是否接受管道输入？ | false
是否接受通配符？ | true

-Guid <Guid>

指定模块的唯一标识符。GUID 可用于区分具有相同名称的多个模块。

如果省略此参数，New-ModuleManifest 将在清单中创建一个 GUID 键，并为值生成一个 GUID。

若要在 Windows PowerShell 中创建一个新的 GUID，请键入“[guid]::NewGuid()”。

是否为必需？ | false
位置？ | named
默认值 | A GUID generated for the module
是否接受管道输入？ | false
是否接受通配符？ | false

-ModuleList <Object[]>

列出随此模块一起包装的所有模块。

以字符串形式输入每个模块名称，或输入具有 ModuleName 和 GUID 键的哈希表。该哈希表还可以包含可选的 ModuleVersion 键。

该键设计用作模块清单。这些模块不会被自动处理。

如果省略此参数，New-ModuleManifest 将在清单中创建一个值为空数组的 ModuleList 键。

是否为必需？ | false
位置？ | named
默认值 | 无
是否接受管道输入？ | false
是否接受通配符？ | false

-ModuleToProcess <string>

指定模块的主文件或“根”文件。导入模块时，从根模块文件中导出的成员将被导入到调用方的会话状态中。输入一个脚本模块 (.psm1) 或二进制模块 (.dll) 的文件名。

如果模块具有清单文件，并且 ModuleToProcess 键中没有指定任何根文件，则清单将成为模块的主文件，并且模块将成为“清单模块”(ModuleType = Manifest)。

若要从具有清单的模块中的 .psm1 或 .dll 文件中导出成员，则必须在清单中的 ModuleToProcess 或 NestedModules 键的值中指定这些文件的名称。否则，将不会导出它们的成员。

cmdlet 需要此参数，但在清单中 ModuleToProcess 键不是必需的。如果省略此参数，并且在提示时不输入值，New-ModuleManifest 将创建一个值为空数组的 ModuleToProcess 键。

是否为必需？ | true
位置？ | named
默认值 | 无
是否接受管道输入？ | false
是否接受通配符？ | false

-ModuleVersion <Version>

指定模块的版本。

cmdlet 不需要此参数，但清单中需要 ModuleVersion 键。如果省略此参数，New-ModuleManifest 将创建一个值为“1.0”的 ModuleVersion 键。

是否为必需？ | false
位置？ | named
默认值 | 1.0
是否接受管道输入？ | false
是否接受通配符？ | false

-NestedModules <string[]>

指定导入模块会话状态的脚本模块 (.psm1) 和二进制模块 (.dll)。NestedModules 键中的文件按它们在值中的列出顺序运行。

通常情况下，嵌套模块包含根模块进行其内部处理所需的命令。默认情况下，嵌套模块中的命令从模块的会话状态导出到调用方的会话状态中，但是根模块可以限定它导出的命令（例如，使用 Export-Module 命令）。

模块会话状态中的嵌套模块可用于根模块，但这些嵌套模块不是由调用方会话状态中的 Get-Module 命令返回的。

NestedModules 键中列出的脚本 (.ps1) 在模块的会话状态而不是在调用方的会话状态中运行。要在调用方的会话状态中运行脚本，应在清单中的 ScriptsToProcess 键的值中列出脚本文件名。

cmdlet 需要此参数，但在清单中 NestedModules 键不是必需的。如果省略此参数，并且在提示时不输入值，New-ModuleManifest 将创建一个值为空数组的 NestedModules 键。

是否为必需？ | true
位置？ | named
默认值 | 无
是否接受管道输入？ | false
是否接受通配符？ | false

-PassThru

除了创建一个 .psd1 文件，还将生成的模块清单写入控制台。默认情况下，此 cmdlet 将不产生任何输出。

是否为必需？ | false
位置？ | named
默认值 | False
是否接受管道输入？ | false
是否接受通配符？ | false

-Path <string>

指定新模块清单的路径和文件名。输入路径和具有 .psd1 扩展名的文件名，例如“$pshome\Modules\MyModule\MyModule.psd1”。此参数是必需的。

如果指定现有文件的路径，则除非文件具有只读属性，否则 New-ModuleManifest 将在不提示的情况下替换文件。

清单应位于模块目录中，且清单文件名应与模块目录名相同，但文件扩展名为 .psd1。

注意：当提示您输入 Path 参数值时，您不能使用诸如 $pshome 或 $home 这样的变量。要使用变量，请在命令中包括 Path 参数。

是否为必需？ | true
位置？ | 1
默认值 | 无
是否接受管道输入？ | false
是否接受通配符？ | false

-PowerShellHostName <string>

指定模块所需的 Windows PowerShell 主机程序的名称。输入主机程序的名称，例如“Windows PowerShell ISE Host”或“ConsoleHost”。不允许使用通配符。

要查找主机程序的名称，请在程序中键入“$host.name”。

如果省略此参数，New-ModuleManifest 将创建一个值为空字符串的 PowerShellHostName 键。

是否为必需？ | false
位置？ | named
默认值 | 无
是否接受管道输入？ | false
是否接受通配符？ | false

-PowerShellHostVersion <Version>

指定用于该模块的 Windows PowerShell 主机程序的最低版本。请输入版本号，例如 1.1。

如果省略此参数，New-ModuleManifest 将创建一个值为空字符串的 PowerShellHostName 键。

是否为必需？ | false
位置？ | named
默认值 | 无
是否接受管道输入？ | false
是否接受通配符？ | false

-PowerShellVersion <Version>

指定用于该模块的 Windows PowerShell 的最低版本。输入 1.0 或 2.0。不强制要求使用超过 2.0 的版本。

如果省略此参数，New-ModuleManifest 将创建一个值为空字符串的 PowerShellVersion 键。

是否为必需？ | false
位置？ | named
默认值 | 无
是否接受管道输入？ | false
是否接受通配符？ | false

-PrivateData <Object>

指定导入模块时传递给模块的数据。

如果省略此参数，New-ModuleManifest 将创建一个值为空字符串的 PrivateData 键。

是否为必需？ | false
位置？ | named
默认值 | 无
是否接受管道输入？ | false
是否接受通配符？ | false

-ProcessorArchitecture <ProcessorArchitecture>

指定模块需要的处理器体系结构。有效值为 x86、AMD64、IA64 和 None（未知或未指定）。

如果省略此参数，New-ModuleManifest 将创建一个值为空字符串的 ProcessorArchitecture 键。

是否为必需？ | false
位置？ | named
默认值 | 无
是否接受管道输入？ | false
是否接受通配符？ | false

-RequiredAssemblies <string[]>

指定模块需要的程序集 (.dll) 文件。Windows PowerShell 在更新类型或格式、导入嵌套模块或导入 ModuleToProcess 键的值所指定的模块文件之前，会先加载指定的程序集。

使用此参数可列出模块所需要的所有程序集，包括必须加载以更新在 FormatsToProcess 或 TypesToProcess 键中列出的任何格式或类型文件的程序集，即使 NestedModules 键中另将这些程序集列为二进制模块时也需要如此。

cmdlet 需要此参数，但在清单中 RequiredAssemblies 键不是必需的。如果省略此参数，并且在提示时不输入值，New-ModuleManifest 将创建一个值为空数组的 RequiredAssemblies 键。

是否为必需？ | true
位置？ | named
默认值 | 无
是否接受管道输入？ | false
是否接受通配符？ | false

-RequiredModules <Object[]>

指定必须处于全局会话状态的模块。如果所需模块未处于全局会话状态，则导入此模块的尝试将失败。

以字符串形式输入每个模块名称，或输入具有 ModuleName 和 GUID 键的哈希表。该哈希表还可以包含可选的 ModuleVersion 键。有关详细信息，请参阅示例。

Windows PowerShell 不会自动导入所需的模块。它只验证所需的模块是否存在。但是，模块可以包含将所需模块导入全局会话状态的脚本 (.ps1)。

如果省略此参数，New-ModuleManifest 将创建一个值为空字符串的 RequiredModules 键。

是否为必需？ | false
位置？ | named
默认值 | 无
是否接受管道输入？ | false
是否接受通配符？ | false

-ScriptsToProcess <string[]>

指定在导入模块时在调用方会话状态中运行的脚本 (.ps1) 文件。您可以像使用登录脚本一样使用这些脚本来准备环境。

要指定在模块会话状态中运行的脚本，请使用 NestedModules 键。

如果省略此参数，New-ModuleManifest 将创建一个值为空数组的 ScriptsToProcess 键。

是否为必需？ | false
位置？ | named
默认值 | 无
是否接受管道输入？ | false
是否接受通配符？ | false

-TypesToProcess <string[]>

指定要在导入模块时运行的类型文件 (.ps1xml)。

在导入此模块时，Windows PowerShell 使用指定的文件运行 Update-TypeData cmdlet。由于没有确定类型文件的作用域，因此它们会影响到会话中的所有会话状态。

cmdlet 需要此参数，但 TypesToProcess 键在清单中不是必需的。如果省略此参数，并且在提示时不输入值，New-ModuleManifest 将创建一个值为空数组的 TypesToProcess 键。

是否为必需？ | true
位置？ | named
默认值 | 无
是否接受管道输入？ | false
是否接受通配符？ | false

-VariablesToExport <string[]>

指定模块导出的变量。允许使用通配符。

使用此参数可以限定模块导出的变量。它可以从导出的变量列表中删除变量，但不能向列表中添加变量。

如果省略此参数，New-ModuleManifest 将创建一个值为 * (all) 的 VariablesToExport 键，表示清单将导出该模块导出的所有变量。

是否为必需？ | false
位置？ | named
默认值 | * (all)
是否接受管道输入？ | false
是否接受通配符？ | true

-Confirm

在执行命令之前提示您进行确认。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-WhatIf

描述如果执行该命令会发生什么情况（无需实际执行该命令）。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

<CommonParameters>

此 cmdlet 支持通用参数：-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。有关详细信息，请参阅 about_Commonparameters.

输入和输出

输入类型是指可通过管道传递给 cmdlet 的对象的类型。返回类型是指 Cmdlet 所返回对象的类型。

输入 | None 不能通过管道将输入传递给此 cmdlet。
输出 | None 或 System.String 默认情况下，New-ModuleManifest 不生成任何输出。但是，如果使用 PassThru 参数，则生成表示模块清单的 System.String 对象。

说明

模块清单通常是可选的。但是，要导出安装在全局程序集缓存中的程序集，则模块清单是必需的。

要向 $pshome\Modules 目录 (%Windir%\System32\WindowsPowerShell\v1.0\Modules) 中添加文件或更改其中的文件，请使用“以管理员身份运行”选项启动 Windows PowerShell。

“会话”是 Windows PowerShell 执行环境的一个实例。一个会话可以有一个或多个会话状态。默认情况下，会话只有全局会话状态，但每个导入的模块都拥有自己的会话状态。通过使用会话状态，模块中的命令可以在不影响全局会话状态的情况下运行。

“调用方会话状态”是指将模块导入到其中的会话状态。该状态通常是指全局会话状态，但当某个模块导入嵌套模块时，该模块为“调用方”，而该模块的会话状态为“调用方会话状态”。

示例 1

C:\PS>New-ModuleManifest

Path: C:\Users\User01\Documents\WindowsPowerShell\Modules\Test-Module\Test-Module.psd1
NestedModules[0]: BackgroundModule.psm1
Author: Jinghao Liu
CompanyName: Fabrikam, Inc.
Copyright: Copyright © 2009 Liu Jinghao. All rights reserved.
ModuleToProcess: TestModule.psm1
Description: Cmdlets to find common errors in scripts.
TypesToProcess[0]: TestTypes.ps1xml
FormatsToProcess[0]: TestFormat.ps1xml
RequiredAssemblies[0]: Test.dll
FileList[0]: Test-Module.psd1
FileList[1]: Test-Module.psm1
FileList[2]: BackgroundModule.psm1
FileList[3]: TestTypes.ps1xml
FileList[4]: TestFormat.ps1xml
FileList[5]: Test.dll
FileList[6]: TestIcon.ico

说明
-----------
此命令创建一个新的模块清单。cmdlet 将提示您提供所需的参数（包括 Path 参数），并在指定位置创建一个清单文件。

此命令的输出显示对提示的响应示例。若要使用默认值，请按 Enter。

实际提示以及它对由引号括起的短语和不带引号的短语的处理取决于运行 Windows PowerShell 的主机程序。

示例 2

C:\PS>New-ModuleManifest -PowerShellVersion 1.0 -AliasesToExport JKBC, DRC, TAC

说明
-----------
此命令创建一个新的模块清单。它包括 cmdlet 不需要（或不提示）的参数。您可以在提示符下包括其他清单键值。

示例 3

C:\PS>New-ModuleManifest -RequiredModules FileTransfer,@{ModuleName="BackgroundModule";GUID="486569a2-2784-48bf-af15-70ba837a64d0";ModuleVersion="3.5"}

说明
-----------
此示例说明如何使用 RequiredModules 参数值的字符串和哈希表格式。可在同一命令中使用字符串和哈希表。

此命令为一个需要 FileTransfer 模块的模块和一个名为“BackgroundModule”的（虚拟）模块创建一个模块清单。

此命令使用字符串格式指定 FileTransfer 模块的名称，并使用哈希表格式指定 BackgroundModule 的名称、GUID 和版本。

另请参阅

  • Import-Module
  • Get-Module
  • New-Module
  • Remove-Module
  • Export-ModuleMember
  • Test-ModuleManifest
  • about_Modules


New-Object

创建 Microsoft .NET Framework 或 COM 对象的实例。

语法

New-Object -ComObject <string> [-Strict] [-Property <hashtable>] [<CommonParameters>]

New-Object [-TypeName] <string> [[-ArgumentList] <Object[]>] [-Property <hashtable>] [<CommonParameters>]

说明

New-Object cmdlet 创建 .NET Framework 或 COM 对象的实例。

可以指定 .NET Framework 类的类型，也可以指定 COM 对象的 ProgID。默认情况下，键入 .NET Framework 类的完全限定名称时，该 cmdlet 返回对该类的实例的引用。若要创建 COM 对象的实例，请使用 ComObject 参数并指定对象的 ProgID 作为它的值。

参数

-ArgumentList <Object[]>

指定传递给 .NET Framework 类的构造函数的参数列表。使用逗号 (,) 分隔列表中的元素。ArgumentList 的别名为 Args。

是否为必需？ | false
位置？ | 2
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-ComObject <string>

指定 COM 对象的编程标识符 (ProgID)。

是否为必需？ | true
位置？ | named
默认值 | 无
是否接受管道输入？ | false
是否接受通配符？ | false

-Property <hashtable>

设置属性值，并调用新对象的方法。

输入一个哈希表，其中的键是属性或方法的名称，值是属性值或方法参数。New-Object 创建对象并设置每个属性值，并按方法在哈希表中的出现顺序调用每个方法。

如果新对象是从 PSObject 类派生的，并且您指定该对象中不存在的一个属性，则 New-Object 将该指定属性作为 NoteProperty 添加到该对象中。如果该对象不是 PSObject，则命令将生成一个非终止错误。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Strict

指定如果试图创建的 COM 对象使用互操作程序集则应当引发的错误。这使您能够将实际 COM 对象与具有 COM 可调用包装的 .NET Framework 对象区分开来。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-TypeName <string>

指定 NET Framework 类的完全限定名称。不能同时指定 TypeName 参数和 ComObject 参数。

是否为必需？ | true
位置？ | 1
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

<CommonParameters>

此 cmdlet 支持通用参数：-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。有关详细信息，请参阅 about_Commonparameters.

输入和输出

输入类型是指可通过管道传递给 cmdlet 的对象的类型。返回类型是指 Cmdlet 所返回对象的类型。

输入 | None 不能通过管道将输入传递给此 cmdlet。
输出 | Object New-Object 返回创建的对象。

说明

New-Object 提供 VBScript CreateObject 函数的最常用功能。像 VBScript 中 Set objShell = CreateObject("Shell.Application") 这样的语句可以转换成 Windows PowerShell 中的 $objShell = new-object -comobject "Shell.Application"。

New-Object 通过使您更容易从命令行和在脚本内处理 .NET Framework 对象，扩展了在 Windows 脚本宿主环境中可用的功能。

示例 1

C:\PS>new-object -typename System.Version -argumentlist "1.2.3.4"

Major  Minor  Build  Revision
-----  -----  -----  --------
1      2      3      4

说明
-----------
此命令使用字符串“1.2.3.4”作为构造函数来创建 System.Version 对象。

示例 2

C:\PS>$ie = new-object -comobject InternetExplorer.Application -property @{navigate2="www.microsoft.com"; visible = $true}

说明
-----------
此命令创建表示 Internet Explorer 应用程序的 COM 对象的实例。它使用 Property 参数来调用 Navigate2 方法，并将该对象的 Visible 属性设置为 $true，使应用程序可见。

此命令与下列命令等效：

$ie = new-object -comobject InternetExplorer.Application
$ie.navigate2("www.microsoft.com")
$ie.visible = $true

示例 3

C:\PS>$a=new-object -comobject Word.Application -strict -property @{visible=$true}

New-Object : The object written to the pipeline is an instance of the type
"Microsoft.Office.Interop.Word.ApplicationClass" from the component's prima
ry interop assembly. If this type exposes different members than the IDispa
tch members, scripts written to work with this object might not work if the
 primary interop assembly is not installed.
At line:1 char:14
+ $a=New-Object  <<<< -COM Word.Application -Strict; $a.visible=$true

说明
-----------
此命令演示：如果所创建的 COM 对象使用互操作程序集，则指定 Strict 参数将使 New-Object cmdlet 生成非终止错误。

示例 4

C:\PS>$objshell = new-object -comobject "Shell.Application"

C:\PS> $objshell | get-member

C:\PS> $objshell.ToggleDesktop()

说明
-----------
该命令使用 ComObject 参数创建 ProgID 为“Shell.Application”的 COM 对象。它将生成的对象存储在 $objShell 变量中。

第二个命令通过管道将 $objShell 变量传递到 Get-Member cmdlet，该 cmdlet 显示 COM 对象的属性和方法。

第三个命令调用该对象的 ToggleDesktop 方法，将桌面上打开的窗口最小化。

另请参阅

  • Compare-Object
  • Select-Object
  • Sort-Object
  • ForEach-Object
  • Group-Object
  • Measure-Object
  • Tee-Object
  • Where-Object


New-PSDrive

在当前会话中创建 Windows PowerShell 驱动器。

语法

New-PSDrive [-Name] <string> [-PSProvider] <string> [-Root] <string> [-Credential <PSCredential>] [-Description <string>] [-Scope <string>] [-Confirm] [-WhatIf] [-UseTransaction] [<CommonParameters>]

说明

New-PSDrive cmdlet 创建“映射到”数据存储（如网络驱动器、本地计算机上的目录或注册表项）中的某一位置或与之关联的一个 Windows PowerShell 驱动器。

就像操作任何映射驱动器那样，可以使用创建的 Windows PowerShell 驱动器访问关联数据存储中的数据。可以更改驱动器中的位置（使用“set-location”、“cd”或“chdir”），并且可以访问驱动器的内容（使用“get-item”、“get-childitem”或“dir”）。

但是，Windows PowerShell 驱动器仅对 Windows PowerShell 是已知的。不能使用 Windows 资源管理器、Windows Management Instrumentation (WMI)、组件对象模型 (COM)、Microsoft .NET Framework 或使用类似 Net Use 的工具访问这些驱动器。

Windows PowerShell 驱动器仅存在于当前 Windows PowerShell 会话中。要使驱动器具有持久性，可以导出在其中添加了驱动器的会话，或者在 Windows PowerShell 配置文件中保存 New-PSDrive 命令。

要删除 New-PSDrive 所创建的驱动器，请使用 Remove-PSDrive cmdlet。

参数

-Credential <PSCredential>

指定有权执行此操作的用户帐户。默认值为当前用户。

键入用户名，例如“User01”或“Domain01\User01”。或者，输入 PSCredential 对象，例如由 Get-Credential cmdlet 生成的对象。如果键入用户名，则将提示您输入密码。

随同 Windows PowerShell 一起安装的任何提供程序都不支持此参数。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | true (ByPropertyName)
是否接受通配符？ | false

-Description <string>

指定驱动器的简短文本说明。可键入任意字符串。

要查看系统上所有 Windows PowerShell 驱动器的说明，请键入“get-psdrive | format name, description”。要查看特定 Windows PowerShell 驱动器的说明，请键入“(get-psdrive <DriveName>).description”。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | true (ByPropertyName)
是否接受通配符？ | false

-Name <string>

指定新驱动器的名称。可以对该名称使用任意有效字符串，而不仅限于驱动器号。Windows PowerShell 驱动器名称区分大小写。

是否为必需？ | true
位置？ | 1
默认值 |
是否接受管道输入？ | true (ByPropertyName)
是否接受通配符？ | false

-PSProvider <string>

指定支持此类型的驱动器的 Windows PowerShell 提供程序。

例如，如果 Windows PowerShell 驱动器与网络共享或文件系统目录关联，则 Windows PowerShell 提供程序为“FileSystem”。如果 Windows PowerShell 驱动器与注册表项关联，则提供程序为“Registry”。

要查看 Windows PowerShell 会话中提供程序的列表，请键入“get-psprovider”。

是否为必需？ | true
位置？ | 2
默认值 |
是否接受管道输入？ | true (ByPropertyName)
是否接受通配符？ | false

-Root <string>

指定 Windows PowerShell 驱动器映射到的数据存储位置。

例如，指定网络共享（如 \\Server01\Public）、本地目录（如 C:\Program Files）或注册表项（如 HKLM:\Software\Microsoft）。

是否为必需？ | true
位置？ | 3
默认值 |
是否接受管道输入？ | true (ByPropertyName)
是否接受通配符？ | false

-Scope <string>

指定驱动器的作用域。有效值包括“Global”、“Local”、“Script”或者相对于当前作用域的数字（0 到作用域数，其中 0 是指当前作用域，1 是指其父作用域）。默认值为“Local”。有关详细信息，请参阅 about_Scopes。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | true (ByPropertyName)
是否接受通配符？ | false

-Confirm

在执行命令之前提示您进行确认。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-WhatIf

描述如果执行该命令会发生什么情况（无需实际执行该命令）。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-UseTransaction

将命令包含在活动事务中。仅当正在执行事务时，此参数才有效。有关详细信息，请参阅 about_Transactions。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

<CommonParameters>

此 cmdlet 支持通用参数：-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。有关详细信息，请参阅 about_Commonparameters.

输入和输出

输入类型是指可通过管道传递给 cmdlet 的对象的类型。返回类型是指 Cmdlet 所返回对象的类型。

输入 | None 不能通过管道将输入传递给此 cmdlet。
输出 | System.Management.Automation.PSDriveInfo

说明

New-PSDrive cmdlet 用于处理由任何提供程序公开的数据。要列出会话中可用的提供程序，请键入“get-psprovider”。有关详细信息，请参阅 about_Providers。

示例 1

C:\PS>new-psdrive -name P -psprovider FileSystem -root \\Server01\Public

Name       Provider      Root
----       --------      ----
P          FileSystem    \\Server01\Public

说明
-----------
此命令创建一个 Windows PowerShell 驱动器，其功能类似于 Windows 中的映射网络驱动器。该命令创建一个名为 P: 的 Windows PowerShell 驱动器，该驱动器映射到 \\Server01\Public 网络共享。

该命令使用 Name 参数指定该驱动器的名称，使用 PSProvider 参数指定 Windows PowerShell FileSystem 提供程序，使用 Root 参数指定网络共享。

该命令完成后，\\Server01\Public 共享的内容即会显示在 P: 驱动器中。要查看这些内容，请键入：“dir p:”。

示例 2

C:\PS>new-psdrive -name MyDocs -psprovider FileSystem -root "C:\Documents and Settings\User01\My Documents" -Description "Maps to my My Documents folder."

Name       Provider      Root
----       --------      ----
MyDocs     FileSystem    C:\Documents and Settings\User01\My Documents

说明
-----------
此命令创建一个 Windows PowerShell 驱动器，用于提供对本地目录的快速访问。该命令创建一个名为 MyDocs: 的驱动器，该驱动器映射到本地计算机上的
“C:\Documents and Settings\User01\My Documents”目录。

该命令使用 Name 参数指定该驱动器的名称，使用 PSProvider 参数指定 Windows PowerShell FileSystem 提供程序，使用 Root 参数指定 My Documents 文件夹的路径，使用 Description 参数创建该驱动器的说明。

该命令完成后，My Documents 文件夹的内容即会显示在 MyDocs: 驱动器中。要查看这些内容，请键入：“dir mydocs:”。

示例 3

C:\PS>new-psdrive -name MyCompany -psprovider Registry -root HKLM:\Software\MyCompany

Name       Provider      Root
----       --------      ----
MyCompany  Registry      HKEY_LOCAL_MACHINE\Software\MyCo...

说明
-----------
此命令创建一个 Windows PowerShell 驱动器，用于提供对经常查看的注册表项的快速访问。该命令创建一个名为 MyCompany 的驱动器，该驱动器映射到 HKLM\Software\MyCompany 注册表项。

该命令使用 Name 参数指定该驱动器的名称，使用 PSProvider 参数指定 Windows PowerShell Registry 提供程序，使用 Root 参数指定注册表项。

该命令完成后，MyCompany 项的内容即会显示在 MyCompany: 驱动器中。要查看这些内容，请键入：“dir MyCompany:”。

示例 4

C:\PS>new-psdrive -name PsDrive -psprovider FileSystem -root \\Server01\Public

C:\PS> $drive = new-object -com wscript.network
C:\PS> $drive.MapNetworkDrive("X:", "\\Server01\Public")

C PS:\> get-psdrive public, x

Name       Provider      Root
----       --------      ----
PsDrive    FileSystem    \\Server01\public
X          FileSystem    X:\

C:\PS>get-psdrive psdrive, x | get-member

   TypeName: System.Management.Automation.PSDriveInfo
Name                MemberType Definition
----                ---------- ----------
CompareTo           Method     System.Int32 CompareTo(PSDriveInfo drive),
Equals              Method     System.Boolean Equals(Object obj),
GetHashCode         Method     System.Int32 GetHashCode()
...

C:\PS> net use
Status       Local     Remote                    Network
---------------------------------------------------------------------------
             X:        \\server01\public         Microsoft Windows Network

C:\PS> get-wmiobject win32_logicaldisk | ft deviceid
deviceid
--------
C:
D:
X:

C:\PS> get-wmiobject win32_networkconnection
LocalName                     RemoteName                    ConnectionState               Status
---------                     ----------                    ---------------               ------
X:                            \\products\public             Disconnected                  Unavailable

说明
-----------
此示例说明映射到网络共享的 Windows 驱动器与映射到同一网络共享的 Windows PowerShell 驱动器之间的区别。

第一条命令使用 New-PSDrive cmdlet 创建一个名为 PSDrive: 的 Windows PowerShell 驱动器，该驱动器映射到 \\Server01\Public 网络共享。

第二组命令使用 New-Object cmdlet 创建一个 Wscript.Network COM 对象，然后使用其 MapNetworkDrive 方法将 \\Server01\Public 网络共享映射到本地计算机上的 X: 驱动器。

现在，可以检查这两个驱动器。执行 Get-PSDrive 驱动器命令后，这两个驱动器看起来似乎相同，但网络共享名称仅显示在 PSDrive: 驱动器的根目录中。

将这两个驱动器对象发送给 Get-Member 后，显示它们具有相同的对象类型 System.Management.Automation.PSDriveInfo。

但是，执行“net use”命令、对 Win32_LogicalDisk 类执行 Get-WmiObject 命令并对 Win32_NetworkConnection 类执行 Get-WmiObject 命令后，发现只有 X: 驱动器是使用 Wscript.Network 对象创建的。这是因为 Windows PowerShell 驱动器仅对 Windows PowerShell 是已知的。

如果关闭 Windows PowerShell 会话然后再打开一个新的会话，则 PSDrive: 驱动器将消失，而 X: 驱动器仍将保留。

因此，在决定使用哪一方法映射网络驱动器时，请考虑将如何使用驱动器，是否需要保留它，以及对 Windows 的其他功能而言，是否需要驱动器保持可见。

另请参阅

  • about_Providers
  • Get-PSDrive
  • Remove-PSDrive


New-PSSession

建立与本地或远程计算机的持续性连接。

语法

New-PSSession [[-ComputerName] <string[]>] [-ApplicationName <string>] [-Authentication {<Default> | <Basic> | <Negotiate> | <NegotiateWithImplicitCredential> | <Credssp> | <Digest> | <Kerberos>}] [-CertificateThumbprint <string>] [-ConfigurationName <string>] [-Credential <PSCredential>] [-Name <string[]>] [-Port <int>] [-SessionOption <PSSessionOption>] [-UseSSL] [-ThrottleLimit <int>] [<CommonParameters>]

New-PSSession [[-Session] <PSSession[]>] [-Name <string[]>] [-ThrottleLimit <int>] [<CommonParameters>]

New-PSSession [-ConnectionURI] <Uri[]> [-AllowRedirection] [-Authentication {<Default> | <Basic> | <Negotiate> | <NegotiateWithImplicitCredential> | <Credssp> | <Digest> | <Kerberos>}] [-CertificateThumbprint <string>] [-ConfigurationName <string>] [-Credential <PSCredential>] [-Name <string[]>] [-SessionOption <PSSessionOption>] [-ThrottleLimit <int>] [<CommonParameters>]

说明

New-PSSession cmdlet 在本地或远程计算机上创建一个 Windows PowerShell 会话 (PSSession)。通过创建 PSSession，Windows PowerShell 可以建立与远程计算机的持续性连接。

使用 PSSession 可运行共享数据（例如函数或变量值）的多个命令。若要在 PSSession 中运行命令，请使用 Invoke-Command cmdlet。若要使用 PSSession 直接与远程计算机交互，请使用 Enter-PSSession cmdlet。有关详细信息，请参阅 about_PSSessions。

通过使用 Enter-PSSession 或 Invoke-Command 的 ComputerName 参数，您无需创建 PSSession 便可以在远程计算机上运行命令。使用 ComputerName 参数时，Windows PowerShell 会创建一个临时连接，此连接仅用于交互式会话或单个命令，之后将关闭。

参数

-AllowRedirection

允许将此连接重定向到备用统一资源标识符 (URI)。

使用 ConnectionURI 参数时，远程目标可以返回重定向到另一 URI 的指令。默认情况下，Windows PowerShell 不会重定向连接，但您可以使用 AllowRedirection 参数允许它重定向连接。

也可以通过设置 $PSSessionOption 首选项变量的 MaximumConnectionRedirectionCount 属性或 SessionOption 参数值的 MaximumConnectionRedirectionCount 属性来限制重定向连接的次数。

默认值为 5。有关详细信息，请参阅 SessionOption 参数的说明以及 New-PSSessionOption。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-ApplicationName <string>

指定连接 URI 的应用程序名称段。使用此参数可在命令中未使用 ConnectionURI 参数时指定应用程序名称。

默认值为本地计算机上的 $PSSessionApplicationName 首选项变量的值。如果未定义此首选项变量，则默认值为“WSMAN”。该值适用于大多数使用情况。有关详细信息，请参阅 about_Preference_Variables。

WinRM 服务使用该应用程序名称来选择为连接请求提供服务的侦听器。此参数的值应与远程计算机上的侦听器的 URLPrefix 属性值匹配。

是否为必需？ | false
位置？ | named
默认值 | WSMAN
是否接受管道输入？ | true (ByPropertyName)
是否接受通配符？ | false

-Authentication <AuthenticationMechanism>

指定用于对用户的凭据进行身份验证的机制。有效值为“Default”、“Basic”、“Credssp”、“Digest”、“Kerberos”、“Negotiate”和“NegotiateWithImplicitCredential”。默认值为“Default”。

CredSSP 身份验证仅在 Windows Vista、Windows Server 2008 和更高版本的 Windows 中可用。

有关此参数的值的详细信息，请参阅 MSDN (Microsoft Developer Network) Library 中对 System.Management.Automation.Runspaces.AuthenticationMechanism 枚举的说明，网址是 http://go.microsoft.com/fwlink/?LinkID=144382。

注意：在凭据安全服务提供程序 (CredSSP) 身份验证中，用户凭据传递到远程计算机中以进行验证，这种验证用于要求对多个资源（例如访问远程网络共享）进行验证的命令。此机制增加了远程操作的安全风险。如果远程计算机的安全受到威胁，则传递给该计算机的凭据可用于控制网络会话。

是否为必需？ | false
位置？ | named
默认值 | Default
是否接受管道输入？ | false
是否接受通配符？ | false

-CertificateThumbprint <string>

指定有权执行此操作的用户帐户的数字公钥证书 (X509)。输入证书的证书指纹。

证书用于基于客户端证书的身份验证。证书只能映射到本地用户帐户，而不适用于域帐户。

若要获取证书指纹，请在 Windows PowerShell Cert: 驱动器中使用 Get-Item 或 Get-ChildItem 命令。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-ComputerName <string[]>

建立与指定计算机的持续性连接 (PSSession)。如果输入多个计算机名称，New-PSSession 将创建多个 PSSession，每台计算机一个。默认值为本地计算机。

键入一台或多台远程计算机的 NetBIOS 名称、IP 地址或完全限定的域名。要指定本地计算机，请键入计算机名称、“localhost”或句点 (.)。当计算机与用户处于不同的域中时，必须使用完全限定的域名。也可将计算机名称（用引号括起）通过管道传送给 New-PSSession。

若要在 ComputerName 参数的值中使用 IP 地址，命令必须包括 Credential 参数。另外，必须为计算机配置 HTTPS 传输，或者必须在本地计算机上的 WinRM TrustedHosts 列表中包含远程计算机的 IP 地址。有关将计算机名称添加到 TrustedHosts 列表的说明，请参阅 about_Remote_Troubleshooting 中的“如何将计算机添加到受信任主机列表中”。

注意：在 Windows Vista 以及更高版本的 Windows 中，要在 ComputerName 参数的值中包含本地计算机，必须使用“以管理员身份运行”选项启动 Windows PowerShell。

是否为必需？ | false
位置？ | 1
默认值 |
是否接受管道输入？ | true (ByValue, ByPropertyName)
是否接受通配符？ | false

-ConfigurationName <string>

指定用于新 PSSession 的会话配置。

输入会话配置的配置名称或完全限定的资源“统一资源标识符”(URI)。如果只指定配置名称，那么将在该名称前面添加以下架构 URI：http://schemas.microsoft.com/powershell。

会话的会话配置位于远程计算机上。如果远程计算机上不存在指定的会话配置，命令会失败。

默认值为本地计算机上的 $PSSessionConfigurationName 首选项变量的值。如果未设置此首选项变量，则默认为 Microsoft.PowerShell。有关详细信息，请参阅 about_Preference_Variables。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | true (ByPropertyName)
是否接受通配符？ | false

-ConnectionURI <Uri[]>

指定定义连接终结点的统一资源标识符 (URI)。URI 必须完全限定。

此字符串的格式如下：

<Transport>://<ComputerName>:<Port>/<ApplicationName>

默认值如下：

http://localhost:80/WSMAN

URI 的 Transport 段的有效值为 HTTP 和 HTTPS。如果未指定 ConnectionURI，则可以使用 UseSSL、ComputerName、Port 和 ApplicationName 参数指定 URI 值。

如果目标计算机将连接重定向到另一个 URI，Windows PowerShell 将阻止重定向，除非您在命令中使用了 AllowRedirection 参数。

是否为必需？ | true
位置？ | 1
默认值 |
是否接受管道输入？ | true (ByPropertyName)
是否接受通配符？ | false

-Credential <PSCredential>

指定有权执行此操作的用户帐户。默认值为当前用户。

键入用户名，如“User01”、“Domain01\User01”或“User@Domain.com”，或输入 PSCredential 对象，如 Get-Credential cmdlet 返回的一个 PSCredential 对象。

键入用户名时，将会提示您键入密码。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | true (ByPropertyName)
是否接受通配符？ | false

-Name <string[]>

为 PSSession 指定一个友好名称。

使用其他 cmdlet（例如 Get-PSSession 和 Enter-PSSession）时，可以使用该名称来引用 PSSession。该名称对于计算机或当前会话来说不必是唯一的。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Port <int>

指定远程计算机上用于此命令的网络端口。默认值为端口 80（HTTP 端口）。

使用备用端口之前，必须将远程计算机上的 WinRM 侦听器配置为侦听该端口。使用下面的命令配置该侦听器：

1. winrm delete winrm/config/listener?Address=*+Transport=HTTP

2. winrm create winrm/config/listener?Address=*+Transport=HTTP @{Port=&quot;&lt;port-number&gt;&quot;}

除非确有必要，否则不要使用 Port 参数。命令中的端口设置应用于运行此命令的所有计算机和会话。备用端口设置可能使该命令无法在所有计算机上运行。

是否为必需？ | false
位置？ | named
默认值 | 80
是否接受管道输入？ | false
是否接受通配符？ | false

-Session <PSSession[]>

使用指定的 PSSession 作为新 PSSession 的模型。此参数创建一个与指定的 PSSession 具有相同属性的新 PSSession。

输入包含 PSSessions 的变量或者用来创建或获取 PSSessions 的命令，如 New-PSSession 或 Get-PSSession 命令。

生成的 PSSession 与原有 PSSession 具有相同的计算机名、应用程序名、连接 URI、端口、配置名、节流限制和安全套接字层 (SSL) 值，但具有不同显示名称、ID 和实例 ID (GUID)。

是否为必需？ | false
位置？ | 1
默认值 |
是否接受管道输入？ | true (ByValue, ByPropertyName)
是否接受通配符？ | false

-SessionOption <PSSessionOption>

为会话设置高级选项。输入使用 New-PSSessionOption cmdlet 创建的 SessionOption 对象。

这些选项的默认值由 $PSSessionOption 首选项变量的值（如果设置了该变量）确定。否则，会话使用系统默认值。

有关会话选项（包括默认值）的说明，请参阅 New-PSSessionOption。有关 $PSSessionOption 首选项变量的信息，请参阅 about_Preference_Variables。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-ThrottleLimit <int>

指定为运行此命令可建立的并发连接的最大数目。如果省略此参数或输入 0（零）值，则使用默认值 32。

节流限制仅适用于当前命令，而不适用于会话或计算机。

是否为必需？ | false
位置？ | named
默认值 | 32
是否接受管道输入？ | false
是否接受通配符？ | false

-UseSSL

使用安全套接字层 (SSL) 协议来建立与远程计算机的连接。默认情况下，不使用 SSL。

WS-Management 加密通过网络传输的所有 Windows PowerShell 内容。UseSSL 是一种额外的保护措施，它通过 HTTPS 连接而不是 HTTP 连接来发送数据。

如果使用此参数，但 SSL 在用于此命令的端口上不可用，命令将失败。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

<CommonParameters>

此 cmdlet 支持通用参数：-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。有关详细信息，请参阅 about_Commonparameters.

输入和输出

输入类型是指可通过管道传递给 cmdlet 的对象的类型。返回类型是指 Cmdlet 所返回对象的类型。

输入 | System.String, System.URI, System.Management.Automation.Runspaces.PSSession 您可以通过管道将 ComputerName（字符串）、ConnectionURI (URI) 或 Session (PSSession) 对象传递给 New-PSSession。
输出 | System.Management.Automation.Runspaces.PSSession

说明

此 cmdlet 使用 Windows PowerShell 远程处理基础结构。若要使用此 cmdlet，必须为本地计算机以及任何远程计算机配置 Windows PowerShell 远程处理。有关详细信息，请参阅 about_Remote_Requirements。

在 Windows Vista 以及更高版本的 Windows 中，要在本地计算机上创建 PSSession，必须使用“以管理员身份运行”选项启动 Windows PowerShell。

创建 PSSession 完毕后，使用 Remove-PSSession cmdlet 可删除 PSSession 并释放它占用的资源。

示例 1

C:\PS>$s = new-pssession

说明
-----------
此命令在本地计算机上创建一个新 PSSession 并将它保存在 $s 变量中。

现在，可以使用该 PSSession 在本地计算机上运行命令。

示例 2

C:\PS>$Server01 = new-pssession -ComputerName Server01

说明
-----------
此命令在计算机 Server01 上创建一个新 PSSession 并将它保存在 $Server01 变量中。

如果创建了多个 PSSession，请将它们赋给具有有效名称的变量。这将有助于在随后的命令中管理 PSSession。

示例 3

C:\PS>$s1, $s2, $s3 = new-session -computername server1,server2,server3

说明
-----------
此命令在 ComputerName 参数指定的每台计算机上创建一个新的 PSSession（共三个）。

它使用赋值运算符 (=) 将新的 PSSession 赋给变量数组：$s1, $s2, $s3。它将 Server01 PSSession 赋给 $s1，将 Server02 PSSession 赋给 $s2，将 Server03 PSSession 赋给 $s3。

将多个对象赋予一个变量数组时，Windows PowerShell 会将每个对象分别赋给数组中的一个变量。如果对象多于变量，则所有剩余的对象都赋给最后一个变量。如果变量多于对象，则剩余的变量为空 (Null)。

示例 4

C:\PS>new-pssession -computername Server01 -port 8081 -useSSL -ConfigurationName E12

说明
-----------
此命令在计算机 Server01 上创建一个连接到服务器端口 8081 并使用 SSL 协议的新 PSSession。这个新的 PSSession 使用名为“E12”的替代会话配置。

设置端口之前，必须将远程计算机上的 WinRM 侦听器配置为侦听端口 8081。有关详细信息，请参阅关于 Port 参数的说明。

示例 5

C:\PS>new-pssession -session $s -credential domain01\user01

说明
-----------
此命令创建一个与某个现有 PSSession 具有相同属性的新 PSSession。当现有 PSSession 的资源耗尽并且需要新的 PSSession 来分担某些需求时，可以使用该命令格式。

该命令使用 New-PSSession 的 Session 参数来指定保存在 $s 变量中的 PSSession。它使用 Domain1\Admin01 用户的凭据来完成命令。

示例 6

C:\PS>$global:s = new-pssession -computername server1.domain44.corpnet.fabrikam.com -credential domain01\admin01

说明
-----------
此示例说明如何创建一个在位于不同域中的计算机上具有全局作用域的 PSSession。

默认情况下，在命令行创建的 PSSession 具有本地作用域，而在脚本中创建的 PSSession 具有脚本作用域。

若要创建具有全局作用域的 PSSession，请创建一个新 PSSession，然后将其存储在一个强制转换为全局作用域的变量中。在本例中，$s 变量强制转换为全局作用域。

此命令使用 ComputerName 参数来指定远程计算机。由于计算机与用户帐户处于不同的域中，因此必须指定计算机的全名以及用户的凭据。

示例 7

C:\PS>$rs = get-content c:\test\servers.txt | new-PSsession -throttleLimit 50

说明
-----------
此命令在 Servers.txt 文件中列出的每台计算机（共 200 台）上创建一个 PSSession，并将生成的 PSSession 存储在 $rs 变量中。该 PSSession 的节流限制为 50。

当计算机名称存储在数据库、电子表格、文本文件中或以其他可转换为文本的格式存储时，可以使用该命令格式。

示例 8

C:\PS>$s = new-PSSession -URI http://Server01:91/NewSession -credential domain01\user01

说明
-----------
此命令在计算机 Server01 上创建一个 PSSession 并将它存储在 $s 变量中。它使用 URI 参数来指定传输协议、远程计算机、端口以及备用会话配置。它还使用 Credential 参数来指定有权在远程计算机上创建会话的用户帐户。

示例 9

C:\PS>$s = new-PSSession -computername (import-csv servers.csv) -credential domain01\admin01 -throttlelimit 16

C:\PS> invoke-command -session $s -scriptblock {get-process powershell} -AsJob

说明
-----------
这些命令创建一组 PSSession，然后在每个 PSSession 中运行一个后台作业。

第一个命令在 Servers.csv 文件中列出的每台计算机上创建一个新的 PSSession。它使用 New-PSSession cmdlet 来创建 PSSession。ComputerName 参数的值是一个使用 Import-Csv cmdlet 来导入 Servers.csv 文件并读取其内容的命令。

该命令使用 Credential 参数创建具有域管理员权限的 PSSession，并使用 ThrottleLimit 参数将命令限制在 16 个并发连接。该命令将 PSSession 保存在 $s 变量中。

第二个命令使用 Invoke-Command 的 AsJob 参数启动一个后台作业，此作业在 $s 中的每个 PSSession 中运行一个“Get-Process PowerShell”命令。

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

示例 10

C:\PS>new-PSSession -ConnectionURI https://management.exchangelabs.com/Management

说明
-----------
此命令创建一个新的 PSSession，该 PSSession 连接到由 URI 而不是计算机名指定的计算机。

示例 11

C:\PS>$so = New-WSManSessionOption -SkipCACheck

PS C:\> new-pssession -ConnectionUri https://management.exchangelabs.com/Management -SessionOption $so -credential server01\admin01

说明
-----------
此示例说明如何创建和使用 SessionOption 参数。

第一个命令使用 New-WSManSessionOption cmdlet 创建会话选项。它将生成的 SessionOption 对象保存在 $so 参数中。

第二个命令使用新会话中的选项。此命令使用 New-PSSession cmdlet 来创建新会话。SessionOption 参数的值是 $so 变量中的 SessionOption 对象。

另请参阅

  • about_PSSessions
  • about_Remote
  • Get-PSSession
  • Remove-PSSession
  • Enter-PSSession
  • Exit-PSSession
  • Invoke-Command


New-PSSessionOption

创建包含 PSSession 高级选项的对象。

语法

New-PSSessionOption [-ApplicationArguments <PSPrimitiveDictionary>] [-CancelTimeOut <int>] [-Culture <CultureInfo>] [-IdleTimeOut <int>] [-MaximumReceivedDataSizePerCommand <int>] [-MaximumReceivedObjectSize <int>] [-MaximumRedirection <int>] [-NoCompression] [-NoEncryption] [-NoMachineProfile] [-OpenTimeOut <int>] [-OperationTimeOut <int>] [-ProxyAccessType {<None> | <IEConfig> | <WinHttpConfig> | <AutoDetect> | <NoProxyServer>}] [-ProxyAuthentication {<Default> | <Basic> | <Negotiate> | <NegotiateWithImplicitCredential> | <Credssp> | <Digest> | <Kerberos>}] [-ProxyCredential <PSCredential>] [-SkipCACheck] [-SkipCNCheck] [-SkipRevocationCheck] [-UICulture <CultureInfo>] [-UseUTF16] [<CommonParameters>]

说明

New-PSSessionOption cmdlet 创建包含 PSSession 高级选项的对象。您可以将该对象用作用于创建 PSSession 的 cmdlet（例如 New-PSSession、Enter-PSSession 和 Invoke-Command）的 SessionOption 参数值。

在没有参数的情况下，New-PSSessionOption 将生成为所有选项包含默认值的对象。由于所有属性均可编辑，因此您可以将生成的对象用作模板，为您的企业建创标准选项对象。

参数

-ApplicationArguments <PSPrimitiveDictionary>

指定直接发送给会话配置而不包含解释的哈希表。该哈希表可当作 PSSenderInfo 类的属性用于会话配置。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-CancelTimeOut <int>

确定 Windows PowerShell 终止取消操作 (Ctrl + C) 之前等待该操作完成的时间长度。输入以毫秒为单位的值。

默认值为 60000（1 分钟）。0（零）值表示无超时；命令将无限期地继续运行。

是否为必需？ | false
位置？ | named
默认值 | 60000
是否接受管道输入？ | false
是否接受通配符？ | false

-Culture <CultureInfo>

指定要用于 PSSession 的区域性。输入格式为 <languagecode2>-<country/regioncode2> 的区域性名称（例如“ja-jP”）、包含 CultureInfo 对象的变量或获取 CultureInfo 对象的命令（例如“get-culture”）。

默认值为 $null，PSSession 中使用在创建 PSSession 时在操作系统中设置的区域性。

是否为必需？ | false
位置？ | named
默认值 | Current culture
是否接受管道输入？ | false
是否接受通配符？ | false

-IdleTimeOut <int>

确定如果远程计算机未从本地计算机接收到任何通信（包括检测信号），PSSession 保持打开状态的时间。当时间间隔过期后，PSSession 将关闭。

输入以毫秒为单位的值。默认值是 240000（4 分钟）。最小值为 60000（1 分钟）。

如果本地和远程计算机都指定了空闲超时值，则 PSSession 会使用其中较短的超时值。本地计算机可通过使用该参数或在 $PSSessionOption 首选项变量中设置空闲超时来设置空闲超时值。远程计算机可在 WS-Management 配置 (WSMAN:\localhost\shell\idletimeout) 中指定空闲超时值。

是否为必需？ | false
位置？ | named
默认值 | 240000
是否接受管道输入？ | false
是否接受通配符？ | false

-MaximumReceivedDataSizePerCommand <int>

指定本地计算机在单个命令中可从远程计算机接收到的最大字节数。输入以字节为单位的值。默认情况下没有数据大小限制。

此选项设计用于保护客户端计算机上的资源。

是否为必需？ | false
位置？ | named
默认值 | No limit
是否接受管道输入？ | false
是否接受通配符？ | false

-MaximumReceivedObjectSize <int>

指定本地计算机可从远程计算机接收到的最大对象大小。输入以字节为单位的值。默认情况下没有数据大小限制。

此选项设计用于保护客户端计算机上的资源。

是否为必需？ | false
位置？ | named
默认值 | No limit
是否接受管道输入？ | false
是否接受通配符？ | false

-MaximumRedirection <int>

确定在连接失败之前 Windows PowerShell 将连接重定向到备用统一资源标识符 (URI) 的次数。默认值为 5。值 0（零）将阻止所有重定向。

只有当创建 PSSession 的命令中使用 AllowRedirection 参数时，PSSession 中才会使用此选项。

是否为必需？ | false
位置？ | named
默认值 | 5
是否接受管道输入？ | false
是否接受通配符？ | false

-NoCompression

关闭 PSSession 中的数据包压缩。压缩会占用更多的处理器周期，但可以提高传输速度。

是否为必需？ | false
位置？ | named
默认值 | False
是否接受管道输入？ | false
是否接受通配符？ | false

-NoEncryption

关闭数据加密。

是否为必需？ | false
位置？ | named
默认值 | False
是否接受管道输入？ | false
是否接受通配符？ | false

-NoMachineProfile

阻止加载用户的 Windows 用户配置文件。这样做可以加快创建 PSSession 的速度，但不能在 PSSession 使用特定于用户的注册表设置、环境变量等项目以及证书。

是否为必需？ | false
位置？ | named
默认值 | False
是否接受管道输入？ | false
是否接受通配符？ | false

-OpenTimeOut <int>

确定客户端计算机等待建立会话连接的时间长度。当时间间隔过期时，建立连接的命令将失败。输入以毫秒为单位的值。

默认值为 180000（3 分钟）。0（零）值表示无超时；命令将无限期地继续运行。

是否为必需？ | false
位置？ | named
默认值 | 180000
是否接受管道输入？ | false
是否接受通配符？ | false

-OperationTimeOut <int>

确定 PSSession 中的任何操作可以运行的最长时间。当时间间隔过期后，操作将失败。输入以毫秒为单位的值。

默认值为 180000（3 分钟）。0（零）值表示无超时；操作将无限期地继续运行。

是否为必需？ | false
位置？ | named
默认值 | 180000
是否接受管道输入？ | false
是否接受通配符？ | false

-ProxyAccessType <ProxyAccessType>

确定用于解析主机名的机制。有效值为 IEConfig、WinHttpConfig、AutoDetect、NoProxyServer 和 None。默认值为 None。

有关此参数的值的信息，请参阅 MSDN (Microsoft Developer Network) Library 中对 System.Management.Automation.Remoting.ProxyAccessType 枚举的说明，网址是 http://go.microsoft.com/fwlink/?LinkId=144756。

是否为必需？ | false
位置？ | named
默认值 | 无
是否接受管道输入？ | false
是否接受通配符？ | false

-ProxyAuthentication <AuthenticationMechanism>

指定用于代理解析的身份验证方法。有效值为 Basic 、Digest 和 Negotiate。默认值为 Negotiate。

有关此参数的值的信息，请参阅 MSDN Library 中对 System.Management.Automation.Runspaces.AuthenticationMechanism 枚举的说明，网址是 http://go.microsoft.com/fwlink/?LinkID=144382。

是否为必需？ | false
位置？ | named
默认值 | Negotiate
是否接受管道输入？ | false
是否接受通配符？ | false

-ProxyCredential <PSCredential>

指定用于代理身份验证的凭据。输入包含 PSCredential 对象的变量，或输入获取 PSCredential 对象的命令（如 Get-Credential）。如果没有设置此选项，则不指定任何凭据。

是否为必需？ | false
位置？ | named
默认值 | 无
是否接受管道输入？ | false
是否接受通配符？ | false

-SkipCACheck

指定当通过 HTTPS 连接时，客户端不验证服务器证书是否已由受信任的证书颁发机构 (CA) 签名。

仅当远程计算机通过其他机制受信任（例如远程计算机所属的网络在物理上是安全的并已隔离，或者远程计算机在 WinRM 配置中列为受信任主机）时才应使用此选项。

是否为必需？ | false
位置？ | named
默认值 | False
是否接受管道输入？ | false
是否接受通配符？ | false

-SkipCNCheck

指定服务器的证书公用名 (CN) 不必匹配服务器的主机名。此选项仅用于使用 HTTPS 协议的远程操作。

此选项应仅用于受信任的计算机。

是否为必需？ | false
位置？ | named
默认值 | False
是否接受管道输入？ | false
是否接受通配符？ | false

-SkipRevocationCheck

不验证服务器证书的吊销状态。

是否为必需？ | false
位置？ | named
默认值 | False
是否接受管道输入？ | false
是否接受通配符？ | false

-UICulture <CultureInfo>

指定用于 PSSession 的 UI 区域性。

输入格式为 <languagecode2>-<country/regioncode2> 的区域性名称（例如“ja-jP”）、包含 CultureInfo 对象的变量或获取 CultureInfo 对象的命令（例如 Get-Culture）。

默认值为 $null，PSSession 中使用在创建 PSSession 时在操作系统中设置的 UI 区域性。

是否为必需？ | false
位置？ | named
默认值 | Current UI culture
是否接受管道输入？ | false
是否接受通配符？ | false

-UseUTF16

以 UTF16 格式而不是 UTF8 格式对请求进行编码。

是否为必需？ | false
位置？ | named
默认值 | False (UTF8 encoding)
是否接受管道输入？ | false
是否接受通配符？ | false

<CommonParameters>

此 cmdlet 支持通用参数：-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。有关详细信息，请参阅 about_Commonparameters.

输入和输出

输入类型是指可通过管道传递给 cmdlet 的对象的类型。返回类型是指 Cmdlet 所返回对象的类型。

输入 | None 不能通过管道将输入传递给此 cmdlet。
输出 | System.Management.Automation.Remoting.PSSessionOption

说明

如果创建 PSSession 的命令中没有使用 SessionOption 参数，则当设置了 $PSSessionOption 首选项变量时，会话选项将由该变量的属性值确定。有关 $PSSessionOption 变量的详细信息，请参阅 about_Preference_Variables。

示例 1

C:\PS>New-PSSessionOption

MaximumConnectionRedirectionCount : 5
NoCompression                     : False
NoMachineProfile                  : False
ProxyAccessType                   : IEConfig
ProxyAuthentication               : Negotiate
ProxyCredential                   :
SkipCACheck                       : False
SkipCNCheck                       : False
SkipRevocationCheck               : False
OperationTimeout                  : 00:03:00
NoEncryption                      : False
UseUTF16                          : False
Culture                           :
UICulture                         :
MaximumReceivedDataSizePerCommand :
MaximumReceivedObjectSize         :
ApplicationArguments              :
OpenTimeout                       : 00:03:00
CancelTimeout                     : 00:01:00
IdleTimeout                       : 00:04:00

说明
-----------
此命令使用所有默认值创建会话选项对象。

示例 2

C:\PS>$pso = new-pssessionoption -Culture "fr-fr" -MaximumReceivedObjectSize 10MB

C:\PS> new-pssession -computerName Server01 -SessionOption $pso

说明
-----------
此示例说明如何使用会话选项对象配置会话。

第一个命令创建一个新的会话选项对象，并将它保存在 $pso 变量的值中。

第二个命令使用 New-PSSession cmdlet 在远程计算机 Server01 上创建一个 PSSession。该命令将 $pso 变量值中的会话选项对象用作命令的 SessionOption 参数值。

示例 3

C:\PS>enter-pssession -computername Server01 -sessionOption (new-pssessionoption -noEncryption -noCompression)

说明
-----------
此命令使用 Enter-PSSession cmdlet 启动与计算机 Server01 的交互式会话。SessionOption 参数值是具有 NoEncryption 和 NoCompression 开关参数的 New-PSSessionOption 命令。

New-PSSessionOption 命令括在圆括号中，以确保它先于 Enter-PSSession 命令运行。

示例 4

C:\PS>$a = new-pssessionoption

MaximumConnectionRedirectionCount : 5
NoCompression                     : False
NoMachineProfile                  : False
ProxyAccessType                   : IEConfig
ProxyAuthentication               : Negotiate
ProxyCredential                   :
SkipCACheck                       : False
SkipCNCheck                       : False
SkipRevocationCheck               : False
OperationTimeout                  : 00:03:00
NoEncryption                      : False
UseUTF16                          : False
Culture                           :
UICulture                         :
MaximumReceivedDataSizePerCommand :
MaximumReceivedObjectSize         :
ApplicationArguments              :
OpenTimeout                       : 00:03:00
CancelTimeout                     : 00:01:00
IdleTimeout                       : 00:04:00

C:\PS> $a.UICulture = (get-UICulture)
C:\PS> $a.OpenTimeout = (new-timespan -minutes 4)
C:\PS> $a.MaximumConnectionRedirectionCount = 1

C:\PS> $a

MaximumConnectionRedirectionCount : 1
NoCompression                     : False
NoMachineProfile                  : False
ProxyAccessType                   : IEConfig
ProxyAuthentication               : Negotiate
ProxyCredential                   :
SkipCACheck                       : False
SkipCNCheck                       : False
SkipRevocationCheck               : False
OperationTimeout                  : 00:03:00
NoEncryption                      : False
UseUTF16                          : False
Culture                           :
UICulture                         : en-US
MaximumReceivedDataSizePerCommand :
MaximumReceivedObjectSize         :
ApplicationArguments              :
OpenTimeout                       : 00:04:00
CancelTimeout                     : 00:01:00
IdleTimeout                       : 00:04:00

说明
-----------
此示例演示如何编辑会话选项对象。所有属性均有读/写值。

使用此方法可为您的企业创建标准会话对象，然后针对特定用途创建该对象的自定义版本。

示例 5

C:\PS>$PSSessionOption = New-PSSessionOption -OpenTimeOut 120000

说明
-----------
此命令创建 $PSSessionOption 首选项变量。

当会话中存在 $PSSessionOption 首选项变量时，该变量会为使用 New-PSSession、Enter-PSSession 和 Invoke-Command cmdlet 创建的 PSSession 中的选项建立默认值。

要使 PSSessionOption 变量在所有会话中均可用，可将其添加到 Windows PowerShell 会话和 Windows PowerShell 配置文件中。

有关 $PSSessionOption 变量的详细信息，请参阅 about_Preference_Variables。有关配置文件的详细信息，请参阅 about_Profiles。

示例 6

C:\PS>$skipCN = new-pssessionoption -SkipCNCheck

C:\PS> new-pssession -computername 171.09.21.207 -UseSSL -credential domain01\user01 -sessionOption $skipCN

说明
-----------
此示例说明如何使用 SessionOption 对象满足远程会话配置的要求。

第一个命令使用 New-PSSessionOption cmdlet 创建具有 SkipCNCheck 属性的会话选项对象。该命令将生成的会话对象保存在 $skipCN 变量中。

第二个命令使用 New-PSSession cmdlet 在远程计算机上创建一个新的 PSSession。$skipCN 检查变量用于 SessionOption 参数的值中。

由于计算机由其 IP 地址标识，因此 ComputerName 参数的值与用于安全套接字层 (SSL) 的证书中的任何公用名都不匹配。因此，SkipCNCheck 选项是必需的。

另请参阅

  • Enter-PSSession
  • New-PSSession
  • Invoke-Command


New-Service

创建新的 Windows 服务。

语法

New-Service [-Name] <string> [-BinaryPathName] <string> [-Credential <PSCredential>] [-DependsOn <string[]>] [-Description <string>] [-DisplayName <string>] [-StartupType {<Automatic> | <Manual> | <Disabled>}] [-Confirm] [-WhatIf] [<CommonParameters>]

说明

New-Service cmdlet 在注册表和服务数据库中为 Windows 服务创建一个新条目。新服务需要一个在该服务运行期间执行的可执行文件。

此 cmdlet 的参数用于设置该服务的显示名称、说明、启动类型和依赖项。

参数

-BinaryPathName <string>

指定此服务的可执行文件的路径。此参数是必需的。

是否为必需？ | true
位置？ | 2
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Credential <PSCredential>

指定有权执行此操作的用户帐户。键入用户名，例如“User01”或“Domain01\User01”。或者，输入 PSCredential 对象，例如来自 Get-Credential cmdlet 的对象。如果键入用户名，则将提示您输入密码。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-DependsOn <string[]>

指定新服务所依赖的其他服务的名称。要输入多个服务名称，请使用逗号分隔这些名称。

是否为必需？ | false
位置？ | named
默认值 | 无
是否接受管道输入？ | false
是否接受通配符？ | false

-Description <string>

指定服务的描述。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-DisplayName <string>

指定服务的显示名称。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Name <string>

指定服务的名称。此参数是必需的。

是否为必需？ | true
位置？ | 1
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-StartupType <ServiceStartMode>

设置服务的启动类型。默认值为“Automatic”。

有效值包括：

-- Manual：服务只能由用户（使用服务控制管理器）或应用程序手动启动。

-- Automatic：服务将由操作系统在系统启动时启动或在系统启动时已启动。如果自动启动的服务依赖于手动启动的服务，则手动启动的服务也会在系统启动时自动启动。

-- Disabled：服务被禁用，不能由用户或应用程序启动。

是否为必需？ | false
位置？ | named
默认值 | Automatic
是否接受管道输入？ | false
是否接受通配符？ | false

-Confirm

在执行命令之前提示您进行确认。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-WhatIf

描述如果执行该命令会发生什么情况（无需实际执行该命令）。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

<CommonParameters>

此 cmdlet 支持通用参数：-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。有关详细信息，请参阅 about_Commonparameters.

输入和输出

输入类型是指可通过管道传递给 cmdlet 的对象的类型。返回类型是指 Cmdlet 所返回对象的类型。

输入 | None 不能通过管道将输入传递给此 cmdlet。
输出 | System.ServiceProcess.ServiceController New-Service 返回一个表示新服务的对象。

说明

要在 Windows Vista 以及 Windows 的更高版本上运行此 cmdlet，必须使用“以管理员身份运行”选项启动 Windows PowerShell。

示例 1

C:\PS>new-service -name TestService -binaryPathName "C:\WINDOWS\System32\svchost.exe -k netsvcs"

说明
-----------
此命令创建一个名为“TestService”的新服务。

示例 2

C:\PS>new-service -name TestService -path "C:\WINDOWS\System32\svchost.exe -k netsvcs" -dependson NetLogon -displayName "Test Service" -StartupType Manual -Description "This is a test service."

说明
-----------
此命令创建一个名为“TestService”的新服务。该命令使用 New-Service cmdlet 的参数指定新服务的说明、启动类型和显示名称。

为指定 BinaryPathName 参数，该命令使用了 Path 参数别名。您也可以使用“-bpn”。

示例 3

C:\PS>get-wmiobject win32_service -filter "name='testservice'"

ExitCode  : 0
Name      : testservice
ProcessId : 0
StartMode : Auto
State     : Stopped
Status    : OK

说明
-----------
此命令使用 Get-WmiObject cmdlet 为新服务获取 Win32_Service 对象。此对象包含启动模式和服务说明。

另请参阅

  • Get-Service
  • Start-Service
  • Stop-Service
  • Restart-Service
  • Resume-Service
  • Set-Service
  • Suspend-Service


New-TimeSpan

创建 TimeSpan 对象。

语法

New-TimeSpan [[-Start] <DateTime>] [[-End] <DateTime>] [<CommonParameters>]

New-TimeSpan [-Days <int>] [-Hours <int>] [-Minutes <int>] [-Seconds <int>] [<CommonParameters>]

说明

New-TimeSpan cmdlet 创建表示时间间隔的 TimeSpan 对象。可以使用 TimeSpan 对象对 DateTime 对象进行时间的加或减操作。

如果不使用参数，则“New-Timespan”命令返回表示零时间间隔的时间跨度对象。

参数

-Days <int>

指示时间跨度中的天数。默认值为 0。

是否为必需？ | false
位置？ | named
默认值 | 0
是否接受管道输入？ | false
是否接受通配符？ | false

-End <DateTime>

指示时间跨度的结束。默认值为当前日期和时间。

是否为必需？ | false
位置？ | 2
默认值 | Current date and time
是否接受管道输入？ | true (ByPropertyName)
是否接受通配符？ | false

-Hours <int>

指示时间跨度中的小时数。默认值为 0。

是否为必需？ | false
位置？ | named
默认值 | 0
是否接受管道输入？ | false
是否接受通配符？ | false

-Minutes <int>

指示时间跨度中的分钟数。默认值为 0。

是否为必需？ | false
位置？ | named
默认值 | 0
是否接受管道输入？ | false
是否接受通配符？ | false

-Seconds <int>

指示时间跨度的长度，以秒为单位。默认值为 0。

是否为必需？ | false
位置？ | named
默认值 | 0
是否接受管道输入？ | false
是否接受通配符？ | false

-Start <DateTime>

指示时间跨度的开始。输入一个表示日期和时间的字符串（如“3/15/09”）或一个 DateTime 对象（如 Get-Date 命令返回的对象）。

默认值为当前日期和时间。

是否为必需？ | false
位置？ | 1
默认值 | Current date and time
是否接受管道输入？ | true (ByValue, ByPropertyName)
是否接受通配符？ | false

<CommonParameters>

此 cmdlet 支持通用参数：-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。有关详细信息，请参阅 about_Commonparameters.

输入和输出

输入类型是指可通过管道传递给 cmdlet 的对象的类型。返回类型是指 Cmdlet 所返回对象的类型。

输入 | System.DateTime 可以通过管道将表示开始时间的 DateTime 对象传递给 New-TimeSpan。
输出 | System.Timespan New-TimeSpan 返回表示时间跨度的对象。

示例 1

C:\PS>$timespan = new-timespan -hour 1 -minute 25

说明
-----------
此命令创建持续时间为 1 小时 25 分钟的 TimeSpan 对象，并将它存储在名为 $timespan 的变量中。它显示 TimeSpan 对象的表示形式。

示例 2

C:\PS>new-timespan -end (get-date -year 2010 -month 1 -day 1)

说明
-----------
此示例创建新的 TimeSpan 对象，该对象表示从命令运行时到 2010 年 1 月 1 日之间的时间间隔。

此命令不需要 Start 参数，因为 Start 参数的默认值是当前日期和时间。

示例 3

C:\PS>$90days = new-timespan -days 90

C:\PS> (get-date) + $90days

说明
-----------
这些命令返回当前日期之后 90 天时的日期。

另请参阅

  • Set-Date
  • Get-Date


New-Variable

创建新变量

语法

New-Variable [-Name] <string> [[-Value] <Object>] [-Description <string>] [-Force] [-Option {<None> | <ReadOnly> | <Constant> | <Private> | <AllScope>}] [-PassThru] [-Scope <string>] [-Visibility {<Public> | <Private>}] [-Confirm] [-WhatIf] [<CommonParameters>]

说明

New-Variable cmdlet 在 Windows PowerShell 中创建新变量。可以在创建该变量时向其赋值，也可以在创建该变量后向其赋值或更改值。

可以使用 New-Variable 的参数来设置变量的属性（如那些创建只读或常量变量的属性），设置变量的作用域以及确定变量是公共的还是专用的。

通常，通过键入变量名称及其值来创建新变量（如“$var = 3”），但可以使用 New-Variable cmdlet 来使用它的参数。

参数

-Description <string>

指定变量的说明。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Force

允许您创建名称与现有只读变量相同的新变量。

默认情况下，可以覆盖某个变量，除非该变量的选项值为“ReadOnly”或“Constant”。有关详细信息，请参阅 Option 参数。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Name <string>

指定新变量的名称。

是否为必需？ | true
位置？ | 1
默认值 |
是否接受管道输入？ | true (ByPropertyName)
是否接受通配符？ | false

-Option <ScopedItemOptions>

设置新变量的 Options 属性的值。

有效值包括：

-- None：不设置任何选项。（“None”为默认值。）

-- ReadOnly：除非使用 Force 参数，否则无法更改变量的值。您可以使用 Remove-Variable 来删除该变量。

-- Constant：无法删除变量，也无法更改其属性。“Constant”仅在您创建别名时才可用。不能将现有变量的选项更改为“Constant”。

-- Private：变量只在 Scope 参数指定的作用域内可用。它由子作用域继承。（此值与 Visibility 参数的“Private”值无关。）

-- AllScope：变量将复制到创建的所有新作用域中。

若要查看变量的 Options 属性，请键入“get-variable| Format-Table -property name, options -autosize”。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-PassThru

返回表示新变量的对象。默认情况下，此 cmdlet 将不产生任何输出。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Scope <string>

确定新变量的作用域。有效值包括“Global”、“Local”、“Script”或者相对于当前作用域的数字（0 到作用域数，其中 0 是指当前作用域，1 是指其父作用域）。默认值为“Local”。有关详细信息，请参阅 about_Scopes。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Value <Object>

指定变量的初始值。

是否为必需？ | false
位置？ | 2
默认值 |
是否接受管道输入？ | true (ByValue, ByPropertyName)
是否接受通配符？ | false

-Visibility <SessionStateEntryVisibility>

确定变量在创建它的会话之外是否可见。此参数供传递给其他用户的脚本和命令使用。

有效值包括：

-- Public：变量可见。（“Public”为默认值。）

-- Private：变量不可见。

当变量为专用时，它不会出现在变量列表（如 Get-Variable 返回的变量列表）中，也不会出现在 Variable: 驱动器的显示内容中。读取或更改专用变量值的命令会返回错误。但是，用户可以运行使用专用变量的命令，前提是这些命令是在定义该变量的会话中写入的。

是否为必需？ | false
位置？ | named
默认值 | Public
是否接受管道输入？ | false
是否接受通配符？ | false

-Confirm

在执行命令之前提示您进行确认。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-WhatIf

描述如果执行该命令会发生什么情况（无需实际执行该命令）。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

<CommonParameters>

此 cmdlet 支持通用参数：-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。有关详细信息，请参阅 about_Commonparameters.

输入和输出

输入类型是指可通过管道传递给 cmdlet 的对象的类型。返回类型是指 Cmdlet 所返回对象的类型。

输入 | System.Object 可以将值通过管道传递给 New-Variable。
输出 | None 或 System.Management.Automation.PSVariable 如果使用 PassThru 参数，则 New-Variable 生成一个表示新变量的 System.Management.Automation.PSVariable 对象。否则，此 cmdlet 将不产生任何输出。

示例 1

C:\PS>new-variable days

说明
-----------
此命令创建名为“days”的新变量。执行该命令后此变量不会立即有值。

示例 2

C:\PS>new-variable zipcode -value 98033

说明
-----------
此命令创建名为“zipcode”的变量，并为其赋值“98033”。

示例 3

C:\PS>new-variable -name max -value 256 -option readonly

new-variable -name max -value 1024

new-variable -name max -value 1024 -force

C:\PS> new-variable -name max -value 256 -option readonly

C:\PS> new-variable -name max -value 1024
New-Variable : A variable with name 'max' already exists.
At line:1 char:13
+ new-variable <<<<  -name max -value 1024

C:\PS> new-variable -name max -value 1024 -force

说明
-----------
此示例演示了如何使用 New-Variable 的 ReadOnly 选项保护变量免于被覆盖。

第一个命令创建名为 Max 的新变量，并为其赋值“256”。它使用值为 ReadOnly 的 Option 参数。

第二个命令尝试创建具有相同名称的另一个变量。此命令将返回错误，因为对该变量设置了只读选项。

第三个命令使用 Force 参数覆盖该变量上的只读保护。在此例中，创建具有相同名称的新变量的命令运行成功。

示例 4

C:\PS>new-variable -name counter -visibility private

#Effect of private variable in a module.

C:\PS> get-variable c*

Name                           Value
----                           -----
Culture                        en-US
ConsoleFileName
ConfirmPreference              High
CommandLineParameters          {}

C:\PS> $counter
"Cannot access the variable '$counter' because it is a private variable"

C:\PS> Get-Counter
Name         Value
----         -----
Counter1     3.1415
...

说明
-----------
此命令演示了模块中专用变量的行为。该模块包含 Get-Counter cmdlet，该 cmdlet 有一个名为“Counter”的专用变量。该命令使用值为“Private”的 Visibility 参数来创建变量。

示例输出显示了专用变量的行为。加载了该模块的用户无法查看或更改 Counter 变量的值，但可以通过该模块中的命令读取和更改 Counter 变量。

另请参阅

  • Get-Variable
  • Set-Variable
  • Remove-Variable
  • Clear-Variable


New-WebServiceProxy

创建一个 Web 服务代理对象，用于在 Windows PowerShell 中使用和管理 Web 服务。

语法

New-WebServiceProxy [-URI] <Uri> [[-类] <string>] [[-命名空间] <string>] [<CommonParameters>]

New-WebServiceProxy [-URI] <Uri> [[-类] <string>] [[-命名空间] <string>] [-Credential <PSCredential>] [<CommonParameters>]

New-WebServiceProxy [-URI] <Uri> [[-类] <string>] [[-命名空间] <string>] [-UseDefaultCredential] [<CommonParameters>]

说明

New-WebServiceProxy cmdlet 使您可以在 Windows PowerShell 中使用 Web 服务。该 cmdlet 连接到 Web 服务，并在 Windows PowerShell 中创建 Web 服务代理对象。您可以使用代理对象管理 Web 服务。

Web 服务是一种基于 XML 的程序，用于在网络（特别是 Internet）上交换数据。Microsoft .NET Framework 提供了将 Web 服务表示为 .NET Framework 对象的 Web 服务代理对象。

参数

-类 <string>

指定该 cmdlet 为 Web 服务创建的代理类的名称。此参数的值与 Namespace 参数的值一起使用时，可提供该类的完全限定名称。默认值从 URI 生成。

是否为必需？ | false
位置？ | 2
默认值 | Generated from the URI
是否接受管道输入？ | false
是否接受通配符？ | false

-Credential <PSCredential>

指定有权执行此操作的用户帐户。默认值为当前用户。这是使用 UseDefaultCredential 参数的替代方法。

键入用户名，例如“User01”或“Domain01\User01”。或者，输入 PSCredential 对象，例如由 Get-Credential cmdlet 生成的对象。如果键入用户名，则将提示您输入密码。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-命名空间 <string>

指定新类的命名空间。

此参数的值与 Class 参数的值一起使用时，可生成该类的完全限定名称。默认值为 Microsoft.PowerShell.Commands.NewWebserviceProxy.AutogeneratedTypes 和从 URI 生成的类型。

您可以设置 Namespace 参数的值，以便可访问多个同名 Web 服务。

是否为必需？ | false
位置？ | 3
默认值 | Microsoft.PowerShell.Commands.NewWebserviceProxy.AutogeneratedTypes
是否接受管道输入？ | false
是否接受通配符？ | false

-URI <Uri>

指定 Web 服务的 URI。请输入 URI 或包含服务说明的文件的路径和文件名。

该 URI 必须引用 .asmx 页或引用返回服务说明的页。要返回使用 ASP.NET 所创建的 Web 服务的服务说明，请在该 Web 服务的 URL 后面追加“?WSDL”（例如，http://www.contoso.com/MyWebService.asmx?WSDL）。

是否为必需？ | true
位置？ | 1
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-UseDefaultCredential

将生成的代理对象中的 UseDefaultCredential 参数设置为 True。这是使用 Credential 参数的替代方法。

是否为必需？ | false
位置？ | named
默认值 | False
是否接受管道输入？ | false
是否接受通配符？ | false

<CommonParameters>

此 cmdlet 支持通用参数：-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。有关详细信息，请参阅 about_Commonparameters.

输入和输出

输入类型是指可通过管道传递给 cmdlet 的对象的类型。返回类型是指 Cmdlet 所返回对象的类型。

输入 | None 此 cmdlet 不通过管道接受输入。
输出 | A Web service proxy object 该对象的命名空间和类由该命令的参数确定。默认值是根据输入的统一资源标识符 (URI) 生成的。

说明

New-WebServiceProxy 使用 System.Net.WebClient 类加载指定的 Web 服务。

示例 1

C:\PS>$zip = New-WebServiceProxy -uri http://www.webservicex.net/uszip.asmx?WSDL

说明
-----------
此命令使用 New-WebServiceProxy 命令在 Windows PowerShell 中创建 US Zip Web 服务的 .NET Framework 代理。

示例 2

C:\PS>$URI = "http://www.webservicex.net/uszip.asmx?WSDL"

C:\PS> $zip = New-WebServiceProxy -uri $URI -namespace WebServiceProxy -class ZipClass

说明
-----------
此命令使用 New-WebServiceProxy cmdlet 创建 US Zip Web 服务的 .NET Framework 代理。

第一条命令将该 Web 服务的 URI 存储在 $URI 变量中。

第二条命令创建该 Web 服务代理。该命令使用 URI 参数指定该 URI，使用 Namespace 和 Class 参数指定该对象的命名空间和类。

示例 3

C:\PS>$zip | get-member -type method

   TypeName: WebServiceProxy.USZip

Name                      MemberType Definition
----                      ---------- ----------
Abort                     Method     System.Void Abort(
BeginGetInfoByAreaCode    Method     System.IAsyncResul
BeginGetInfoByCity        Method     System.IAsyncResul
BeginGetInfoByState       Method     System.IAsyncResul
BeginGetInfoByZIP         Method     System.IAsyncResul
CreateObjRef              Method     System.Runtime.Rem
Discover                  Method     System.Void Discov
Dispose                   Method     System.Void Dispos
EndGetInfoByAreaCode      Method     System.Xml.XmlNode
EndGetInfoByCity          Method     System.Xml.XmlNode
EndGetInfoByState         Method     System.Xml.XmlNode
EndGetInfoByZIP           Method     System.Xml.XmlNode
Equals                    Method     System.Boolean Equ
GetHashCode               Method     System.Int32 GetHa
GetInfoByAreaCode         Method     System.Xml.XmlNode
GetInfoByCity             Method     System.Xml.XmlNode
GetInfoByState            Method     System.Xml.XmlNode
GetInfoByZIP              Method     System.Xml.XmlNode
GetLifetimeService        Method     System.Object GetL
GetType                   Method     System.Type GetTyp
InitializeLifetimeService Method     System.Object Init
ToString                  Method     System.String ToSt

说明
-----------
此命令使用 Get-Member cmdlet 显示 $zip 变量中 Web 服务代理对象的方法。在下面的示例中将会用到这些方法。

请注意，代理对象 WebServiceProxy 的 TypeName 反映了上一示例中所指定的命名空间和类名。

示例 4

C:\PS>$zip.getinfobyzip(20500).table

CITY      : Washington
STATE     : DC
ZIP       : 20500
AREA_CODE : 202
TIME_ZONE : E

说明
-----------
此命令使用存储在 Zip 变量中的 Web 服务代理。该命令使用该代理的 GetInfoByZip 方法及其 Table 属性。

另请参阅

  • New-Service


New-WSManInstance

创建管理资源的新实例。

语法

New-WSManInstance [-ApplicationName <string>] [-ComputerName <string>] [-Credential <PSCredential>] [-Port <int>] [-UseSSL] [-SelectorSet] <hashtable> -ResourceURI <Uri> [-AuthenticationMechanism <AuthenticationMechanism>] [-SessionOption <hashtable>] [-ValueSet <hashtable>] [<CommonParameters>]

New-WSManInstance [-ConnectionURI <Uri>] [-SelectorSet] <hashtable> -ResourceURI <Uri> [-AuthenticationMechanism <AuthenticationMechanism>] [-SessionOption <hashtable>] [-ValueSet <hashtable>] [<CommonParameters>]

说明

New-WSManInstance cmdlet 创建管理资源的新实例。它使用资源 URI 和值集或输入文件来创建管理资源的新实例。

此 cmdlet 使用 WinRM 连接/传输层来创建管理资源实例。

参数

-ApplicationName <string>

指定连接中的应用程序名称。ApplicationName 参数的默认值为“WSMAN”。远程终结点的完整标识符采用以下格式：

<transport>://<server>:<port>/<ApplicationName>

例如：

http://server01:8080/WSMAN

承载会话的 Internet 信息服务 (IIS) 将请求连同此终结点转发到指定的应用程序。默认设置“WSMAN”适用于大多数使用情况。当有许多计算机建立了与运行 Windows PowerShell 的一台计算机的远程连接时，需要用到此参数。这种情况下，IIS 托管 Web Services for Management (WS-Management)，以保证效率。

是否为必需？ | false
位置？ | named
默认值 | wsman
是否接受管道输入？ | false
是否接受通配符？ | false

-AuthenticationMechanism <AuthenticationMechanism>

指定服务器上要使用的身份验证机制。可能值为：

- Basic：Basic 是一种方案，在该方案中，用户名和密码以明文形式发送到服务器或代理。

- Default：使用 WS-Management 协议实现的身份验证方法。这是默认设置。

- Digest：Digest 是一种质询响应方案，该方案将服务器指定的数据字符串用于质询。

- Kerberos：客户端计算机和服务器使用 Kerberos 证书相互进行身份验证。

- Negotiate：Negotiate 是一种质询响应方案，该方案与服务器或代理协商以确定要使用的身份验证方案。例如，此参数值允许进行协商以确定是使用 Kerberos 协议还是 NTLM。

- CredSSP：使用凭据安全服务提供程序 (CredSSP) 身份验证，这种方法允许用户委派凭据。此选项用于这样的命令：在一台远程计算机上运行，但从其他远程计算机上收集数据或者在其他远程计算机上运行其他命令。

注意：CredSSP 将本地计算机中的用户凭据委派给远程计算机。此操作增加了远程操作的安全风险。如果远程计算机的安全受到威胁，则在向该计算机传递凭据时，可使用这些凭据来控制网络会话。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-ComputerName <string>

指定要对其运行管理操作的计算机。值可以是完全限定的域名、NetBIOS 名称或 IP 地址。使用本地计算机名称、localhost 或点 (.)指定本地计算机。默认值为本地计算机。当远程计算机与用户位于不同的域时，必须使用完全限定的域名。可以通过管道将此参数的值传递给 cmdlet。

是否为必需？ | false
位置？ | named
默认值 | localhost
是否接受管道输入？ | false
是否接受通配符？ | false

-ConnectionURI <Uri>

指定连接终结点。此字符串的格式为：

<Transport>://<Server>:<Port>/<ApplicationName>

以下字符串是此参数的格式正确的值：

http://Server01:8080/WSMAN

URI 必须完全限定。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Credential <PSCredential>

指定有权执行此操作的用户帐户。默认值为当前用户。键入用户名，例如“User01”、“Domain01\User01”或“User@Domain.com”。或者，输入 PSCredential 对象，例如由 Get-Credential cmdlet 返回的对象。键入用户名时，将会提示您键入密码。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-File <File>

指定用于创建管理资源的文件的路径。通过使用 ResourceURI 参数和 SelectorSet 参数来指定管理资源。例如，以下命令使用 File 参数：

invoke-wsmanaction -action stopservice -resourceuri wmicimv2/Win32_Service -SelectorSet @{Name="spooler"} -File c:\input.xml -authentication default

此命令使用来自文件的输入对后台处理程序服务调用 StopService 方法 [descriptor]。文件 Input.xml 包含以下内容：

<p:StopService_INPUT xmlns:p="http://schemas.microsoft.com/wbem/wsman/1/wmi/root/cimv2/Win32_Service"/>

是否为必需？ |
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-OptionSet <hashtable>

将一组开关传递到服务以修改或调整请求的性质。这些与命令行 shell 中使用的开关的类似之处在于，它们也是特定于服务的。可以指定任意多个选项。

以下示例演示分别为 a、b 和 c 参数传递值 1、2 和 3 的语法：

-OptionSet @{a=1;b=2;c=3}

是否为必需？ |
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Port <int>

指定要在客户端连接到 WinRM 服务时使用的端口。如果传输方式为 HTTP，则默认端口为 80。如果传输方式为 HTTPS，则默认端口为 443。使用 HTTPS 作为传输方式时，ComputerName 参数的值必须与服务器的证书公用名 (CN) 匹配。但是，如果 SkipCNCheck 参数指定为 SessionOption 参数的一部分，则服务器的证书公用名不必与服务器的主机名称相匹配。SkipCNCheck 参数应仅用于受信任的计算机。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-ResourceURI <Uri>

包含资源类或实例的统一资源标识符 (URI)。URI 用于标识特定类型的资源，例如，计算机上的磁盘或进程。

URI 由前缀和资源的路径组成。例如：

http://schemas.microsoft.com/wbem/wsman/1/wmi/root/cimv2/Win32_LogicalDisk

http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2/CIM_NumericSensor

是否为必需？ | true
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-SelectorSet <hashtable>

指定一组用于选择特定管理资源实例的值对。当相应资源存在多个实例时，将使用 SelectorSet 参数。SelectorSet 参数的值必须为哈希表。

以下示例说明如何为此参数输入值：

-SelectorSet @{Name="WinRM";ID="yyy"}

是否为必需？ | true
位置？ | 2
默认值 |
是否接受管道输入？ | true (ByValue)
是否接受通配符？ | false

-SessionOption <hashtable>

为 WS-Management 会话定义一组扩展选项。输入使用 New-WSManSessionOption cmdlet 创建的 SessionOption 对象。有关可用选项的详细信息，请参阅 New-WSManSessionOption。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-UseSSL

指定应使用安全套接字层 (SSL) 协议来建立与远程计算机的连接。默认情况下，不使用 SSL。

WS-Management 加密通过网络传输的所有 Windows PowerShell 内容。利用 UseSSL 参数，可以指定 HTTPS（而非 HTTP）的额外保护措施。如果在连接端口上 SSL 不可用并且指定了此参数，则命令将失败。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-ValueSet <hashtable>

指定一个用于帮助修改管理资源的哈希表。通过使用 ResourceURI 参数和 SelectorSet 参数来指定管理资源。ValueSet 参数的值必须为哈希表。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

<CommonParameters>

此 cmdlet 支持通用参数：-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。有关详细信息，请参阅 about_Commonparameters.

输入和输出

输入类型是指可通过管道传递给 cmdlet 的对象的类型。返回类型是指 Cmdlet 所返回对象的类型。

输入 | None 此 cmdlet 不接受任何输入。
输出 | None 此 cmdlet 将不产生任何输出。

说明

Set-WmiInstance cmdlet 类似于 Windows Management Instrumentation (WMI) cmdlet。Set-WmiInstance 使用 DCOM 连接/传输层来创建或更新 WMI 实例。

示例 1

C:\PS>New-WSManInstance winrm/config/Listener -SelectorSet @{Transport=HTTPS} -ValueSet @{Hostname="HOST";CertificateThumbprint="XXXXXXXXXX"}

说明
-----------
此命令创建侦听所有 IP 地址的 WS-Management HTTPS 侦听器的实例。

另请参阅

  • Connect-WSMan
  • Disable-WSManCredSSP
  • Disconnect-WSMan
  • Enable-WSManCredSSP
  • Get-WSManCredSSP
  • Get-WSManInstance
  • Invoke-WSManAction
  • New-WSManSessionOption
  • Remove-WSManInstance
  • Set-WSManInstance
  • Set-WSManQuickConfig
  • Test-WSMan


New-WSManSessionOption

创建 WS-Management 会话选项哈希表以用作以下 WS-Management cmdlet 的输入参数： Get-WSManInstance Set-WSManInstance Invoke-WSManAction Connect-WSMan

语法

New-WSManSessionOption [-NoCompression <switch>] [-NoProxy <switch>] [-ProxyAuthentication <string>] [-ProxyPassword <string>] [-ProxyUserName <string>] [-SkipCACheck <switch>] [-SkipCNCheck <switch>] [-SkipRevocation <switch>] [-SPNPort <int>] [-Timeout <int>] [-UnEncrypted <switch>] [-UseIEProxyconfig <switch>] [-UseProxyAutoDetection <switch>] [-UseWinHTTPProxyConfig <switch>] [-UTF16 <switch>] [<CommonParameters>]

说明

创建可以传递给以下 WSMan cmdlet 的 WSMan 会话选项哈希表：

Get-WSManInstance

Set-WSManInstance

Invoke-WSManAction

Connect-WSMan

参数

-NoCompression <switch>

关闭会话中的数据包压缩。默认情况下将启用压缩，对在客户端和服务器之间发送的数据包将进行压缩。压缩会占用更多的处理器周期，但可以提高传输速度。

是否为必需？ | false
位置？ | named
默认值 | False
是否接受管道输入？ | false
是否接受通配符？ | false

-NoProxy <switch>

不使用代理服务器。所有主机名都将在本地解析。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-ProxyAuthentication <string>

指定在代理中使用的身份验证方法。可能值为：

- Basic：Basic 是一种方案，在该方案中，用户名和密码以明文形式发送到服务器或代理。

- Digest：Digest 是一种质询响应方案，该方案将服务器指定的数据字符串用于质询。

- Negotiate（默认值）：Negotiate 是一种质询响应方案，该方案与服务器或代理协商以确定使用哪种身份验证方案。例如，Kerberos 协议和 NTLM。

是否为必需？ | false
位置？ | named
默认值 | Negotiate
是否接受管道输入？ | false
是否接受通配符？ | false

-ProxyPassword <string>

指定要用于代理身份验证的密码。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-ProxyUserName <string>

指定要用于代理身份验证的用户名。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-SkipCACheck <switch>

指定当通过 HTTPS 连接时，客户端不验证服务器证书是否已由受信任的证书颁发机构 (CA) 签名。仅当远程计算机通过其他方式被证明可信（例如，远程计算机所属的网络在物理上是安全的并已隔离，或者远程计算机在 WS-Management 配置中列为受信任主机）时才应使用此选项。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-SkipCNCheck <switch>

指定服务器的证书公用名 (CN) 不必匹配服务器的主机名。这仅用于使用 HTTPS 的远程操作。此选项应仅用于受信任的计算机。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-SkipRevocation <switch>

不验证服务器证书的吊销状态。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-SPNPort <int>

指定要在远程服务器的连接服务主体名称 <SPN> 后追加的端口号。当身份验证机制为 Kerberos 或 Negotiate 时使用 SPN。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Timeout <int>

定义 WS-Management 操作的超时时间（以毫秒为单位）。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-UnEncrypted <switch>

当通过 HTTP 执行远程操作时，不使用加密。

注意：默认情况下不允许未加密的通信，必须在本地配置中启用未加密的通信。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-UseIEProxyconfig <switch>

对当前用户使用 Internet Explorer 代理配置。这是默认设置。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-UseProxyAutoDetection <switch>

强制自动检测代理。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-UseWinHTTPProxyConfig <switch>

使用为 WinHTTP 配置的代理设置。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-UTF16 <switch>

以 UTF16 格式而不是 UTF8 格式对请求进行编码。默认设置为 UTF8 编码。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

<CommonParameters>

此 cmdlet 支持通用参数：-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。有关详细信息，请参阅 about_Commonparameters.

输入和输出

输入类型是指可通过管道传递给 cmdlet 的对象的类型。返回类型是指 Cmdlet 所返回对象的类型。

输入 |
输出 | SessionOption

另请参阅

  • Connect-WSMan
  • Disable-WSManCredSSP
  • Disconnect-WSMan
  • Enable-WSManCredSSP
  • Get-WSManCredSSP
  • Get-WSManInstance
  • Invoke-WSManAction
  • New-WSManInstance
  • Remove-WSManInstance
  • Set-WSManInstance
  • Set-WSManQuickConfig
  • Test-WSMan


Out-Default

将输出发送到默认的格式化程序和默认的输出 cmdlet。

语法

Out-Default [-InputObject <psobject>] [<CommonParameters>]

说明

Out-Default cmdlet 将输出发送到默认格式化程序和默认的输出 cmdlet。此 cmdlet 对 Windows PowerShell 命令的格式设置或输出没有影响。它是一个占位符，用于编写您自己的 Out-Default 函数或 cmdlet。

参数

-InputObject <psobject>

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | true (ByValue)
是否接受通配符？ | false

<CommonParameters>

此 cmdlet 支持通用参数：-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。有关详细信息，请参阅 about_Commonparameters.

输入和输出

输入类型是指可通过管道传递给 cmdlet 的对象的类型。返回类型是指 Cmdlet 所返回对象的类型。

输入

输出


Out-File

将输出发送到文件。

语法

Out-File [-FilePath] <string> [[-Encoding] <string>] [-Append] [-Force] [-InputObject <psobject>] [-NoClobber] [-Width <int>] [-Confirm] [-WhatIf] [<CommonParameters>]

说明

Out-File cmdlet 将输出发送到文件。如果需要使用它的参数，可以使用此 cmdlet 而不是重定向运算符 (>)。

参数

-Append

将输出添加到现有文件的末尾，而不替换文件内容。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Encoding <string>

指定在文件中使用的字符编码的类型。有效值是“Unicode”、“UTF7”、“UTF8”、“UTF32”、“ASCII”、“BigEndianUnicode”、“Default”和“OEM”。默认值为“Unicode”。

“Default”使用系统当前 ANSI 代码页的编码。

“OEM”使用操作系统的当前原始设备制造商代码页标识符。

是否为必需？ | false
位置？ | 2
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-FilePath <string>

指定输出文件的路径。

是否为必需？ | true
位置？ | 1
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Force

允许该 cmdlet 覆盖现有只读文件。即使使用 Force 参数，该 cmdlet 也无法覆盖安全限制。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-InputObject <psobject>

指定要写入文件的对象。请输入包含对象的变量，或者键入可获取对象的命令或表达式。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | true (ByValue)
是否接受通配符？ | false

-NoClobber

将不会覆盖现有文件（替换其内容）。默认情况下，如果指定的路径中存在同名文件，则 Out-File 将覆盖该文件，而不会发出警告。如果同时使用了 Append 和 NoClobber，则输出内容将追加到现有文件中。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Width <int>

指定输出中每一行的字符数。将截断任何额外字符，不换行。如果省略此参数，则由主机特征确定宽度。Windows PowerShell 控制台的默认值是 80（字符）。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Confirm

在执行命令之前提示您进行确认。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-WhatIf

描述如果执行该命令会发生什么情况（无需实际执行该命令）。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

<CommonParameters>

此 cmdlet 支持通用参数：-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。有关详细信息，请参阅 about_Commonparameters.

输入和输出

输入类型是指可通过管道传递给 cmdlet 的对象的类型。返回类型是指 Cmdlet 所返回对象的类型。

输入 | System.Management.Automation.PSObject 可以通过管道将任何对象传递给 Out-File。
输出 | None Out-File 不生成任何输出。

说明

输出 cmdlet 不格式化对象；它们只是生成对象的显示信息，并将它们发送到指定的显示目标。如果将未格式化的对象发送给输出 cmdlet，该 cmdlet 会为它生成显示信息，然后将它发送给格式化 cmdlet。

输出 cmdlet 没有用于提供名称和文件路径的参数。若要将数据发送到含有 Out 动词（输出 cmdlet）的 cmdlet，请使用管道运算符 (|) 将 Windows PowerShell 命令的输出发送到该 cmdlet。还可以将数据存储在变量中，并使用 InputObject 参数将数据传递给 cmdlet。有关帮助信息，请参阅相关示例。

Out-File 发送数据，但不发出任何输出对象。如果将 Out-File 的输出通过管道传递给 Get-Member，则 Get-Member 将报告尚未指定对象。

示例 1

C:\PS>get-process | out-file -filepath C:\Test1\process.txt

说明
-----------
此命令将计算机上的进程列表发送到 Process.txt 文件。如果该文件不存在，则 Out-File 将创建该文件。因为 FilePath 参数的名称是可选的，所以可以将其省略，然后提交等效命令“get-process | outfile C:\Test1\process.txt”。

示例 2

C:\PS>get-process | out-file C:\Test1\process.txt -noclobber

Out-File : File C:\Test1\process.txt already exists and NoClobber was specified.
At line:1 char:23
+ get-process | out-file  <<<< process.txt -noclobber

说明
-----------
此命令还会将进程列表发送到 Process.txt 文件，但它使用 NoClobber 参数，该参数可使现有文件不会被覆盖。输出显示对现有文件使用 NoClobber 时出现的错误消息。

示例 3

C:\PS>$a = get-process

C:\PS> out-file -filepath C:\Test1\process.txt -inputobject $a -encoding ASCII -width 50

说明
-----------
这些命令将计算机上的进程列表发送到 Process.txt 文件。文本以 ASCII 格式编码，从而 Findstr 和 Grep 等搜索程序可以读取该文本。默认情况下，Out-File 使用 Unicode 格式。

第一个命令获取进程的列表，并将它们存储在 $a 变量中。第二个命令使用 Out-File cmdlet 将列表发送到 Process.txt 文件。

该命令使用 InputObject 参数指定输入来自 $a 变量。它使用 Encoding 参数将输出转换为 ASCII 格式。它使用 Width 参数将文件中每一行的长度限制为 50 个字符以内。由于输出行将在第 50 个字符处被截断，因此将省略进程表中的最右列。

示例 4

C:\PS>set-location hklm:\software

c:\PS>get-acl mycompany\mykey | out-file -filepath c:\ps\acl.txt

c:\PS>get-acl mycompany\mykey | out-file -filepath filesystem::acl.txt

说明
-----------
这些命令演示当您不在 FileSystem 驱动器中时如何使用 Out-File cmdlet。

第一个命令将当前位置设置为 HKLM:\Software 注册表项。

第二和第三个命令的效果相同。它们使用 Get-Acl cmdlet 获取 MyKey 注册表子项 (HKLM\Software\MyCompany\MyKey) 的安全描述符。管道运算符将结果传递给 Out-File cmdlet，后者将它发送到 Acl.txt 文件。

因为 Windows PowerShell Registry 提供程序不支持 Out-File，所以必须在 FilePath 参数的值中指定文件系统驱动器名称（例如“c:”），或指定提供程序的名称并且后跟两个冒号（例如“FileSystem::”）。第二和第三个命令演示这些方法。

另请参阅

  • Out-String
  • Out-Null
  • Out-Host
  • Out-Printer
  • Out-Default
  • Tee-Object


Out-GridView

将输出发送到单独窗口中的交互表。

语法

Out-GridView [-InputObject <psobject>] [-Title <string>] [<CommonParameters>]

说明

Out-GridView cmdlet 将命令的输出发送到网格视图窗口，在该窗口中输出显示在一个交互表中。此功能需要 Microsoft .NET Framework 3.5 Service Pack 1。

可以使用该表的以下功能来检查您的数据：

-- 隐藏、显示和重新排序列：若要隐藏、显示或重新排序某一列，请右键单击列标题，然后单击“选择列”。

-- 排序。若要对数据排序，请单击列标题。再次单击从升序切换到降序。

-- 快速筛选。使用窗口顶部的“筛选”框在表中搜索文本。可以在特定列中搜索文本，搜索文字以及搜索多个单词。

-- 条件筛选。使用“添加条件”下拉菜单来创建数据筛选规则。这对于非常大的数据集（如事件日志）非常有用。

-- 复制和粘贴。若要从 Out-GridView 复制多行数据，请按 Ctrl+C（复制）。可以将该数据粘贴到任何文本或电子表格程序。

若要获得这些功能的使用说明，请键入“get-help out-gridview -full”，然后在“注释”部分查看“如何使用网格视图窗口功能”。

参数

-InputObject <psobject>

接受 Out-GridView 的输入。

如果使用 InputObject 参数将对象集合（多个对象）发送到 Out-GridView，则 Out-GridView 将该集合视为一个集合对象，显示一行来表示该集合。若要显示该集合中的每个对象，请使用管道运算符 (|) 将对象发送到 Out-GridView。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | true (ByValue)
是否接受通配符？ | false

-Title <string>

指定出现在 Out-GridView 窗口标题栏中的文本。

默认情况下，标题栏显示调用 Out-GridView 的命令。

是否为必需？ | false
位置？ | named
默认值 | The current command
是否接受管道输入？ | false
是否接受通配符？ | false

<CommonParameters>

此 cmdlet 支持通用参数：-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。有关详细信息，请参阅 about_Commonparameters.

输入和输出

输入类型是指可通过管道传递给 cmdlet 的对象的类型。返回类型是指 Cmdlet 所返回对象的类型。

输入 | System.Management.Automation.PSObject 可以将任何对象发送到 Out-GridView。
输出 | None Out-GridView 不返回任何对象。

说明

OUT-GRIDVIEW 的注释

----------------------

可以从 Microsoft 下载中心下载 Microsoft .NET Framework 3.5 Service Pack 1。

因为此 cmdlet 需要用户界面，所以它无法在 Windows Server 的 Server Core 安装上运行。

不能使用远程命令来打开远程计算机上的网格视图窗口。

发送的命令输出不能进行预先格式化，例如通过使用 Format-Table 或 Format-Wide cmdlet 进行格式化。若要选择属性，请使用 Select-Object cmdlet。

在网格视图窗口中，可能无法对来自远程命令的反序列化输出正确进行格式设置。

OUT-GRIDVIEW 的键盘快捷方式

-----------------------------------

通过使用下列键盘快捷方式，可以快速执行许多任务。

使用此键： 执行此操作：

------------- ----------------------------------------------------------------

Tab 将光标从“筛选”框移动到表的“添加条件”菜单，然后再返回。

向上键 上移一行。将移至列标题。

向下键 下移一行。

向左键 在列标题行中，左移一列。

向右键 在列标题行中，右移一列。

上下文菜单键 在列标题行中显示“选择列”选项。

Enter 或空格键 在列标题行中，对列数据排序（切换 A-Z、Z-A）。

如何使用网格视图窗口功能

----------------------------------------

以下主题说明如何使用 Out-GridView 显示的窗口的功能。

如何隐藏、显示和重新排序列

--------------------------------------

隐藏或显示列：

1. 在列标题中的任何位置单击右键，然后单击“选择列”。

2. 在“选择列”对话框中，使用箭头键将“选定的列”中的列移动到“可用的列”框。只有“选定的列”框中的列才显示在网格视图窗口中。

对列重新排序：

-- 将列拖放到所需位置上。

- 或者 -

1. 在列标题中的任何位置单击右键，然后单击“选择列”。

2. 在“选择列”对话框中，使用“向上移动”和“向下移动”按钮对列重新排序。列表顶部的列显示在网格视图窗口中列表底部的列的左侧。

如何对表数据排序

----------------------

-- 若要对数据排序，请单击列标题。

-- 若要更改排序顺序，请再次单击该列标题。每次单击同一标题时，排序顺序都在升序和降序之间切换。当前顺序由列标题中的三角形来指示。

如何选择表数据

------------------------

-- 若要选择行，请单击该行或使用向上或向下键导航到该行。

-- 若要选择所有行（除了标题行），请按 Ctrl+A。

-- 若要选择连续行，请在单击这些行或使用箭头键时按住 Shift 键。

-- 若要选择非连续行，请按住 Ctrl 键并单击某行将其选中。

不能选择列，也不能选择整个列标题行。

如何复制行

----------------------

-- 若要复制表中的一个或多个行，请选择该行，然后按 Ctrl+C。

可以将该数据粘贴到任何文本或电子表格程序。无法复制列或行的一部分，并且无法复制列标题行。

如何在表中搜索（快速筛选）

---------------------------------

使用“筛选”框搜索表中的数据。当您在该框中键入文本时，将仅在表中显示包括所键入文本的项目。

-- 搜索文本。若要在表中搜索文本，请在“筛选”框中键入要查找的文本。

-- 搜索多个单词。若要在表中搜索多个单词，请键入单词，使用空格来分隔。Out-GridView 显示包括所有单词（逻辑 AND）的行。

-- 搜索文字短语。若要搜索包括空格或特殊字符的短语，请使用引号将该短语括起来。Out-GridView 显示包括该短语的精确匹配项的行。

-- 在列中搜索。若要在一个或多个列中搜索文本，请使用以下格式：

<column>:<text> [<column>:<text>] ...

例如，若要在 DisplayName 列中查找“Net”，请在“筛选”框中键入：

displayname:net

若要在 DisplayName 和 Name 列中查找包含“Net”的行，请在“筛选”框中键入：

displayname:net name:net

-- 禁用搜索。若要重新显示整个表，请单击“筛选”框右上角的红色 X 按钮或删除“筛选”框中的文本。

使用条件来筛选表

--------------------------------

可以使用规则或“条件”来确定要在表中显示的项。项仅在满足设立的所有条件时才会显示。可用的条件由网格视图窗口中显示的对象的属性以及这些属性的 .NET Framework 类型来确定。

每个条件具有以下格式：

<列> <运算符> <值>

不同属性的条件通过 AND 来连接。相同属性的条件通过 OR 来连接。无法更改逻辑连接符。

条件仅影响显示。它不会从表中删除项目。

如何添加条件

---------------------------

1. 若要显示“添加条件”菜单按钮，请在窗口的右上角单击“展开”箭头。

2. 单击“添加条件”菜单按钮。

3. 单击以选择列（属性）。可以选择一个或多个属性。

4. 选择完属性后，单击“添加”按钮。

5. 若要取消添加，请单击“取消”。

6. 若要添加更多条件，请再次单击“添加条件”按钮。

如何编辑条件

--------------------

-- 若要更改运算符，请单击蓝色运算符值，然后单击以从

下拉列表中选择其他运算符。

-- 若要输入或更改值，请在值框中键入一个值。如果输入的值无效，则会出现一个圆形 X 图标。若要删除该图标，请更改该值。

-- 若要创建 OR 语句，请添加具有同一属性的条件。

如何删除条件

-------------------------

-- 若要删除选定的条件，请单击每个条件旁边的红色 X。

-- 若要删除所有条件，请单击“全部清除”按钮。

示例 1

C:\PS>get-process | out-gridview

说明
-----------
此命令获取本地计算机上运行的进程并将它们发送到网格视图窗口。

示例 2

C:\PS>$p = get-process

C:\PS> $p | out-gridview

说明
-----------
此命令也获取本地计算机上运行的进程并将它们发送到网格视图窗口。

第一个命令使用 Get-Process 命令获取计算机上的进程，然后将进程对象保存在 $p 变量中。

第二个命令使用管道运算符将 $p 变量发送至 Out-GridView。

示例 3

C:\PS>get-process | select-object -property name, workingset, peakworkingset | sort-object -property workingset -desc | out-gridview

说明
-----------
此命令在网格视图窗口中显示格式化的表。

它使用 Get-Process cmdlet 获取计算机上的进程。

然后，它使用管道运算符 (|) 将进程对象发送到 Select-Object cmdlet。该命令使用 Select-Object 的 Property 参数选择要在表中显示的 Name、WorkingSet 和 PeakWorkingSet 属性。

另一个管道运算符将筛选的对象发送到 Sort-Object cmdlet，该 cmdlet 按 WorkingSet 属性的值对这些对象进行降序排序。

该命令的最后部分使用管道运算符 (|) 将格式化的表发送到 Out-GridView。

现在可以使用网格视图的功能来对数据进行搜索、排序和筛选。

示例 4

C:\PS>($a = get-childitem -path $pshome -recurse) | out-gridview

说明
-----------
此命令将其输出保存在一个变量中并将该输出发送到 Out-GridView。

该命令使用 Get-ChildItem cmdlet 获取 Windows PowerShell 安装目录及其子目录中的文件。安装目录的路径保存在 $pshome 自动变量中。

该命令使用赋值运算符 (=) 将输出保存在 $a 变量中，使用管道运算符 (|) 将输出发送到 Out-GridView。
命令中的括号确定操作的顺序。结果，Get-ChildItem 命令的输出先保存在 $a 变量中，然后发送到 Out-GridView。

示例 5

C:\PS>get-process -computername Server01| ogv -title "Processes - Server01"

说明
-----------
此命令在网格视图窗口中显示 Server01 计算机上运行的进程。

该命令使用“ogv”（即 Out-GridView cmdlet 的内置别名），并使用 Title 参数指定窗口标题。

示例 6

C:\PS>invoke-command -ComputerName S1, S2, S3 -scriptblock {get-culture} | out-gridview

说明
-----------
此示例说明将从远程计算机收集的数据发送到 Out-GridView cmdlet 的正确格式。

该命令使用 Invoke-Command cmdlet 在三台远程计算机上运行 Get-Culture 命令。它使用管道运算符将返回的数据发送至 Out-GridView cmdlet。

请注意，包含远程运行的命令的脚本块不包括 Out-GridView 命令。如果该脚本块包括该命令，则当该脚本块尝试在每台远程计算机上打开网格视图窗口时，该命令将会失败。


Out-Host

将输出发送到命令行。

语法

Out-Host [-InputObject <psobject>] [-Paging] [<CommonParameters>]

说明

Out-Host cmdlet 将输出发送到 Windows PowerShell 主机以进行显示。主机将在命令行显示输出。因为 Out-Host 是默认设置，所以除非要使用其参数来更改显示，否则不需要指定它。

参数

-InputObject <psobject>

指定写入控制台的对象。输入一个包含对象的变量，或键入可获取对象的命令或表达式。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | true (ByValue)
是否接受通配符？ | false

-Paging

输出每次显示一页，在显示其余页之前会等待用户输入，这很像传统的“more”命令。默认情况下，所有输出均以单页显示。页大小由主机的特征确定。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

<CommonParameters>

此 cmdlet 支持通用参数：-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。有关详细信息，请参阅 about_Commonparameters.

输入和输出

输入类型是指可通过管道传递给 cmdlet 的对象的类型。返回类型是指 Cmdlet 所返回对象的类型。

输入 | System.Management.Automation.PSObject 可以通过管道将任何对象传递给 Out-Host。
输出 | None Out-Host 不生成任何输出。但是，主机可能显示 Out-Host 向其发送的对象。

说明

还可以使用 Out-Host 的内置别名“oh”来对其进行引用。有关详细信息，请参阅 about_Aliases。

包含 Out 动词的 cmdlet（输出 cmdlet）不格式化对象；它们只呈现对象，并将对象发送到指定的显示目标。如果将未格式化的对象发送给输出 cmdlet，该 cmdlet 会为它生成显示信息，然后将它发送给格式化 cmdlet。

输出 cmdlet 没有用于提供名称和文件路径的参数。若要向某个输出 cmdlet 发送数据，请使用管道运算符 (|) 将 Windows PowerShell 命令的输出发送到该 cmdlet。还可以将数据存储在变量中，并使用 InputObject 参数将数据传递给 cmdlet。有关帮助信息，请参阅相关示例。

Out-Host 发送数据，但不发出任何输出对象。如果将 Out-Host 的输出通过管道传递给 Get-Member，则 Get-Member 将报告尚未指定对象。

示例 1

C:\PS>get-process | out-host -paging

说明
-----------
此命令每次一页地显示系统中的进程。它使用 Get-Process 命令获取系统中的进程。管道运算符 (|) 将结果发送给 Out-Host，后者将它们显示在控制台上。Paging 参数使数据每次显示一页。

内置在 Windows PowerShell 中的 Help 函数使用相同的命令格式。该函数从 Get-Help 获取数据，然后使用 Out-Host 的 Paging 参数使数据每次显示一页，其命令格式如下：get-help $args[0] | out-host -paging。

示例 2

C:\PS>$a = get-history

C:\PS>out-host -InputObject $a

说明
-----------
这些命令在命令行显示会话历史记录。第一条命令使用 Get-History cmdlet 获取会话历史记录，然后将历史记录存储在 $a 变量中。第二条命令使用 Out-Host 显示 $a 变量的内容，并使用 InputObject 参数将变量指定为 Out-Host。

另请参阅

  • Out-Printer
  • Out-Null
  • Out-File
  • Out-String
  • Out-Default
  • Write-Host


Out-Null

删除输出，不将其发送到控制台。

语法

Out-Null [-InputObject <psobject>] [<CommonParameters>]

说明

Out-Null cmdlet 将输出发送到 NULL，实际上是删除输出。

参数

-InputObject <psobject>

指定已发送到 null（删除）的对象。输入一个包含对象的变量，或键入可获取对象的命令或表达式。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | true (ByValue)
是否接受通配符？ | false

<CommonParameters>

此 cmdlet 支持通用参数：-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。有关详细信息，请参阅 about_Commonparameters.

输入和输出

输入类型是指可通过管道传递给 cmdlet 的对象的类型。返回类型是指 Cmdlet 所返回对象的类型。

输入 | System.Management.Automation.PSObject 可以通过管道将任何对象传递给 Out-Null。
输出 | None Out-Null 不生成任何输出。

说明

包含 Out 动词的 cmdlet（输出 cmdlet）没有用于提供名称或文件路径的参数。若要向某个输出 cmdlet 发送数据，请使用管道运算符 (|) 将 Windows PowerShell 命令的输出发送到该 cmdlet。还可以将数据存储在变量中，并使用 InputObject 参数将数据传递给 cmdlet。有关详细信息，请参阅示例。

Out-Null 不返回任何输出对象。如果将 Out-Null 的输出通过管道传递给 Get-Member，则 Get-Member 将报告尚未指定对象。

示例 1

C:\PS>get-childitem | out-null

说明
-----------
此命令获取本地目录中的项，但随后将其丢弃，而不是通过管道传递或在命令行显示它们。这在丢弃不需要的输出时非常有用。

另请参阅

  • Out-Printer
  • Out-Host
  • Out-File
  • Out-String
  • Out-Default


Out-Printer

将输出发送到打印机。

语法

Out-Printer [[-Name] <string>] [-InputObject <psobject>] [<CommonParameters>]

说明

Out-Printer cmdlet 将输出发送到默认打印机或备用打印机（如果指定）。

参数

-InputObject <psobject>

指定要发送到打印机的对象。输入一个包含对象的变量，或键入可获取对象的命令或表达式。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | true (ByValue)
是否接受通配符？ | false

-Name <string>

指定备用打印机。参数名（“Name”）为可选项。

是否为必需？ | false
位置？ | 1
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

<CommonParameters>

此 cmdlet 支持通用参数：-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。有关详细信息，请参阅 about_Commonparameters.

输入和输出

输入类型是指可通过管道传递给 cmdlet 的对象的类型。返回类型是指 Cmdlet 所返回对象的类型。

输入 | System.Management.Automation.PSObject 可以通过管道将任何对象传递给 Out-Printer。
输出 | None Out-Printer 不返回任何对象。

说明

还可以使用 Out-Printer 的内置别名“lp”来对其进行引用。有关详细信息，请参阅 about_Aliases。

包含 Out 动词的 cmdlet（输出 cmdlet）不格式化对象；它们只呈现对象，并将对象发送到指定的显示目标。如果将未格式化的对象发送给输出 cmdlet，该 cmdlet 会为它生成显示信息，然后将它发送给格式化 cmdlet。

输出 cmdlet 没有用于提供名称和文件路径的参数。若要向某个输出 cmdlet 发送数据，请使用管道运算符 (|) 将 Windows PowerShell 命令的输出发送到该 cmdlet。还可以将数据存储在变量中，并使用 InputObject 参数将数据传递给 cmdlet。有关详细信息，请参阅示例。

Out-Printer 发送数据，但不发出任何输出对象。如果将 Out-Printer 的输出通过管道传递给 Get-Member，则 Get-Member 将报告尚未指定对象。

示例 1

C:\PS>get-content $pshome\about_signing.help.txt | Out-Printer

说明
-----------
此命令将 about_Signing 帮助主题的内容打印到默认打印机。此示例演示如何在 Out-Printer 没有 Path 参数的情况下打印文件。

该命令使用 Get-Content cmdlet 获取帮助主题的内容。路径包括 $pshome，这是一个内置变量，用于存储 Windows PowerShell 的安装目录。管道运算符 (|) 将结果传递给 Out-Printer，后者将它发送到默认打印机。

示例 2

C:\PS>"Hello, World" | out-printer -name "\\Server01\Prt-6B Color"

说明
-----------
此命令用 Server01 上的“Prt-6B Color”打印机打印“Hello, World”。此命令使用 Name 参数指定备用打印机。因为参数名称可选，所以可以省略该参数。

示例 3

C:\PS>$h = get-help -full get-wmiobject

C:\PS> out-printer -inputobject $h

说明
-----------
这些命令打印 Get-WmiObject 的完整版本的帮助主题。第一个命令使用 Get-Help cmdlet 获取 Get-WmiObject 的完整版本的帮助主题，并将它存储在 $h 变量中。第二个命令将内容发送到默认打印机。它使用 InputObject 参数将 $h 变量的值传递给 Out-Printer。

另请参阅

  • Out-Host
  • Out-Null
  • Out-String
  • Out-File
  • Out-Default


Out-String

将对象作为一列字符串发送到主机。

语法

Out-String [-InputObject <psobject>] [-Stream] [-Width <int>] [<CommonParameters>]

说明

Out-String cmdlet 将 Windows PowerShell 管理的对象转换成字符串数组。默认情况下，Out-String 累积字符串并作为单个字符串返回它们，但您可以使用 stream 参数让 Out-String 每次返回一个字符串。此 cmdlet 用于在对象操纵不太方便时像在传统外壳程序中一样搜索和操纵字符串输出。

参数

-InputObject <psobject>

指定要写入字符串的对象。输入一个包含对象的变量，或键入可获取对象的命令或表达式。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | true (ByValue)
是否接受通配符？ | false

-Stream

单独发送每个对象的字符串。默认情况下，每个对象的字符串将作为单个字符串进行累积和发送。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Width <int>

指定输出中每一行的字符数。将截断任何额外字符，不换行。如果省略此参数，则由主机特征确定宽度。PowerShell.exe 主机的默认值是 80（字符）。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

<CommonParameters>

此 cmdlet 支持通用参数：-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。有关详细信息，请参阅 about_Commonparameters.

输入和输出

输入类型是指可通过管道传递给 cmdlet 的对象的类型。返回类型是指 Cmdlet 所返回对象的类型。

输入 | System.Management.Automation.PSObject 可以通过管道将对象传递给 Out-String。
输出 | System.String Out-String 返回它根据输入对象创建的字符串。

说明

包含 Out 动词的 cmdlet（输出 cmdlet）不格式化对象；它们只呈现对象，并将对象发送到指定的显示目标。如果将未格式化的对象发送给输出 cmdlet，该 cmdlet 会为它生成显示信息，然后将它发送给格式化 cmdlet。

输出 cmdlet 没有用于提供名称和文件路径的参数。若要向某个输出 cmdlet 发送数据，请使用管道运算符 (|) 将 Windows PowerShell 命令的输出发送到该 cmdlet。还可以将数据存储在变量中，并使用 InputObject 参数将数据传递给 cmdlet。有关详细信息，请参阅示例。

示例 1

C:\PS>get-content C:\test1\testfile2.txt | out-string

说明
-----------
此命令将 Testfile2.txt 文件的内容作为单个字符串发送到控制台。它使用 Get-Content cmdlet 来获取文件的内容。管道运算符 (|) 将内容发送到 Out-String，后者将该内容作为字符串发送到控制台。

示例 2

C:\PS>$c = get-culture | select-object *

C:\PS> out-string -inputobject $c -width 100

说明
-----------
这些命令获取当前用户的区域设置，并将该数据转换为字符串。第一个命令使用 Get-Culture cmdlet 来获取区域设置。管道运算符 (|) 将结果发送给 Select-Object cmdlet，后者选择 Get-Culture 检索到的区域性对象的所有属性 (*)。然后该命令将结果存储在 $c 变量中。

第二个命令使用 Out-String 将 CultureInfo 对象转换成一列字符串（每个属性一个字符串）。它使用 InputObject 参数将 $c 变量传递给 Out-String。width 参数被设置为每行 100 个字符，以防止发生截断。

示例 3

C:\PS>get-alias | out-string -stream | select-string "Get-Command"

说明
-----------
此命令显示包含短语“Get-Command”的别名。它使用 Get-Alias cmdlet 来获取一组 AliasInfo 对象（当前会话中的每个别名对应一个 AliasInfo 对象）。此示例说明处理对象与处理字符串之间的不同之处。

管道运算符 (|) 将 Get-Alias 的输出发送至 Out-String，后者将对象转换为一系列字符串。它使用 Stream 参数逐一发送每个字符串，而不是将它们连成单个字符串。另一个管道运算符将这些字符串发送至 Select-String，后者选择这些字符串中任意位置包含“Get-Command”的字符串。

如果省略 Stream 参数，则该命令将显示所有别名，因为 Select-String 在由 Out-String 返回的单个字符串中查找“Get-Command”，格式化程序将以表的形式显示该字符串。

另请参阅

  • Out-File
  • Out-Null
  • Out-Host
  • Out-Printer
  • Out-Default


Pop-Location

将当前位置更改为最近推入到堆栈中的位置。您可以从默认堆栈中或从您使用 Push-Location cmdlet 创建的堆栈中弹出位置。

语法

Pop-Location [-PassThru] [-StackName <string>] [-UseTransaction] [<CommonParameters>]

说明

Pop-Location cmdlet 将当前位置更改为使用 Push-Location cmdlet 最近推入堆栈的位置。您可以从默认堆栈中或从您使用 Push-Location 命令创建的堆栈中弹出位置。

参数

-PassThru

将表示位置的对象传递到管道。默认情况下，此 cmdlet 将不产生任何输出。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-StackName <string>

指定备用堆栈。Pop-Location 从此堆栈中弹出最近添加的位置。此堆栈即成为当前堆栈。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | true (ByPropertyName)
是否接受通配符？ | false

-UseTransaction

将命令包含在活动事务中。仅当正在执行事务时，此参数才有效。有关详细信息，请参阅 about_Transactions。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

<CommonParameters>

此 cmdlet 支持通用参数：-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。有关详细信息，请参阅 about_Commonparameters.

输入和输出

输入类型是指可通过管道传递给 cmdlet 的对象的类型。返回类型是指 Cmdlet 所返回对象的类型。

输入 | None 不能通过管道将输入传递给 Pop-Location。
输出 | None 或 System.Management.Automation.PathInfo 如果使用 PassThru 参数，则 Pop-Location 生成表示位置的 System.Management.Automation.PathInfo 对象。否则，此 cmdlet 将不产生任何输出。

说明

还可以使用 Pop-Location 的内置别名“popd”来对其进行引用。有关详细信息，请参阅 about_Aliases。

Pop-Location cmdlet 用于处理由任何提供程序公开的数据。要列出会话中可用的提供程序，请键入“Get-PSProvider”。有关详细信息，请参阅 about_Providers。

示例 1

C:\PS>pop-location

说明
-----------
此命令将您的位置更改为最近添加到当前堆栈中的位置。

示例 2

C:\PS>pop-location -stackname Stack2

说明
-----------
此命令将您的位置更改为最近添加到 Stack2 堆栈中的位置。

示例 3

C:\PS>pushd HKLM:\Software\Microsoft\PowerShell

pushd Cert:\LocalMachine\TrustedPublisher

popd

popd

PS C:\> push-location HKLM:\Software\Microsoft\PowerShell

PS HKLM:\Software\Microsoft\PowerShell> push-location Cert:\LocalMachine\TrustedPublisher

PS cert:\LocalMachine\TrustedPublisher> popd

PS HKLM:\Software\Microsoft\PowerShell> popd

PS C:\ps-test>

说明
-----------
这些命令使用 Push-Location 和 Pop-Location cmdlet 在受不同的 Windows PowerShell 提供程序支持的各位置之间进行移动。这些命令使用“pushd”别名代表 Push-Location，使用“popd”别名代表 Pop-Location。

第一个命令将当前文件系统位置推入到堆栈中，并转移到受 Windows PowerShell Registry 提供程序支持的 HKLM 驱动器。第二个命令将注册表位置推入到堆栈中，并转移到受 Windows PowerShell 证书提供程序支持的位置。

最后两个命令将这些位置弹出堆栈。第一个“popd”命令返回到 Registry 驱动器，第二个命令返回到文件系统驱动器。

另请参阅

  • about_Providers
  • Push-Location
  • Set-Location
  • Get-Location


Push-Location

将当前位置添加到位置列表（“堆栈”）的顶部。

语法

Push-Location [[-LiteralPath] <string>] [-PassThru] [-StackName <string>] [-UseTransaction] [<CommonParameters>]

Push-Location [[-Path] <string>] [-PassThru] [-StackName <string>] [-UseTransaction] [<CommonParameters>]

说明

Push-Location cmdlet 将当前位置添加（“推入”）到位置列表（称为“堆栈”）的顶部。您可以将当前位置推入到默认堆栈或您创建的堆栈中。如果指定了路径，则 Push-Location 将当前位置推入堆栈，然后将当前位置更改为由此路径指定的位置。您无法将除当前位置以外的位置推入堆栈。

参数

-LiteralPath <string>

指定新位置的路径。与 Path 参数不同，LiteralPath 参数的值严格按照其键入形式使用。不会将任何字符解释为通配符。如果路径包括转义符，请将其括在单引号中。单引号会告知 Windows PowerShell 不要将所有字符都解释为转义序列。

是否为必需？ | false
位置？ | 1
默认值 |
是否接受管道输入？ | true (ByPropertyName)
是否接受通配符？ | false

-PassThru

将表示位置的对象传递到管道。默认情况下，此 cmdlet 将不产生任何输出。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Path <string>

在此命令将当前位置添加（推入）到堆栈顶部之后，将把您的位置更改到由此路径指定的位置。输入其提供程序支持此 cmdlet 的任何位置的路径。允许使用通配符。参数名（“Path”）为可选项。

是否为必需？ | false
位置？ | 1
默认值 |
是否接受管道输入？ | true (ByValue, ByPropertyName)
是否接受通配符？ | false

-StackName <string>

指定堆栈的名称。当前位置被推入此堆栈中，此堆栈即成为当前堆栈。如果此堆栈尚不存在，将创建它。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | true (ByPropertyName)
是否接受通配符？ | false

-UseTransaction

将命令包含在活动事务中。仅当正在执行事务时，此参数才有效。有关详细信息，请参阅 about_Transactions。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

<CommonParameters>

此 cmdlet 支持通用参数：-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。有关详细信息，请参阅 about_Commonparameters.

输入和输出

输入类型是指可通过管道传递给 cmdlet 的对象的类型。返回类型是指 Cmdlet 所返回对象的类型。

输入 | System.String 可以通过管道将包含路径（但不是文本路径）的字符串传递给 Push-Location。
输出 | None 或 System.Management.Automation.PathInfo 如果使用 PassThru 参数，则 Push-Location 生成表示位置的 System.Management.Automation.PathInfo 对象。否则，此 cmdlet 将不产生任何输出。

说明

还可以使用 Push-Location 的内置别名“pushd”来对其进行引用。有关详细信息，请参阅 about_Aliases。

“堆栈”是一种“后进先出”(LIFO) 数据结构。它类似于一个垂直列表，其中只有顶部项才可以访问。您只能将项添加（“推入”）到堆栈顶部，并且只能从堆栈顶部检索（“弹出”）项。要访问顶部项下面的项，必须先检索其上面的所有项。

Push-Location cmdlet 用于处理由任何提供程序公开的数据。要列出会话中可用的提供程序，请键入“Get-PSProvider”。有关详细信息，请参阅 about_Providers。

示例 1

C:\PS>push-location C:\Windows

说明
-----------
此命令将当前位置推入到默认堆栈中，然后将位置更改为 C:\Windows。

示例 2

C:\PS>push-location HKLM:\Software\Policies -stackname RegFunction

说明
-----------
此命令将当前位置推入到 RegFunction 堆栈中，然后将当前位置更改为 HKLM:\Software\Policies 位置。此命令说明可以将 Push-Location 与 Windows PowerShell 注册表提供程序一起使用。

示例 3

C:\PS>push-location

说明
-----------
此命令将当前位置推入到默认堆栈中。

示例 4

C:\PS>push-location ~ -stackname Stack2

说明
-----------
此命令将当前位置推入到名为 Stack2 的新堆栈中，然后将当前位置更改为主目录 (%USERPROFILE%)，主目录在此命令中以颚化符 (~) 或 $home 表示。Stack2 堆栈即成为当前堆栈。

另请参阅

  • about_Providers
  • Pop-Location
  • Set-Location
  • Get-Location


Read-Host

从控制台读取一行输入。

语法

Read-Host [[-Prompt] <Object>] [-AsSecureString] [<CommonParameters>]

说明

Read-Host cmdlet 从控制台读取一行输入。可以使用它来提示用户输入数据。因为可以将输入保存为安全字符串，所以可以使用此 cmdlet 来提示用户输入安全数据（如密码）以及共享的数据。

参数

-AsSecureString

显示星号 (*) 来替代用户作为输入键入的字符。

使用此参数时，Read-Host cmdlet 的输出是一个 SecureString 对象 (System.Security.SecureString)。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Prompt <Object>

指定提示的文本。键入一个字符串。如果该字符串包括空格，请将其括在引号中。例如，"Type an integer: "。

是否为必需？ | false
位置？ | 1
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

<CommonParameters>

此 cmdlet 支持通用参数：-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。有关详细信息，请参阅 about_Commonparameters.

输入和输出

输入类型是指可通过管道传递给 cmdlet 的对象的类型。返回类型是指 Cmdlet 所返回对象的类型。

输入 | None 不能通过管道将输入传递给此 cmdlet。
输出 | System.String or System.Security.SecureString 如果使用了 AsSecureString 参数，Read-Host 将返回一个 SecureString。否则，它将返回一个字符串。

示例 1

C:\PS>$age = read-host "Please enter your age:"

说明
-----------
此命令显示字符串“Please enter your age:”作为提示。输入值并按 Enter 键时，该值将存储在 $age 变量中。

示例 2

C:\PS>$pwd_secure_string = read-host "Enter a Password:" -assecurestring

说明
-----------
此命令显示字符串“Enter a Password:”作为提示。输入值时，控制台中显示星号 (*) 来替代输入。按 Enter 键时，值将作为 SecureString 对象存储在 $pwd_secure_string 变量中。

另请参阅

  • Get-Host
  • Out-Host
  • Write-Host
  • ConvertFrom-SecureString


Receive-Job

获取当前会话中 Windows PowerShell 后台作业的结果。

语法

Receive-Job [-Job] <Job[]> [[-ComputerName] <string[]>] [-Keep] [-NoRecurse] [<CommonParameters>]

Receive-Job [[-InstanceId] <Guid[]>] [-Keep] [-NoRecurse] [<CommonParameters>]

Receive-Job [-Job] <Job[]> [[-Location] <string[]>] [-Keep] [-NoRecurse] [<CommonParameters>]

Receive-Job [[-Name] <string[]>] [-Keep] [-NoRecurse] [<CommonParameters>]

Receive-Job [-Job] <Job[]> [[-Session] <PSSession[]>] [-Keep] [-NoRecurse] [<CommonParameters>]

Receive-Job [-Id] <Int32[]> [-Keep] [-NoRecurse] [<CommonParameters>]

说明

Receive-Job cmdlet 获取 Windows Powershell 后台作业的结果。使用 Receive-Job 可获取通过使用 Start-Job cmdlet 或任何 cmdlet 的 AsJob 参数启动的作业的结果。您可以获取所有作业的结果，或通过作业的名称、ID、实例 ID、计算机名、位置、会话或通过提交作业对象来标识作业。

启动 Windows PowerShell 后台作业时，该作业会启动，但结果不会立即显示，而是由命令返回一个表示该后台作业的对象。作业对象包含作业的有用信息，但不包含结果。使用该方法可以在作业运行的同时继续在会话中工作。有关 Windows PowerShell 中的后台作业的详细信息，请参阅 about_Jobs。

若要获取命令的结果，请使用 Receive-Job cmdlet。Receive-Job 获取在提交 Receive-Job 命令之前已经生成的结果。如果结果不完整，可以运行其他 Receive-Job 命令来获取剩余的结果。

默认情况下，当您收到作业结果时，作业结果将从系统中删除，但您可以使用 Keep 参数来保存结果，以便您可以再次收到它们。若要删除作业结果，请再次接收它们（不使用 Keep 参数），然后关闭会话，或者使用 Remove-Job cmdlet 将作业从会话中删除。

参数

-ComputerName <string[]>

获取在指定计算机上运行的作业的结果。输入计算机名称。默认值为当前会话中的所有作业。

此参数从存储在本地计算机上的作业结果中进行选择。它不会从远程计算机中获取数据。若要获取存储在远程计算机上的作业结果，请使用 Invoke-Command cmdlet 远程运行一个 Receive-Job 命令。

是否为必需？ | false
位置？ | 2
默认值 |
是否接受管道输入？ | true (ByPropertyName)
是否接受通配符？ | false

-Id <Int32[]>

获取具有指定 ID 的作业的结果。默认值为当前会话中的所有作业。

ID 是一个整数，用于在当前会话中唯一标识作业。它比实例 ID 更便于记忆和键入，但它只在当前会话中是唯一的。可以键入一个或多个 ID（以逗号分隔）。要查找作业的 ID，请键入不带参数的“Get-Job”。

是否为必需？ | true
位置？ | 1
默认值 |
是否接受管道输入？ | true (ByPropertyName)
是否接受通配符？ | false

-InstanceId <Guid[]>

获取具有指定实例 ID 的作业的结果。默认值为当前会话中的所有作业。

实例 ID 是一个 GUID，用于在计算机上唯一地标识作业。要查找某个作业的实例 ID，请使用 Get-Job cmdlet。

是否为必需？ | false
位置？ | 1
默认值 |
是否接受管道输入？ | true (ByPropertyName)
是否接受通配符？ | false

-Job <Job[]>

指定要检索其结果的作业。Receive-Job 命令需要此参数。输入包含作业的变量或获取作业的命令。也可以将作业对象通过管道传送到 Receive-Job。

是否为必需？ | true
位置？ | 1
默认值 |
是否接受管道输入？ | true (ByValue, ByPropertyName)
是否接受通配符？ | false

-Keep

在系统中保存作业结果，即使您已收到这些结果。默认情况下，作业结果在检索到后便会被删除。

要删除结果，请在不使用 Keep 参数的情况下再次使用 Receive-Job 接收结果，关闭会话，或者使用 Remove-Job cmdlet 将该作业从会话中删除。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Location <string[]>

仅获取指定位置的作业的结果。默认值为当前会话中的所有作业。

是否为必需？ | false
位置？ | 2
默认值 |
是否接受管道输入？ | true (ByPropertyName)
是否接受通配符？ | false

-Name <string[]>

获取具有指定友好名称的作业的结果。默认值为当前会话中的所有作业。

是否为必需？ | false
位置？ | 1
默认值 |
是否接受管道输入？ | true (ByPropertyName)
是否接受通配符？ | false

-NoRecurse

仅获取指定作业中的结果。默认情况下，Receive-Job 还获取指定作业的所有子作业的结果。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Session <PSSession[]>

获取在指定的 Windows Powershell 会话 (PSSession) 中运行的作业的结果。输入包含 PSSession 的变量或者用来获取 PSSession 的命令，例如 Get-PSSession 命令。默认值为当前会话中的所有作业。

是否为必需？ | false
位置？ | 2
默认值 |
是否接受管道输入？ | true (ByPropertyName)
是否接受通配符？ | false

<CommonParameters>

此 cmdlet 支持通用参数：-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。有关详细信息，请参阅 about_Commonparameters.

输入和输出

输入类型是指可通过管道传递给 cmdlet 的对象的类型。返回类型是指 Cmdlet 所返回对象的类型。

输入 | System.Management.Automation.Job 可将作业对象通过管道传送到 Receive-Job。
输出 | PSObject Receive-Job 返回作业中命令的结果。

示例 1

C:\PS>$job = start-job -scriptblock {get-process}

C:\PS> receive-job -job $job

说明
-----------
这些命令使用 Job 参数来获取特定作业的结果。第一个命令使用 Start-Job cmdlet 来启动运行“Get-Process”命令的作业。此命令使用赋值运算符 (=) 将生成的作业对象保存在 $job 变量中。

第二个命令使用 Receive-Job cmdlet 来获取作业的结果。它使用 Job 参数来指定作业。

示例 2

C:\PS>$job = start-job -scriptblock {get-process}

C:\PS> $job | receive-job

说明
-----------
此示例与示例 2 相同，只是该命令使用管道运算符 (|) 将作业对象发送到 Receive-Job。因此，该命令不需要 Job 参数来指定作业。

示例 3

C:\PS>$j = invoke-command -computername Server01, Server02, Server03 -scriptblock {get-service} -AsJob

C:\PS> $j.childjobs

Id   Name     State      HasMoreData   Location       Command
--   ----     -----      -----------   --------       -------
2    Job2     Completed  True          Server01       get-service
3    Job3     Completed  True          Server02       get-service
4    Job4     Completed  True          Server03       get-service

C:\PS> receive-job -name Job3  -keep

Status  Name        DisplayName                        PSComputerName
------  ----------- -----------                        --------------
Running AeLookupSvc Application Experience             Server02
Stopped ALG         Application Layer Gateway Service  Server02
Running Appinfo     Application Information            Server02
Running AppMgmt     Application Management             Server02

说明
-----------
这些命令使用 Receive-Job 的 Name 参数来获取远程计算机上运行的若干后台作业之一的结果。

第一个命令使用 Invoke-Command cmdlet 启动一个后台作业，该作业在三台远程计算机上运行一个 Get-Service 命令。此命令使用 AsJob 参数将命令作为后台作业运行。此命令将生成的作业对象保存在 $j 变量中。

使用 Invoke-Command 的 AsJob 参数启动作业时，作业对象创建在本地计算机上，即使作业在远程计算机上运行也是如此。因此，可以使用本地命令来管理作业。

另外，当您使用 AsJob 时，Windows PowerShell 将返回一个作业对象，该对象包含与启动的每个作业对应的子作业。在本例中，作业对象包含三个子作业，分别对应于每台远程计算机上的每个作业。

第二个命令使用点表示法显示 $j 中的作业对象的 ChildJobs 属性值。显示内容说明该命令创建了三个子作业，分别对应于每台远程计算机上的作业。

第三个命令使用 Receive-Job cmdlet 获取在计算机 Server02 上运行的子作业 Job3 的结果。它使用 Name 参数来指定子作业的名称，使用 Keep 参数来保存作业结果，即使已收到这些结果。

示例 4

C:\PS>$s = new-pssession -computername Server01, Server02, Server03

C:\PS> $j = invoke-command -session $s -scriptblock {start-job -scriptblock {get-eventlog -logname system}}

C:\PS> $j

Id   Name     State      HasMoreData   Location   Command
--   ----     -----      -----------   --------   -------
1    Job1     Completed  True          Localhost  get-eventlog system
2    Job2     Completed  True          Localhost  get-eventlog system
3    Job3     Completed  True          Localhost  get-eventlog system

C:\PS> $results = invoke-command -session $s -scriptblock {param($j) receive-job -job $j} -ArgumentList $j

说明
-----------
此示例说明如何获取在三台远程计算机上运行的后台作业的结果。

第一个命令使用 New-PSSession cmdlet 创建三个 PSSession，分别位于命令中指定的每台服务器上。PSSession 保存在 $s 变量中。

第二个命令使用 Invoke-Command cmdlet 在 $s 变量中的每个 PSSession 中运行一个 Start-Job 命令。此作业运行一个获取系统日志中的事件的 Get-Eventlog 命令。该命令将结果保存在 $j 变量中。

由于该命令使用 Invoke-Command 来运行 Start-Job 命令，因此它实际上在三台计算机中的每一台上启动了三个独立的作业。因此，该命令返回了三个作业对象来表示在三台不同计算机本地运行的三个作业。

第三个命令显示 $j 中的三个作业对象。

第四个命令使用 Invoke-Command 在 $s 中的每个 PSSession 中运行 Receive-Job 命令，并将结果保存到 $results 变量中。

由于 $j 是局部变量，因此脚本块使用“param”关键字来声明命令中的变量，并使用 ArgumentList 参数来提供 $j 的值。

另请参阅

  • about_Jobs
  • about_Job_Details
  • about_Remote_Jobs
  • Start-Job
  • Get-Job
  • Wait-Job
  • Stop-Job
  • Remove-Job
  • Invoke-Command


Register-EngineEvent

订阅由 Windows PowerShell 引擎以及由 New-Event cmdlet 生成的事件。

语法

Register-EngineEvent [-SourceIdentifier] <string> [[-Action] <scriptblock>] [-Forward] [-MessageData <psobject>] [-SupportEvent] [<CommonParameters>]

说明

Register-EngineEvent cmdlet 订阅由 Windows PowerShell 引擎以及由 New-Event cmdlet 生成的事件。使用 SourceIdentifier 参数指定事件。

可以使用此 cmdlet 来订阅“Exiting”引擎事件以及由 New-Event cmdlet 生成的事件。这些事件将自动添加到会话中的事件队列，而无需订阅。但是，订阅允许您转发事件，指定操作来响应事件以及取消订阅。

当引发订阅的事件时，该事件将添加到会话中的事件队列。若要获取事件队列中的事件，请使用 Get-Event cmdlet。

订阅事件时，会向会话中添加一个事件订阅程序。若要获取会话中的事件订阅程序，请使用 Get-EventSubscriber cmdlet。若要取消订阅，请使用 Unregister-Event cmdlet，该 cmdlet 将从会话中删除事件订阅程序。

参数

-Action <scriptblock>

指定用于处理事件的命令。Action 中的命令在引发事件时运行，而不将事件发送到事件队列。用大括号 ({ }) 括起命令以形成脚本块。

Action 参数的值可以包含 $Event、$EventSubscriber、$Sender、$SourceEventArgs 和 $SourceArgs 自动变量，这些变量为 Action 脚本块提供有关事件的信息。有关详细信息，请参阅 about_Automatic_Variables。

指定操作时，Register-EngineEvent 会返回一个表示该操作的事件作业对象。可以使用 Job cmdlet 来管理事件作业。

是否为必需？ | false
位置？ | 102
默认值 | 无
是否接受管道输入？ | false
是否接受通配符？ | false

-Forward

将此订阅的事件发送到本地计算机上的会话。如果要在远程计算机或远程会话中注册事件，可使用此参数。

是否为必需？ | false
位置？ | named
默认值 | False
是否接受管道输入？ | false
是否接受通配符？ | false

-MessageData <psobject>

指定与事件关联的其他数据。此参数的值显示在事件对象的 MessageData 属性中。

是否为必需？ | false
位置？ | named
默认值 | 无
是否接受管道输入？ | false
是否接受通配符？ | false

-SourceIdentifier <string>

指定要订阅的事件的源标识符。该源标识符在当前会话中必须是唯一的。此参数是必需的。

此参数的值出现在订阅者对象以及与此订阅关联的所有事件对象的 SourceIdentifier 属性值中。

是否为必需？ | true
位置？ | 101
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-SupportEvent

隐藏事件订阅。在当前订阅是更复杂的事件注册机制的一部分并且不应单独发现时，可使用此参数。

若要查看或取消使用 SupportEvent 参数创建的订阅，请使用 Get-EventSubscriber 和 Unregister-Event cmdlet 的 Force 参数。

是否为必需？ | false
位置？ | named
默认值 | False
是否接受管道输入？ | false
是否接受通配符？ | false

<CommonParameters>

此 cmdlet 支持通用参数：-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。有关详细信息，请参阅 about_Commonparameters.

输入和输出

输入类型是指可通过管道传递给 cmdlet 的对象的类型。返回类型是指 Cmdlet 所返回对象的类型。

输入 | None 不能通过管道将输入传递给 Register-EngineEvent。
输出 | None 或 System.Management.Automation.PSEventJob 如果使用 Action 参数，则 Register-EngineEvent 返回 System.Management.Automation.PSEventJob 对象。否则，将不产生任何输出。

说明

事件、事件订阅和事件队列仅存在于当前会话中。如果关闭当前会话，将丢弃事件队列并取消事件订阅。

示例 1

C:\PS>$s = new-pssession -computername Server01, Server02

C:\PS> invoke-command -session $s { Register-EngineEvent -sourceIdentifier ([System.Management.Automation.PsEngineEvent]::Exiting) -forward }

说明
-----------
此命令在两台远程计算机上注册 Windows PowerShell 引擎事件。

第一个命令在每台远程计算机上创建一个 PSSession。

第二个命令使用 Invoke-Command cmdlet 在远程会话中运行 Register-EngineEvent 命令。

Register-EngineEvent 命令使用 SourceIdentifier 参数来标识事件。它使用 Forward 参数将事件从远程会话转发到本地会话。

示例 2

C:\PS>$j = register-engineEvent -sourceIdentifier PowerShell.ProcessCreated -action { $processName | add-content processLog.txt }

C:\PS> get-event

C:\PS> $results = $j | receive-job

C:\PS> unregister-event PowerShell.ProcessCreated

说明
-----------
此命令演示了如何使用 Job cmdlet 来管理当使用 Action 参数时 Register-EngineEvent 返回的事件作业对象。

可以像管理任何其他 Windows PowerShell 作业那样管理事件作业。有关详细信息，请参阅 about_jobs。在此示例中，使用 Receive-Job cmdlet 获取作业的结果。

若要从会话中删除作业，请使用 Remove-Job。若要取消事件订阅，请使用 Unregister-Event cmdlet。若要删除事件队列中的事件，请使用 Remove-Event。

另请参阅

  • Register-ObjectEvent
  • Register-WmiEvent
  • Unregister-Event
  • Get-Event
  • New-Event
  • Remove-Event
  • Wait-Event
  • Get-Job
  • Receive-Job
  • Remove-Job
  • Wait-Job


Register-ObjectEvent

订阅由 Microsoft .NET Framework 对象生成的事件。

语法

Register-ObjectEvent [-InputObject] <psobject> [-EventName] <string> [[-SourceIdentifier] <string>] [[-Action] <scriptblock>] [-Forward] [-MessageData <psobject>] [-SupportEvent] [<CommonParameters>]

说明

Register-ObjectEvent cmdlet 订阅由本地计算机或远程计算机上的 .NET Framework 对象生成的事件。

当引发订阅的事件时，该事件将添加到会话中的事件队列。若要获取事件队列中的事件，请使用 Get-Event cmdlet。

可以使用 Register-ObjectEvent 的参数指定可帮助您在队列中标识事件的事件属性值。还可以使用 Action 参数指定当引发订阅的事件时要采取的操作，以及使用 Forward 参数将远程事件发送到本地会话中的事件队列。

订阅事件时，会向会话中添加一个事件订阅者。若要获取会话中的事件订阅程序，请使用 Get-EventSubscriber cmdlet。若要取消订阅，请使用 Unregister-Event cmdlet，该 cmdlet 将从会话中删除事件订阅程序。

参数

-Action <scriptblock>

指定用于处理事件的命令。Action 中的命令在引发事件时运行，而不将事件发送到事件队列。用大括号 ({ }) 括起命令以形成脚本块。

Action 参数的值可以包含 $Event、$EventSubscriber、$Sender、$SourceEventArgs 和 $SourceArgs 自动变量，这些变量为 Action 脚本块提供有关事件的信息。有关详细信息，请参阅 about_Automatic_Variables。

指定操作时，Register-ObjectEvent 会返回一个表示该操作的事件作业对象。可以使用 Job cmdlet 来管理事件作业。

是否为必需？ | false
位置？ | 102
默认值 | None.
是否接受管道输入？ | false
是否接受通配符？ | false

-EventName <string>

指定要订阅的事件。请输入事件名称。此参数是必需的。

此参数的值不是您为事件订阅选择的名称，而是 .NET Framework 对象公开的事件名称。例如，ManagementEventWatcher 类具有名为“EventArrived”和“Stopped”的事件。若要查找事件的事件名称，请使用 Get-Member cmdlet。

是否为必需？ | true
位置？ | 2
默认值 | 无
是否接受管道输入？ | false
是否接受通配符？ | false

-Forward

将此订阅的事件发送到远程会话。如果要在远程计算机或远程会话中注册事件，可使用此参数。

是否为必需？ | false
位置？ | named
默认值 | False
是否接受管道输入？ | false
是否接受通配符？ | false

-InputObject <psobject>

指定生成事件的 .NET Framework 对象。输入一个包含对象的变量，或键入可获取对象的命令或表达式。此参数是必需的。

是否为必需？ | true
位置？ | 1
默认值 | 无
是否接受管道输入？ | false
是否接受通配符？ | false

-MessageData <psobject>

指定将与此事件订阅关联的任何额外数据。此参数的值出现在与此订阅关联的所有事件的 MessageData 属性中。

是否为必需？ | false
位置？ | named
默认值 | 无
是否接受管道输入？ | false
是否接受通配符？ | false

-SourceIdentifier <string>

指定您为订阅选择的名称。您选择的名称必须在当前会话中唯一。默认值为 Windows PowerShell 指定的 GUID。

此参数的值出现在订阅方对象以及与此订阅关联的所有事件对象的 SourceIdentifier 属性值中。

是否为必需？ | false
位置？ | 101
默认值 | GUID
是否接受管道输入？ | false
是否接受通配符？ | false

-SupportEvent

隐藏事件订阅。在当前订阅是更复杂的事件注册机制的一部分并且不应单独发现时，可使用此参数。

若要查看或取消使用 SupportEvent 参数创建的订阅，请使用 Get-EventSubscriber 和 Unregister-Event cmdlet 的 Force 参数。

是否为必需？ | false
位置？ | named
默认值 | False
是否接受管道输入？ | false
是否接受通配符？ | false

<CommonParameters>

此 cmdlet 支持通用参数：-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。有关详细信息，请参阅 about_Commonparameters.

输入和输出

输入类型是指可通过管道传递给 cmdlet 的对象的类型。返回类型是指 Cmdlet 所返回对象的类型。

输入 | None 不能通过管道将对象传递给 Register-ObjectEvent。
输出 | None 此 cmdlet 将不产生任何输出。

说明

事件、事件订阅和事件队列仅存在于当前会话中。如果关闭当前会话，将丢弃事件队列并取消事件订阅。

示例 1

C:\PS>$query = New-Object System.Management.WqlEventQuery "__InstanceCreationEvent", (New-Object TimeSpan 0,0,1), "TargetInstance isa 'Win32_Process'"

C:\PS> $processWatcher = New-Object System.Management.ManagementEventWatcher $query

C:\PS> register-objectEvent -inputObject $processWatcher -eventName "EventArrived"

说明
-----------
此示例订阅启动新进程时生成的事件。

该命令使用 ManagementEventWatcher 对象获取 EventArrived 事件。查询对象指定这些事件是 Win32_Process 类的实例创建事件。

示例 2

C:\PS>$query = New-Object System.Management.WqlEventQuery "__InstanceCreationEvent", (New-Object TimeSpan 0,0,1), "TargetInstance isa 'Win32_Process'"

C:\PS> $processWatcher = New-Object System.Management.ManagementEventWatcher $query

C:\PS> $action = { New-Event "PowerShell.ProcessCreated" -Sender $sender -EventArguments $SourceEventArgs.NewEvent.TargetInstance }

C:\PS> register-objectEvent -inputObject $processWatcher -eventName "EventArrived" -action $action

Id    Name            State      HasMoreData     Location             Command
--    ----            -----      -----------     --------             -------
2     422cfe5a-65e... Running    True                                 New-Event "PowerShe...

说明
-----------
此示例演示了如何指定操作来响应事件。如果指定操作，则引发的事件不会添加到事件队列中，而是由该操作对事件进行响应。

在此示例中，当引发指示新进程已启动的实例创建事件时，便会引发新 ProcessCreated 事件。

操作使用仅针对事件操作填充的 $Sender 和 $SourceEventArgs 自动变量。

Register-ObjectEvent 命令返回表示操作的作业对象，该操作作为后台作业运行。可以使用 Job cmdlet（如 Get-Job 和 Receive-Job）来管理该后台作业。

有关详细信息，请参阅 about_Jobs。

示例 3

C:\PS>$s = new-pssession -computername Server01, Server02

C:\PS> invoke-command -session $s -filepath ProcessCreationEvent.ps1

C:\PS> invoke-command -session $s { get-event }

# ProcessCreationEvent.ps1

function Enable-ProcessCreationEvent
{
   $query = New-Object System.Management.WqlEventQuery "__InstanceCreationEvent", `
       (New-Object TimeSpan 0,0,1), `
       "TargetInstance isa 'Win32_Process'"
   $processWatcher = New-Object System.Management.ManagementEventWatcher $query

   $identifier = "WMI.ProcessCreated"
   Register-ObjectEvent -input $processWatcher -eventName "EventArrived" `
      -sourceIdentifier $identifier -messageData "Test" -forward
   }
}

EnableProcessCreationEvent

说明
-----------
此示例演示了如何订阅远程计算机上的对象事件。

第一个命令在两台远程计算机上创建 PSSession 并将它们保存在 $s 变量中。

第二个命令使用 Invoke-Command cmdlet 的 FilePath 参数在 $s 的每个 PSSession 中运行 ProcessCreationEvent.ps1 脚本。

该脚本包括 Register-ObjectEvent 命令，该命令通过 ManagementEventWatcher 对象及其 EventArrived 事件订阅 Win32_Process 对象上的实例创建事件。

示例 4

C:\PS>$timer  = New-Object Timers.Timer

C:\PS> $timer.Interval = 500

C:\PS> $job = Register-ObjectEvent -inputObject $timer -eventName Elapsed -sourceIdentifier Timer.Random -Action {$random = Get-Random -Min 0 -Max 100}

C:\PS> $job.gettype().fullname
System.Management.Automation.PSEventJob

C:\PS> $job | format-list -property *

State         : Running
Module        : __DynamicModule_6b5cbe82-d634-41d1-ae5e-ad7fe8d57fe0
StatusMessage :
HasMoreData   : True
Location      :
Command       : $random = Get-Random -Min 0 -Max 100
JobStateInfo  : Running
Finished      : System.Threading.ManualResetEvent
InstanceId    : 88944290-133d-4b44-8752-f901bd8012e2
Id            : 1
Name          : Timer.Random
ChildJobs     : {}
...

C:\PS> $timer.Enabled = $true

C:\PS> & $job.module {$random}
60

C:\PS> & $job.module {$random}
47

说明
-----------
此示例说明如何在事件注册中包含 Action 时创建的 PSEventJob 对象中使用动态模块。

第一条命令使用 New-Object cmdlet 创建一个计时器对象。第二条命令将计时器间隔设置为 500（毫秒）。

第三条命令使用 Register-ObjectEvent cmdlet 注册该计时器对象的 Elapsed 事件。该命令包含处理该事件的操作。每当经过该计时器间隔时，就会引发一个事件并运行操作中的命令。在此示例中，Get-Random cmdlet 生成一个介于 0 和 100 之间的随机数，并将其保存在 $random 变量中。

在 Register-ObjectEvent 命令中使用 Action 参数时，该命令返回表示该操作的 PSEventJob 对象。该命令将作业对象保存在 $job 变量中。

Register-ObjectEvent cmdlet 返回的 PSEventJob 对象也包含在事件订阅者的 Action 属性中。有关详细信息，请参阅 Get-EventSubscriber。

第四条命令显示 $job 变量包含 PSEventJob 对象。第五条命令使用 Format-List cmdlet 在列表中显示 PSEventJob 对象的所有属性。

PSEventJob 具有 Module 属性，该属性包含实现该操作的动态脚本模块。

第六条命令启用计时器。

其余的命令使用调用运算符 (&) 调用模块中的命令并显示 $random 变量的值。您可以使用调用运算符调用模块中的任何命令，包括未导出的命令。在此示例中，这些命令显示 Elapsed 事件发生时所生成的随机数。

有关模块的详细信息，请参阅 about_Modules。

另请参阅

  • Register-EngineEvent
  • Register-WmiEvent
  • Unregister-Event
  • Get-Event
  • New-Event
  • Remove-Event
  • Wait-Event


Register-PSSessionConfiguration

创建并注册新的会话配置。

语法

Register-PSSessionConfiguration [-AssemblyName] <string> [-ConfigurationTypeName] <string> [-ApplicationBase <string>] [-Name] <string> [-Force] [-MaximumReceivedDataSizePerCommandMB <double>] [-MaximumReceivedObjectSizeMB <double>] [-NoServiceRestart] [-ProcessorArchitecture <string>] [-SecurityDescriptorSDDL <string>] [-ShowSecurityDescriptorUI] [-StartupScript <string>] [-ThreadApartmentState {<STA> | <MTA> | <Unknown>}] [-ThreadOptions {<Default> | <UseNewThread> | <ReuseThread> | <UseCurrentThread>}] [-Confirm] [-WhatIf] [<CommonParameters>]

说明

Register-PSSessionConfiguration cmdlet 用于在本地计算机上创建并注册新的会话配置。这是一个高级 cmdlet，供系统管理员为其用户管理自定义会话配置时使用。

每个 Windows PowerShell 远程会话都使用一个会话配置。当用户创建连接到计算机的会话时，可以选择一个配置或使用在启用 Windows PowerShell 远程处理时注册的默认配置。用户还可以设置 $PSSessionConfigurationName 首选项变量，该变量为当前会话中创建的会话指定默认配置。

会话配置用于为会话配置环境。可以使用实现新配置类的程序集以及使用会话中运行的脚本来定义配置。配置可以确定哪些命令在会话中可用，它可以包含一些保护计算机的设置，例如限制会话可在单个对象或命令中远程接收到的数据量的设置。您还可以指定一个安全描述符，用于确定使用配置所需的权限。

参数

-ApplicationBase <string>

指定在 AssemblyName 参数值中指定的程序集文件 (*.dll) 的路径。当 AssemblyName 参数的值中不包含路径时使用此参数。默认值为当前目录。

是否为必需？ | false
位置？ | named
默认值 | Current directory
是否接受管道输入？ | false
是否接受通配符？ | false

-AssemblyName <string>

指定定义配置类型的程序集文件 (*.dll) 的名称。您可以在此参数中或在 ApplicationBase 参数的值中指定该 .dll 的路径。

此参数在指定了 ConfigurationTypeName 参数时是必需的。

是否为必需？ | true
位置？ | 2
默认值 | 无
是否接受管道输入？ | false
是否接受通配符？ | false

-ConfigurationTypeName <string>

指定用于此配置的 Microsoft .NET Framework 类型的完全限定名称。指定的类型必须实现 System.Management.Automation.Remoting.PSSessionConfiguration 类。

要指定实现配置类型的程序集文件 (.dll)，请使用 AssemblyName 和 AssemblyBase 参数。

通过创建类型，您可以控制会话配置的更多方面，例如公开或隐藏 cmdlet 的某些参数或设置用户不能重写的数据大小和对象大小限制。

如果省略此参数，则将 DefaultRemotePowerShellConfiguration 类用于会话配置。

是否为必需？ | true
位置？ | 3
默认值 | System.Management.Automation.Remoting.PSSessionConfiguration
是否接受管道输入？ | false
是否接受通配符？ | false

-Force

禁止显示所有用户提示，并重新启动 WinRM 服务而不显示提示。重新启动服务将使配置更改生效。

若要阻止重新启动并禁止显示重新启动提示，请使用 NoServiceRestart 参数。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-MaximumReceivedDataSizePerCommandMB <double>

限制可在任何单个远程命令中发送给此计算机的数据量。输入以兆字节 (MB) 为单位的数据大小。默认值是 50 MB。

如果 ConfigurationTypeName 参数中指定的配置类型定义了数据大小限制，则使用该配置类型中的限制，而忽略此参数的值。

是否为必需？ | false
位置？ | named
默认值 | 50
是否接受管道输入？ | false
是否接受通配符？ | false

-MaximumReceivedObjectSizeMB <double>

限制可在任何单个对象中发送给此计算机的数据量。输入以兆字节 (MB) 为单位的数据大小。默认值是 10 MB。

如果 ConfigurationTypeName 参数中指定的配置类型定义了对象大小限制，则使用该配置类型中的限制，而忽略此参数的值。

是否为必需？ | false
位置？ | named
默认值 | 10
是否接受管道输入？ | false
是否接受通配符？ | false

-Name <string>

指定会话配置的名称。此参数是必需的。

是否为必需？ | true
位置？ | 1
默认值 | 无
是否接受管道输入？ | false
是否接受通配符？ | false

-NoServiceRestart

不重新启动 WinRM 服务，并且禁止提示重新启动该服务。

默认情况下，当您输入 Register-PSSessionConfiguration 命令时，系统会提示您重新启动 WinRM 服务以使新的会话配置生效。在重新启动 WinRM 服务之前，新的会话配置不会生效。

若要重新启动 WinRM 服务并且不显示提示，请使用 Force 参数。若要手动重新启动 WinRM 服务，请使用 Restart-Service cmdlet。

是否为必需？ | false
位置？ | named
默认值 | False
是否接受管道输入？ | false
是否接受通配符？ | false

-ProcessorArchitecture <string>

指定配置的处理器体系结构。此值确定当使用配置时启动承载 Windows PowerShell 的进程的 32 位还是 64 位版本。有效值为 x86、AMD64 和 IA64。

默认值由承载会话配置的计算机的处理器体系结构确定。

是否为必需？ | false
位置？ | named
默认值 | The processor architecture of the host computer.
是否接受管道输入？ | false
是否接受通配符？ | false

-SecurityDescriptorSDDL <string>

指定配置的安全描述符定义语言 (SDDL) 字符串。

此字符串确定使用新的会话配置所需要的权限。要在会话中使用某个会话配置，用户对该配置必须至少拥有“执行(Invoke)”权限。

如果安全描述符过于复杂，可考虑使用 ShowSecurityDescriptorUI 参数代替此参数。不能在同一个命令中同时使用这两个参数。

如果省略此参数，则将 WinRM 服务的根 SDDL 用于此配置。要查看或更改根 SDDL，请使用 WS-Management 提供程序。例如“get-item wsman:\localhost\service\rootSDDL”。有关 WS-Management 提供程序的详细信息，请键入“get-help wsman”。

是否为必需？ | false
位置？ | named
默认值 | The value of the root SDDL
是否接受管道输入？ | false
是否接受通配符？ | false

-ShowSecurityDescriptorUI

显示可帮助您为会话配置创建 SDDL 的属性表。在输入 Register-PSSessionConfiguration 命令并重新启动 WinRM 服务后，该属性表将显示出来。

在设置配置的权限时，需记住用户必须至少具有“执行(Invoke)”权限才能在会话中使用该会话配置。

不能在同一个命令中同时使用 SecurityDescriptorSDDL 参数和此参数。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-StartupScript <string>

指定 Windows PowerShell 脚本的完全限定路径。指定的脚本在使用会话配置的新会话中运行。

您可以使用该脚本进一步配置会话。如果脚本产生错误（甚至非终止错误），则不会创建会话，并且导致用户的 New-PSSession 命令失败。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-ThreadApartmentState <ApartmentState>

确定会话中的线程的单元状态。有效值为 STA、MTA 和 Unknown。默认值为 Unknown。

是否为必需？ | false
位置？ | named
默认值 | Unknown
是否接受管道输入？ | false
是否接受通配符？ | false

-ThreadOptions <PSThreadOptions>

定义在会话中执行命令时如何创建和使用线程。有效值为 Default、ReuseThread、UseCurrentThread 和 UseNewThread。默认值为 UseCurrentThread。

是否为必需？ | false
位置？ | named
默认值 | UseCurrentThread
是否接受管道输入？ | false
是否接受通配符？ | false

-Confirm

在执行命令之前提示您进行确认。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-WhatIf

描述如果执行该命令会发生什么情况（无需实际执行该命令）。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

<CommonParameters>

此 cmdlet 支持通用参数：-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。有关详细信息，请参阅 about_Commonparameters.

输入和输出

输入类型是指可通过管道传递给 cmdlet 的对象的类型。返回类型是指 Cmdlet 所返回对象的类型。

输入 | None 不能通过管道将输入传递给此 cmdlet。
输出 | Microsoft.WSMan.Management.WSManConfigContainerElement

说明

若要在 Windows Vista、Windows Server 2008 以及更高版本的 Windows 上运行此 cmdlet，您必须使用“以管理员身份运行”选项启动 Windows PowerShell。

此 cmdlet 生成代表 Web Services for Management (WS-Management) 插件配置的 XML，并将该 XML 发送给 WS-Management，然后由 WS-Management 将该插件注册到本地计算机中（“new-item wsman:\localhost\plugin”）。

示例 1

C:\PS>register-pssessionConfiguration -name NewShell -applicationBase c:\MyShells\ -assemblyName MyShell.dll -configurationTypeName MyClass

说明
-----------
此命令注册 NewShell 会话配置。它使用 ApplicationName 和 ApplicationBase 参数指定 MyShell.dll 文件的位置，该文件用于指定会话配置中的 cmdlet 和提供程序。该命令还使用 ConfigurationTypeName 参数指定可进一步配置会话的新类。

要使用此配置，用户可键入“new-pssession -configurationname newshell”。

示例 2

C:\PS>register-pssessionConfiguration -name MaintenanceShell -startupScript c:\ps-test\Maintenance.ps1

说明
-----------
此命令用于在本地计算机上注册 MaintenanceShell 配置。该命令使用 StartupScript 参数来指定 Maintenance.ps1 脚本。

如果用户使用 New-PSSession 命令并选择 MaintenanceShell 配置，则 Maintenance.ps1 脚本将在新会话中运行。该脚本可以配置会话，包括导入模块、添加 Windows PowerShell 管理单元以及设置会话的执行策略。如果脚本产生任何错误（包括非终止错误），则 New-PSSession 命令将失败。

示例 3

C:\PS>$sddl = "O:NSG:BAD:P(A;;GA;;;BA)S:P(AU;FA;GA;;;WD)(AU;FA;SA;GWGX;;WD)"

C:\PS> register-pssessionconfiguration -name AdminShell -securityDescriptorSDDL $sddl -maximumReceivedObjectSizeMB 20 -startupScript c:\scripts\AdminShell.ps1

说明
-----------
此示例注册 AdminShell 会话配置。

第一个命令将自定义 SDDL 保存在 $sddl 变量中。

第二个命令注册新的 shell。该命令使用 SecurityDescritorSDDL 参数指定 $sddl 变量值中的 SDDL，并使用 MaximumReceivedObjectSizeMB 参数增加对象大小限制。该命令还使用 StartupScript 参数指定用于配置会话的脚本。

作为使用 SecurityDescriptorSDDL 参数的替代方法，还可以使用 ShowSecurityDescriptorUI 参数，该参数将显示可用于为会话配置设置权限的属性表。当您单击属性表中的“确定”时，该工具会为会话配置生成一个 SDDL。

示例 4

C:\PS>$s = register-pssessionConfiguration -name MaintenanceShell -startupScript c:\ps-test\Maintenance.ps1

C:\PS> $s

   WSManConfig: Microsoft.WSMan.Management\WSMan::localhost\Plugin

Name                      Type                 Keys
----                      ----                 ----
MaintenanceShell          Container            {Name=MaintenanceShell}

C:\PS> $s.getType().fullname
TypeName: Microsoft.WSMan.Management.WSManConfigContainerElement

C:\PS> $s | format-list -property *

PSPath            : Microsoft.WSMan.Management\WSMan::localhost\Plugin\MaintenanceShell
PSParentPath      : Microsoft.WSMan.Management\WSMan::localhost\Plugin
PSChildName       : MaintenanceShell
PSDrive           : WSMan
PSProvider        : Microsoft.WSMan.Management\WSMan
PSIsContainer     : True
Keys              : {Name=MaintenanceShell}
Name              : MaintenanceShell
TypeNameOfElement : Container

C:\PS> dir wsman:\localhost\plugin

Name                      Type                 Keys
----                      ----                 ----
MaintenanceShell          Container            {Name=MaintenanceShell}
microsoft.powershell      Container            {Name=microsoft.powershell}
microsoft.powershell32    Container            {Name=microsoft.powershell32}

说明
-----------
此示例演示 Register-PSSessionConfiguration 将返回 WSManConfigContainerElement。另外，还演示了如何查找 WSMan: 驱动器中的容器元素。

第一个命令使用 Register-PSSessionConfiguration cmdlet 注册 MaintenanceShell 配置。该命令将 cmdlet 返回的对象保存在 $s 变量中。

第二个命令显示 $s 变量的内容。

第三个命令使用 GetType 方法及其 FullName 属性显示 Register-PSSessionConfiguration 所返回的对象的类型名称。

第四个命令使用 Format-List cmdlet 以列表形式显示 Register-PSSessionConfiguration 所返回的对象的所有属性。PSPath 属性显示该对象存储在 WSMan: 驱动器的一个目录中。

第五个命令使用 Get-ChildItem cmdlet 显示 WSMan:\LocalHost\PlugIn 路径中的项目。这些项目包括新的 MaintenanceShell 配置以及随 Windows PowerShell 一起提供的两个默认配置。

示例 5

C:\PS>register-pssessionconfiguration -name WithProfile -startupScript add-profile.ps1

# Add-Profile.ps1

. c:\users\admin01\documents\windowspowershell\profile.ps1

说明
-----------
此命令在本地计算机上创建并注册 WithProfile 会话配置。该命令使用 StartupScript 参数指示 Windows PowerShell 在使用该会话配置的任何会话中运行指定的脚本。

另外，还将显示指定脚本 Add-Profile.ps1 的内容。该脚本只包含一个命令，该命令使用点“.”获得来源在会话的当前范围内运行用户的 CurrentUserAllHosts 配置文件。

有关配置文件的详细信息，请参阅 about_Profiles。有关使用点“.”获得来源的详细信息，请参阅 about_Scopes。

另请参阅

  • about_Session_Configurations
  • Disable-PSSessionConfiguration
  • Enable-PSSessionConfiguration
  • Get-PSSessionConfiguration
  • Set-PSSessionConfiguration
  • Unregister-PSSessionConfiguration
  • WSMan Provider


Register-WmiEvent

订阅 Windows Management Instrumentation (WMI) 事件。

语法

Register-WmiEvent [-类] <string> [[-SourceIdentifier] <string>] [[-Action] <scriptblock>] [-ComputerName <string>] [-Credential <PSCredential>] [-Forward] [-MessageData <psobject>] [-命名空间 <string>] [-SupportEvent] [-Timeout <Int64>] [<CommonParameters>]

Register-WmiEvent [-Query] <string> [[-SourceIdentifier] <string>] [[-Action] <scriptblock>] [-ComputerName <string>] [-Credential <PSCredential>] [-Forward] [-MessageData <psobject>] [-命名空间 <string>] [-SupportEvent] [-Timeout <Int64>] [<CommonParameters>]

说明

Register-WmiEvent cmdlet 订阅本地计算机或远程计算机上的 WMI 事件。

当引发订阅的 WMI 事件时，会将该事件添加到本地会话的事件队列中，即使该事件是在远程计算机上发生的也是如此。若要获取事件队列中的事件，请使用 Get-Event cmdlet。

您可以使用 Register-WmiEvent 的参数订阅远程计算机上的事件，并可以指定这些事件的属性值，这可帮助您在队列中标识这些事件。此外，您还可以使用 Action 参数指定引发订阅的事件时要执行的操作。

订阅事件时，会向会话中添加一个事件订阅程序。若要获取会话中的事件订阅程序，请使用 Get-EventSubscriber cmdlet。若要取消订阅，请使用 Unregister-Event cmdlet，该 cmdlet 将从会话中删除事件订阅程序。

参数

-Action <scriptblock>

指定用于处理事件的命令。Action 参数中的命令在引发事件时运行，而不是将该事件发送到事件队列。用大括号 ({ }) 括起命令以形成脚本块。

Action 参数的值可以包含 $Event、$EventSubscriber、$Sender、$SourceEventArgs 和 $SourceArgs 自动变量，这些变量为 Action 脚本块提供有关事件的信息。有关详细信息，请参阅 about_Automatic_Variables。

指定操作时，Register-WmiEvent 会返回一个表示该操作的事件作业对象。可以使用包含 Job 名词的 cmdlet (Job cmdlet) 来管理事件作业。

是否为必需？ | false
位置？ | 102
默认值 | The event is added to the event queue.
是否接受管道输入？ | false
是否接受通配符？ | false

-类 <string>

指定要订阅的事件。请输入用于生成这些事件的 WMI 类。每个命令中都需要 Class 或 Query 参数。

是否为必需？ | true
位置？ | 1
默认值 | 无
是否接受管道输入？ | false
是否接受通配符？ | false

-ComputerName <string>

指定远程计算机。默认值为本地计算机。请输入 NetBIOS 名称、IP 地址或完全限定的域名。

是否为必需？ | false
位置？ | named
默认值 | Local computer
是否接受管道输入？ | false
是否接受通配符？ | false

-Credential <PSCredential>

指定有权执行此操作的用户帐户。键入用户名，例如“User01”或“Domain01\User01”。或者，输入 PSCredential 对象，例如来自 Get-Credential cmdlet 的对象。如果键入用户名，则将提示您输入密码。

是否为必需？ | false
位置？ | named
默认值 | The credentials of the current user
是否接受管道输入？ | false
是否接受通配符？ | false

-Forward

将此订阅的事件发送到本地计算机上的会话。如果要在远程计算机或远程会话中注册事件，可使用此参数。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-MessageData <psobject>

指定将与此事件订阅关联的任何额外数据。此参数的值出现在与此订阅关联的所有事件的 MessageData 属性中。

是否为必需？ | false
位置？ | named
默认值 | None. The MessageData property is NULL.
是否接受管道输入？ | false
是否接受通配符？ | false

-命名空间 <string>

指定 WMI 类的命名空间。

是否为必需？ | false
位置？ | named
默认值 | 无
是否接受管道输入？ | false
是否接受通配符？ | false

-Query <string>

用标识 WMI 事件类的 WMI 查询语言 (WQL) 指定一个查询，如“select * from __InstanceDeletionEvent”。

是否为必需？ | true
位置？ | 1
默认值 | 无
是否接受管道输入？ | false
是否接受通配符？ | false

-SourceIdentifier <string>

指定您为订阅选择的名称。您选择的名称必须在当前会话中唯一。默认值为 Windows PowerShell 指定的 GUID。

此参数的值出现在订阅者对象以及与此订阅关联的所有事件对象的 SourceIdentifier 属性值中。

是否为必需？ | false
位置？ | 101
默认值 | GUID
是否接受管道输入？ | false
是否接受通配符？ | false

-SupportEvent

隐藏事件订阅。在当前订阅是更复杂的事件注册机制的一部分并且不应单独发现时，可使用此参数。

若要查看或取消使用 SupportEvent 参数创建的订阅，请使用 Get-EventSubscriber 和 Unregister-Event cmdlet 的 Force 参数。

是否为必需？ | false
位置？ | named
默认值 | False
是否接受管道输入？ | false
是否接受通配符？ | false

-Timeout <Int64>

确定 Windows PowerShell 等待此命令完成的时间长度。

默认值为 0（零），表示没有超时，这将导致 Windows PowerShell 无限期地等待。

是否为必需？ | false
位置？ | named
默认值 | 0
是否接受管道输入？ | false
是否接受通配符？ | false

<CommonParameters>

此 cmdlet 支持通用参数：-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。有关详细信息，请参阅 about_Commonparameters.

输入和输出

输入类型是指可通过管道传递给 cmdlet 的对象的类型。返回类型是指 Cmdlet 所返回对象的类型。

输入 | None 不能通过管道将对象传递给 Register-WmiEvent。
输出 | None 此 cmdlet 将不产生任何输出。

说明

要在 Windows Vista 或 Windows 的更高版本中使用此 cmdlet，必须使用“以管理员身份运行”选项启动 Windows PowerShell。

事件、事件订阅和事件队列仅存在于当前会话中。如果关闭当前会话，将丢弃事件队列并取消事件订阅。

示例 1

C:\PS>register-wmiEvent -class 'Win32_ProcessStartTrace' -sourceIdentifier "ProcessStarted"

说明
-----------
此命令订阅由 Win32_ProcessStartTrace 类生成的事件。只要进程启动，此类就会引发一个事件。

示例 2

C:\PS>register-wmiEvent -query "select * from __instancecreationevent within 5 where targetinstance isa 'win32_process'" -sourceIdentifier "WMIProcess" -messageData "Test 01" -timeout 500

说明
-----------
此命令使用一个查询订阅 Win32_process 实例创建事件。

示例 3

C:\PS>$action = { get-history | where { $_.commandline -like "*start-process*" } | export-cliXml "commandHistory.clixml" }

C:\PS> register-wmiEvent -class 'Win32_ProcessStartTrace' -sourceIdentifier "ProcessStarted" -action $action

Id    Name            State      HasMoreData   Location  Command
--    ----            -----      -----------   --------  -------
1     ProcessStarted  NotStarted False                   get-history | where {...

说明
-----------
此示例说明如何使用操作来响应事件。在本例中，当进程启动时，当前会话中的任何 Start-Process 命令都会写入一个 XML 文件中。

使用 Action 参数时，Register-WmiEvent 会返回一个表示事件操作的后台作业。您可以使用 Job cmdlet（如 Get-Job 和 Receive-Job）来管理事件作业。

有关详细信息，请参阅 about_Jobs。

示例 4

C:\PS>register-wmiEvent -class 'Win32_ProcessStartTrace' -sourceIdentifier "Start" -computername Server01

C:\PS> get-event -sourceIdentifier "Start"

说明
-----------
此示例注册远程计算机 Server01 上的事件。

WMI 将这些事件返回到本地计算机并将其存储在当前会话的事件队列中。要检索这些事件，请运行本地 Get-Event 命令。

另请参阅

  • Register-ObjectEvent
  • Register-EngineEvent
  • Unregister-Event
  • Get-Event
  • New-Event
  • Remove-Event
  • Wait-Event


Remove-Computer

从工作组或域中删除本地计算机。

语法

Remove-Computer [[-Credential] <PSCredential>] [-Force] [-PassThru] [-Confirm] [-WhatIf] [<CommonParameters>]

说明

Remove-Computer cmdlet 将本地计算机从其当前工作组或域中删除。

从域中删除计算机后，Remove-Computer 也会禁用该计算机的域帐户。

当计算机位于域中时，您必须提供凭据（即使是当前用户的凭据），并且必须重新启动计算机才能使更改生效。

要获取此命令的结果，请使用 Verbose 和 PassThru 参数。

参数

-Credential <PSCredential>

指定有权执行此操作的用户帐户。默认值为当前用户。

键入用户名，如“User01”或“Domain01\User01”；或输入 PSCredential 对象，如 Get-Credential cmdlet 生成的一个 PSCredential 对象。如果键入用户名，则将提示您输入密码。

要从域中删除计算机，必须使用 Credential 参数，即使使用的是当前用户的凭据也是如此。

是否为必需？ | false
位置？ | 2
默认值 | The credentials of the current user
是否接受管道输入？ | false
是否接受通配符？ | false

-Force

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-PassThru

返回命令的结果。否则，此 cmdlet 将不产生任何输出。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Confirm

在执行命令之前提示您进行确认。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-WhatIf

描述如果执行该命令会发生什么情况（无需实际执行该命令）。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

<CommonParameters>

此 cmdlet 支持通用参数：-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。有关详细信息，请参阅 about_Commonparameters.

输入和输出

输入类型是指可通过管道传递给 cmdlet 的对象的类型。返回类型是指 Cmdlet 所返回对象的类型。

输入 | None 不能通过管道将输入传递给此 cmdlet
输出 | Microsoft.PowerShell.Commands.ComputerChangeInfo 如果使用 PassThru 参数，则 Remove-Computer 返回 ComputerChangeInfo 对象。否则，此 cmdlet 将不产生任何输出。

示例 1

C:\PS>remove-computer

说明
-----------
此命令从工作组中删除计算机。

示例 2

C:\PS>remove-computer -credential domain01\admin01 -passthru -verbose; restart-computer

说明
-----------
这些命令将本地计算机从其所加入的域中删除。

第一条命令从域中删除计算机。该命令使用 Credential 参数提供域管理员的凭据。它使用 PassThru 参数和 Verbose 通用参数来显示有关该命令是成功还是失败的信息。

第二条命令使用 Restart-Computer cmdlet 重新启动计算机，这是完成删除操作所必需的。

这两条命令用分号 (;) 分隔。

另请参阅

  • Add-Computer
  • Checkpoint-Computer
  • Remove-Computer
  • Restart-Computer
  • Restore-Computer
  • Stop-Computer
  • Test-Connection


Remove-Event

删除事件队列中的事件。

语法

Remove-Event [-EventIdentifier] <int> [-Confirm] [-WhatIf] [<CommonParameters>]

Remove-Event [-SourceIdentifier] <string> [-Confirm] [-WhatIf] [<CommonParameters>]

说明

Remove-Event cmdlet 删除当前会话中事件队列中的事件。

此 cmdlet 仅删除当前位于队列中的事件。若要取消事件注册或取消订阅，请使用 Unregister-Event cmdlet。

参数

-EventIdentifier <int>

仅删除具有指定的事件标识符的事件。EventIdentifier 或 SourceIdentifier 参数在每个命令中都是必需的。

是否为必需？ | true
位置？ | 1
默认值 | 无
是否接受管道输入？ | true (ByPropertyName)
是否接受通配符？ | false

-SourceIdentifier <string>

仅删除具有指定的源标识符的事件。不允许使用通配符。EventIdentifier 或 SourceIdentifier 参数在每个命令中都是必需的。

是否为必需？ | true
位置？ | 1
默认值 | 无
是否接受管道输入？ | false
是否接受通配符？ | false

-Confirm

在执行命令之前提示您进行确认。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-WhatIf

描述如果执行该命令会发生什么情况（无需实际执行该命令）。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

<CommonParameters>

此 cmdlet 支持通用参数：-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。有关详细信息，请参阅 about_Commonparameters.

输入和输出

输入类型是指可通过管道传递给 cmdlet 的对象的类型。返回类型是指 Cmdlet 所返回对象的类型。

输入 | System.Management.Automation.PSEventArgs 可以通过管道将事件从 Get-Event 传递到 Remove-Event。
输出 | None 该 cmdlet 不产生任何输出。

说明

事件、事件订阅和事件队列仅存在于当前会话中。如果关闭当前会话，将丢弃事件队列并取消事件订阅。

示例 1

C:\PS>remove-event -sourceIdentifier "ProcessStarted"

说明
-----------
此命令从事件队列中删除源标识符为“Process Started”的事件。

示例 2

C:\PS>remove-event -eventIdentifier 30

说明
-----------
此命令从事件队列中删除事件 ID 为 30 的事件。

示例 3

C:\PS>get-event | remove-event

说明
-----------
此命令删除事件队列中的所有事件。

另请参阅

  • Register-ObjectEvent
  • Register-EngineEvent
  • Register-WmiEvent
  • Unregister-Event
  • Get-Event
  • New-Event
  • Remove-Event
  • Wait-Event


Remove-EventLog

删除事件日志或注销事件源。

语法

Remove-EventLog [-LogName] <string[]> [[-ComputerName] <string[]>] [-Confirm] [-WhatIf] [<CommonParameters>]

Remove-EventLog [[-ComputerName] <string[]>] [-Source <string[]>] [-Confirm] [-WhatIf] [<CommonParameters>]

说明

Remove-EventLog cmdlet 从本地或远程计算机中删除事件日志文件以及注销该日志的所有事件源。您还可以使用此 cmdlet 注销事件源，而无需删除任何事件日志。

包含 EventLog 名词的 cmdlet (EventLog cmdlet) 仅适用于传统事件日志。要从使用 Windows Vista 以及 Windows 更高版本中的 Windows 事件日志技术的日志中获取事件，请使用 Get-WinEvent。

参数

-ComputerName <string[]>

指定远程计算机。默认值为本地计算机。

键入远程计算机的 NetBIOS 名称、Internet 协议 (IP) 地址或完全限定的域名。要指定本地计算机，请键入计算机名称、句点 (.) 或“localhost”。

此参数不依赖于 Windows PowerShell 远程处理。即使您的计算机未配置为运行远程命令，您也可以使用 Remove-EventLog 的 ComputerName 参数。

是否为必需？ | false
位置？ | 2
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-LogName <string[]>

指定事件日志。输入一个或多个事件日志的日志名称（Log 属性的值，而不是 LogDisplayName），名称之间用逗号分隔。不允许使用通配符。此参数是必需的。

是否为必需？ | true
位置？ | 1
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Source <string[]>

注销指定的事件源。输入用逗号分隔的源名称（不是可执行文件名称）。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Confirm

在执行命令之前提示您进行确认。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-WhatIf

描述如果执行该命令会发生什么情况（无需实际执行该命令）。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

<CommonParameters>

此 cmdlet 支持通用参数：-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。有关详细信息，请参阅 about_Commonparameters.

输入和输出

输入类型是指可通过管道传递给 cmdlet 的对象的类型。返回类型是指 Cmdlet 所返回对象的类型。

输入 | None 不能通过管道将输入传递给此 cmdlet。
输出 | None 此 cmdlet 不返回任何输出。

说明

若要在 Windows Vista 以及 Windows 的更高版本上使用 Remove-EventLog，请使用“以管理员身份运行”选项启动 Windows PowerShell。

如果删除了事件日志然后又重新创建该日志，则无法注册相同的事件源。使用这些事件源将条目写入原始日志的应用程序将无法再写入新日志。

当注销特定日志的事件源时，该事件源将无法在其他事件日志中写入条目。

示例 1

C:\PS>remove-eventlog -logname MyLog

说明
-----------
此命令从本地计算机中删除 MyLog 事件日志并注销其事件源。

示例 2

C:\PS>remove-eventlog -logname MyLog, TestLog -computername Server01, Server02, localhost

说明
-----------
此命令从本地计算机（“localhost”）以及远程计算机 Server01 和 Server02 中删除 MyLog 和 TestLog 事件日志。该命令也将注销这些日志的事件源。

示例 3

C:\PS>remove-eventlog -source MyApp

说明
-----------
此命令从本地计算机上的日志中删除 MyApp 事件源。该命令完成后，MyApp 程序将无法写入任何事件日志。

示例 4

C:\PS>get-eventlog -list

  Max(K) Retain OverflowAction        Entries Log
  ------ ------ --------------        ------- ---
  15,168      0 OverwriteAsNeeded      22,923 Application
  15,168      0 OverwriteAsNeeded          53 DFS Replication
     512      7 OverwriteOlder              0 Directory Service
  15,168      7 OverwriteOlder              0 Hardware Events
     512      7 OverwriteOlder              0 Internet Explorer
  20,480      0 OverwriteAsNeeded           0 Key Management Service
  30,016      0 OverwriteAsNeeded      50,060 Security
  15,168      0 OverwriteAsNeeded      27,592 System
  15,360      0 OverwriteAsNeeded      18,355 Windows PowerShell
  15,168      7 OverwriteAsNeeded          12 ZapLog

C:\PS> remove-eventlog -logname ZapLog

C:\PS> get-eventlog -list

  Max(K) Retain OverflowAction        Entries Log
  ------ ------ --------------        ------- ---
  15,168      0 OverwriteAsNeeded      22,923 Application
  15,168      0 OverwriteAsNeeded          53 DFS Replication
     512      7 OverwriteOlder              0 Directory Service
  15,168      7 OverwriteOlder              0 Hardware Events
     512      7 OverwriteOlder              0 Internet Explorer
  20,480      0 OverwriteAsNeeded           0 Key Management Service
  30,016      0 OverwriteAsNeeded      50,060 Security
  15,168      0 OverwriteAsNeeded      27,592 System
  15,360      0 OverwriteAsNeeded      18,355 Windows PowerShell

说明
-----------
这些命令说明如何列出计算机上的事件日志并验证 Remove-EventLog 命令是否成功。

第一条命令列出本地计算机上的事件日志。

第二条命令删除 ZapLog 事件日志。

第三条命令重新列出事件日志。ZapLog 事件日志将不再显示在列表中。

示例 5

C:\PS>get-wmiobject win32_nteventlogfile -filter "logfilename='TestLog'" | foreach {$_.sources}

MyApp
TestApp

C:\PS> remove-eventlog -source MyApp

C:\PS> get-wmiobject win32_nteventlogfile -filter "logfilename='TestLog'} | foreach {$_.sources}
TestApp

说明
-----------
这些命令使用 Get-WmiObject cmdlet 列出本地计算机上的事件源。可以使用这些命令验证用于删除事件源的命令是否成功。

第一条命令获取本地计算机上 TestLog event 日志的事件源。MyApp 就是其中一个事件源。

第二条命令使用 Remove-EventLog 的 Source 参数删除 MyApp 事件源。

第三条命令与第一条命令相同。它显示 MyApp 事件源已删除。

另请参阅

  • Clear-EventLog
  • Get-EventLog
  • Limit-EventLog
  • New-EventLog
  • Remove-EventLog
  • Show-EventLog
  • Write-EventLog
  • Get-WinEvent


Remove-Item

删除指定项。

语法

Remove-Item [-LiteralPath] <string[]> [-Credential <PSCredential>] [-Exclude <string[]>] [-Filter <string>] [-Force] [-Include <string[]>] [-Recurse] [-Confirm] [-WhatIf] [-UseTransaction] [<CommonParameters>]

Remove-Item [-Path] <string[]> [-Credential <PSCredential>] [-Exclude <string[]>] [-Filter <string>] [-Force] [-Include <string[]>] [-Recurse] [-Confirm] [-WhatIf] [-UseTransaction] [<CommonParameters>]

说明

Remove-Item cmdlet 删除一个或多个项。由于许多提供程序都支持它，因此它可以删除多种不同类型的项，其中包括文件、目录、注册表项、变量、别名和函数。

参数

-Credential <PSCredential>

指定有权执行此操作的用户帐户。默认值为当前用户。

键入用户名，如“User01”或“Domain01\User01”；或输入 PSCredential 对象，如 Get-Credential cmdlet 生成的一个 PSCredential 对象。如果键入用户名，则将提示您输入密码。

随同 Windows PowerShell 一起安装的任何提供程序都不支持此参数。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | true (ByPropertyName)
是否接受通配符？ | false

-Exclude <string[]>

忽略指定项。此参数的值对 Path 参数进行限定。请输入路径元素或模式，例如“*.txt”。允许使用通配符。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Filter <string>

以提供程序的格式或语言指定筛选器。此参数的值对 Path 参数进行限定。筛选器的语法（包括通配符的使用）取决于提供程序。筛选器比其他参数更有效，因为提供程序是在检索对象时应用筛选器，而不是在检索对象后再由 Windows PowerShell 筛选对象。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Force

允许该 cmdlet 删除非此不能更改的项，如隐藏文件或只读文件，或者只读别名或变量。该 cmdlet 不能删除常量别名或变量。不同提供程序有不同的实现。有关详细信息，请参阅 about_Providers。即使使用 Force 参数，该 cmdlet 也无法覆盖安全限制。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Include <string[]>

只删除指定项。此参数的值对 Path 参数进行限定。请输入路径元素或模式，例如“*.txt”。允许使用通配符。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-LiteralPath <string[]>

指定要删除的项的路径。与 Path 不同，LiteralPath 的值严格按照所键入的形式使用。不会将任何字符解释为通配符。如果路径包括转义符，请将其括在单引号中。单引号会告知 Windows PowerShell 不要将所有字符都解释为转义序列。

是否为必需？ | true
位置？ | 1
默认值 |
是否接受管道输入？ | true (ByPropertyName)
是否接受通配符？ | false

-Path <string[]>

指定要删除的项的路径。允许使用通配符。参数名（“-Path”）为可选项。

是否为必需？ | true
位置？ | 1
默认值 |
是否接受管道输入？ | true (ByValue, ByPropertyName)
是否接受通配符？ | false

-Recurse

删除指定位置及这些位置的所有子项中的项。

此 cmdlet 中的 Recurse 参数不能正常工作。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Confirm

在执行命令之前提示您进行确认。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-WhatIf

描述如果执行该命令会发生什么情况（无需实际执行该命令）。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-UseTransaction

将命令包含在活动事务中。仅当正在执行事务时，此参数才有效。有关详细信息，请参阅 about_Transactions。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

<CommonParameters>

此 cmdlet 支持通用参数：-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。有关详细信息，请参阅 about_Commonparameters.

输入和输出

输入类型是指可通过管道传递给 cmdlet 的对象的类型。返回类型是指 Cmdlet 所返回对象的类型。

输入 | System.String 可以通过管道将包含路径（但不是文本路径）的字符串传递给 Remove-Item。
输出 | None 此 cmdlet 不返回任何输出。

说明

也可以通过 Remove-Item 的任何内置别名“del”、“erase”、“rmdir”、“rd”、“ri”或“rm”来对其进行引用。有关详细信息，请参阅 about_Aliases。

Remove-Item cmdlet 用于处理由任何提供程序公开的数据。要列出会话中可用的提供程序，请键入“Get-PsProvider”。有关详细信息，请参阅 about_Providers。

示例 1

C:\PS>remove-item C:\Test\*.*

说明
-----------
此命令将从 C:\Test 目录中删除所有名称中包括点 (.) 的文件。因为此命令指定了点，所以它不会删除目录和不带文件扩展名的文件。

示例 2

C:\PS>remove-item * -include *.doc -exclude *1*

说明
-----------
此命令将从当前目录中删除所有文件扩展名为 .doc 且名称中不包括“1”的文件。它使用通配符 (*) 来指定当前目录的内容。它使用 Include 和 Exclude 参数来指定要删除的文件。

示例 3

C:\PS>remove-item -path C:\Test\hidden-RO-file.txt -force

说明
-----------
此命令将删除隐藏且为只读的文件。它使用 Path 参数来指定文件。它使用 Force 参数来授予删除文件的权限。如果未使用 Force，您将无法删除只读或隐藏文件。

示例 4

C:\PS>get-childitem * -include *.csv -recurse | remove-item

说明
-----------
此命令将以递归方式删除当前目录及其所有子目录中的所有 CSV 文件。

因为此 cmdlet 中的 Recurse 参数存在错误，所以此命令将使用 Get-Childitem cmdlet 来获取所需的文件，并使用管道运算符将这些文件传递给 Remove-Item cmdlet。

在 Get-ChildItem 命令中，Path 参数的值为 *，该值代表当前目录的内容。此命令使用 Include 参数来指定 CSV 文件类型，使用 Recurse 参数指定以递归形式进行检索。

如果您尝试在路径中指定文件类型，如“-path *.csv”，那么此 cmdlet 将把搜索对象解释为没有子项的文件，递归检索将失败。

示例 5

C:\PS>remove-item hklm:\software\mycompany\OldApp -recurse

说明
-----------
此命令删除 OldApp 注册表项及其所有子项和值。它使用 Remove-Item cmdlet 删除此注册表项。指定了路径，但是省略了可选的参数名 (Path)。

Recurse 参数可递归删除 OldApp 注册表项的所有内容。如果该注册表项包含子项，而您省略了 Recurse 参数，则会提示您确认是否要删除该注册表项的内容。

另请参阅

  • about_Providers
  • Clear-Item
  • Copy-Item
  • Get-Item
  • Invoke-Item
  • Move-Item
  • New-Item
  • Remove-ItemProperty
  • Rename-Item
  • Set-Item


Remove-ItemProperty

从注册表项中删除属性及其值。

语法

Remove-ItemProperty [-LiteralPath] <string[]> [-Name] <string[]> [-Credential <PSCredential>] [-Exclude <string[]>] [-Filter <string>] [-Force] [-Include <string[]>] [-Confirm] [-WhatIf] [-UseTransaction] [<CommonParameters>]

Remove-ItemProperty [-Path] <string[]> [-Name] <string[]> [-Credential <PSCredential>] [-Exclude <string[]>] [-Filter <string>] [-Force] [-Include <string[]>] [-Confirm] [-WhatIf] [-UseTransaction] [<CommonParameters>]

说明

Remove-ItemProperty cmdlet 从注册表项中删除一个属性及其值。您可以使用它删除注册表值及其存储的数据。

参数

-Credential <PSCredential>

指定有权执行此操作的用户帐户。默认值为当前用户。

键入用户名，如“User01”或“Domain01\User01”；或输入 PSCredential 对象，如 Get-Credential cmdlet 输入的一个 PSCredential 对象。如果键入用户名，则将提示您输入密码。

随同 Windows PowerShell 一起安装的任何提供程序都不支持此参数。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | true (ByPropertyName)
是否接受通配符？ | false

-Exclude <string[]>

忽略指定项。此参数的值对 Path 参数进行限定。请输入路径元素或模式，例如“*.txt”。允许使用通配符。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Filter <string>

以提供程序的格式或语言指定筛选器。此参数的值对 Path 参数进行限定。筛选器的语法（包括通配符的使用）取决于提供程序。筛选器比其他参数更有效，因为提供程序是在检索对象时应用筛选器，而不是在检索对象后再由 Windows PowerShell 筛选对象。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Force

允许该 cmdlet 删除用户非此不能访问的对象的属性。不同提供程序有不同的实现。有关详细信息，请参阅 about_Providers。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Include <string[]>

只删除指定项。此参数的值对 Path 参数进行限定。请输入路径元素或模式，例如“*.txt”。允许使用通配符。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-LiteralPath <string[]>

指定指向项属性的路径。LiteralPath 的值严格按照所键入的形式使用。不会将任何字符解释为通配符。如果路径包括转义符，请将其括在单引号中。单引号会告知 Windows PowerShell 不要将所有字符都解释为转义序列。

是否为必需？ | true
位置？ | 1
默认值 |
是否接受管道输入？ | true (ByPropertyName)
是否接受通配符？ | false

-Name <string[]>

指定要检索的属性的名称。

是否为必需？ | true
位置？ | 2
默认值 |
是否接受管道输入？ | true (ByPropertyName)
是否接受通配符？ | false

-Path <string[]>

指定要删除其属性的项的路径。允许使用通配符。

是否为必需？ | true
位置？ | 1
默认值 |
是否接受管道输入？ | true (ByValue, ByPropertyName)
是否接受通配符？ | false

-Confirm

在执行命令之前提示您进行确认。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-WhatIf

描述如果执行该命令会发生什么情况（无需实际执行该命令）。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-UseTransaction

将命令包含在活动事务中。仅当正在执行事务时，此参数才有效。有关详细信息，请参阅 about_Transactions。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

<CommonParameters>

此 cmdlet 支持通用参数：-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。有关详细信息，请参阅 about_Commonparameters.

输入和输出

输入类型是指可通过管道传递给 cmdlet 的对象的类型。返回类型是指 Cmdlet 所返回对象的类型。

输入 | System.String 可以通过管道将包含路径（但不是文本路径）的字符串传递给 Remove-ItemProperty。
输出 | None 此 cmdlet 不返回任何输出。

说明

还可以使用 Remove-ItemProperty 的内置别名“rp”来对其进行引用。有关详细信息，请参阅 about_Alias。

在 Windows PowerShell Registry 提供程序中，注册表值被看作是注册表项或子项的属性。您可以使用 ItemProperty cmdlet 来管理这些值。

Remove-ItemProperty cmdlet 用于处理由任何提供程序公开的数据。要列出会话中可用的提供程序，请键入“Get-PSProvider”。有关详细信息，请参阅 about_Providers。

示例 1

C:\PS>remove-itemproperty -path HKLM:\Software\SmpApplication -name SmpProperty

说明
-----------
此命令从 HKEY_LOCAL_MACHINE\Software 注册表项的 SmpApplication 子项中删除 SmpProperty 注册表值及其数据。

因为命令是从一个文件系统驱动器 (C:\PS>) 发出的，它包括到 SmpApplication 子项的完全限定路径，包括驱动器、HKLM: 和 Software 项。

它使用 Name 参数来标识要删除的注册表值。

示例 2

C:\PS>set-location HKCU:\Software\MyCompany\MyApp

PS HKCU:\Software\MyCompany\MyApp> remove-itemproperty -path . -Name Options -confirm

说明
-----------
这些命令从 HKEY_CURRENT_USER\Software\MyCompany 的 MyApp 子项中删除 Options 注册表值及其数据。

第一个命令使用 Set-Location cmdlet 将当前位置更改为 HKEY_CURRENT_USER 驱动器 (HKCU:) 和 Software\MyCompany\MyApp 子项。

第二个命令使用 Remove-Item cmdlet 从 MyApp 子项删除 Options 注册表值及其数据。因为 Path 参数是必需的，此命令使用点 (.) 来指示当前位置。它使用 Name 参数来指定要删除的注册表值。它使用 Confirm 参数在删除值之前请求用户提示消息。

示例 3

C:\PS>get-item -path HKLM:\Software\MyCompany | remove-itemproperty -name NoOfEmployees

说明
-----------
此命令从 HKLM\Software\MyCompany 注册表项中删除 NoOfEmployees 注册表值及其数据。

该命令使用 Get-Item cmdlet 获取表示该注册表项的项。它使用管道运算符 (|) 将该对象发送给 Remove-ItemProperty cmdlet。然后，使用 Remove-ItemProperty 的 Name 参数指定该注册表值的名称。

另请参阅

  • about_Providers
  • Clear-ItemProperty
  • Copy-ItemProperty
  • Get-ItemProperty
  • Move-ItemProperty
  • New-ItemProperty
  • Remove-Item
  • Rename-ItemProperty
  • Set-ItemProperty


Remove-Job

删除 Windows PowerShell 后台作业。

语法

Remove-Job [-Id] <Int32[]> [-Force] [-Confirm] [-WhatIf] [<CommonParameters>]

Remove-Job [-Command <string[]>] [-Confirm] [-WhatIf] [<CommonParameters>]

Remove-Job [[-InstanceId] <Guid[]>] [-Force] [-Confirm] [-WhatIf] [<CommonParameters>]

Remove-Job [-Job] <Job[]> [-Force] [-Confirm] [-WhatIf] [<CommonParameters>]

Remove-Job [[-Name] <string[]>] [-Force] [-Confirm] [-WhatIf] [<CommonParameters>]

Remove-Job [-State {<NotStarted> | <Running> | <Completed> | <Failed> | <Stopped> | <Blocked>}] [-Confirm] [-WhatIf] [<CommonParameters>]

说明

此 Remove-Job cmdlet 删除通过使用 Start-Job 或任何 cmdlet 的 AsJob 参数而启动的 Windows PowerShell 后台作业。

可以使用此 cmdlet 删除所有作业，或根据作业的名称、ID、实例 ID、命令或状态，或通过将作业对象传递到 Remove-Job 来删除选定的作业。如果没有参数或参数值，则 Remove-Job 无效。

删除正在运行的作业之前，请使用 Stop-Job cmdlet 停止该作业。如果尝试删除正在运行的作业，命令将失败。可以使用 Remove-Job 的 Force 参数来删除正在运行的作业。

如果不删除后台作业，作业将保留在全局作业缓存中，直到您关闭创建该作业的会话。

参数

-Command <string[]>

删除命令中包含指定字词的作业。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | true (ByPropertyName)
是否接受通配符？ | false

-Force

即使状态为“Running”也删除作业。当没有 Force 参数时，Remove-Job 将不会删除正在运行的作业。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Id <Int32[]>

删除具有指定 ID 的后台作业。

ID 是一个整数，用于在当前会话中唯一标识作业。它比实例 ID 更便于记忆和键入，但它只在当前会话中是唯一的。可以键入一个或多个 ID（以逗号分隔）。要查找作业的 ID，请键入不带参数的“Get-Job”。

是否为必需？ | true
位置？ | 1
默认值 |
是否接受管道输入？ | true (ByPropertyName)
是否接受通配符？ | false

-InstanceId <Guid[]>

删除具有指定实例 ID 的作业。

实例 ID 是一个 GUID，用于在计算机上唯一地标识作业。若要查找作业的实例 ID，请使用 Get-Job 或显示作业对象。

是否为必需？ | false
位置？ | 1
默认值 |
是否接受管道输入？ | true (ByPropertyName)
是否接受通配符？ | false

-Job <Job[]>

指定要删除的作业。输入包含作业的变量或获取作业的命令。也可以使用管道运算符将作业提交给 Remove-Job cmdlet。

是否为必需？ | true
位置？ | 1
默认值 |
是否接受管道输入？ | true (ByValue, ByPropertyName)
是否接受通配符？ | false

-Name <string[]>

仅删除具有指定友好名称的作业。允许使用通配符。

由于不能保证友好名称是唯一的（即使是在会话中），因此在按名称删除作业时，请使用 WhatIf 和 Confirm 参数。

是否为必需？ | false
位置？ | 1
默认值 |
是否接受管道输入？ | true (ByPropertyName)
是否接受通配符？ | true

-State <JobState>

仅删除处于指定状态的作业。有效值是 NotStarted、Running、Completed、Stopped、Failed 和 Blocked。若要删除处于“Running”状态的作业，请使用 Force 参数。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | true (ByPropertyName)
是否接受通配符？ | false

-Confirm

在执行命令之前提示您进行确认。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-WhatIf

描述如果执行该命令会发生什么情况（无需实际执行该命令）。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

<CommonParameters>

此 cmdlet 支持通用参数：-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。有关详细信息，请参阅 about_Commonparameters.

输入和输出

输入类型是指可通过管道传递给 cmdlet 的对象的类型。返回类型是指 Cmdlet 所返回对象的类型。

输入 | System.Management.Automation.Job 可将作业对象通过管道传递给 Remove-Job。
输出 | None 此 cmdlet 将不产生任何输出。

示例 1

C:\PS>$batch = get-job -name BatchJob

C:\PS> $batch | remove-job

说明
-----------
这些命令将名为 BatchJob 的后台作业从当前会话中删除。第一个命令使用 Get-Job cmdlet 来获取代表作业的对象，然后将该作业保存在 $batch 变量中。第二个命令使用管道运算符 (|) 将作业发送到 Remove-Job cmdlet。

此命令等效于使用 Remove-Job 的 Job 参数，例如“remove-job -job $batch”。

示例 2

C:\PS>get-job | remove-job

说明
-----------
此命令删除当前会话中的所有作业。

示例 3

C:\PS>remove-job -state NotStarted

说明
-----------
此命令将所有尚未启动的作业从当前会话中删除。

示例 4

C:\PS>remove-job -name *batch -force

说明
-----------
此命令将具有以“batch”结尾的友好名称的所有作业从当前会话中删除，包括正在运行的作业。

此命令使用 Remove-Job 的 Name 参数来指定作业名称模式，并使用 Force 参数来确保所有作业都被删除（甚至包括正在进行中的作业）。

示例 5

C:\PS>$j = invoke-command -computername Server01 -scriptblock {get-process} -asJob

C:\PS> $j | remove-job

说明
-----------
此示例说明如何使用 Remove-Job cmdlet 来删除通过使用 Invoke-Command cmdlet 的 AsJob 参数在远程计算机上启动的作业。

第一个命令使用 Invoke-Command cmdlet 在 Server01 计算机上运行作业。该命令使用 AsJob 参数将命令作为后台作业运行，并将生成的作业对象保存在 $j 变量中。

由于该命令使用了 AsJob 参数，因此即使作业在远程计算机上运行，作业对象也在本地计算机上创建。因此，可以使用本地命令来管理作业。

第二个命令使用 Remove-Job cmdlet 来删除作业。该命令使用管道运算符 (|) 将 $j 中的作业发送到 Remove-Job。请注意此命令是本地命令。无需使用远程命令来删除通过使用 AsJob 参数启动的作业。

示例 6

C:\PS>$s = new-pssession -computername Server01

C:\PS> invoke-command -session $s -scriptblock {start-job -scriptblock {get-process} -name MyJob}

C:\PS> invoke-command -session $s -scriptblock {remove-job -name MyJob}

说明
-----------
此示例说明如何删除通过使用 Invoke-Command 运行 Start-Job 命令启动的作业。在本例中，作业对象在远程计算机上创建，您使用远程命令来管理作业。

第一个命令使用 New-PSSession cmdlet 来创建与 Server01 计算机的 PSSession（持续性连接）。远程运行 Start-Job 命令时需要持续性连接。此命令将 PSSession 保存在 $s 变量中。

第二个命令使用 Invoke-Command cmdlet 在 $s 中的 PSSession 中运行 Start-Job 命令。作业运行 Get-Process 命令。它使用 Start-Job 的 Name 参数为作业指定一个友好名称。

第三个命令使用 Invoke-Command cmdlet 在 $s 中的 PSSession 中运行 Remove-Job 命令。该命令使用 Remove-Job 的 Name 参数来指定要删除的作业。

示例 7

C:\PS>$j = start-job -script {get-process powershell}

C:\PS> $j | format-list -property *

C:\PS> remove-job -instanceID dce2ee73-f8c9-483e-bdd7-a549d8687eed

C:\PS> $j = start-job -script {get-process powershell}

C:\PS> $j | format-list -property *

HasMoreData   : False
StatusMessage :
Location      : localhost
Command       : get-process powershell
JobStateInfo  : Failed
Finished      : System.Threading.ManualResetEvent
InstanceId    : dce2ee73-f8c9-483e-bdd7-a549d8687eed
Id            : 1
Name          : Job1
ChildJobs     : {Job2}
Output        : {}
Error         : {}
Progress      : {}
Verbose       : {}
Debug         : {}
Warning       : {}
StateChanged  :

C:\PS> remove-job -instanceID dce2ee73-f8c9-483e-bdd7-a549d8687eed

说明
-----------
此示例说明如何根据作业的实例 ID 来删除作业。

第一个命令使用 Start-Job cmdlet 来启动后台作业。此命令将生成的作业对象保存在 $j 变量中。

第二个命令使用管道运算符 (|) 将 $j 中的作业对象发送到 Format-List 命令。Format-List 命令使用值为 *（全部）的 Property 参数在列表中显示作业对象的所有属性。

作业对象显示 ID 和 InstanceID 属性的值，以及对象的其他属性的值。

第三个命令使用 Remove-Job 命令将作业从当前会话中删除。要生成命令，可从显示的对象中复制并粘贴 InstanceID 值。

若要在 Windows PowerShell 控制台中复制某个值，请使用鼠标选中该值，然后按 Enter 复制它。若要粘贴值，请右键单击。

另请参阅

  • about_Jobs
  • about_Job_Details
  • about_Remote_Jobs
  • Start-Job
  • Get-Job
  • Receive-Job
  • Wait-Job
  • Stop-Job
  • Invoke-Command


Remove-Module

删除当前会话中的模块。

语法

Remove-Module [-ModuleInfo] <PSModuleInfo[]> [-Force] [-Confirm] [-WhatIf] [<CommonParameters>]

Remove-Module [-Name] <string[]> [-Force] [-Confirm] [-WhatIf] [<CommonParameters>]

说明

Remove-Module cmdlet 将模块的成员从当前会话中删除。

如果模块包含程序集 (.dll)，则将删除由该程序集实现的所有成员，但不会卸载该程序集。

参数

-Force

即使模块的访问模式为只读，也将删除模块。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-ModuleInfo <PSModuleInfo[]>

指定要删除的模块对象。输入包含模块对象 (PSModuleInfo) 的变量或者用来获取模块对象的命令（如 Get-Module 命令）。还可将模块对象通过管道传递给 Remove-Module。

是否为必需？ | true
位置？ | 1
默认值 |
是否接受管道输入？ | true (ByValue)
是否接受通配符？ | false

-Name <string[]>

指定要删除的模块的名称。允许使用通配符。还可以将名称字符串通过管道传送到 Remove-Module。

是否为必需？ | true
位置？ | 1
默认值 |
是否接受管道输入？ | true (ByValue)
是否接受通配符？ | true

-Confirm

在执行命令之前提示您进行确认。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-WhatIf

描述如果执行该命令会发生什么情况（无需实际执行该命令）。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

<CommonParameters>

此 cmdlet 支持通用参数：-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。有关详细信息，请参阅 about_Commonparameters.

输入和输出

输入类型是指可通过管道传递给 cmdlet 的对象的类型。返回类型是指 Cmdlet 所返回对象的类型。

输入 | System.String, System.Management.Automation.PSModuleInfo 可将模块名称（字符串）和模块对象通过管道传送到 Remove-Module。
输出 | None Remove-Module 不生成任何输出。

说明

还可以使用别名“rmo”来引用 Remove-Module。有关详细信息，请参阅 about_Aliases。

示例 1

C:\PS>remove-module -name BitsTransfer

说明
-----------
此命令将 BitsTransfer 模块从当前会话中删除。

示例 2

C:\PS>get-module | remove-module

说明
-----------
此命令将所有模块从当前会话中删除。

示例 3

C:\PS>"FileTransfer", "PSDiagnostics" | remove-module -verbose

VERBOSE: Performing operation "Remove-Module" on Target "filetransfer (Path: 'C:\Windows\system32\WindowsPowerShell\v1.0\Modules\f
iletransfer\filetransfer.psd1')".
VERBOSE: Performing operation "Remove-Module" on Target "Microsoft.BackgroundIntelligentTransfer.Management (Path: 'C:\Windows\
assembly\GAC_MSIL\Microsoft.BackgroundIntelligentTransfer.Management\1.0.0.0__31bf3856ad364e35\Microsoft.BackgroundIntelligentTransfe
r.Management.dll')".
VERBOSE: Performing operation "Remove-Module" on Target "psdiagnostics (Path: 'C:\Windows\system32\WindowsPowerShell\v1.0\Modules\
psdiagnostics\psdiagnostics.psd1')".
VERBOSE: Removing imported function 'Start-Trace'.
VERBOSE: Removing imported function 'Stop-Trace'.
VERBOSE: Removing imported function 'Enable-WSManTrace'.
VERBOSE: Removing imported function 'Disable-WSManTrace'.
VERBOSE: Removing imported function 'Enable-PSWSManCombinedTrace'.
VERBOSE: Removing imported function 'Disable-PSWSManCombinedTrace'.
VERBOSE: Removing imported function 'Set-LogProperties'.
VERBOSE: Removing imported function 'Get-LogProperties'.
VERBOSE: Removing imported function 'Enable-PSTrace'.
VERBOSE: Removing imported function 'Disable-PSTrace'.
VERBOSE: Performing operation "Remove-Module" on Target "PSDiagnostics (Path: 'C:\Windows\system32\WindowsPowerShell\v1.0\Modules\
psdiagnostics\PSDiagnostics.psm1')".

说明
-----------
此命令将 FileTransfer 和 PSDiagnostics 模块从当前会话中删除。

此命令使用管道运算符 (|) 将模块名称发送到 Remove-Module。它使用 Verbose 通用参数来获取关于要删除的成员的详细信息。

Verbose 消息显示所删除的项。这些消息会有所不同，因为 BitsTransfer 模块包含一个实现其 cmdlet 的程序集，还包含一个拥有自己的程序集的嵌套模块。PSDiagnostics 模块包含用于导出函数的模块脚本文件 (.psm1)。

示例 4

C:\PS>$a = get-module BitsTransfer

C:\PS> remove-module -moduleInfo $a

说明
-----------
此命令使用 ModuleInfo 参数来删除 BitsTransfer 模块。

另请参阅

  • Get-Module
  • Import-Module
  • about_Modules


Remove-PSBreakpoint

删除当前控制台中的断点。

语法

Remove-PSBreakpoint [-Id] <Int32[]> [-Confirm] [-WhatIf] [<CommonParameters>]

Remove-PSBreakpoint [-Breakpoint] <Breakpoint[]> [-Confirm] [-WhatIf] [<CommonParameters>]

说明

Remove-PSBreakpoint cmdlet 可以删除断点。请输入断点对象或断点 ID。

删除断点时，断点对象不再可用或不再发生作用。如果已在变量中保存了断点对象，则该引用仍存在，但该断点不再发生作用。

Remove-PSBreakpoint 是专门用来调试 Windows PowerShell 脚本的多个 cmdlet 之一。有关 Windows PowerShell 调试程序的详细信息，请参阅 about_Debuggers。

参数

-Breakpoint <Breakpoint[]>

指定要删除的断点。输入包含断点对象的变量或者用来获取断点对象的命令（如 Get-PSBreakpoint 命令）。也可以通过管道将断点对象传递给 Remove-PSBreakpoint。

是否为必需？ | true
位置？ | 1
默认值 | 无
是否接受管道输入？ | true (ByValue)
是否接受通配符？ | false

-Id <Int32[]>

删除具有指定断点 ID 的断点。

是否为必需？ | true
位置？ | 1
默认值 | 无
是否接受管道输入？ | true (ByPropertyName)
是否接受通配符？ | false

-Confirm

在执行命令之前提示您进行确认。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-WhatIf

描述如果执行该命令会发生什么情况（无需实际执行该命令）。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

<CommonParameters>

此 cmdlet 支持通用参数：-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。有关详细信息，请参阅 about_Commonparameters.

输入和输出

输入类型是指可通过管道传递给 cmdlet 的对象的类型。返回类型是指 Cmdlet 所返回对象的类型。

输入 | System.Management.Automation.Breakpoint 可以通过管道将断点对象传递给 Remove-PSBreakpoint。
输出 | None 该 cmdlet 不产生任何输出。

示例 1

C:\PS>get-breakpoint | remove-breakpoint

说明
-----------
此命令删除当前控制台中的所有断点。

示例 2

C:\PS>$b = set-psbreakpoint -script sample.ps1 -variable Name

C:\PS> $b | remove-psbreakpoint

说明
-----------
此命令可以删除断点。

第一个命令使用 Set-PSBreakpoint cmdlet 在 Sample.ps1 脚本中的 Name 变量上创建断点。然后，它将断点对象保存在 $b 变量中。

第二个命令使用 Remove-PSBreakpoint cmdlet 来删除新断点。它使用管道运算符 (|) 将 $b 变量中的断点对象发送至 Remove-PSBreakpoint cmdlet。

此命令的结果是，如果您运行脚本，该脚本将运行直到完成，中间不停止。另外，Get-PSBreakpoint cmdlet 不返回此断点。

示例 3

C:\PS>remove-psbreakpoint -id 2

说明
-----------
此命令删除断点 ID 为 2 的断点。

示例 4

C:\PS>function del-psb { get-psbreakpoint | remove-psbreakpoint }

说明
-----------
此简单函数删除当前控制台中的所有断点。它使用 Get-PSBreakpoint cmdlet 来获取断点。然后，它使用管道运算符 (|) 将断点发送到 Remove-PSBreakpoint cmdlet，该 cmdlet 将删除这些断点。

结果，您可以键入“del-psb”，而不用键入更长的命令。

若要保存该函数，请将其添加到 Windows PowerShell 配置文件中。

另请参阅

  • about_Debuggers
  • Set-PSBreakpoint
  • Get-PSBreakpoint
  • Enable-PSBreakpoint
  • Disable-PSBreakpoint
  • Get-PSCallStack


Remove-PSDrive

从所在位置删除 Windows PowerShell 驱动器。

语法

Remove-PSDrive [-LiteralName] <string[]> [-Force] [-PSProvider <string[]>] [-Scope <string>] [-Confirm] [-WhatIf] [-UseTransaction] [<CommonParameters>]

Remove-PSDrive [-Name] <string[]> [-Force] [-PSProvider <string[]>] [-Scope <string>] [-Confirm] [-WhatIf] [-UseTransaction] [<CommonParameters>]

说明

Remove-PSDrive cmdlet 删除使用 New-PSDrive 创建的 Windows PowerShell 驱动器。

Remove-PSDrive 不能删除使用其他方法创建的 Windows 驱动器或映射网络驱动器，也不能删除当前工作驱动器。

参数

-Force

允许该 cmdlet 删除当前的 Windows PowerShell 驱动器。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-LiteralName <string[]>

指定 Windows PowerShell 驱动器的名称。

LiteralName 的值严格按照所键入的形式使用。不会将任何字符解释为通配符。如果名称包括转义符，请将其括在单引号 (') 中。单引号会告知 Windows PowerShell 不要将任意字符解释为转义序列。

是否为必需？ | true
位置？ | 1
默认值 |
是否接受管道输入？ | true (ByPropertyName)
是否接受通配符？ | false

-Name <string[]>

指定要删除的 Windows PowerShell 驱动器的名称。请不要在驱动器名称后面键入冒号 (:)。

是否为必需？ | true
位置？ | 1
默认值 |
是否接受管道输入？ | true (ByPropertyName)
是否接受通配符？ | false

-PSProvider <string[]>

删除与指定 Windows PowerShell 提供程序关联的所有 Windows PowerShell 驱动器。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | true (ByPropertyName)
是否接受通配符？ | false

-Scope <string>

接受索引，该索引用于标识将从中删除驱动器的作用域。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | true (ByPropertyName)
是否接受通配符？ | false

-Confirm

在执行命令之前提示您进行确认。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-WhatIf

描述如果执行该命令会发生什么情况（无需实际执行该命令）。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-UseTransaction

将命令包含在活动事务中。仅当正在执行事务时，此参数才有效。有关详细信息，请参阅 about_Transactions。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

<CommonParameters>

此 cmdlet 支持通用参数：-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。有关详细信息，请参阅 about_Commonparameters.

输入和输出

输入类型是指可通过管道传递给 cmdlet 的对象的类型。返回类型是指 Cmdlet 所返回对象的类型。

输入 | System.Management.Automation.PSDriveInfo 可以将驱动器对象通过管道传递给 Remove-PSDrive。
输出 | None 此 cmdlet 不返回任何输出。

说明

Remove-PSDrive cmdlet 用于处理由任何提供程序公开的数据。要列出会话中可用的提供程序，请键入“get-psprovider”。有关详细信息，请参阅 about_Providers。

示例 1

C:\PS>remove-psdrive -name smp

说明
-----------
此命令删除一个名为“smp”的 Windows PowerShell 驱动器。

另请参阅

  • about_Providers
  • Get-PSDrive
  • New-PSDrive


Remove-PSSession

关闭一个或多个 Windows PowerShell 会话 (PSSession)。

语法

Remove-PSSession [[-ComputerName] <string[]>] [-Confirm] [-WhatIf] [<CommonParameters>]

Remove-PSSession [-Id] <Int32[]> [-Confirm] [-WhatIf] [<CommonParameters>]

Remove-PSSession [-InstanceId <Guid[]>] [-Confirm] [-WhatIf] [<CommonParameters>]

Remove-PSSession [-Name <string[]>] [-Confirm] [-WhatIf] [<CommonParameters>]

Remove-PSSession [-Session] <PSSession[]> [-Confirm] [-WhatIf] [<CommonParameters>]

说明

Remove-PSSession cmdlet 关闭当前会话中的 Windows PowerShell 会话 (PSSession)。该 cmdlet 停止在 PSSession 中运行的任何命令，终止 PSSession，并释放 PSSession 使用的资源。如果 PSSession 连接到远程计算机，则 Remove-PSSession 还会关闭本地计算机和远程计算机之间的连接。

要删除 PSSession，请输入会话的 Name、ComputerName、ID 或 InstanceID。

如果已将 PSSession 保存在变量中，则会话对象将保留在变量中，但 PSSession 的状态为“Closed”。

参数

-ComputerName <string[]>

关闭连接到指定计算机的 PSSession。允许使用通配符。

键入一台或多台远程计算机的 NetBIOS 名称、IP 地址或完全限定的域名。要指定本地计算机，请键入计算机名称、“localhost”或句点 (.)。

是否为必需？ | false
位置？ | 1
默认值 |
是否接受管道输入？ | true (ByPropertyName)
是否接受通配符？ | true

-Id <Int32[]>

关闭具有指定 ID 的 PSSession。键入一个或多个 ID（以逗号分隔）或使用范围运算符 (..)可以指定 ID 的范围

ID 是一个整数，用于在当前会话中唯一标识 PSSession。它比 InstanceId 更容易记住和键入，但它仅仅在当前会话中是唯一的。要查找 PSSession 的 ID，请使用不带参数的 Get-PSSession。

是否为必需？ | true
位置？ | 1
默认值 |
是否接受管道输入？ | true (ByPropertyName)
是否接受通配符？ | false

-InstanceId <Guid[]>

关闭具有指定实例 ID 的 PSSession。

该实例 ID 是一个 GUID，用于在当前会话中唯一标识 PSSession。即使在一台计算机上运行了多个会话，InstanceID 也是唯一的。

InstanceID 存储在表示 PSSession 的对象的 InstanceID 属性中。要查找当前会话中的 PSSession 的 InstanceID，请键入“get-pssession | Format-Table Name, ComputerName, InstanceId”。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | true (ByPropertyName)
是否接受通配符？ | false

-Name <string[]>

关闭具有指定友好名称的 PSSession。允许使用通配符。

由于 PSSession 的友好名称可能不是唯一的，因此在使用 Name 参数时，还应考虑在 Remove-PSSession 命令中使用 WhatIf 或 Confirm 参数。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | true (ByPropertyName)
是否接受通配符？ | true

-Session <PSSession[]>

指定要关闭的 PSSession 的会话对象。输入包含 PSSessions 的变量或者用来创建或获取 PSSessions 的命令，如 New-PSSession 或 Get-PSSession 命令。还可将一个或多个会话对象通过管道传送到 Remove-PSSession。

是否为必需？ | true
位置？ | 1
默认值 |
是否接受管道输入？ | true (ByValue, ByPropertyName)
是否接受通配符？ | false

-Confirm

在执行命令之前提示您进行确认。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-WhatIf

描述如果执行该命令会发生什么情况（无需实际执行该命令）。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

<CommonParameters>

此 cmdlet 支持通用参数：-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。有关详细信息，请参阅 about_Commonparameters.

输入和输出

输入类型是指可通过管道传递给 cmdlet 的对象的类型。返回类型是指 Cmdlet 所返回对象的类型。

输入 | System.Management.Automation.Runspaces.PSSession 可以通过管道将会话对象传送给 Remove-PSSession。
输出 | None Remove-PSSession 不返回任何对象。

说明

ID 参数是必需的。不能键入不带参数的“remove-pssession”。要删除当前会话中的所有 PSSession，请键入“get-pssession | remove-pssession”。

PSSession 使用与远程计算机的持续性连接。创建 PSSession 可以运行共享数据的一系列命令。有关详细信息，请参阅 about_PSSessions。

PSSession 特定于当前会话。当终止某个会话时，您在该会话中创建的 PSSession 也会被强制关闭。

示例 1

C:\PS>remove-pssession -id 1, 2

说明
-----------
此命令将删除 ID 为 1 和 2 的 PSSession。

示例 2

C:\PS>get-pssession | remove-pssession

C:\PS> remove-pssession -session (get-pssession)

C:\PS> $s = get-pssession
C:\PS> remove-pssession -session $s".

说明
-----------
这些命令删除当前会话中的所有 PSSession。尽管三种命令格式看起来不一样，但它们具有相同的效果。

示例 3

C:\PS>$r = get-pssession -computername Serv*

$r | remove-pssession

说明
-----------
这些命令关闭连接到名称以“Serv”开头的计算机的 PSSession。

示例 4

C:\PS>get-pssession | where {$_.port -eq 90} | remove-pssession

说明
-----------
此命令关闭连接到端口 90 的 PSSession。可以使用此命令格式，通过 ComputerName、Name、InstanceID 和 ID 以外的属性标识 PSSession。

示例 5

C:\PS>get-pssession | ft computername, instanceID  -auto

ComputerName InstanceId
------------ ----------------
Server01     875d231b-2788-4f36-9f67-2e50d63bb82a
localhost    c065ffa0-02c4-406e-84a3-dacb0d677868
Server02     4699cdbc-61d5-4e0d-b916-84f82ebede1f
Server03     4e5a3245-4c63-43e4-88d0-a7798bfc2414
TX-TEST-01   fc4e9dfa-f246-452d-9fa3-1adbdd64ae85

C:\PS> remove-pssession -InstanceID fc4e9dfa-f246-452d-9fa3-1adbdd64ae85

说明
-----------
这些命令说明如何根据实例 ID (RemoteRunspaceID) 来关闭 PSSession。

第一个命令使用 Get-PSsession cmdlet 获取当前会话中的 PSSession。该命令使用管道运算符 (|) 将这些 PSSession 发送给 Format-Table cmdlet（别名：ft），该 cmdlet 随后在表格中对它们的 ComputerName 和 InstanceID 属性进行格式化。AutoSize 参数（“auto”）用于压缩各列以便于显示。

在得到的显示结果中，管理员可以识别要关闭的 PSSession，并将该 PSSession 的 InstanceID 复制并粘贴到第二个命令中。

第二个命令使用 Remove-PSSession cmdlet 删除具有指定的实例 ID 的 PSSession。

示例 6

C:\PS>function EndPSS { get-pssession | remove-pssession }

说明
-----------
此函数删除当前会话中的所有 PSSession。在将此函数添加到 Windows Powershell 配置文件之后，要删除所有会话，只需键入“endpss”即可。

另请参阅

  • about_PSSessions
  • about_Remote
  • New-PSSession
  • Get-PSSession
  • Enter-PSSession
  • Exit-PSSession
  • Invoke-Command


Remove-PSSnapin

将 Windows PowerShell 管理单元从当前会话中删除。

语法

Remove-PSSnapin [-Name] <string[]> [-PassThru] [-Confirm] [-WhatIf] [<CommonParameters>]

说明

Remove-PSSnapin cmdlet 将 Windows PowerShell 管理单元从当前会话中删除。可以使用它来删除添加到 Windows PowerShell 中的管理单元，但不能使用它删除与 Windows PowerShell 一起安装的管理单元。

某个管理单元从当前会话中删除之后，它仍然保持加载，但该管理单元中的 cmdlet 和提供程序在会话中将不再可用。

参数

-Name <string[]>

指定要从当前会话中删除的 Windows PowerShell 管理单元的名称。参数名称（“Name”）是可选的，参数值中允许使用通配符 (*)。

是否为必需？ | true
位置？ | 1
默认值 | 无
是否接受管道输入？ | true (ByPropertyName)
是否接受通配符？ | true

-PassThru

返回一个表示管理单元的对象。默认情况下，此 cmdlet 将不产生任何输出。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Confirm

在执行命令之前提示您进行确认。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-WhatIf

描述如果执行该命令会发生什么情况（无需实际执行该命令）。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

<CommonParameters>

此 cmdlet 支持通用参数：-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。有关详细信息，请参阅 about_Commonparameters.

输入和输出

输入类型是指可通过管道传递给 cmdlet 的对象的类型。返回类型是指 Cmdlet 所返回对象的类型。

输入 | System.Management.Automation.PSSnapInInfo 可以通过管道将管理单元传送给 Remove-PSSnapin。
输出 | None or System.Management.Automation.PSSnapInInfo 默认情况下，Remove-PsSnapin 不生成任何输出。但是，如果使用 PassThru 参数，则会生成表示管理单元的 System.Management.Automation.PSSnapInInfo 对象。

说明

还可以使用 Remove-PSSnapin 的内置别名“rsnp”来对其进行引用。有关详细信息，请参阅 about_Aliases。

Remove-PSSnapin 在从会话中删除管理单元之前不检查 Windows PowerShell 的版本。如果不能删除某个管理单元，则会出现警告，并且命令失败。

Remove-PSSnapin 仅影响当前会话。如果将 Add-PSSnapin 命令添加到了 Windows PowerShell 配置文件中，则应删除该命令才能将管理单元从以后的会话中删除。有关说明，请参阅 about_Profiles。

示例 1

C:\PS>remove-pssnapin -name Microsoft.Exchange

说明
-----------
此命令将 Microsoft.Exchange 管理单元从当前会话中删除。当该命令完成时，该管理单元支持的 cmdlet 和提供程序在会话中将不再可用。

示例 2

C:\PS>get-PSSnapIn smp* | remove-PSSnapIn

说明
-----------
此命令将名称以“smp”开头的 Windows PowerShell 管理单元从当前会话中删除。

此命令使用 Get-PSSnapin cmdlet 来获取表示管理单元的对象。管道运算符 (|) 将结果发送到 Remove-PSSnapin cmdlet，后者将它们从会话中删除。此管理单元支持的提供程序和 cmdlet 在会话中不再可用。

当通过管道将对象传递到 Remove-PSSnapin 时，对象的名称与 Name 参数关联，该参数从管道接受具有 Name 属性的对象。

示例 3

C:\PS>remove-pssnapin -name *event*

说明
-----------
此命令删除名称中包含“event”的所有 Windows PowerShell 管理单元。此命令指定“Name”参数名称，但由于该参数名称是可选的，因此可以省略。

另请参阅

  • Add-PSSnapin
  • Get-PSSnapin
  • about_Profiles


Remove-Variable

删除变量及其值。

语法

Remove-Variable [-Name] <string[]> [-Exclude <string[]>] [-Force] [-Include <string[]>] [-Scope <string>] [-Confirm] [-WhatIf] [<CommonParameters>]

说明

Remove-Variable cmdlet 从定义变量的作用域（例如，当前会话）中删除变量及其值。不能使用此 cmdlet 删除被设置为常量的变量或那些被系统拥有的变量。

参数

-Exclude <string[]>

忽略指定项。此参数的值对 Name 参数进行限定。请输入名称元素或模式，例如“s*”。允许使用通配符。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Force

允许该 cmdlet 删除变量（即使该变量是只读的）。即使使用 Force 参数，该 cmdlet 也无法删除常量。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Include <string[]>

只删除指定项。此参数的值对 Name 参数进行限定。请输入名称元素或模式，例如“s*”。允许使用通配符。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Name <string[]>

指定要删除的变量的名称。参数名（“Name”）为可选项。

是否为必需？ | true
位置？ | 1
默认值 |
是否接受管道输入？ | true (ByPropertyName)
是否接受通配符？ | false

-Scope <string>

指定此别名的有效作用域。有效值包括“Global”、“Local”、“Script”或者相对于当前作用域的数字（0 到作用域数，其中 0 是指当前作用域，1 是指其父作用域）。默认值为“Local”。有关详细信息，请参阅 about_Scopes。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Confirm

在执行命令之前提示您进行确认。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-WhatIf

描述如果执行该命令会发生什么情况（无需实际执行该命令）。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

<CommonParameters>

此 cmdlet 支持通用参数：-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。有关详细信息，请参阅 about_Commonparameters.

输入和输出

输入类型是指可通过管道传递给 cmdlet 的对象的类型。返回类型是指 Cmdlet 所返回对象的类型。

输入 | System.Management.Automation.PSVariable 可以通过管道将变量对象传递给 Remove-Variable。
输出 | None 此 cmdlet 不返回任何输出。

说明

所做更改只影响当前作用域，如会话。要将一个变量从所有会话中删除，请在 Windows PowerShell 配置文件中添加 Remove-Variable 命令。

还可以使用其内置别名“rv”引用 RemoveVariable。有关详细信息，请参阅 about_Aliases。

示例 1

C:\PS>remove-variable Smp

说明
-----------
此命令删除 $Smp 变量。

另请参阅

  • Set-Variable
  • Get-Variable
  • Clear-Variable
  • New-Variable
  • about_Profiles


Remove-WmiObject

删除现有 Windows Management Instrumentation (WMI) 类的实例。

语法

Remove-WmiObject [-类] <string> [-Authentication {<Default> | <None> | <Connect> | <Call> | <Packet> | <PacketIntegrity> | <PacketPrivacy> | <Unchanged>}] [-Authority <string>] [-ComputerName <string[]>] [-Credential <PSCredential>] [-EnableAllPrivileges] [-Impersonation {<Default> | <Anonymous> | <Identify> | <Impersonate> | <Delegate>}] [-Locale <string>] [-命名空间 <string>] [-AsJob] [-ThrottleLimit <int>] [-Confirm] [-WhatIf] [<CommonParameters>]

Remove-WmiObject [-Authentication {<Default> | <None> | <Connect> | <Call> | <Packet> | <PacketIntegrity> | <PacketPrivacy> | <Unchanged>}] [-Authority <string>] [-ComputerName <string[]>] [-Credential <PSCredential>] [-EnableAllPrivileges] [-Impersonation {<Default> | <Anonymous> | <Identify> | <Impersonate> | <Delegate>}] [-Locale <string>] [-命名空间 <string>] [-AsJob] [-ThrottleLimit <int>] [-Confirm] [-WhatIf] [<CommonParameters>]

Remove-WmiObject -InputObject <ManagementObject> [-AsJob] [-ThrottleLimit <int>] [-Confirm] [-WhatIf] [<CommonParameters>]

Remove-WmiObject -Path <string> [-Authentication {<Default> | <None> | <Connect> | <Call> | <Packet> | <PacketIntegrity> | <PacketPrivacy> | <Unchanged>}] [-Authority <string>] [-ComputerName <string[]>] [-Credential <PSCredential>] [-EnableAllPrivileges] [-Impersonation {<Default> | <Anonymous> | <Identify> | <Impersonate> | <Delegate>}] [-Locale <string>] [-命名空间 <string>] [-AsJob] [-ThrottleLimit <int>] [-Confirm] [-WhatIf] [<CommonParameters>]

Remove-WmiObject [-Authentication {<Default> | <None> | <Connect> | <Call> | <Packet> | <PacketIntegrity> | <PacketPrivacy> | <Unchanged>}] [-Authority <string>] [-ComputerName <string[]>] [-Credential <PSCredential>] [-EnableAllPrivileges] [-Impersonation {<Default> | <Anonymous> | <Identify> | <Impersonate> | <Delegate>}] [-Locale <string>] [-命名空间 <string>] [-AsJob] [-ThrottleLimit <int>] [-Confirm] [-WhatIf] [<CommonParameters>]

Remove-WmiObject [-Authentication {<Default> | <None> | <Connect> | <Call> | <Packet> | <PacketIntegrity> | <PacketPrivacy> | <Unchanged>}] [-Authority <string>] [-ComputerName <string[]>] [-Credential <PSCredential>] [-EnableAllPrivileges] [-Impersonation {<Default> | <Anonymous> | <Identify> | <Impersonate> | <Delegate>}] [-Locale <string>] [-命名空间 <string>] [-AsJob] [-ThrottleLimit <int>] [-Confirm] [-WhatIf] [<CommonParameters>]

说明

Remove-WmiObject cmdlet 删除现有 WMI 类的实例。

参数

-AsJob

将命令作为后台作业运行。使用此参数可运行需要较长时间才能完成的命令。

将命令作为后台作业运行。使用此参数可运行需要较长时间才能完成的命令。

使用 AsJob 参数时，该命令返回表示后台作业的对象，然后显示命令提示符。当作业完成时，您可以继续在此会话中工作。如果 Remove-WmiObject 用于远程计算机，则作业在本地计算机上创建，并且来自远程计算机的结果将自动返回本地计算机。若要管理作业，请使用包含 Job 名词的 cmdlet (Job cmdlet)。要获取作业结果，请使用 Receive-Job cmdlet。

注意：若要将此参数用于远程计算机，必须为本地和远程计算机配置远程处理。此外，在 Windows Vista 和更高版本的 Windows 中，必须使用“以管理员身份运行”选项启动 Windows PowerShell。有关详细信息，请参阅 about_Remote_Requirements。

有关 Windows PowerShell 后台作业的详细信息，请参阅 about_Jobs 和 about_Remote_Jobs。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Authentication <AuthenticationLevel>

指定用于 WMI 连接的身份验证级别。有效值包括：

-1：不变

0：默认值

1：无（不执行身份验证。）

2：连接（仅当客户端与应用程序建立了关系时才执行身份验证。）

3：调用（应用程序收到请求时只在每次调用的开始执行身份验证。）

4：数据包（对从客户端收到的所有数据执行身份验证。）

5：数据包整体性（所有在客户端和应用程序之间传送的数据都经过身份验证和验证。）

6：数据包保密性（使用其他身份验证等级的属性，并且所有数据都加密。）

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Authority <string>

指定用于对 WMI 连接进行身份验证的授权机构。可以指定标准 NTLM 或 Kerberos 身份验证。若要使用 NTLM，请将授权机构设置设为“ntlmdomain:<DomainName>”，其中 <DomainName> 标识有效的 NTLM 域名。若要使用 Kerberos，请指定“kerberos:<DomainName>\<ServerName>”。连接到本地计算机时不能包含授权机构设置。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-类 <string>

指定要删除的 WMI 类的名称。

是否为必需？ | true
位置？ | 1
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-ComputerName <string[]>

指定要对其运行管理操作的计算机。值可以是完全限定的域名、NetBIOS 名称或 IP 地址。使用本地计算机名称、localhost 或点 (.)指定本地计算机。默认值为本地计算机。当远程计算机与用户位于不同的域时，必须使用完全限定的域名。可以通过使用管道将值传递给此参数来设置该参数的值。

此参数不依赖于 Windows PowerShell 远程处理，后者使用 WS-Management。即使您的计算机未配置为运行 WS-Management 远程命令，也可以使用 Get-WmiObject 的 ComputerName 参数。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Credential <PSCredential>

指定有权执行此操作的用户帐户。默认值为当前用户。键入用户名，例如“User01”、“Domain01\User01”或“User@Contoso.com”。或者，输入 PSCredential 对象，例如 Get-Credential cmdlet 返回的对象。键入用户名时，将会提示您键入密码。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-EnableAllPrivileges

在命令进行 WMI 调用之前，启用当前用户的所有权限。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Impersonation <ImpersonationLevel>

指定要使用的模拟级别。有效值包括：

0：默认值（读取本地注册表的默认模拟级别，通常设置为“3：模拟”。）

1：匿名（隐藏调用方的凭据。）

2：标识（允许对象查询调用方的凭据。）

3：模拟（允许对象使用调用方的凭据。）

4：委派（允许对象允许其他对象使用调用方的凭据。）

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-InputObject <ManagementObject>

指定要用作输入的 ManagementObject 对象。使用此参数时，将忽略所有其他参数。

是否为必需？ | true
位置？ | named
默认值 |
是否接受管道输入？ | true (ByValue)
是否接受通配符？ | false

-Locale <string>

指定 WMI 对象的首选区域设置。按喜爱顺序将 Locale 参数指定为 MS_<LCID> 格式的数组。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-命名空间 <string>

当此参数与 Class 参数一起使用时，它将指定引用的 WMI 类所在的 WMI 存储库命名空间。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Path <string>

指定 WMI 类的 WMI 对象路径，或指定要删除的 WMI 类实例的 WMI 对象路径。

是否为必需？ | true
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-ThrottleLimit <int>

允许用户为可同时执行的 WMI 操作数目指定一个限制值。此参数与 AsJob 参数一起使用。节流限制仅适用于当前命令，而不适用于会话或计算机。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Confirm

在执行命令之前提示您进行确认。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-WhatIf

描述如果执行该命令会发生什么情况（无需实际执行该命令）。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

<CommonParameters>

此 cmdlet 支持通用参数：-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。有关详细信息，请参阅 about_Commonparameters.

输入和输出

输入类型是指可通过管道传递给 cmdlet 的对象的类型。返回类型是指 Cmdlet 所返回对象的类型。

输入 | System.Management.ManagementObject 可以通过管道将管理对象传递给 Remove-WmiObject。
输出 | None 或 System.Management.Automation.RemotingJob 如果使用 AsJob 参数，则此 cmdlet 返回作业对象。否则，将不产生任何输出。

示例 1

C:\PS>notepad
C:\PS> $np = get-wmiobject -query "select * from win32_process where name='notepad.exe'"
C:\PS> $np | remove-wmiobject

说明
-----------
此命令关闭 Notepad.exe 的所有实例。

第一条命令启动记事本的实例。

第二条命令使用 Get-WmiObject cmdlet 来检索对应于 Notepad.exe 的 Win32_Process 实例，并将它们存储在 $np 变量中。

第三条命令将 $np 变量中的对象传递给 Remove-WmiObject cmdlet，该 cmdlet 将删除 Notepad.exe 的所有实例。

示例 2

C:\PS>$a = Get-WMIObject -query "Select * From Win32_Directory Where Name ='C:\\Test'"
C:\PS> $a | Remove-WMIObject

说明
-----------
此命令删除 C:\Test 目录。

第一条命令使用 Get-WMIObject cmdlet 查询 C:\Test 目录，然后将该对象存储在 $a 变量中。

第二条命令通过管道将 $a 变量传递给 Remove-WMIObject，该 cmdlet 将删除这个目录。

另请参阅

  • Get-WmiObject
  • Invoke-WmiMethod
  • Set-WmiInstance
  • Get-WSManInstance
  • Invoke-WSManAction
  • New-WSManInstance
  • Remove-WSManInstance


Remove-WSManInstance

删除管理资源实例。

语法

Remove-WSManInstance [-ApplicationName <string>] [-ComputerName <string>] [-Port <int>] [-UseSSL] [[-SelectorSet] <hashtable>] [-AuthenticationMechanism <AuthenticationMechanism>] [-Credential <PSCredential>] [-OptionSet <hashtable>] [-ResourceURI <Uri>] [-SessionOption <hashtable>] [<CommonParameters>]

Remove-WSManInstance [-ConnectionURI <Uri>] [[-SelectorSet] <hashtable>] [-AuthenticationMechanism <AuthenticationMechanism>] [-Credential <PSCredential>] [-OptionSet <hashtable>] [-ResourceURI <Uri>] [-SessionOption <hashtable>] [<CommonParameters>]

说明

Remove-WSManInstance 删除通过 ResourceURI 和 SelectorSet 参数指定的管理资源的实例。

此 cmdlet 使用 WinRM 连接/传输层来删除管理资源实例。

参数

-ApplicationName <string>

指定连接中的应用程序名称。ApplicationName 参数的默认值为“WSMAN”。远程终结点的完整标识符采用以下格式：

<transport>://<server>:<port>/<ApplicationName>

例如：

http://server01:8080/WSMAN

承载会话的 Internet 信息服务 (IIS) 将请求连同此终结点转发到指定的应用程序。默认设置“WSMAN”适用于大多数使用情况。当有许多计算机建立了与运行 Windows PowerShell 的一台计算机的远程连接时，需要用到此参数。这种情况下，IIS 托管 Web Services for Management (WS-Management)，以保证效率。

是否为必需？ | false
位置？ | named
默认值 | wsman
是否接受管道输入？ | false
是否接受通配符？ | false

-AuthenticationMechanism <AuthenticationMechanism>

指定服务器上要使用的身份验证机制。可能值为：

- Basic：Basic 是一种方案，在该方案中，用户名和密码以明文形式发送到服务器或代理。

- Default：使用 WS-Management 协议实现的身份验证方法。这是默认设置。

- Digest：Digest 是一种质询响应方案，该方案将服务器指定的数据字符串用于质询。

- Kerberos：客户端计算机和服务器使用 Kerberos 证书相互进行身份验证。

- Negotiate：Negotiate 是一种质询响应方案，该方案与服务器或代理协商以确定要使用的身份验证方案。例如，此参数值允许进行协商以确定是使用 Kerberos 协议还是 NTLM。

- CredSSP：使用凭据安全服务提供程序 (CredSSP) 身份验证，这种方法允许用户委派凭据。此选项用于这样的命令：在一台远程计算机上运行，但从其他远程计算机上收集数据或者在其他远程计算机上运行其他命令。

注意：CredSSP 将本地计算机中的用户凭据委派给远程计算机。此操作增加了远程操作的安全风险。如果远程计算机的安全受到威胁，则在向该计算机传递凭据时，可使用这些凭据来控制网络会话。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-ComputerName <string>

指定要对其运行管理操作的计算机。值可以是完全限定的域名、NetBIOS 名称或 IP 地址。使用本地计算机名称、localhost 或点 (.)指定本地计算机。默认值为本地计算机。当远程计算机与用户位于不同的域时，必须使用完全限定的域名。可以通过管道将此参数的值传递给 cmdlet。

是否为必需？ | false
位置？ | named
默认值 | localhost
是否接受管道输入？ | false
是否接受通配符？ | false

-ConnectionURI <Uri>

指定连接终结点。此字符串的格式为：

<Transport>://<Server>:<Port>/<ApplicationName>

以下字符串是此参数的格式正确的值：

http://Server01:8080/WSMAN

URI 必须完全限定。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Credential <PSCredential>

指定有权执行此操作的用户帐户。默认值为当前用户。键入用户名，例如“User01”、“Domain01\User01”或“User@Domain.com”。或者，输入 PSCredential 对象，例如由 Get-Credential cmdlet 返回的对象。键入用户名时，将会提示您键入密码。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | true (ByPropertyName)
是否接受通配符？ | false

-OptionSet <hashtable>

将一组开关传递到服务以修改或调整请求的性质。这些与命令行 shell 中使用的开关的类似之处在于，它们也是特定于服务的。可以指定任意多个选项。

以下示例演示分别为 a、b 和 c 参数传递值 1、2 和 3 的语法：

-OptionSet @{a=1;b=2;c=3}

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Port <int>

指定要在客户端连接到 WinRM 服务时使用的端口。如果传输方式为 HTTP，则默认端口为 80。如果传输方式为 HTTPS，则默认端口为 443。使用 HTTPS 作为传输方式时，ComputerName 参数的值必须与服务器的证书公用名 (CN) 匹配。但是，如果 SkipCNCheck 参数指定为 SessionOption 参数的一部分，则服务器的证书公用名不必与服务器的主机名称相匹配。SkipCNCheck 参数应仅用于受信任的计算机。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-ResourceURI <Uri>

包含资源类或实例的统一资源标识符 (URI)。URI 用于标识特定类型的资源，例如，计算机上的磁盘或进程。

URI 由前缀和资源的路径组成。例如：

http://schemas.microsoft.com/wbem/wsman/1/wmi/root/cimv2/Win32_LogicalDisk

http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2/CIM_NumericSensor

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-SelectorSet <hashtable>

指定一组用于选择特定管理资源实例的值对。当相应资源存在多个实例时，将使用 SelectorSet 参数。SelectorSet 参数的值必须为哈希表。

以下示例说明如何为此参数输入值：

-SelectorSet @{Name="WinRM";ID="yyy"}

是否为必需？ | false
位置？ | 2
默认值 |
是否接受管道输入？ | true (ByValue, ByPropertyName)
是否接受通配符？ | false

-SessionOption <hashtable>

为 WS-Management 会话定义一组扩展选项。输入使用 New-WSManSessionOption cmdlet 创建的 SessionOption 对象。有关可用选项的详细信息，请参阅 New-WSManSessionOption。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-UseSSL

指定应使用安全套接字层 (SSL) 协议来建立与远程计算机的连接。默认情况下，不使用 SSL。

WS-Management 加密通过网络传输的所有 Windows PowerShell 内容。利用 UseSSL 参数，可以指定 HTTPS（而非 HTTP）的额外保护措施。如果在连接端口上 SSL 不可用并且指定了此参数，则命令将失败。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

<CommonParameters>

此 cmdlet 支持通用参数：-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。有关详细信息，请参阅 about_Commonparameters.

输入和输出

输入类型是指可通过管道传递给 cmdlet 的对象的类型。返回类型是指 Cmdlet 所返回对象的类型。

输入 | None 此 cmdlet 不接受任何输入。
输出 | None 此 cmdlet 将不产生任何输出。

说明

Remove-WmiObject cmdlet 是一个 Windows Management Instrumentation (WMI) cmdlet，与之类似。Remove-WmiObject 使用 DCOM 连接/传输层来创建或更新 WMI 实例。

示例 1

C:\PS>Remove-WSManInstance winrm/config/Listener -SelectorSet Address=test.fabrikam.com;Transport=http

说明
-----------
删除计算机上的 WS-Management HTTP 侦听器。

另请参阅

  • Connect-WSMan
  • Disable-WSManCredSSP
  • Disconnect-WSMan
  • Enable-WSManCredSSP
  • Get-WSManCredSSP
  • Get-WSManInstance
  • Invoke-WSManAction
  • New-WSManInstance
  • New-WSManSessionOption
  • Set-WSManInstance
  • Set-WSManQuickConfig
  • Test-WSMan
  • Remove-WmiObject


Rename-Item

重命名 Windows PowerShell 提供程序命名空间中的一个项。

语法

Rename-Item [-Path] <string> [-NewName] <string> [-Credential <PSCredential>] [-Force] [-PassThru] [-Confirm] [-WhatIf] [-UseTransaction] [<CommonParameters>]

说明

Rename-Item cmdlet 更改指定项的名称。此 cmdlet 不影响正被重命名的项的内容。

不能使用 Rename-Item 移动项，例如，不能通过指定路径及新名称来移动项。要移动并重命名项，请使用 Move-Item cmdlet。

参数

-Credential <PSCredential>

指定有权执行此操作的用户帐户。默认值为当前用户。

键入用户名，如“User01”或“Domain01\User01”；或输入 PSCredential 对象，如 Get-Credential cmdlet 输入的一个 PSCredential 对象。如果键入用户名，则将提示您输入密码。

随同 Windows PowerShell 一起安装的任何提供程序都不支持此参数。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | true (ByPropertyName)
是否接受通配符？ | false

-Force

允许该 cmdlet 重命名非此不能更改的项，如隐藏文件或只读文件，或者只读别名或变量。该 cmdlet 不能更改常量别名或变量。不同提供程序有不同的实现。有关详细信息，请参阅 about_Providers。即使使用 Force 参数，该 cmdlet 也无法覆盖安全限制。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-NewName <string>

指定项的新名称。请仅输入名称，而不是路径加名称。如果输入的路径不同于 Path 参数中指定的路径，则 Rename-Item 会生成错误。要重命名并移动项，请使用 Move-Item cmdlet。

不能在 NewName 的值中使用通配符。要为多个文件指定名称，请使用正则表达式中的替换运算符。有关替换运算符的详细信息，请键入“get-help about_comparison_operators”。有关演示，请参阅示例。

是否为必需？ | true
位置？ | 2
默认值 |
是否接受管道输入？ | true (ByPropertyName)
是否接受通配符？ | false

-PassThru

将表示项的对象传递到管道。默认情况下，此 cmdlet 将不产生任何输出。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Path <string>

指定要重命名的项的路径。

是否为必需？ | true
位置？ | 1
默认值 |
是否接受管道输入？ | true (ByValue, ByPropertyName)
是否接受通配符？ | false

-Confirm

在执行命令之前提示您进行确认。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-WhatIf

描述如果执行该命令会发生什么情况（无需实际执行该命令）。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-UseTransaction

将命令包含在活动事务中。仅当正在执行事务时，此参数才有效。有关详细信息，请参阅 about_Transactions。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

<CommonParameters>

此 cmdlet 支持通用参数：-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。有关详细信息，请参阅 about_Commonparameters.

输入和输出

输入类型是指可通过管道传递给 cmdlet 的对象的类型。返回类型是指 Cmdlet 所返回对象的类型。

输入 | System.String 可以通过管道将包含路径的字符串传递给 Rename-Item。
输出 | None 或一个表示已重命名项的对象。 如果使用 Passthru 参数，则 Rename-Item 生成一个表示已重命名项的对象。否则，此 cmdlet 将不产生任何输出。

说明

Rename-Item cmdlet 用于处理由任何提供程序公开的数据。要列出会话中可用的提供程序，请键入“Get-PsProvider”。有关详细信息，请参阅 about_Providers。

示例 1

C:\PS>rename-item -path c:\logfiles\daily_file.txt -newname monday_file.txt

说明
-----------
此命令将文件 daily_file.txt 重命名为 monday_file.txt。

示例 2

C:\PS>rename-item -path project.txt -newname d:\archive\old-project.txt

Rename-Item : Cannot rename because the target specified represents a path or device name.
At line:1 char:12
+ rename-item <<<<  -path project.txt -newname d:\archive\old-project.txt
    + CategoryInfo          : InvalidArgument: (:) [Rename-Item], PSArgumentException
    + FullyQualifiedErrorId : Argument,Microsoft.PowerShell.Commands.RenameItemCommand

C:\PS> move-item -path project.txt -destination d:\archive\old-project.txt
# Command succeeds

说明
-----------
此示例说明不能使用 Rename-Item cmdlet 同时重命名和移动项。具体来说，不能为 NewName 参数的值提供路径，除非该路径与 Path 参数中指定的路径相同。在其他情况下，仅允许输入新名称。

第一条命令使用 Rename-Item cmdlet 将当前目录中的 project.txt 文件重命名为 D:\Archive 目录中的 old-project.txt。结果将在输出中显示错误。

第二条命令显示使用 Move-Item cmdlet 移动并重命名文件的正确方法。Move-Item cmdlet 允许您在其 Destination 参数值中同时指定新路径和新名称。

示例 3

C:\PS>rename-item HKLM:\Software\MyCompany\Advertising -NewName Marketing

说明
-----------
此命令使用 Rename-Item cmdlet 将注册表项 Advertising 重命名为 Marketing。当该命令完成时，将重命名该注册表项，但该注册表项中的注册表条目保持不变。

示例 4

C:\PS>get-childItem *.txt | rename-item -newname { $_.name -replace '\.txt','.log' }

说明
-----------
此示例说明如何使用替换运算符重命名多个文件，即使 NewName 参数不接受通配符也是如此。

此命令将当前目录中的所有 .txt 文件重命名为 .log。

该命令使用 Get-ChildItem cmdlet 获取当前目录中具有 .txt 文件扩展名的所有文件。然后，使用管道运算符 (|) 将所得到的文件发送给 Rename-Item cmdlet。

在 Rename-Item 命令中，NewName 参数的值是一个在将该值提交给 NewName 参数之前执行的脚本块。

在该脚本块中，$_ automatic 变量表示通过管道传递给该命令的各文件对象。该命令使用点格式 (.)获取各文件对象的 Name 属性。替换运算符会将各文件的“.txt”文件扩展名替换为“.log”。

因为替换运算符用于正则表达式，所以“txt”之前的点会被解释为匹配任何字符。为确保它仅匹配点 (.)，将用反斜杠字符 (\) 对其进行转义。因为“.log”是字符串而不是正则表达式，所以它不需要反斜杠字符。

另请参阅

  • about_Providers
  • Clear-Item
  • Invoke-Item
  • Move-Item
  • Rename-ItemProperty
  • Set-Item
  • New-Item
  • Remove-Item
  • Get-Item
  • Copy-Item


Rename-ItemProperty

重命名项的属性。

语法

Rename-ItemProperty [-LiteralPath] <string> [-Name] <string> [-NewName] <string> [-Credential <PSCredential>] [-Exclude <string[]>] [-Filter <string>] [-Force] [-Include <string[]>] [-PassThru] [-Confirm] [-WhatIf] [-UseTransaction] [<CommonParameters>]

Rename-ItemProperty [-Path] <string> [-Name] <string> [-NewName] <string> [-Credential <PSCredential>] [-Exclude <string[]>] [-Filter <string>] [-Force] [-Include <string[]>] [-PassThru] [-Confirm] [-WhatIf] [-UseTransaction] [<CommonParameters>]

说明

Rename-ItemProperty cmdlet 更改指定项属性的名称。属性的值未更改。例如，可以使用 Rename-ItemProperty 更改注册表条目的名称。

参数

-Credential <PSCredential>

指定有权执行此操作的用户帐户。默认值为当前用户。

键入用户名，如“User01”或“Domain01\User01”；或输入 PSCredential 对象，如 Get-Credential cmdlet 输入的一个 PSCredential 对象。如果键入用户名，则将提示您输入密码。

随同 Windows PowerShell 一起安装的任何提供程序都不支持此参数。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | true (ByPropertyName)
是否接受通配符？ | false

-Exclude <string[]>

忽略指定项。允许使用通配符。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Filter <string>

以提供程序的格式或语言指定筛选器。此参数的值对 Path 参数进行限定。筛选器的语法（包括通配符的使用）取决于提供程序。筛选器比其他参数更有效，因为提供程序是在检索对象时应用筛选器，而不是在检索对象后再由 Windows PowerShell 筛选对象。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Force

允许该 cmdlet 重命名用户非此不能访问的对象的属性。不同提供程序有不同的实现。有关详细信息，请参阅 about_Providers。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Include <string[]>

指定 cmdlet 只对这些项执行操作，排除其他所有项。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-LiteralPath <string>

指定指向项属性的路径。LiteralPath 的值严格按照所键入的形式使用。不会将任何字符解释为通配符。如果路径包括转义符，请将其括在单引号中。单引号会告知 Windows PowerShell 不要将所有字符都解释为转义序列。

是否为必需？ | true
位置？ | 1
默认值 |
是否接受管道输入？ | true (ByPropertyName)
是否接受通配符？ | false

-Name <string>

指定要重命名的属性的当前名称。

是否为必需？ | true
位置？ | 2
默认值 |
是否接受管道输入？ | true (ByPropertyName)
是否接受通配符？ | false

-NewName <string>

指定属性的新名称。

是否为必需？ | true
位置？ | 3
默认值 |
是否接受管道输入？ | true (ByPropertyName)
是否接受通配符？ | false

-PassThru

返回一个表示项属性的对象。默认情况下，此 cmdlet 将不产生任何输出。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Path <string>

指定要重新命名的项的路径。

是否为必需？ | true
位置？ | 1
默认值 |
是否接受管道输入？ | true (ByValue, ByPropertyName)
是否接受通配符？ | false

-Confirm

在执行命令之前提示您进行确认。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-WhatIf

描述如果执行该命令会发生什么情况（无需实际执行该命令）。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-UseTransaction

将命令包含在活动事务中。仅当正在执行事务时，此参数才有效。有关详细信息，请参阅 about_Transactions。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

<CommonParameters>

此 cmdlet 支持通用参数：-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。有关详细信息，请参阅 about_Commonparameters.

输入和输出

输入类型是指可通过管道传递给 cmdlet 的对象的类型。返回类型是指 Cmdlet 所返回对象的类型。

输入 | System.String 可以通过管道将包含路径（但不是文本路径）的字符串传递给 Rename-ItemProperty。
输出 | None 或 System.Management.Automation.PSCustomObject 如果使用 PassThru 参数，则 Rename-ItemProperty 生成一个 PSCustomObject 对象，该对象表示已重命名的项属性。否则，此 cmdlet 将不产生任何输出。

说明

Remove-ItemProperty cmdlet 用于处理由任何提供程序公开的数据。要列出会话中可用的提供程序，请键入“Get-PSProvider”。有关详细信息，请参阅 about_Providers。

示例 1

C:\PS>rename-itemproperty -path HKLM:\Software\SmpApplication -name config -newname oldconfig

说明
-----------
此命令将包含在 HKEY_LOCAL_MACHINE\Software\SmpApplication 项中的 config 注册表条目重命名为 oldconfig。

另请参阅

  • about_Providers
  • Rename-Item
  • Clear-ItemProperty
  • Copy-ItemProperty
  • Get-ItemProperty
  • Move-ItemProperty
  • New-ItemProperty
  • Remove-ItemProperty
  • Set-ItemProperty


Reset-ComputerMachinePassword

重置计算机的计算机帐户密码。

语法

Reset-ComputerMachinePassword [-Server <string>] [-Confirm] [-WhatIf] [<CommonParameters>]

说明

Reset-ComputerMachinePassword cmdlet 更改计算机用于对域中的域控制器进行身份验证的计算机帐户密码。您可以使用它重置本地计算机的密码。

参数

-Server <string>

指定要在设置计算机帐户密码时使用的域控制器的名称。

此参数是可选的。如果省略此参数，则将选择域控制器来处理该命令。

是否为必需？ | false
位置？ | named
默认值 | 无
是否接受管道输入？ | false
是否接受通配符？ | false

-Confirm

在执行命令之前提示您进行确认。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-WhatIf

描述如果执行该命令会发生什么情况（无需实际执行该命令）。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

<CommonParameters>

此 cmdlet 支持通用参数：-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。有关详细信息，请参阅 about_Commonparameters.

输入和输出

输入类型是指可通过管道传递给 cmdlet 的对象的类型。返回类型是指 Cmdlet 所返回对象的类型。

输入 | None 不能通过管道将输入传递给此 cmdlet。
输出 | None 此 cmdlet 将不产生任何输出。

示例 1

C:\PS>Reset-ComputerMachinePassword

说明
-----------
此命令重置本地计算机的计算机密码。该命令使用当前用户的凭据运行。

示例 2

C:\PS>Reset-ComputerMachinePassword -server DC01

说明
-----------
此命令使用域控制器 DC01 重置本地计算机的计算机密码。

示例 3

C:\PS>invoke-command -computername Server01 -scriptblock {reset-computermachinepassword}

说明
-----------
此命令使用 Invoke-Command cmdlet 在远程计算机 Server01 上运行 Reset-ComputerMachinePassword 命令。

有关 Windows PowerShell 中远程命令的详细信息，请参阅 about_Remote 和 Invoke-Command。


Resolve-Path

解析路径中的通配符并显示路径内容。

语法

Resolve-Path [-LiteralPath] <string[]> [-Credential <PSCredential>] [-Relative] [-UseTransaction] [<CommonParameters>]

Resolve-Path [-Path] <string[]> [-Credential <PSCredential>] [-Relative] [-UseTransaction] [<CommonParameters>]

说明

Resolve-Path cmdlet 解释路径中的通配符，并显示由路径指定的位置中的项和容器，如文件和文件夹或注册表项和子项。

参数

-Credential <PSCredential>

指定有权执行此操作的用户帐户。默认值为当前用户。

键入用户名，例如“User01”或“Domain01\User01”。或者，输入 PSCredential 对象，例如由 Get-Credential cmdlet 生成的对象。如果键入用户名，则将提示您输入密码。

随同 Windows PowerShell 一起安装的任何提供程序都不支持此参数。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | true (ByPropertyName)
是否接受通配符？ | false

-LiteralPath <string[]>

指定要解析的路径。LiteralPath 的值严格按照所键入的形式使用。不会将任何字符解释为通配符。如果路径包括转义符，请将其括在单引号中。单引号会告知 Windows PowerShell 不要将所有字符都解释为转义序列。

是否为必需？ | true
位置？ | 1
默认值 |
是否接受管道输入？ | true (ByPropertyName)
是否接受通配符？ | false

-Path <string[]>

指定要解析的 Windows PowerShell 路径。此参数是必需的。还可以通过管道将路径字符串传递给 Resolve-Path。

是否为必需？ | true
位置？ | 1
默认值 |
是否接受管道输入？ | true (ByValue, ByPropertyName)
是否接受通配符？ | false

-Relative

返回相对路径。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-UseTransaction

将命令包含在活动事务中。仅当正在执行事务时，此参数才有效。有关详细信息，请参阅 about_Transactions。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

<CommonParameters>

此 cmdlet 支持通用参数：-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。有关详细信息，请参阅 about_Commonparameters.

输入和输出

输入类型是指可通过管道传递给 cmdlet 的对象的类型。返回类型是指 Cmdlet 所返回对象的类型。

输入 | System.String 可以通过管道将包含路径的字符串传递给 Resolve-Path。
输出 | System.String Resolve-Path 返回一个包含已解析路径的字符串。

说明

包含 Path 名词的 cmdlet (Path cmdlet) 采用路径名称作为参数，以所有 Windows PowerShell 提供程序都能够解释的简明格式返回名称。这些 cmdlet 用于需要在其中以特定格式显示全部或部分路径名称的程序或脚本中。您可以像使用 Dirname、Normpath、Realpath、Join 或其他路径操作程序那样使用这些 cmdlet。

可以将路径 cmdlet 与某些提供程序一起使用，包括 FileSystem、Registry 和 Certificate 提供程序。

Resolve-Path cmdlet 可使用由任何提供程序公开的数据。要列出会话中可用的提供程序，请键入“Get-PSProvider”。有关详细信息，请参阅 about_Providers。

示例 1

C:\PS>resolve-path ~

C:\Users\User01

说明
-----------
此命令解析由颚化符字符 (~) 表示的路径，此字符表示起始路径。

示例 2

C:\PS>resolve-path windows

C:\Windows

说明
-----------
从 C: 驱动器的根目录运行时，此命令将返回 C: 驱动器中 Windows 目录的路径。

示例 3

C:\PS>"C:\windows\*" | resolve-path

说明
-----------
此命令返回 C:\Windows 目录中的所有目录。此命令使用管道运算符 (|) 将路径字符串发送到 Resolve-Path。

示例 4

C:\PS>resolve-path \\Server01\public

说明
-----------
此命令解析通用命名约定 (UNC) 路径并返回路径中的共享部分。

示例 5

C:\PS>resolve-path c:\prog* -relative

..\Program Files
..\Program Files (x86)
..\programs.txt

说明
-----------
此命令返回 C: 驱动器根目录中目录的相对路径。

示例 6

C:\PS>resolve-path -literalPath test[xml]

说明
-----------
此命令解析当前目录的 Test[xml] 子目录的路径。它使用 LiteralPath 参数指示方括号不是正则表达式字符。

另请参阅

  • about_Providers
  • Test-Path
  • Split-Path
  • Convert-Path
  • Join-Path


Restart-Computer

重新启动（“重新引导”）本地和远程计算机上的操作系统。

语法

Restart-Computer [[-ComputerName] <string[]>] [[-Credential] <PSCredential>] [-AsJob] [-Authentication {<Default> | <None> | <Connect> | <Call> | <Packet> | <PacketIntegrity> | <PacketPrivacy> | <Unchanged>}] [-Force] [-Impersonation {<Default> | <Anonymous> | <Identify> | <Impersonate> | <Delegate>}] [-ThrottleLimit <int>] [-Confirm] [-WhatIf] [<CommonParameters>]

说明

Restart-Computer cmdlet 重新启动本地和远程计算机上的操作系统。

使用 Restart-Computer 的参数可以将重新启动操作作为后台作业运行，指定身份验证级别和备用凭据，限制同时运行的操作以及强制立即重新启动。

除非您使用 AsJob 参数，否则此 cmdlet 不需要 Windows PowerShell 远程处理。

参数

-AsJob

将命令作为后台作业运行。

注意：若要使用此参数，必须为本地计算机和远程计算机配置远程处理，并且在 Windows Vista 以及更高版本的 Windows 上，还必须使用“以管理员身份运行”选项打开 Windows PowerShell。有关详细信息，请参阅 about_Remote_Requirements。

使用 AsJob 参数时，此命令立即返回代表后台作业的对象。当作业完成时，您可以继续在此会话中工作。作业在本地计算机上创建，并且来自远程计算机的结果将自动返回本地计算机。要管理作业，请使用 Job cmdlet。要获取作业结果，请使用 Receive-Job cmdlet。

有关 Windows PowerShell 后台作业的详细信息，请参阅 about_Jobs 和 about_Remote_Jobs。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Authentication <AuthenticationLevel>

指定用于 WMI 连接的身份验证级别。（Restart-Computer 使用 WMI。）默认值为 Packet。

有效值包括：

Unchanged： 身份验证级别与前一个命令相同。

Default： Windows 身份验证

None： 无 COM 身份验证

Connect： 连接级 COM 身份验证

Call： 调用级 COM 身份验证

Packet： 数据包级 COM 身份验证。

PacketIntegrity： 数据包完整性级 COM 身份验证。

PacketPrivacy： 数据包隐私级 COM 身份验证。

是否为必需？ | false
位置？ | named
默认值 | 4
是否接受管道输入？ | false
是否接受通配符？ | false

-ComputerName <string[]>

指定一台或多台远程计算机。默认值为本地计算机。

键入远程计算机的 NETBIOS 名称、IP 地址或完全限定的域名。要指定本地计算机，请键入计算机名称、句点 (.) 或“localhost”。

此参数不依赖于 Windows PowerShell 远程处理。即使您的计算机未配置为运行远程命令，您也可以使用 ComputerName 参数。

是否为必需？ | false
位置？ | 1
默认值 | .
是否接受管道输入？ | true (ByPropertyName)
是否接受通配符？ | false

-Credential <PSCredential>

指定有权执行此操作的用户帐户。默认值为当前用户。

键入用户名，如“User01”或“Domain01\User01”；或输入 PSCredential 对象，如 Get-Credential cmdlet 输入的一个 PSCredential 对象。

是否为必需？ | false
位置？ | 2
默认值 | Current user
是否接受管道输入？ | false
是否接受通配符？ | false

-Force

强制立即重新启动计算机。

是否为必需？ | false
位置？ | named
默认值 | False
是否接受管道输入？ | false
是否接受通配符？ | false

-Impersonation <ImpersonationLevel>

指定调用 WMI 时使用的模拟级别。（Restart-Computer 使用 WMI。）默认值为“Impersonate”。

有效值包括：

Default： 默认模拟。

Anonymous： 隐藏调用方的身份。

Identify： 允许对象查询调用方的凭据。

Impersonate： 允许对象使用调用方的凭据。

是否为必需？ | false
位置？ | named
默认值 | Impersonate
是否接受管道输入？ | false
是否接受通配符？ | false

-ThrottleLimit <int>

指定为运行此命令可建立的并发连接的最大数目。如果省略此参数或输入 0 值，则使用默认值 32。

节流限制仅适用于当前命令，而不适用于会话或计算机。

是否为必需？ | false
位置？ | named
默认值 | 32
是否接受管道输入？ | false
是否接受通配符？ | false

-Confirm

在执行命令之前提示您进行确认。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-WhatIf

描述如果执行该命令会发生什么情况（无需实际执行该命令）。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

<CommonParameters>

此 cmdlet 支持通用参数：-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。有关详细信息，请参阅 about_Commonparameters.

输入和输出

输入类型是指可通过管道传递给 cmdlet 的对象的类型。返回类型是指 Cmdlet 所返回对象的类型。

输入 | None 不能通过管道将输入传递给此 cmdlet。
输出 | None 或 System.Management.Automation.RemotingJob 如果使用 AsJob 参数，则此 cmdlet 返回作业对象。否则，将不产生任何输出。

说明

此 cmdlet 使用 WMI WIN32_OperatingSystem 类的 Win32Shutdown 方法。

示例 1

C:\PS>restart-computer

说明
-----------
此命令重新启动本地计算机。

示例 2

C:\PS>restart-computer -computername Server01, Server02, localhost

说明
-----------
此命令重新启动两台远程计算机 Server01 和 Server02 以及标识为“localhost”的本地计算机。

示例 3

C:\PS>$j = restart-computer -computername Server01, Server02 -asjob

C:\PS> $results = $j | receive-job

C:\PS> $results

说明
-----------
这些命令在两台远程计算机上将 Restart-Computer 命令作为后台作业运行，然后获取结果。

第一条命令使用 AsJob 参数将该命令作为后台作业运行。此命令将生成的作业对象保存在 $j 变量中。

第二条命令使用管道运算符将 $j 中的作业对象发送给 Receive-Job cmdlet，后者将获取作业结果。该命令将结果保存在 $results 变量中。

第三条命令显示保存在 $results 变量中的结果。

因为 AsJob 参数在本地计算机上创建作业，并将结果自动返回给本地计算机，所以您可以将 Receive-Job 命令作为本地命令运行。

示例 4

C:\PS>restart-computer -comp Server01 -impersonation anonymous -authentication PacketIntegrity

说明
-----------
此命令重新启动远程计算机 Server01。此命令将使用自定义模拟和身份验证设置。

示例 5

C:\PS>$s = get-content domain01.txt

C:\PS> $c = get-credential domain01\admin01

C:\PS> restart-computer -computername $s -force -throttlelimit 10 -credential $c

说明
-----------
这些命令强制立即重新启动 Domain01 中的所有计算机。

第一条命令获取该域中计算机的列表，并将该列表保存在 $s 变量中。

第二条命令获取域管理员的凭据，并将这些凭据保存在 $c 变量中。

第三条命令重新启动这些计算机。它使用 ComputerName 参数提交 $s 变量中的计算机列表，使用 Force 参数强制立即重新启动，使用 Credential 参数提交保存在 $c 变量中的凭据。此外，它还使用 ThrottleLimit 参数将该命令限制在 10 个并发连接范围内。

另请参阅

  • Add-Computer
  • Checkpoint-Computer
  • Remove-Computer
  • Restore-Computer
  • Stop-Computer
  • Test-Connection


Restart-Service

停止并接着启动一个或更多服务。

语法

Restart-Service [-Name] <string[]> [-Exclude <string[]>] [-Force] [-Include <string[]>] [-PassThru] [-Confirm] [-WhatIf] [<CommonParameters>]

Restart-Service -DisplayName <string[]> [-Exclude <string[]>] [-Force] [-Include <string[]>] [-PassThru] [-Confirm] [-WhatIf] [<CommonParameters>]

Restart-Service [-InputObject <ServiceController[]>] [-Exclude <string[]>] [-Force] [-Include <string[]>] [-PassThru] [-Confirm] [-WhatIf] [<CommonParameters>]

说明

Restart-Service cmdlet 向 Windows 服务控制器针对指定服务发送一条停止消息和一条启动消息。如果一项服务已经停止，它将启动而不通知您已发生了错误。您可以通过服务名称或显示名称来指定服务，也可以使用 InputObject 参数传递一个对象来代表您想要重新启动的每一项服务。

参数

-DisplayName <string[]>

指定要重新启动的服务的显示名称。允许使用通配符。

是否为必需？ | true
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Exclude <string[]>

忽略指定服务。此参数的值对 Name 参数进行限定。请输入名称元素或模式，例如“s*”。允许使用通配符。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Force

覆盖阻止命令成功执行的限制，但应确保所做更改不会危及安全性。例如，Force 将停止并重新启动一个具有依赖服务的服务。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Include <string[]>

只重新启动指定的服务。此参数的值对 Name 参数进行限定。请输入名称元素或模式，例如“s*”。允许使用通配符。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-InputObject <ServiceController[]>

指定 ServiceController 对象来表示要重新启动的服务。输入一个包含对象的变量，或键入可获取对象的命令或表达式。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | true (ByValue)
是否接受通配符？ | false

-Name <string[]>

指定要重新启动的服务的服务名称。

是否为必需？ | true
位置？ | 1
默认值 |
是否接受管道输入？ | true (ByValue, ByPropertyName)
是否接受通配符？ | false

-PassThru

返回一个表示服务的对象。默认情况下，此 cmdlet 将不产生任何输出。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Confirm

在执行命令之前提示您进行确认。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-WhatIf

描述如果执行该命令会发生什么情况（无需实际执行该命令）。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

<CommonParameters>

此 cmdlet 支持通用参数：-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。有关详细信息，请参阅 about_Commonparameters.

输入和输出

输入类型是指可通过管道传递给 cmdlet 的对象的类型。返回类型是指 Cmdlet 所返回对象的类型。

输入 | System.ServiceProcess.ServiceController, System.String 可以将服务对象或包含服务名称的字符串通过管道传递给 Restart-Service。
输出 | None 或 System.ServiceProcess.ServiceController 如果使用 PassThru 参数，则 Restart-Service 生成表示重新启动的服务的 System.ServiceProcess.ServiceController 对象。否则，此 cmdlet 将不产生任何输出。

说明

Restart-Service 只有在当前用户有相应权限时才能控制服务。如果某个命令不能正常工作，则可能您不具有所需的权限。

若要查找服务名称并显示您的系统中的服务名称，请键入“get-service”。服务名称显示在 Name 列中，显示名称显示在 DisplayName 列中。

示例 1

C:\PS>restart-service wmi

说明
-----------
此命令在本地计算机上重新启动 Windows Management Instrumentation (WMI) 服务。

示例 2

C:\PS>restart-service -displayname net* -exclude "net logon"

说明
-----------
此命令重新启动显示名称以“Net”开头的服务，“Net Logon”服务除外。

示例 3

C:\PS>get-service net* | where-object {$_.Status -eq "Stopped"} | restart-service

说明
-----------
此命令启动计算机上所有停止的网络服务。

它使用 Get-Service cmdlet 获取代表服务名称以“net”开头的服务的对象。（省略了可选的 Name 参数名称。）管道运算符 (|) 将服务对象发送给 Where-Object cmdlet，后者只选择处于“stopped”状态的服务。另一个管道运算符将选定的服务发送到 Restart-Service。在实践中，在使用此命令之前应使用 WhatIf 参数来查看此命令的影响。

另请参阅

  • Start-Service
  • Stop-Service
  • Suspend-Service
  • Resume-Service
  • New-Service
  • Get-Service
  • Set-Service


Restore-Computer

在本地计算机上启动系统还原。

语法

Restore-Computer [-RestorePoint] <int> [-Confirm] [-WhatIf] [<CommonParameters>]

说明

Restore-Computer cmdlet 将本地计算机还原到指定的系统还原点。

Restore-Computer 命令重新启动该计算机。在重新启动操作期间完成还原。

参数

-RestorePoint <int>

指定还原点的序号。要查找序号，请使用 Get-ComputerRestorePoint。此参数是必需的。

是否为必需？ | true
位置？ | 1
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Confirm

在执行命令之前提示您进行确认。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-WhatIf

描述如果执行该命令会发生什么情况（无需实际执行该命令）。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

<CommonParameters>

此 cmdlet 支持通用参数：-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。有关详细信息，请参阅 about_Commonparameters.

输入和输出

输入类型是指可通过管道传递给 cmdlet 的对象的类型。返回类型是指 Cmdlet 所返回对象的类型。

输入 | None 不能通过管道将输入传递给此 cmdlet。
输出 | None 此 cmdlet 将不产生任何输出。

说明

要在 Windows Vista 以及 Windows 的更高版本上运行 Restore-Computer 命令，必须使用“以管理员身份运行”选项打开 Windows PowerShell。

此 cmdlet 使用 Windows Management Instrumentation (WMI) SystemRestore 类。

示例 1

C:\PS>restore-computer -RestorePoint 253

说明
-----------
此命令将本地计算机还原到序号为 253 的还原点。

因为 RestorePoint 参数是位置参数，所以可以省略该参数的名称。

示例 2

C:\PS>restore-computer 255 -confirm

Confirm
Are you sure you want to perform this action?
Performing operation "Restore-Computer" .
[Y] Yes  [A] Yes to All  [N] No  [L] No to All  [S] Suspend  [?] Help (default is "Y"):

说明
-----------
此命令将本地计算机还原到序号为 255 的还原点。它使用 Confirm 参数在实际执行该操作之前提示用户确认。

示例 3

C:\PS>Get-ComputerRestorePoint

C:\PS> Restore-Computer -RestorePoint 255

C:\PS> Get-ComputerRestorePoint -LastStatus

说明
-----------
这些命令运行系统还原，然后检查其状态。

第一条命令使用 Get-ComputerRestorePoint cmdlet 获取本地计算机上的还原点。

第二条命令使用 Restore-Computer 将该计算机还原到序号为 255 的还原点。

第三条命令使用 Get-ComputerRestorePoint cmdlet 的 LastStatus 参数检查还原操作的状态。因为 Restore-Computer 命令将强制重新启动，所以应在重新启动计算机时输入此命令。

另请参阅

  • Get-ComputerRestorePoint
  • Enable-ComputerRestore
  • Disable-ComputerRestore
  • Restart-Computer


Resume-Service

恢复一项或多项挂起（暂停的）服务。

语法

Resume-Service [-Name] <string[]> [-Exclude <string[]>] [-Include <string[]>] [-PassThru] [-Confirm] [-WhatIf] [<CommonParameters>]

Resume-Service -DisplayName <string[]> [-Exclude <string[]>] [-Include <string[]>] [-PassThru] [-Confirm] [-WhatIf] [<CommonParameters>]

Resume-Service [-InputObject <ServiceController[]>] [-Exclude <string[]>] [-Include <string[]>] [-PassThru] [-Confirm] [-WhatIf] [<CommonParameters>]

说明

Resume-Service cmdlet 为每一个指定的服务向 Windows 服务控制器发送一条恢复消息。如果它们已挂起，则它们将恢复服务。如果它们当前在运行，则忽略此消息。您可以通过服务名称或显示名称来指定服务，也可以使用 InputObject 参数传递一个服务对象来代表您想要恢复的服务。

参数

-DisplayName <string[]>

指定要恢复的服务的显示名称。允许使用通配符。

是否为必需？ | true
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Exclude <string[]>

忽略指定服务。此参数的值对 Name 参数进行限定。请输入名称元素或模式，例如“s*”。允许使用通配符。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Include <string[]>

只恢复指定服务。此参数的值对 Name 参数进行限定。请输入名称元素或模式，例如“s*”。允许使用通配符。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-InputObject <ServiceController[]>

指定 ServiceController 对象来表示要恢复的服务。输入一个包含对象的变量，或键入可获取对象的命令或表达式。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | true (ByValue)
是否接受通配符？ | false

-Name <string[]>

指定要恢复的服务的服务名称。

参数名为可选项。可以使用“-Name”或其别名“-ServiceName”，也可以忽略该参数名称。

是否为必需？ | true
位置？ | 1
默认值 |
是否接受管道输入？ | true (ByValue, ByPropertyName)
是否接受通配符？ | false

-PassThru

返回一个表示服务的对象。默认情况下，此 cmdlet 将不产生任何输出。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Confirm

在执行命令之前提示您进行确认。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-WhatIf

描述如果执行该命令会发生什么情况（无需实际执行该命令）。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

<CommonParameters>

此 cmdlet 支持通用参数：-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。有关详细信息，请参阅 about_Commonparameters.

输入和输出

输入类型是指可通过管道传递给 cmdlet 的对象的类型。返回类型是指 Cmdlet 所返回对象的类型。

输入 | System.ServiceProcess.ServiceController or System.String 可以将服务对象或包含服务名称的字符串通过管道传递给 Resume-Service。
输出 | None 或 System.ServiceProcess.ServiceController 如果使用 PassThru 参数，则 Resume-Service 生成表示恢复的服务的 System.ServiceProcess.ServiceController 对象。否则，此 cmdlet 将不产生任何输出。

说明

已经挂起的服务的状态为“Paused”。当服务恢复后，其状态为“Running”。

Resume-Service 只有在当前用户有相应权限时才能控制服务。如果某个命令不能正常工作，则可能您不具有所需的权限。

若要查找服务名称并显示您的系统中的服务名称，请键入“get-service”。服务名称显示在 Name 列中，显示名称显示在 DisplayName 列中。

示例 1

C:\PS>resume-service sens

说明
-----------
此命令在本地计算机上恢复系统事件通知服务（服务名称在命令中以“sens”表示）。此命令使用 Name 参数来指定服务的服务名称，但忽略了参数名称，因为参数名称是可选的。

示例 2

C:\PS>get-service | where-object {$_.Status -eq "Paused"} | resume-service

说明
-----------
此命令恢复计算机上所有挂起（暂停）的服务。第一条命令获取计算机上的所有服务。管道运算符 (|) 将结果传递给 Where-Object cmdlet，后者选择 Status 属性为“Paused”的服务。下一个管道运算符将结果发送给 Resume-Service，后者将恢复暂停的服务。

在实践中，您需要先使用 WhatIf 参数来确定该命令的影响，然后才可以不带“WhatIf”运行此命令。

另请参阅

  • Get-Service
  • Start-Service
  • Stop-Service
  • Restart-Service
  • Suspend-Service
  • Set-Service
  • New-Service


Select-Object

选择一个对象或一组对象的指定属性。它还可以从对象的数组中选择唯一对象，也可以从对象数组的开头或末尾选择指定个数的对象。

语法

Select-Object [[-Property] <Object[]>] [-ExcludeProperty <string[]>] [-ExpandProperty <string>] [-First <int>] [-InputObject <psobject>] [-Last <int>] [-Skip <int>] [-Unique] [<CommonParameters>]

Select-Object [-Index <Int32[]>] [-InputObject <psobject>] [-Unique] [<CommonParameters>]

说明

Select-Object cmdlet 仅获取一个或一组对象的指定属性。它还可以从对象的数组中选择唯一对象，也可以从对象数组的开头或末尾选择指定个数的对象。

如果使用 Select-Object 来选择指定属性，则它会从输入对象中复制这些属性的值，并创建具有指定的属性和复制的值的新对象。

使用 Property 参数指定您要选择的属性。或者，使用 First、Last、Unique、Skip 和 Index 参数从输入对象数组中选择特定对象。若要执行更特定的对象筛选，请使用 Where-Object cmdlet。

参数

-ExcludeProperty <string[]>

删除所选的指定属性。允许使用通配符。仅当命令中也包含 Property 参数时，此参数才有效。

该属性参数的值可以是计算属性，这是指定名称并计算值以显示属性的哈希表。有效键包括：

-- Name 或 Label <字符串>

-- Expression <字符串> 或 <脚本块>

有关详细信息，请参阅示例。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | true

-ExpandProperty <string>

指定要选择的属性，并指示应当尝试展开该属性。属性名中允许使用通配符。

例如，如果指定的属性是数组，则应当在输出中包括该数组的每个值。如果属性包含对象，则该对象的属性会显示在输出中。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | true

-First <int>

指定要从输入对象的数组的开头选择的对象数。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Index <Int32[]>

基于对象的索引值从数组中选择对象。以逗号分隔的列表形式输入索引。

数组中的索引从 0 开始，0 表示第一个值，(n-1) 表示最后一个值。

是否为必需？ | false
位置？ | named
默认值 | 无
是否接受管道输入？ | false
是否接受通配符？ | false

-InputObject <psobject>

指定要通过管道发送到 cmdlet 的对象。使用此参数可以通过管道将对象传递给 Select-Object。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | true (ByValue)
是否接受通配符？ | false

-Last <int>

指定要从输入对象的数组的末尾选择的对象数。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Property <Object[]>

指定要选择的属性。允许使用通配符。

Property 参数的值可以是新的计算属性。若要创建计算属性，请使用哈希表。有效键包括：

-- Name（或 Label）<字符串>

-- Expression <字符串> 或 <脚本块>

是否为必需？ | false
位置？ | 1
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | true

-Skip <int>

跳过（不选择）指定数量的项目。默认情况下，Skip 参数会从数组或对象列表的开头开始计数，但如果命令使用 Last 参数，它会从列表或数组的末尾开始计数。

与从 0 开始计数的 Index 参数不同，Skip 参数从 1 开始计数。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Unique

指定如果输入对象的子集有相同的属性和值，则只选择该子集的一个成员。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

<CommonParameters>

此 cmdlet 支持通用参数：-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。有关详细信息，请参阅 about_Commonparameters.

输入和输出

输入类型是指可通过管道传递给 cmdlet 的对象的类型。返回类型是指 Cmdlet 所返回对象的类型。

输入 | System.Management.Automation.PSObject 可以通过管道将任何对象传递给 Select-Object。
输出 | System.Management.Automation.PSObject

说明

还可以使用 Select-Object 的内置别名“select”来对其进行引用。有关详细信息，请参阅 about_Aliases。

示例 1

C:\PS>get-process | select-object ProcessName,Id,WS

说明
-----------
此命令显示进程的列表。只显示进程的名称、ID 和工作集 (WS) 属性。

示例 2

C:\PS>get-process | select-object processname -expandproperty modules |
format-list

ProcessName       : 00THotkey
Size              : 256
Company           : TOSHIBA Corporation
FileVersion       : 1, 0, 0, 27
ProductVersion    : 6, 2, 0, 0
Description       : THotkey
Product           : TOSHIBA THotkey
ModuleName        : 00THotkey.exe
FileName          : C:\WINDOWS\system32\00THotkey.exe
BaseAddress       : 4194304

说明
-----------
此命令显示有关在计算机上运行的进程所使用的模块的信息。它使用 ExpandProperty 参数显示在模块属性中包含的详细信息。

示例 3

C:\PS>get-process | sort-object -property WS | select-object -Last 5

Handles  NPM(K)    PM(K)      WS(K) VS(M)   CPU(s)     Id ProcessName
-------  ------    -----      ----- -----   ------     -- -----------
   2866     320    33432      45764   203   222.41   1292 svchost
    577      17    23676      50516   265    50.58   4388 WINWORD
    826      11    75448      76712   188    19.77   3780 Ps
   1367      14    73152      88736   216    61.69    676 Ps
   1612      44    66080      92780   380   900.59   6132 INFOPATH

说明
-----------
此命令显示占用内存最多的五个进程。Sort-Object cmdlet 用于按内存（工作集）使用量对进程排序，Select-Object cmdlet 用于只选择所得到的对象数组的最后五个成员。

示例 4

C:\PS>get-process | select-object -property ProcessName,@{Name="Start Day"; Expression = {$_.StartTime.DayOfWeek}}

ProcessName  StartDay
----         --------
alg          Wednesday
ati2evxx     Wednesday
ati2evxx     Thursday
...

说明
-----------
此命令显示计算机上正在运行的进程的名称和启动日期。

Property 参数的值为 ProcessName 和名为“Start Day”的计算属性。通过使用具有 Name 和 Expression 键的哈希表来添加“Start Day”属性。

示例 5

C:\PS>"a","b","c","a","a","a" | select-object -unique

a
b
c

说明
-----------
此命令显示字符数组中的唯一字符。

示例 6

C:\PS>$a = get-eventlog -log "Windows PowerShell"

C:\PS> $a | select-object -index 0, ($a.count - 1)

说明
-----------
这些命令获取 Windows Powershell 事件日志中的第一个（最新）和最后一个（最旧）事件。

第一条命令使用 Get-EventLog cmdlet 获取 Windows Powershell 日志中的所有事件。它将事件保存在 $a 变量中。

第二条命令使用管道运算符 (|) 将 $a 中的事件发送到 Select-Object cmdlet。Select-Object 命令使用 Index 参数按项目的索引号选择项目。第一个事件的索引为 0。最后一个事件的索引是 $a 中的项数减 1。

示例 7

C:\PS>new-pssession -computername (get-content servers.txt | select-object -skip 1)

说明
-----------
此命令在 Servers.txt 文件中列出的每台计算机上创建一个新的 PSSession，第一台计算机除外。

此命令使用 Select-Object cmdlet 选择计算机名称列表中除第一台计算机外的全部计算机。生成的计算机列表设置为 New-PSSession cmdlet 的 ComputerName 参数的值。

另请参阅

  • Where-Object
  • Group-Object
  • Sort-Object


Select-String

查找字符串和文件中的文本。

语法

Select-String [-Path] <string[]> [-Pattern] <string[]> [-AllMatches] [-CaseSensitive] [-Context <Int32[]>] [-Encoding <string>] [-Exclude <string[]>] [-Include <string[]>] [-List] [-NotMatch] [-Quiet] [-SimpleMatch] [<CommonParameters>]

Select-String -InputObject <psobject> [-Pattern] <string[]> [-AllMatches] [-CaseSensitive] [-Context <Int32[]>] [-Encoding <string>] [-Exclude <string[]>] [-Include <string[]>] [-List] [-NotMatch] [-Quiet] [-SimpleMatch] [<CommonParameters>]

说明

Select-String cmdlet 在输入字符串和文件中搜索文本和文本模式。您可以像在 UNIX 中使用 Grep、在 Windows 中使用 Findstr 一样使用该命令。

Select-String 以文本行为基础。默认情况下，Select-String 会查找每行中的第一个匹配项，对于每个匹配项，它会显示文件名、行号以及包含匹配项的行中的所有文本。

但是，您可以指示它检测每行中的多个匹配项，显示匹配项前后的文本，或只显示指明是否找到匹配项的布尔值（True 或 False）。

Select-String 使用正则表达式匹配，但它还执行简单匹配，以在输入内容中搜索您指定的文本。

Select-String 可以显示每个输入文件的所有文本匹配项或者在找到第一个匹配项后停止。它还可以显示与指定模式不匹配的所有文本。

您还可以指定 Select-String 应采用特定的字符编码（例如搜索 Unicode 文本文件时）。

参数

-AllMatches

在每个文本行中搜索多个匹配项。若不使用此参数，Select-String 只会查找每个文本行中的第一个匹配项。

当 Select-String 在一个文本行中找到多个匹配项时，它仍然只会为该行发出一个 MatchInfo 对象，但是该对象的 Matches 属性包含所有匹配项。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-CaseSensitive

使匹配项区分大小写。默认情况下，匹配项不区分大小写。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Context <Int32[]>

捕获包含匹配项的行前后的指定行数。这允许您在上下文中查看匹配项。

如果您输入一个数字作为此参数的值，该数字将确定捕获的匹配项前后的行数。如果您输入两个数字作为此参数的值，则第一个数字将确定匹配项前面的行数，第二个数字确定匹配后面的行数。

在默认显示中，包含匹配项的行会通过显示内容第一列中的右尖括号 (ASCII 62) 来指示。无标记行是上下文。

此参数不会更改 Select-String 生成的对象数。Select-String 会为每个匹配项生成一个 MatchInfo (Microsoft.PowerShell.Commands.MatchInfo) 对象。上下文以字符串数组的形式存储在该对象的 Context 属性中。

当您将 Select-String 命令的输出通过管道传递给另一个 Select-String 命令时，接收命令只搜索匹配行（MatchInfo 对象的 Line 属性的值）中的文本，而不会搜索上下文行中的文本。因此，Context 参数在接收 Select-String 命令上无效。

当上下文包括匹配项时，每个匹配项的 MatchInfo 对象都将包括所有上下文行，但是重叠行只会在显示内容中出现一次。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Encoding <string>

指定 Select-String 在搜索文件时应采用的字符编码。默认值为 UTF8。

有效值包括“UTF7”、“UTF8”、“UTF32”、“ASCII”、“Unicode”、“BigEndianUnicode”、“Default”和“OEM”。“Default”是系统当前 ANSI 代码页的编码。“OEM”是操作系统的当前原始设备制造商代码页标识符。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Exclude <string[]>

排除指定项。此参数的值对 Path 参数进行限定。请输入路径元素或模式，例如“*.txt”。允许使用通配符。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Include <string[]>

只包括指定项。此参数的值对 Path 参数进行限定。请输入路径元素或模式，例如“*.txt”。允许使用通配符。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-InputObject <psobject>

指定要搜索的文本。请输入包含文本的变量，或键入可获取文本的命令或表达式。

是否为必需？ | true
位置？ | named
默认值 |
是否接受管道输入？ | true (ByValue)
是否接受通配符？ | false

-List

只返回每个输入文件中的第一个匹配项。默认情况下，Select-String 会为它找到的每个匹配项返回一个 MatchInfo 对象。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-NotMatch

查找与指定模式不匹配的文本。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Path <string[]>

指定要搜索的文件的路径。允许使用通配符。默认位置为本地目录。

指定目录中的文件，如“log1.txt”、“*.doc”或“*.*”。如果只指定一个目录，该命令会失败。

是否为必需？ | true
位置？ | 2
默认值 |
是否接受管道输入？ | true (ByPropertyName)
是否接受通配符？ | false

-Pattern <string[]>

指定要查找的文本。键入字符串或正则表达式。如果您键入字符串，则使用 SimpleMatch 参数。

若要了解正则表达式，请参阅 about_Regular_Expressions。

是否为必需？ | true
位置？ | 1
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Quiet

返回布尔值（True 或 False），而不是 MatchInfo 对象。如果找到模式，则该值为“True”，否则为“False”。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-SimpleMatch

使用简单匹配，而不是正则表达式匹配。在简单匹配中，Select-String 会在输入内容中搜索 Pattern 参数中的文本。它不会将 Pattern 参数的值解释为正则表达式语句。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

<CommonParameters>

此 cmdlet 支持通用参数：-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。有关详细信息，请参阅 about_Commonparameters.

输入和输出

输入类型是指可通过管道传递给 cmdlet 的对象的类型。返回类型是指 Cmdlet 所返回对象的类型。

输入 | System.Management.Automation.PSObject 可以通过管道将具有 ToString 方法的任何对象传递给 Select-String。
输出 | Microsoft.PowerShell.Commands.MatchInfo 或 System.Boolean 默认情况下，输出内容是一组 MatchInfo 对象，每个找到的匹配项对应于一个 MatchInfo 对象。如果使用 Quiet 参数，则输出内容是一个指示是否找到模式的布尔值。

说明

Select-String 类似于 UNIX 中的 Grep 命令和 Windows 中的 FindStr 命令。

若要使用 Select-String，请键入要查找的文本作为 Pattern 参数的值。

若要指定要搜索的文本，请执行以下操作：

-- 以带引号字符串的形式键入文本，然后通过管道将其传递给 Select-String。

-- 将文本字符串存储到变量中，然后将该变量指定为 InputObject 参数的值。

-- 如果文本存储在文件中，则使用 Path 参数指定文件的路径。

默认情况下，Select-String 会将 Pattern 参数的值解释为正则表达式。（有关详细信息，请参阅 about_Regular_Expressions。）不过，您可以使用 SimpleMatch 参数来重写正则表达式匹配。SimpleMatch 参数会在输入内容中查找 Pattern 参数值的实例。

Select-String 的默认输出是 MatchInfo 对象，它包含有关匹配项的详细信息。当您在文件中搜索文本时，该对象中的信息非常有用，因为 MatchInfo 对象具有 Filename 和 Line 之类的属性。当输入内容不是来自文件时，这些参数的值是“InputStream”。

如果您不需要 MatchInfo 对象中的信息，可使用 Quiet 参数，它会返回一个布尔值（True 或 False）以指明是否找到了匹配项，而不返回 MatchInfo 对象。

匹配短语时，Select-String 使用为系统设置的当前区域性。若要查找当前区域性，请使用 Get-Culture cmdlet。

若要查找 MatchInfo 对象的属性，请键入：

select-string -path test.txt -pattern "test" | Get-Member | Format-List -property *

示例 1

C:\PS>"Hello","HELLO" | select-string -pattern "HELLO" -casesensitive

说明
-----------
此命令为通过管道传递给 Select-String 命令的文本执行区分大小写的匹配。

因此，Select-String 只查找“HELLO”，因为“Hello”不匹配。

因为每个带引号的字符串都被视为一行，所以若不使用 CaseSensitive 参数，Select-String 会将这两个字符串都识别为匹配项。

示例 2

C:\PS>select-string -path *.xml -pattern "the the"

说明
-----------
此命令在当前目录中搜索所有扩展名为 .xml 的文件，并显示这些文件中包含字符串“the the”的各行。

示例 3

C:\PS>select-string -path $pshome\en-US\*.txt -pattern "@"

说明
-----------
此命令在 Windows PowerShell 概念性帮助文件 (about_*.txt) 中搜索有关 at 符号 (@) 用法的信息。

为了指示路径，此命令使用 $pshome 自动变量的值，该变量存储 Windows PowerShell 安装目录的路径。在此示例中，该命令搜索 en-US 子目录，该目录包含 Windows PowerShell 的美国英语版帮助文件。

示例 4

C:\PS>function search-help
{
    $pshelp = "$pshome\es\about_*.txt", "$pshome\en-US\*dll-help.xml"
    select-string -path $pshelp -pattern $args[0]
}

说明
-----------
这一简单函数使用 Select-String cmdlet 在 Windows PowerShell 帮助文件中搜索特定字符串。在此示例中，该函数在“en-US”子目录中搜索美国英语语言文件。

若要使用该函数查找字符串（如“psdrive”），请键入“search-help psdrive”。

若要在任何 Windows PowerShell 控制台中使用此函数，请将路径更改为指向系统上的 Windows PowerShell 帮助文件，然后将该函数粘贴到您的 Windows PowerShell 配置文件中。

示例 5

C:\PS>$events = get-eventlog -logname application -newest 100

C:\PS> $events | select-string -inputobject {$_.message} -pattern "failed"

说明
-----------
此示例在事件查看器的应用程序日志的 100 个最新事件中搜索字符串“failed”。

第一条命令使用 Get-EventLog cmdlet 从应用程序事件日志中获取 100 个最新事件。然后，它将事件存储在 $events 变量中。

第二条命令使用管道运算符 (|) 将 $events 变量中的对象发送到 Select-String。它使用 InputObject 参数代表来自 $events 变量的输入。InputObject 参数的值是每个通过管道传递的对象的 Message 属性。当前对象由 $_ 符号表示。

当每个事件到达管道中时，Select-String 会在它的 Message 属性值中搜索“failed”字符串，然后显示包含匹配项的所有行。

示例 6

C:\PS>get-childitem c:\windows\system32\* -include *.txt -recurse |
select-string -pattern "Microsoft" -casesensitive

说明
-----------
此命令检查 C:\Windows\System32 子目录中所有扩展名为 .txt 的文件，并搜索字符串“Microsoft”。CaseSensitive 参数指明“Microsoft”中的“M”必须大写，其余字符必须小写，以便 Select-String 按此条件查找匹配项。

示例 7

C:\PS>select-string -path process.txt -pattern idle, svchost -notmatch

说明
-----------
此命令查找 Process.txt 文件中不包括“idle”或“svchost”字词的文本行。

示例 8

C:\PS>$f = select-string -path audit.log -pattern "logon failed" -context 2, 3

C:\PS> $f.count

C:\PS> ($f)[0].context | format-list

说明
-----------
第一条命令在 Audit.Log 文件中搜索短语“logon failed”。它使用 Context 参数捕获匹配项的前 2 行和后 3 行。

第二条命令使用对象数组的 Count 属性来显示找到的匹配项数，在本例中为 2。

第三条命令显示第一个 MatchInfo 对象的 Context 属性中存储的行。它使用数组表示法指明第一个匹配项（在从零开始的数组中为匹配项 0），然后使用 Format-List cmdlet 以列表形式显示 Context 属性的值。

输出内容包括两个 MatchInfo 对象，每个检测到的匹配项一个。上下文行存储在 MatchInfo 对象的 Context 属性中。

示例 9

C:\PS>$a = get-childitem $pshome\en-us\about*.help.txt | select-string -pattern transcript

C:\PS> $b = get-childitem $pshome\en-us\about*.help.txt | select-string -pattern transcript -allmatches

C:\PS> $a
C:\Windows\system32\WindowsPowerShell\v1.0\en-us\about_Pssnapins.help.txt:39:       Start-Transcript and Stop-Transcript.

C:\PS> $b
C:\Windows\system32\WindowsPowerShell\v1.0\en-us\about_Pssnapins.help.txt:39:       Start-Transcript and Stop-Transcript.

C:\PS>> $a.matches
Groups   : {Transcript}
Success  : True
Captures : {Transcript}
Index    : 13
Length   : 10
Value    : Transcript

C:\PS> $b.matches
Groups   : {Transcript}
Success  : True
Captures : {Transcript}
Index    : 13
Length   : 10
Value    : Transcript

Groups   : {Transcript}
Success  : True
Captures : {Transcript}
Index    : 33
Length   : 10
Value    : Transcript

说明
-----------
此示例说明 Select-String 的 AllMatches 参数的作用。AllMatches 会查找一行中的所有模式匹配，而不是只查找每行中的第一个匹配项。

该示例中的第一条命令在 Windows PowerShell 概念性帮助文件（“about”帮助）中搜索单词“transcript”。第二条命令与之相同，只不过它使用 AllMatches 参数。

第一条命令的输出保存在 $a 变量中，第二条命令的输出保存在 $b 变量中。

当您显示变量的值时，默认显示是相同的，如输出示例中所示。

但是，第五条和第六条命令会显示每个对象的 Matches 属性的值。第一条命令的 Matches 属性只包含一个匹配项（也就是一个 System.Text.RegularExpressions.Match 对象），而第二条命令的 Matches 属性包含该行中两个匹配项的对象。

另请参阅

  • about_Comparison_Operators
  • about_Regular_Expressions


Select-XML

在 XML 字符串或文档中查找文本。

语法

Select-XML -Content <string[]> [-Xpath] <string> [-命名空间 <hashtable>] [<CommonParameters>]

Select-XML [-Path] <string[]> [-Xpath] <string> [-命名空间 <hashtable>] [<CommonParameters>]

Select-XML [-Xml] <XmlNode[]> [-Xpath] <string> [-命名空间 <hashtable>] [<CommonParameters>]

说明

Select-XML cmdlet 使您可以使用 XPath 查询来搜索 XML 字符串或文档中的文本。输入 XPath 查询，并使用 Content、Path 或 Xml 参数指定要搜索的 XML。

参数

-Content <string[]>

指定包含要搜索的 XML 的字符串。也可以通过管道将字符串传递给 Select-XML。

是否为必需？ | true
位置？ | named
默认值 | 无
是否接受管道输入？ | true (ByValue)
是否接受通配符？ | false

-命名空间 <hashtable>

指定 XML 中使用的命名空间的哈希表。使用格式 @{<namespaceName> = <namespaceValue>}。

是否为必需？ | false
位置？ | named
默认值 | 无
是否接受管道输入？ | false
是否接受通配符？ | false

-Path <string[]>

指定要搜索的 XML 文件的路径和文件名。允许使用通配符。

是否为必需？ | true
位置？ | 2
默认值 | 无
是否接受管道输入？ | true (ByPropertyName)
是否接受通配符？ | true

-Xml <XmlNode[]>

指定一个或多个 XML 节点。每条命令中都需要 Path 或 Xml 参数。

XML 文档将作为 XML 节点的集合进行处理。如果您通过管道将 XML 文档传递给 Select-XML，则会在文档通过管道时分别搜索每个文档节点。

是否为必需？ | true
位置？ | 2
默认值 | 无
是否接受管道输入？ | true (ByValue, ByPropertyName)
是否接受通配符？ | false

-Xpath <string>

指定 XPath 搜索查询。查询语言区分大小写。此参数是必需的。

是否为必需？ | true
位置？ | 1
默认值 | 无
是否接受管道输入？ | false
是否接受通配符？ | false

<CommonParameters>

此 cmdlet 支持通用参数：-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。有关详细信息，请参阅 about_Commonparameters.

输入和输出

输入类型是指可通过管道传递给 cmdlet 的对象的类型。返回类型是指 Cmdlet 所返回对象的类型。

输入 | System.String or System.Xml.XmlNode 您可以通过管道将路径或 XML 节点传递给 Select-XML。
输出 | System.Xml.XmlElement or System.Xml.XmlText

说明

XPath 是用于识别 XML 文档的组成部分的标准语言。有关 XPath 语言的详细信息，请参阅 MSDN (Microsoft Developer Network) Library 中的“事件选择”主题的“选择筛选器”部分，网址是 http://go.microsoft.com/fwlink/?LinkId=143608。另请参阅 MSDN Library 中的“XPath 参考”，网址是 http://go.microsoft.com/fwlink/?LinkId=143609。

示例 1

C:\PS>$path = "$env:windir\System32\WindowsPowerShell\v1.0\Types.ps1xml"

C:\PS> select-xml -path $path -xpath "/Types/Type/Members/AliasProperty"

说明
-----------
此示例在 Types.ps1xml 文件中搜索 AliasProperty 节点的子项。

示例 2

C:\PS>select-xml -path test*.xml, help.xml -xpath "/Tests/Test[1]/Name"

说明
-----------
此命令使用 Select-XML 在多个 XML 文件中搜索。

示例 3

C:\PS>[xml]$Types = get-content "$env:windir\System32\WindowsPowerShell\v1.0\Types.ps1xml"

C:\PS> select-xml -xml $Types -xpath "//MethodName"

说明
-----------
此示例演示了如何通过管道将 XML 文档传递给搜索路径。

示例 4

C:\PS>$namespace = @{command="http://schemas.microsoft.com/maml/dev/command/2004/10"; maml="http://schemas.microsoft.com/maml/2004/10"; dev="http://schemas.microsoft.com/maml/dev/2004/10"}

C:\PS> $path = "$env:windir\System32\WindowsPowerShell\V1.0\en-us\*dll-Help.xml"

C:\PS> select-xml -path $path -namespace $namespace -xpath "//command:name"

Text                      Node      Path
----                      ----      ----
Add-Computer              name      C:\Windows\System32\WindowsPowerShell\V...
Add-Content               name      C:\Windows\System32\WindowsPowerShell\V...
Checkpoint-Computer       name      C:\Windows\System32\WindowsPowerShell\V...
Clear-Content             name      C:\Windows\System32\WindowsPowerShell\V...
Clear-EventLog            name      C:\Windows\System32\WindowsPowerShell\V...
...

说明
-----------
此示例演示了如何使用 Select-XML cmdlet 搜索 Windows PowerShell 基于 XML 的 cmdlet 帮助文件。

第一条命令创建一个表示 XML 命名空间的哈希表，并将它保存在 $namespace 变量中。

第二条命令将帮助文件的路径保存到 $path 变量中。

第三条命令使用 Select-Xml 通过查找文件中任意位置的 Command:Name 标记来搜索 XML 中的 cmdlet 名称。

示例 5

C:\PS>select-xml -content $xml -xpath "//edition"

C:\PS> $xml = @"
<?xml version="1.0" encoding="utf-8"?>
 <Book>
   <projects>
     <project name="Book1" date="2009-01-20">
       <editions>
          <edition language="English">En.Book1.com</edition>
          <edition language="German">Ge.Book1.Com</edition>
          <edition language="French">Fr.Book1.com</edition>
          <edition language="Polish">Pl.Book1.com</edition>
       </editions>
     </project>
   </projects>
 </Book>
"@

C:\PS> select-xml -content $xml -xpath "//edition"

Text            Node          Path
----            ----          ----
En.Book1.com    edition       InputStream
Ge.Book1.Com    edition       InputStream
Fr.Book1.com    edition       InputStream
Pl.Book1.com    edition       InputStream

C:\PS> $xml | select-xml -xpath "//edition"

Text            Node          Path
----            ----          ----
En.Book1.com    edition       InputStream
Ge.Book1.Com    edition       InputStream
Fr.Book1.com    edition       InputStream
Pl.Book1.com    edition       InputStream

说明
-----------
此示例使用 Select-XML 的 Content 参数搜索 here-string 中的 XML 内容。

第一条命令将 here-string 保存在 $xml 变量中。

第二条命令使用 Content 参数指定 $xml 变量中的 XML。

第三条命令与第二条命令等效。它使用管道运算符 (|) 将 $xml 变量中的 XML 发送到 Select-XML cmdlet。

有关 here-string 的详细信息，请键入 about_Quoting_Rules。

另请参阅

  • ConvertTo-XML


Send-MailMessage

发送电子邮件。

语法

Send-MailMessage [-To] <string[]> [-Subject] <string> -From <string> [[-Body] <string>] [[-SmtpServer] <string>] [-Attachments <string[]>] [-Bcc <string[]>] [-BodyAsHtml] [-Cc <string[]>] [-Credential <PSCredential>] [-DeliveryNotificationOption {<None> | <OnSuccess> | <OnFailure> | <Delay> | <Never>}] [-Encoding <Encoding>] [-Priority {<Normal> | <Low> | <High>}] [-UseSsl] [<CommonParameters>]

说明

Send-MailMessage cmdlet 可从 Windows PowerShell 内发送电子邮件。

参数

-Attachments <string[]>

指定要附加到电子邮件的文件的路径和文件名。您可以使用此参数或通过管道将路径和文件名传递给 Send-MailMessage。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | true (ByValue)
是否接受通配符？ | false

-Bcc <string[]>

指定接收邮件副本但未列为邮件收件人的电子邮件地址。输入名称（可选）和电子邮件地址，如“Name <someone@example.com>”。

是否为必需？ | false
位置？ | named
默认值 | 无
是否接受管道输入？ | false
是否接受通配符？ | false

-Body <string>

指定电子邮件的正文（内容）。

是否为必需？ | false
位置？ | 3
默认值 | 无
是否接受管道输入？ | false
是否接受通配符？ | false

-BodyAsHtml

指示 Body 参数的值包含 HTML。

是否为必需？ | false
位置？ | named
默认值 | False
是否接受管道输入？ | false
是否接受通配符？ | false

-Cc <string[]>

指定电子邮件要抄送 (CC) 到的电子邮件地址。输入名称（可选）和电子邮件地址，如“Name <someone@example.com>”。

是否为必需？ | false
位置？ | named
默认值 | 无
是否接受管道输入？ | false
是否接受通配符？ | false

-Credential <PSCredential>

指定有权执行此操作的用户帐户。默认值为当前用户。

键入用户名，例如“User01”或“Domain01\User01”。或者，输入 PSCredential 对象，例如来自 Get-Credential cmdlet 的对象。

是否为必需？ | false
位置？ | named
默认值 | Current user
是否接受管道输入？ | false
是否接受通配符？ | false

-DeliveryNotificationOption <DeliveryNotificationOptions>

指定电子邮件的送达通知选项。您可以指定多个值。“None”为默认值。此参数的别名为“dno”。

送达通知会通过电子邮件发送到 To 参数的值中指定的地址。

有效值包括：

-- None：无通知。

-- OnSuccess：成功送达时通知。

-- OnFailure：未能送达时通知。

-- Delay：送达延迟时通知。

-- Never：从不通知。

是否为必需？ | false
位置？ | named
默认值 | 无
是否接受管道输入？ | false
是否接受通配符？ | false

-Encoding <Encoding>

指定对正文和主题使用的编码。有效值包括 ASCII、UTF8、UTF7、UTF32、Unicode、BigEndianUnicode、Default 和 OEM。ASCII 是默认值。

是否为必需？ | false
位置？ | named
默认值 | ASCII
是否接受管道输入？ | false
是否接受通配符？ | false

-From <string>

指定用来发送邮件的地址。输入姓名（可选）和电子邮件地址，如“Name <someone@example.com>”。此参数是必需的。

是否为必需？ | true
位置？ | named
默认值 | 无
是否接受管道输入？ | false
是否接受通配符？ | false

-Priority <MailPriority>

指定电子邮件的优先级。此参数的有效值包括 Normal、High 和 Low。Normal 是默认值。

是否为必需？ | false
位置？ | named
默认值 | Normal.
是否接受管道输入？ | false
是否接受通配符？ | false

-SmtpServer <string>

指定发送电子邮件的 SMTP 服务器的名称。

默认值是 $PSEmailServer 首选项变量的值。如果未设置该首选项变量并且省略了此参数，该命令会失败。

是否为必需？ | false
位置？ | 4
默认值 | $PSEmailServer
是否接受管道输入？ | false
是否接受通配符？ | false

-Subject <string>

指定电子邮件的主题。此参数是必需的。

是否为必需？ | true
位置？ | 2
默认值 | 无
是否接受管道输入？ | false
是否接受通配符？ | false

-To <string[]>

指定邮件发送到的地址。输入名称（可选）和电子邮件地址，如“Name <someone@example.com>”。此参数是必需的。

是否为必需？ | true
位置？ | 1
默认值 | 无
是否接受管道输入？ | false
是否接受通配符？ | false

-UseSsl

使用安全套接字层 (SSL) 协议来建立与远程计算机的连接，以便发送邮件。默认情况下，不使用 SSL。

是否为必需？ | false
位置？ | named
默认值 | False
是否接受管道输入？ | false
是否接受通配符？ | false

<CommonParameters>

此 cmdlet 支持通用参数：-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。有关详细信息，请参阅 about_Commonparameters.

输入和输出

输入类型是指可通过管道传递给 cmdlet 的对象的类型。返回类型是指 Cmdlet 所返回对象的类型。

输入 | System.String 您可以通过管道将附件的路径和文件名传递给 Send-MailMessage。
输出 | None 此 cmdlet 将不产生任何输出。

示例 1

C:\PS>send-mailmessage -to "User01 <user01@example.com>" -from "User02 <user02@example.com>" -subject "Test mail"

说明
-----------
此命令将 User01 的电子邮件发送给 User02。

该电子邮件有主题，但没有正文，主题是必需的，正文是可选的。此外，由于未指定 SmtpServer 参数，Send-MailMessage 会对 SMTP 服务器使用 $PSEmailServer 首选项变量的值。

示例 2

C:\PS>send-mailmessage -from "User01 <user01@example.com>" -to "User02 <user02@example.com>", "User03 <user03@example.com>" -subject "Sending the Attachment" -body "Forgot to send the attachment. Sending now." -Attachment "data.csv" -priority High -dno onSuccess, onFailure -smtpServer smtp.fabrikam.com

说明
-----------
此命令将 User01 的含有附件的电子邮件发送给其他两个用户。

它指定优先级值为“High”，并请求在电子邮件送达或发送失败时通过电子邮件接收送达通知。

示例 3

C:\PS>send-mailmessage -to "User01 <user01@example.com>" -from "ITGroup <itdept@example.com>" -cc "User02 <user02@example.com>" -bcc ITMgr <itmgr@example.com> -subject "Don't forget today's meeting!" -credential domain01\admin01 -useSSL

说明
-----------
此命令将 User01 的电子邮件发送给 ITGroup 邮件列表，并抄送 (CC) 给 User02，密件抄送 (BCC) 给 IT 经理 (ITMgr)。

此命令使用域管理员的凭据以及 UseSSL 参数。


Set-Acl

更改指定资源（例如文件或注册表项）的安全描述符。

语法

Set-Acl [-Path] <string[]> [-AclObject] <ObjectSecurity> [-Exclude <string[]>] [-Filter <string>] [-Include <string[]>] [-PassThru] [-Confirm] [-WhatIf] [-UseTransaction] [<CommonParameters>]

说明

Set-Acl cmdlet 更改指定资源（例如文件或注册表项）的安全描述符以便与您所提供的安全描述符中的值相匹配。

要使用 Set-Acl，请使用 Path 参数标识希望更改其安全描述符的资源，并使用 AclObject 参数提供一个包含您要应用的值的安全描述符。Set-Acl 使用 AclObject 参数的值作为模型，并更改资源安全描述符中的值，以便与 AclObject 参数中的值相匹配。

参数

-AclObject <ObjectSecurity>

指定具有所需属性值的 ACL。Set-Acl 将更改由 Path 参数所指定资源的 ACL，使其与指定的安全对象中的值相匹配。

可以将 Get-Acl 命令的输出保存为变量，然后使用 AclObject 参数传递该变量，或者键入 Get-Acl 命令。

是否为必需？ | true
位置？ | 2
默认值 |
是否接受管道输入？ | true (ByValue)
是否接受通配符？ | false

-Exclude <string[]>

忽略指定项。此参数的值对 Path 参数进行限定。请输入路径元素或模式，例如“*.txt”。允许使用通配符。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Filter <string>

以提供程序的格式或语言指定筛选器。此参数的值对 Path 参数进行限定。筛选器的语法（包括通配符的使用）取决于提供程序。筛选器比其他参数更有效，因为提供程序是在检索对象时应用筛选器，而不是在检索对象后再由 Windows PowerShell 筛选对象。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Include <string[]>

只更改指定项。此参数的值对 Path 参数进行限定。请输入路径元素或模式，例如“*.txt”。允许使用通配符。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-PassThru

返回表示安全描述符的对象。默认情况下，此 cmdlet 将不产生任何输出。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Path <string[]>

标识要更改其安全描述符的资源。请输入资源的路径，例如指向文件或注册表项的路径。允许使用通配符。

如果向 Set-Acl 传递安全对象（通过使用 AclObject 参数或从 Get-Acl 向 Set-Acl 传递对象），并省略 Path 参数（名称和值），则 Set-Acl 将使用安全对象中所包括的路径。

是否为必需？ | true
位置？ | 1
默认值 |
是否接受管道输入？ | true (ByPropertyName)
是否接受通配符？ | false

-Confirm

在执行命令之前提示您进行确认。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-WhatIf

描述如果执行该命令会发生什么情况（无需实际执行该命令）。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-UseTransaction

将命令包含在活动事务中。仅当正在执行事务时，此参数才有效。有关详细信息，请参阅 about_Transactions。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

<CommonParameters>

此 cmdlet 支持通用参数：-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。有关详细信息，请参阅 about_Commonparameters.

输入和输出

输入类型是指可通过管道传递给 cmdlet 的对象的类型。返回类型是指 Cmdlet 所返回对象的类型。

输入 | System.Security.AccessControl.ObjectSecurity 可以通过管道将安全描述符传递给 Set-Acl。
输出 | None 或安全对象 默认情况下，Set-Acl 不生成任何输出。但是，如果使用 -Passthru 参数，则生成安全对象。安全对象的类型取决于资源的类型。

说明

Windows PowerShell 文件系统和注册表提供程序支持 Set-Acl cmdlet。同样，可使用该 cmdlet 更改文件、目录和注册表项的安全描述符。

在为一个参数指定多个值时，请使用逗号分隔这些值。例如，“<参数名> <值 1>, <值 2>”。

示例 1

C:\PS>$DogACL = get-acl c:\dog.txt

C:\PS>set-acl -path C:\cat.txt -AclObject $DogACL

说明
-----------
这些命令将 Dog.txt 文件的安全描述符中的值复制到 Cat.txt 文件的安全描述符。在完成这些命令之后，Dog.txt 和 Cat.txt 文件的安全描述符将完全相同。

第一个命令使用 Get-Acl cmdlet 来获取 Dog.txt 文件的安全描述符。赋值运算符 (=) 将把该安全描述符存储在 $DogACL 变量的值中。

第二个命令使用 Set-Acl 将 Cat.txt 的 ACL 中的值更改为 $DogACL 中的值。

Path 参数的值为指向 Cat.txt 文件的路径。AclObject 参数的值为模型 ACL，在此示例中，即为 $DogACL 变量中保存的 Dog.txt 的 ACL。

示例 2

C:\PS>get-acl c:\dog.txt | set-acl -path C:\cat.txt

说明
-----------
此命令与上一示例中的命令几乎相同，不同的是此命令使用管道运算符将在 Get-Acl 命令中检索到的安全描述符发送给 Set-Acl 命令。

第一个命令使用 Get-Acl cmdlet 来获取 Dog.txt 文件的安全描述符。管道运算符 (|) 将表示 Dog.txt 安全描述符的对象传递给 Set-Acl 命令。

第二个命令使用 Set-Acl 将 Dog.txt 的安全描述符应用到 Cat.txt 中。在完成该命令之后，Dog.txt 和 Cat.txt 文件的 ACL 将完全相同。

示例 3

C:\PS>$newACL = get-acl file0.txt

C:\PS>get-childitem c:\temp -recurse -include *.txt -force | set-acl -aclobject $newacl

说明
-----------
这些命令将 File0.txt 文件中的安全描述符应用到 C:\Temp 目录及其所有子目录中的所有文本文件。

第一个命令获取当前目录中 File0.txt 文件的安全描述符，并使用赋值运算符 (=) 将其存储在 $newACL 变量中。

管道中的第一个命令使用 Get-ChildItem cmdlet 获取 C:\Temp 目录中的所有文本文件。Recurse 参数将该命令扩展到 C:\temp 的所有子目录。Include 参数将检索的文件限制为具有“.txt”文件扩展名的文件。Force 参数获取本来会被排除的隐藏文件。（无法使用“c:\temp\*.txt”，因为 Recurse 参数作用于目录，而不是文件。）

管道运算符 (|) 将表示检索到的文件的对象发送到 Set-Acl 命令，该命令将 AclObject 参数中的安全描述符应用到管道中的所有文件。

实际上，最好将 Whatif 参数与可以影响多个资源的所有 Set-Acl 命令一起使用。在此示例中，管道中的第二个命令将为“set-acl -aclobject $newacl -whatif”。此命令列出将受该命令影响的文件。在检索结果之后，可以不带 Whatif 参数再次运行该命令。

另请参阅

  • Get-Acl


Set-Alias

在当前 Windows PowerShell 会话中为 cmdlet 或其他命令元素创建或更改别名（替代名称）。

语法

Set-Alias [-Name] <string> [-Value] <string> [-Description <string>] [-Force] [-Option {<None> | <ReadOnly> | <Constant> | <Private> | <AllScope>}] [-PassThru] [-Scope <string>] [-Confirm] [-WhatIf] [<CommonParameters>]

说明

Set-Alias cmdlet 为 cmdlet 或命令元素（例如函数、脚本、文件或其他可执行程序）创建或更改别名（替代名称）。还可以使用 Set-Alias 将当前别名重新分配给一个新命令，或更改别名的任何属性（例如其说明）。除非将别名添加到 Windows PowerShell 配置文件中，否则在退出会话或关闭 Windows PowerShell 时，对该别名所做的更改将会丢失。

参数

-Description <string>

指定别名的说明。可以键入任何字符串。如果说明包括空格，请将其括在引号中。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Force

允许该 cmdlet 设置只读别名。使用 Option 参数可创建只读别名。Force 参数不能设置常量别名。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Name <string>

指定新别名。别名中可以使用任何字母数字字符，但第一个字符不能是数字。

是否为必需？ | true
位置？ | 1
默认值 |
是否接受管道输入？ | true (ByPropertyName)
是否接受通配符？ | false

-Option <ScopedItemOptions>

设置别名的 Options 属性的值。

有效值包括：

-- None：不设置任何选项。（默认）

-- ReadOnly：除非使用 Force 参数，否则无法更改别名的属性。您可以使用 Remove-Item 来删除别名。

-- Constant：无法删除别名，也无法更改其属性。Constant 仅在您创建别名时才可用。不能将现有别名的选项更改为 Constant。

-- Private：别名只在 Scope 参数指定的作用域内可用。在所有其他作用域中它都不可见。

-- AllScope：别名将复制到创建的所有新作用域中。

若要查看别名的 Options 属性，请键入“get-alias | Format-Table -property Name, Definition, Options -autosize”。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-PassThru

返回一个表示别名的对象。默认情况下，此 cmdlet 将不产生任何输出。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Scope <string>

指定此别名的有效作用域。有效值包括“Global”、“Local”、“Script”或者相对于当前作用域的数字（0 到作用域数，其中 0 是指当前作用域，1 是指其父作用域）。默认值为“Local”。有关详细信息，请参阅 about_Scopes。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Value <string>

指定作为别名的 cmdlet 或命令元素的名称。

是否为必需？ | true
位置？ | 2
默认值 |
是否接受管道输入？ | true (ByPropertyName)
是否接受通配符？ | false

-Confirm

在执行命令之前提示您进行确认。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-WhatIf

描述如果执行该命令会发生什么情况（无需实际执行该命令）。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

<CommonParameters>

此 cmdlet 支持通用参数：-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。有关详细信息，请参阅 about_Commonparameters.

输入和输出

输入类型是指可通过管道传递给 cmdlet 的对象的类型。返回类型是指 Cmdlet 所返回对象的类型。

输入 | None 不能通过管道将输入传递给此 cmdlet。
输出 | None 或 System.Management.Automation.AliasInfo 如果使用 PassThru 参数，则 Set-Alias 生成一个表示别名的 System.Management.Automation.AliasInfo 对象。否则，此 cmdlet 将不产生任何输出。

说明

别名是 cmdlet 或命令元素的替代名称或昵称。若要运行 cmdlet，您可以使用其全名或任何有效别名。有关详细信息，请参阅 about_Aliases。

若要创建新别名，请使用 Set-Alias 或 New-Alias。若要删除别名，请使用 Remove-Item。

一个 cmdlet 可以具有多个别名，但一个别名一次只能与一个 cmdlet 相关联。如果使用 set-alias 将别名与其他 cmdlet 相关联，则该别名将不再与原来的 cmdlet 相关联。

您可以为 cmdlet 创建别名，但不能为带有参数和值的命令创建别名。例如，可以为 Set-Location 创建别名，但不能为“Set-Location C:\Windows\System32”创建别名。若要为某个命令创建别名，请创建一个包含该命令的函数，然后为此函数创建别名。

若要从某个会话中保存别名并将其用于其他会话中，请将 set-alias 命令添加到您的 Windows PowerShell 配置文件中。默认情况下配置文件不存在。若要在 $profile 变量中存储的路径中创建一个配置文件，请键入“new-item -type file -force $profile”。若要查看 $profile 变量的值，请键入“$profile”。

也可以通过使用 Export-Alias 将会话中的别名复制到文件中来保存别名，然后可使用 Import-Alias 将这些别名添加到新会话的别名列表中。

还可以使用 Set-Alias 的内置别名“sal”来对其进行引用。有关详细信息，请参阅 about_Aliases。

示例 1

C:\PS>set-alias -name list -value get-childitem

说明
-----------
此命令为 Get-ChildItem cmdlet 创建别名“list”。创建该别名后，您可以在命令行和脚本中使用“list”来代替“Get-ChildItem”。

示例 2

C:\PS>set-alias list get-location

说明
-----------
此命令将别名“list”与 Get-Location cmdlet 相关联。如果“list”是另一个 cmdlet 的别名，则此命令将更改其关联，以便让其仅作为 Get-Location 的别名。

此命令使用与上一示例中的命令相同的格式，但其省略了可选参数名称 -Name 和 -Value。在省略参数名称时，这些参数的值必须以指定的顺序出现在命令中。在此示例中，-Name 的值（“list”）必须为第一个参数，-Value 的值（“get-location”）必须为第二个参数。

示例 3

C:\PS>set-alias scrub remove-item -option readonly -passthru | format-list

说明
-----------
此命令将别名“scrub”与 Remove-Item cmdlet 相关联。它使用“ReadOnly”选项来防止删除该别名或防止将其分配给其他 cmdlet。

PassThru 参数指示 Windows PowerShell 将表示新别名的对象通过管道传递给 Format-List cmdlet。如果省略了 PassThru 参数，则不会显示此 cmdlet 的任何输出（以列表或其他形式）。

示例 4

C:\PS>Set-Alias np c:\windows\notepad.exe

说明
-----------
此命令将别名“np”与 Notepad 的可执行文件相关联。完成此命令后，若要从 Windows PowerShell 命令行中打开 Notepad，则只需键入“np”。

此示例演示了如何能为 cmdlet 之外的可执行文件和其他元素创建别名。

为使命令更为通用，您可以使用“Windir”环境变量 (${env:windir}) 来表示 C\Windows 目录。此命令的通用版本是“set-alias np ${env:windir}\notepad.exe”。

示例 5

C:\PS>function CD32 {set-location c:\windows\system32}

C:\PS>set-alias go cd32

说明
-----------
这些命令显示了如何为带有参数的命令（甚至是包含多个命令的管道）分配别名。

您可以为 cmdlet 创建别名，但不能为由 cmdlet 及其参数组成的命令创建别名。不过，如果您将该命令放在函数或脚本中，则您可以创建一个有用函数或脚本名称，并可为该函数或脚本创建一个或多个别名。

在此示例中，用户希望为命令“set-location c:\windows\system32”（其中“set-location”是 cmdlet，而“C:\Windows\System32”是 Path 参数的值）创建一个别名。

为执行此操作，第一条命令创建了一个名为“CD32”的函数，其中包含 Set-Location 命令。

第二个命令为 CD32 函数创建别名“go”。然后，若要运行 Set-Location 命令，用户可以键入“CD32”或“go”。

另请参阅

  • Get-Alias
  • New-Alias
  • Export-Alias
  • Import-Alias


Set-AuthenticodeSignature

为 Windows PowerShell 脚本或其他文件添加 Authenticode 签名。

语法

Set-AuthenticodeSignature [-FilePath] <string[]> [-证书] <X509Certificate2> [-Force] [-HashAlgorithm <string>] [-IncludeChain <string>] [-TimestampServer <string>] [-Confirm] [-WhatIf] [<CommonParameters>]

说明

Set-AuthenticodeSignature cmdlet 可为支持目标接口包 (SIP) 的任何文件添加 Authenticode 签名。

在 Windows PowerShell 脚本文件中，签名采取文本块的形式，该文本块指示脚本中所执行指令的结束位置。如果运行此 cmdlet 时文件中已有签名，该签名将被删除。

参数

-证书 <X509Certificate2>

指定将用于对脚本或文件进行签名的证书。输入存储表示证书的对象的变量，或输入获取证书的表达式。

要查找证书，请在证书驱动器 (Cert:) 中使用 Get-PfxCertificate 或 Get-ChildItem cmdlet。如果证书无效或者没有代码签名颁发机构，该命令将失败。

是否为必需？ | true
位置？ | 2
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-FilePath <string[]>

指定要对其进行签名的文件的路径。

是否为必需？ | true
位置？ | 1
默认值 |
是否接受管道输入？ | true (ByValue, ByPropertyName)
是否接受通配符？ | false

-Force

允许该 cmdlet 将签名追加到只读文件。即使使用 Force 参数，该 cmdlet 也无法覆盖安全限制。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-HashAlgorithm <string>

指定 Windows 用于计算文件的数字签名的哈希算法。默认值为 SHA1，这是 Windows 默认的哈希算法。

使用其他哈希算法签名的文件可能在其他系统上无法识别。

是否为必需？ | false
位置？ | named
默认值 | SHA1
是否接受管道输入？ | false
是否接受通配符？ | false

-IncludeChain <string>

确定证书信任链中的哪些证书包括在数字签名中。默认值为“NotRoot”。

有效值包括：

-- Signer：仅包括签名者的证书。

-- NotRoot：包括证书链中的所有证书（根证书颁发机构除外）。

--All：包括证书链中的所有证书。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-TimestampServer <string>

使用指定的时间戳服务器向签名中添加时间戳。请以字符串形式键入时间戳服务器的 URL。

时间戳表示向文件中添加证书的确切时间。时间戳可防止证书过期时脚本运行失败，因为用户和程序可以在签名时确认证书有效。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Confirm

在执行命令之前提示您进行确认。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-WhatIf

描述如果执行该命令会发生什么情况（无需实际执行该命令）。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

<CommonParameters>

此 cmdlet 支持通用参数：-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。有关详细信息，请参阅 about_Commonparameters.

输入和输出

输入类型是指可通过管道传递给 cmdlet 的对象的类型。返回类型是指 Cmdlet 所返回对象的类型。

输入 | System.String 可以通过管道将包含文件路径的字符串传递给 Set-AuthenticodeSignature。
输出 | System.Management.Automation.Signature

示例 1

C:\PS>$cert=Get-ChildItem -Path cert:\CurrentUser\my -CodeSigningCert

C:\PS>Set-AuthenticodeSignature -FilePath PsTestInternet2.ps1 -certificate $cert

说明
-----------
这些命令从 Windows PowerShell 证书提供程序中检索代码签名证书，并使用该证书对 Windows PowerShell 脚本进行签名。

第一个命令使用 Get-ChildItem cmdlet 和 Windows PowerShell 证书提供程序来获取证书存储中 Cert:\CurrentUser\My 子目录下的证书。（Cert: 驱动器是由证书提供程序公开的驱动器。）仅由证书提供程序支持的 CodeSigningCert 参数将检索的证书限制为具有代码签名颁发机构的证书。此命令将结果存储在 $cert 变量中。

第二个命令使用 Set-AuthenticodeSignature cmdlet 对 PSTestInternet2.ps1 脚本进行签名。它使用 FilePath 参数指定脚本名称，并使用 Certificate 参数指定证书存储在 $cert 变量中。

示例 2

C:\PS>$cert = Get-PfxCertificate C:\Test\Mysign.pfx

C:\PS>Set-AuthenticodeSignature -Filepath ServerProps.ps1 -Cert $cert

说明
-----------
这些命令使用 Get-PfxCertificate cmdlet 查找代码签名证书。然后，它们使用该证书对 Windows PowerShell 脚本进行签名。

第一个命令使用 Get-PfxCertificate cmdlet 查找 C:\Test\MySign.pfx 证书，并将其存储在 $cert 变量中。

第二个命令使用 Set-AuthenticodeSignature 对脚本进行签名。Set-AuthenticodeSignature 的 FilePath 参数指定要对其进行签名的脚本文件的路径，Cert 参数将包含证书的 $cert 变量传递到 Set-AuthenticodeSignature。

如果证书文件受密码保护，Windows PowerShell 将提示您输入密码。

示例 3

C:\PS>Set-AuthenticodeSignature -filepath c:\scripts\Remodel.ps1 -certificate $cert -IncludeChain All -TimeStampServer "http://timestamp.fabrikam.com/scripts/timstamper.dll"

说明
-----------
此命令添加信任链中包括根证书颁发机构，并由第三方时间戳服务器签名的数字签名。

此命令使用 FilePath 参数指定要对其进行签名的脚本，并使用 Certificate 参数指定保存在 $cert 变量中的证书。它使用 IncludeChain 参数来包含信任链（包括根证书颁发机构）中的所有签名。此外，还使用 TimeStampServer 参数向签名中添加时间戳。这可防止证书过期时脚本运行失败。

另请参阅

  • about_Signing
  • about_Execution_Policies
  • Get-AuthenticodeSignature
  • Get-PfxCertificate
  • Get-ExecutionPolicy
  • Set-ExecutionPolicy


Set-Content

在项中写入内容或用新内容替换其中的内容。

语法

Set-Content [-LiteralPath] <string[]> [-Value] <Object[]> [-Credential <PSCredential>] [-Exclude <string[]>] [-Filter <string>] [-Force] [-Include <string[]>] [-PassThru] [-Confirm] [-WhatIf] [-UseTransaction] [<CommonParameters>]

Set-Content [-Path] <string[]> [-Value] <Object[]> [-Credential <PSCredential>] [-Exclude <string[]>] [-Filter <string>] [-Force] [-Include <string[]>] [-PassThru] [-Confirm] [-WhatIf] [-UseTransaction] [<CommonParameters>]

说明

Set-Content cmdlet 是一个字符串处理 cmdlet，用来向指定的项（如文件）中写入内容或替换其中的内容。Add-Content cmdlet 将内容附加到文件中，而 Set-Content 替换现有内容。您可以在命令中键入内容，也可以通过管道将内容发送给 Set-Content。

参数

-Credential <PSCredential>

指定有权执行此操作的用户帐户。默认值为当前用户。

键入用户名，如“User01”或“Domain01\User01”；或输入 PSCredential 对象，如 Get-Credential cmdlet 输入的一个 PSCredential 对象。如果键入用户名，则将提示您输入密码。

随同 Windows PowerShell 一起安装的任何提供程序都不支持此参数

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | true (ByPropertyName)
是否接受通配符？ | false

-Exclude <string[]>

忽略指定项。此参数的值对 Path 参数进行限定。请输入路径元素或模式，例如“*.txt”。允许使用通配符。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Filter <string>

以提供程序的格式或语言指定筛选器。此参数的值对 Path 参数进行限定。筛选器的语法（包括通配符的使用）取决于提供程序。筛选器比其他参数更有效，因为提供程序是在检索对象时应用筛选器，而不是在检索对象后再由 Windows PowerShell 筛选对象。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Force

允许该 cmdlet 设置文件内容（即使该文件是只读的）。不同提供程序有不同的实现。有关详细信息，请参阅 about_Providers。即使使用 Force 参数，该 cmdlet 也无法覆盖安全限制。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Include <string[]>

只更改指定项。此参数的值对 Path 参数进行限定。请输入路径元素或模式，例如“*.txt”。允许使用通配符。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-LiteralPath <string[]>

指定将接受内容的项的路径。与 Path 不同，LiteralPath 的值严格按照所键入的形式使用。不会将任何字符解释为通配符。如果路径包括转义符，请将其括在单引号中。单引号会告知 Windows PowerShell 不要将所有字符都解释为转义序列。

是否为必需？ | true
位置？ | 1
默认值 |
是否接受管道输入？ | true (ByPropertyName)
是否接受通配符？ | false

-PassThru

返回一个表示内容的对象。默认情况下，此 cmdlet 将不产生任何输出。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Path <string[]>

指定将接受内容的项的路径。允许使用通配符。

是否为必需？ | true
位置？ | 1
默认值 |
是否接受管道输入？ | true (ByPropertyName)
是否接受通配符？ | false

-Value <Object[]>

为项指定新的内容。

是否为必需？ | true
位置？ | 2
默认值 |
是否接受管道输入？ | true (ByValue, ByPropertyName)
是否接受通配符？ | false

-Confirm

在执行命令之前提示您进行确认。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-WhatIf

描述如果执行该命令会发生什么情况（无需实际执行该命令）。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-UseTransaction

将命令包含在活动事务中。仅当正在执行事务时，此参数才有效。有关详细信息，请参阅 about_Transactions。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

<CommonParameters>

此 cmdlet 支持通用参数：-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。有关详细信息，请参阅 about_Commonparameters.

输入和输出

输入类型是指可通过管道传递给 cmdlet 的对象的类型。返回类型是指 Cmdlet 所返回对象的类型。

输入 | System.Object 可以通过管道将包含新的项值的对象传递给 Set-Content。
输出 | None 或 System.String 如果使用 Passthru 参数，则 Set-Content 生成一个表示内容的 System.String 对象。否则，此 cmdlet 将不产生任何输出。

说明

还可以使用 Set-Content 的内置别名“sc”来对其进行引用。有关详细信息，请参阅 about_Aliases。

Set-Content 用于字符串处理。如果通过管道将非字符串对象传递给 Set-Content，它会在写入之前将该对象转换为字符串。若要将对象写入文件，请使用 Out-File。

Set-Content cmdlet 用于处理由任何提供程序公开的数据。要列出会话中可用的提供程序，请键入“Get-PsProvider”。有关详细信息，请参阅 about_Providers。

示例 1

C:\PS>set-content -path C:\Test1\test*.txt -value "Hello, World"

说明
-----------
此命令将 Test1 目录中所有名称以“test”开头的文件中的内容替换为“Hello, World”。这个示例演示如何通过在命令中键入来指定内容。

示例 2

C:\PS>get-date | set-content C:\Test1\date.csv

说明
-----------
此命令创建一个只包含当前日期和时间的逗号分隔的变量长度 (csv) 文件。它使用 Get-Date cmdlet 来获取当前的系统日期和时间。管道运算符将结果传递给 Set-Content，后者创建文件并写入内容。

如果 Test1 目录不存在，命令将失败，但是如果文件不存在，此命令将创建它。

示例 3

C:\PS>(get-content Notice.txt) | foreach-object {$_ -replace "Warning", "Caution"} | set-content Notice.txt

说明
-----------
此命令将 Notice.txt 文件中出现的所有“Warning”实例替换为“Caution”。

它使用 Get-Content cmdlet 来获取 Notice.txt 的内容。管道运算符将结果发送到 ForEach-Object cmdlet，后者将表达式应用到 Get-Content 中的每一行内容。此表达式使用“$_”符号引用当前项，使用 Replace 参数指定要替换的文本。

另一个管道运算符将更改的内容发送到 Set-Content，后者用新的内容替换 Notice.txt 中的文本。

Get-Content 命令外面的圆括号可确保在 Get 操作完成后才开始 Set 操作。Without them, the command will fail because the two functions will be trying to access the same file.

另请参阅

  • about_Providers
  • Add-Content
  • Get-Content
  • Clear-Content


Set-Date

将计算机上的系统时间更改为指定的时间。

语法

Set-Date [-Adjust] <TimeSpan> [-DisplayHint {<Date> | <Time> | <DateTime>}] [-Confirm] [-WhatIf] [<CommonParameters>]

Set-Date [-日期] <DateTime> [-DisplayHint {<Date> | <Time> | <DateTime>}] [-Confirm] [-WhatIf] [<CommonParameters>]

说明

Set-Date cmdlet 将计算机上的系统日期和时间更改为指定的日期和时间。通过键入字符串或通过将 DateTime 或 TimeSpan 对象传递给 Set-Date，可以指定新的日期和/或时间。若要指定新的日期或时间，请使用 Date 参数。若要指定更改间隔，请使用 Adjust 参数。

参数

-Adjust <TimeSpan>

向当前日期和时间中添加指定的值，或从中减去指定的值。您可以采用您的区域设置的标准日期和时间格式来键入调整，也可以使用 Adjust 参数将 TimeSpan 对象从 New-TimeSpan 传递给 Set-Date。

是否为必需？ | true
位置？ | 1
默认值 |
是否接受管道输入？ | true (ByPropertyName)
是否接受通配符？ | false

-日期 <DateTime>

将日期和时间更改为指定的值。您可以采用短日期格式键入新日期，并以您的区域设置的标准时间格式键入时间。或者，您也可以从 Get-Date 传递 Date-Time 对象。

如果指定了日期而未指定时间，则 Set-Date 会将时间更改为指定日期的午夜 12 点。如果仅指定了时间，则不会更改日期。

是否为必需？ | true
位置？ | 1
默认值 |
是否接受管道输入？ | true (ByValue, ByPropertyName)
是否接受通配符？ | false

-DisplayHint <DisplayHintType>

确定要显示哪些日期和时间元素。

有效值包括：

-- date：仅显示日期

-- time：仅显示时间

-- datetime：显示日期和时间

此参数仅影响显示内容，而不影响 Get-Date 检索到的 DateTime 对象。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Confirm

在执行命令之前提示您进行确认。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-WhatIf

描述如果执行该命令会发生什么情况（无需实际执行该命令）。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

<CommonParameters>

此 cmdlet 支持通用参数：-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。有关详细信息，请参阅 about_Commonparameters.

输入和输出

输入类型是指可通过管道传递给 cmdlet 的对象的类型。返回类型是指 Cmdlet 所返回对象的类型。

输入 | System.DateTime 可以通过管道将日期传递给 Set-Date。
输出 | System.DateTime Set-Date 返回一个表示它所设置的日期的对象。

说明

请谨慎使用此 cmdlet。更改计算机上的日期和时间。此更改可能会使计算机无法接收由日期或时间触发的系统范围的事件和更新。使用 -WhatIf 和 -Confirm 参数可避免出现错误。

您可以在 Set-Date 中使用 DateTime 和 TimeSpan 对象的标准 .NET 方法，例如 AddDays、AddMonths 和 FromFileTime。有关详细信息，请参阅“DateTime 方法”和“TimeSpan 方法”。

示例 1

C:\PS>Set-Date -Date (Get-Date).AddDays(3)

说明
-----------
此命令对当前系统日期加上三天。它不会影响时间。此命令使用 Date 参数来指定日期。它使用 Get-Date cmdlet 来获取当前日期和时间，并使用值 3（天）对 DateTime 对象应用 AddDays .NET 方法。

示例 2

C:\PS>set-date -adjust -0:10:0 -displayHint time

说明
-----------
此命令将当前系统时间回调 10 分钟。它使用 Adjust 参数以区域设置的标准时间格式来指定更改间隔和时间更改（减去 10 分钟）。DisplayHint 参数指示 Windows PowerShell 仅显示时间，但不会影响 Set-Date 返回的 DateTime 对象。

示例 3

C:\PS>$t = get-date

C:\PS>set-date -date $t

说明
-----------
这些命令将计算机上的系统日期和时间更改为变量 $t 中保存的日期和时间。第一条命令获取日期并将其存储在 $t 中。第二条命令使用 Date 参数将 $t 中的 DateTime 对象传递给 Set-Date cmdlet。

示例 4

C:\PS>$90mins = new-timespan -minutes 90

C:\PS>set-date -adjust $90mins

说明
-----------
这些命令将本地计算机上的系统时间前调 90 分钟。第一条命令使用 New-Timespan cmdlet 创建具有 90 分钟间隔的 TimeSpan 对象，然后将该 TimeSpan 对象保存到 $90mins 变量中。第二条命令使用 Set-Date 的 Adjust 参数按照 $90mins 变量中的 TimeSpan 对象值来调整日期。

另请参阅

  • Get-Date
  • New-TimeSpan


Set-ExecutionPolicy

更改 Windows PowerShell 执行策略的用户首选项。

语法

Set-ExecutionPolicy [-ExecutionPolicy] {<Unrestricted> | <RemoteSigned> | <AllSigned> | <Restricted> | <Default> | <Bypass> | <Undefined>} [[-Scope] {<Process> | <CurrentUser> | <LocalMachine> | <UserPolicy> | <MachinePolicy>}] [-Force] [-Confirm] [-WhatIf] [<CommonParameters>]

说明

Set-ExecutionPolicy 可更改 Windows PowerShell 执行策略的用户首选项。

要在 Windows Vista、Windows Server 2008 和 Windows 的更高版本上运行此命令，必须使用“以管理员身份运行”选项启动 Windows PowerShell，即使您是计算机上 Administrators 组的成员。

执行策略是 Windows PowerShell 安全策略的一部分。它确定是否可以加载配置文件（包括 Windows PowerShell 配置文件）和运行脚本，并且确定哪些脚本（如果有）在运行之前必须进行数字签名。

有关详细信息，请参阅 about_Execution_Policies。

参数

-ExecutionPolicy <ExecutionPolicy>

为 shell 指定新的执行策略。参数名（“Name”）为可选项。

有效值包括：

-- Restricted：不加载配置文件或运行脚本。默认值为“Restricted”。

-- AllSigned：要求所有脚本和配置文件由可信发布者签名，包括在本地计算机编写的脚本。

-- RemoteSigned：要求从 Internet 下载的所有脚本和配置文件均由可信发布者签名。

-- Unrestricted：加载所有配置文件并运行所有脚本。如果运行从 Internet 下载的未签名脚本，则系统将提示您需要相关权限才能运行该脚本。

-- Bypass：不阻止任何执行项，不显示警告和提示。

-- Undefined：从当前作用域删除当前分配的执行策略。此参数将不会删除在组策略作用域中设置的执行策略。

是否为必需？ | true
位置？ | 1
默认值 |
是否接受管道输入？ | true (ByValue)
是否接受通配符？ | false

-Force

禁止显示所有提示。默认情况下，Set-ExecutionPolicy 会在您每次更改执行策略时显示警告。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Scope <ExecutionPolicyScope>

指定执行策略的作用域。默认值为 LocalMachine。

有效值包括：

-- Process：执行策略仅对当前的 Windows PowerShell 进程起作用。

-- CurrentUser：执行策略仅对当前用户起作用。

-- LocalMachine：执行策略对计算机上的所有用户均起作用。

若要删除特定作用域的执行策略，请将该作用域的执行策略设置为 Undefined。

是否为必需？ | false
位置？ | 2
默认值 | LocalMachine
是否接受管道输入？ | true (ByPropertyName)
是否接受通配符？ | false

-Confirm

在执行命令之前提示您进行确认。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-WhatIf

描述如果执行该命令会发生什么情况（无需实际执行该命令）。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

<CommonParameters>

此 cmdlet 支持通用参数：-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。有关详细信息，请参阅 about_Commonparameters.

输入和输出

输入类型是指可通过管道传递给 cmdlet 的对象的类型。返回类型是指 Cmdlet 所返回对象的类型。

输入 | Microsoft.PowerShell.ExecutionPolicy, System.String 可以将执行策略对象或包含执行策略的名称的字符串通过管道传递到 Set-ExecutionPolicy。
输出 | None 此 cmdlet 不返回任何输出。

说明

在使用 Set-ExecutionPolicy 时，将向注册表中写入新的用户首选项，并在更改之前保持用户首选项不变。

不过，如果对计算机或用户启用了“启动脚本执行”组策略，将向注册表中写入用户首选项，但该首选项是无效的，并且 Windows PowerShell 将显示一条消息解释冲突。无法使用 Set-ExecutionPolicy 覆盖组策略，即使用户首选项比组策略的限制更严格也不例外。

示例 1

C:\PS>set-executionpolicy remotesigned

说明
-----------
此命令将 shell 执行策略的用户首选项设置为 RemoteSigned。

示例 2

C:\PS>Set-ExecutionPolicy Restricted

Set-ExecutionPolicy : Windows PowerShell updated your local preference successfully, but the setting is overridden by the group policy applied to your system. Due to the override, your shell will retain its current effective execution policy of "AllSigned". Contact your group policy administrator for more information.
At line:1 char:20
+ set-executionpolicy  <<<< restricted

说明
-----------
此命令尝试将 shell 的执行策略设置为“Restricted”。向注册表中写入了“Restricted”设置，但是，由于它与组策略冲突，因此该设置无效，即使该设置比组策略的限制更严格也是如此。

示例 3

C:\PS>invoke-command -computername Server01 -scriptblock {get-executionpolicy} | set-executionpolicy -force

说明
-----------
此命令从远程计算机获取执行策略并将该策略应用于本地计算机。

此命令使用 Invoke-Command cmdlet 向远程计算机发送命令。由于可以通过管道将 ExecutionPolicy (Microsoft.PowerShell.ExecutionPolicy) 对象传递到 Set-ExecutionPolicy，因此此命令不需要 ExecutionPolicy 参数。

该命令具有 Force 参数，该参数可禁止显示用户提示。

示例 4

C:\PS>set-executionpolicy -scope CurrentUser -executionPolicy AllSigned -force

C:\PS> get-executionpolicy -list

        Scope   ExecutionPolicy
        -----   ---------------
MachinePolicy         Undefined
   UserPolicy         Undefined
      Process         Undefined
  CurrentUser         AllSigned
 LocalMachine      RemoteSigned

C:\PS> get-executionpolicy
AllSigned

说明
-----------
此示例演示如何设置特定作用域的执行策略。

第一个命令使用 Set-ExecutionPolicy cmdlet 设置当前用户的 AllSigned 的执行策略。它使用 Force 参数禁止显示用户提示。

第二个命令使用 Get-ExecutionPolicy 的 List 参数获取每个作用域中设置的执行策略。结果显示，为当前用户设置的执行策略不同于为计算机的所有用户设置的执行策略。

第三个命令使用不带参数的 Get-ExecutionPolicy cmdlet 获取本地计算机上的当前用户的有效执行策略。结果证明，为当前用户设置的执行策略优先于为所有用户设置的执行策略。

示例 5

C:\PS>set-executionpolicy -scope CurrentUser -executionPolicy Undefined

说明
-----------
此命令使用执行策略值 Undefined 有效删除为当前用户作用域设置的执行策略。结果，在组策略或 LocalMachine（所有用户）作用域中设置的执行策略是有效的。

如果将所有作用域中的执行策略设置为 Undefined 并且未设置组策略，则默认的执行策略 Restricted 对计算机的所有用户都是有效的。

另请参阅

  • Get-ExecutionPolicy
  • Set-AuthenticodeSignature
  • Get-AuthenticodeSignature
  • about_Execution_Policies
  • about_Signing


Set-Item

将项的值更改为命令中指定的值。

语法

Set-Item [-LiteralPath] <string[]> [[-Value] <Object>] [-Credential <PSCredential>] [-Exclude <string[]>] [-Filter <string>] [-Force] [-Include <string[]>] [-PassThru] [-Confirm] [-WhatIf] [-UseTransaction] [<CommonParameters>]

Set-Item [-Path] <string[]> [[-Value] <Object>] [-Credential <PSCredential>] [-Exclude <string[]>] [-Filter <string>] [-Force] [-Include <string[]>] [-PassThru] [-Confirm] [-WhatIf] [-UseTransaction] [<CommonParameters>]

说明

Set-Item cmdlet 将项的值（如变量或注册表项）更改为命令中指定的值。

参数

-Credential <PSCredential>

指定有权执行此操作的用户帐户。默认值为当前用户。

键入用户名，如“User01”或“Domain01\User01”；或输入 PSCredential 对象，如 Get-Credential cmdlet 输入的一个 PSCredential 对象。如果键入用户名，则将提示您输入密码。

随同 Windows PowerShell 一起安装的任何提供程序都不支持此参数。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | true (ByPropertyName)
是否接受通配符？ | false

-Exclude <string[]>

忽略指定项。此参数的值对 Path 参数进行限定。请输入路径元素或模式，例如“*.txt”。允许使用通配符。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Filter <string>

以提供程序的格式或语言指定筛选器。此参数的值对 Path 参数进行限定。筛选器的语法（包括通配符的使用）取决于提供程序。筛选器比其他参数更有效，因为提供程序是在检索对象时应用筛选器，而不是在检索对象后再由 Windows PowerShell 筛选对象。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Force

允许该 cmdlet 设置非此不能更改的项（如只读的别名或变量）。该 cmdlet 不能更改常量别名或变量。不同提供程序有不同的实现。有关详细信息，请参阅 about_Providers。即使使用 Force 参数，该 cmdlet 也无法覆盖安全限制。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Include <string[]>

只更改指定项。此参数的值对 Path 参数进行限定。请输入路径元素或模式，例如“*.txt”。允许使用通配符。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-LiteralPath <string[]>

指定到新项位置的路径。与 Path 不同，LiteralPath 的值严格按照所键入的形式使用。不会将任何字符解释为通配符。如果路径包括转义符，请将其括在单引号中。单引号会告知 Windows PowerShell 不要将所有字符都解释为转义序列。

是否为必需？ | true
位置？ | 1
默认值 |
是否接受管道输入？ | true (ByPropertyName)
是否接受通配符？ | false

-PassThru

将表示项的对象传递到管道。默认情况下，此 cmdlet 将不产生任何输出。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Path <string[]>

指定到新项位置的路径。允许使用通配符。

是否为必需？ | true
位置？ | 1
默认值 |
是否接受管道输入？ | true (ByPropertyName)
是否接受通配符？ | false

-Value <Object>

为项指定新值。

是否为必需？ | false
位置？ | 2
默认值 |
是否接受管道输入？ | true (ByValue, ByPropertyName)
是否接受通配符？ | false

-Confirm

在执行命令之前提示您进行确认。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-WhatIf

描述如果执行该命令会发生什么情况（无需实际执行该命令）。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-UseTransaction

将命令包含在活动事务中。仅当正在执行事务时，此参数才有效。有关详细信息，请参阅 about_Transactions。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

<CommonParameters>

此 cmdlet 支持通用参数：-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。有关详细信息，请参阅 about_Commonparameters.

输入和输出

输入类型是指可通过管道传递给 cmdlet 的对象的类型。返回类型是指 Cmdlet 所返回对象的类型。

输入 | System.Object 可以通过管道将表示新的项值的对象传递给 Set-Item。
输出 | None 或一个表示新项或已更改项的对象。 如果使用 Passthru 参数，则 Set-Item 生成一个表示项的对象。否则，此 cmdlet 将不产生任何输出。

说明

还可以使用 Set-Item 的内置别名“si”来对其进行引用。有关详细信息，请参阅 about_Aliases。

Windows PowerShell FileSystem 提供程序不支持 Set-Item cmdlet。若要更改文件系统中的项的值，请使用 Set-Content。

在注册表驱动器（HKLM: 和 HKCU:）中，Set-Item 更改注册表项的（默认）值中的数据。若要创建和更改注册表项的名称，请使用 New-Item 和 Rename-Item。若要更改注册表值中的名称和数据，请使用 New-ItemProperty、Set-ItemProperty 和 Rename-ItemProperty。

Set-Item cmdlet 用于处理由任何提供程序公开的数据。要列出会话中可用的提供程序，请键入“Get-PsProvider”。有关详细信息，请参阅 about_Providers。

示例 1

C:\PS>set-item -path alias:np -value c:\windows\notepad.exe

说明
-----------
此命令为 Notepad 创建一个别名“np”。

示例 2

C:\PS>set-item -path env:UserRole -value Administrator

说明
-----------
此命令使用 Set-Item cmdlet 将“UserRole”环境变量的值更改为“Administrator”。

示例 3

C:\PS>set-item -path function:prompt -value {'PS '+ $(Get-Date -format t) + " " + $(Get-Location) + '> '}

说明
-----------
此命令使用 Set-Item cmdlet 来更改“prompt”函数，以便让该函数在路径之前显示时间。

示例 4

C:\PS>set-item -path function:prompt -options "AllScope,ReadOnly"

说明
-----------
此命令设置“prompt”函数的 AllScope 选项和 ReadOnly 选项。此命令使用 Set-Item cmdlet 的 Options 动态参数。只有在将 Options 参数与 Alias 或 Function 提供程序一起使用时，该参数才在 Set-Item 中可用。

另请参阅

  • about_Providers
  • Get-Item
  • New-Item
  • Remove-Item
  • Clear-Item
  • Invoke-Item
  • Rename-Item
  • Move-Item
  • Copy-Item


Set-ItemProperty

创建或更改某一项的属性值。

语法

Set-ItemProperty [-LiteralPath] <string[]> -InputObject <psobject> [-Credential <PSCredential>] [-Exclude <string[]>] [-Filter <string>] [-Force] [-Include <string[]>] [-PassThru] [-Confirm] [-WhatIf] [-UseTransaction] [<CommonParameters>]

Set-ItemProperty [-Path] <string[]> -InputObject <psobject> [-Credential <PSCredential>] [-Exclude <string[]>] [-Filter <string>] [-Force] [-Include <string[]>] [-PassThru] [-Confirm] [-WhatIf] [-UseTransaction] [<CommonParameters>]

Set-ItemProperty [-LiteralPath] <string[]> [-Name] <string> [-Value] <Object> [-Credential <PSCredential>] [-Exclude <string[]>] [-Filter <string>] [-Force] [-Include <string[]>] [-PassThru] [-Confirm] [-WhatIf] [-UseTransaction] [<CommonParameters>]

Set-ItemProperty [-Path] <string[]> [-Name] <string> [-Value] <Object> [-Credential <PSCredential>] [-Exclude <string[]>] [-Filter <string>] [-Force] [-Include <string[]>] [-PassThru] [-Confirm] [-WhatIf] [-UseTransaction] [<CommonParameters>]

说明

Set-ItemProperty cmdlet 更改指定项的属性值。可以使用该 cmdlet 设定或更改项的属性。例如，可以使用 Set-ItemProperty 将文件对象的 IsReadOnly 属性值设置为 true。

也可以使用 Set-ItemProperty 创建和更改注册表值及数据。例如，可以向注册表项中添加新的注册表条目以及设定或更改该条目的值。

参数

-Credential <PSCredential>

指定有权执行此操作的用户帐户。默认值为当前用户。

键入用户名，如“User01”或“Domain01\User01”；或输入 PSCredential 对象，如 Get-Credential cmdlet 输入的一个 PSCredential 对象。如果键入用户名，则将提示您输入密码。

随同 Windows PowerShell 一起安装的任何提供程序都不支持此参数。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | true (ByPropertyName)
是否接受通配符？ | false

-Exclude <string[]>

指定 cmdlet 不对这些项执行操作，但包括其他所有项。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Filter <string>

以提供程序的格式或语言指定筛选器。此参数的值对 Path 参数进行限定。筛选器的语法（包括通配符的使用）取决于提供程序。筛选器比其他参数更有效，因为提供程序是在检索对象时应用筛选器，而不是在检索对象后再由 Windows PowerShell 筛选对象。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Force

允许该 cmdlet 设置用户非此不能访问的项的属性。不同提供程序有不同的实现。有关详细信息，请参阅 about_Providers。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Include <string[]>

指定 cmdlet 只对这些项执行操作，排除其他所有项。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-InputObject <psobject>

指定要更改其属性的对象。请输入包含对象的变量或可获取该对象的命令。

是否为必需？ | true
位置？ | named
默认值 |
是否接受管道输入？ | true (ByValue, ByPropertyName)
是否接受通配符？ | false

-LiteralPath <string[]>

指定指向项属性的路径。LiteralPath 的值严格按照所键入的形式使用。不会将任何字符解释为通配符。如果路径包括转义符，请将其括在单引号中。单引号会告知 Windows PowerShell 不要将所有字符都解释为转义序列。

是否为必需？ | true
位置？ | 1
默认值 |
是否接受管道输入？ | true (ByPropertyName)
是否接受通配符？ | false

-Name <string>

指定属性的名称。

是否为必需？ | true
位置？ | 2
默认值 |
是否接受管道输入？ | true (ByPropertyName)
是否接受通配符？ | false

-PassThru

返回一个表示项属性的对象。默认情况下，此 cmdlet 将不产生任何输出。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Path <string[]>

指定具有要设置的属性的项的路径。

是否为必需？ | true
位置？ | 1
默认值 |
是否接受管道输入？ | true (ByPropertyName)
是否接受通配符？ | false

-Value <Object>

指定属性的值。

是否为必需？ | true
位置？ | 3
默认值 |
是否接受管道输入？ | true (ByPropertyName)
是否接受通配符？ | false

-Confirm

在执行命令之前提示您进行确认。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-WhatIf

描述如果执行该命令会发生什么情况（无需实际执行该命令）。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-UseTransaction

将命令包含在活动事务中。仅当正在执行事务时，此参数才有效。有关详细信息，请参阅 about_Transactions。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

<CommonParameters>

此 cmdlet 支持通用参数：-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。有关详细信息，请参阅 about_Commonparameters.

输入和输出

输入类型是指可通过管道传递给 cmdlet 的对象的类型。返回类型是指 Cmdlet 所返回对象的类型。

输入 | System.Management.Automation.PSObject 可以通过管道将对象传递给 Set-ItemProperty。
输出 | None 或 System.Management.Automation.PSCustomObject 如果使用 PassThru 参数，则 Set-ItemProperty 生成一个 PSCustomObject 对象，该对象表示已更改的项及其新属性值。否则，此 cmdlet 将不产生任何输出。

说明

Set-ItemProperty cmdlet 用于处理由任何提供程序公开的数据。要列出会话中可用的提供程序，请键入“Get-PSProvider”。有关详细信息，请参阅 about_Providers。

示例 1

C:\PS>set-itemproperty -path c:\GroupFiles\final.doc -name IsReadOnly -value $true

说明
-----------
此命令将 final.doc 文件的 IsReadOnly 参数的值设置为 true。

此命令使用 Set-ItemProperty cmdlet 来更改 final.doc 文件的属性值。它使用 Path 参数来指定文件，使用 Name 参数指定属性的名称，并使用 Value 参数指定属性的新值。

$true 自动变量表示值 TRUE。有关详细信息，请参阅 about_Automatic_Variables。

该文件是一个 System.IO.FileInfo 对象，IsReadOnly 只是该文件的一个属性。若要查看 FileInfo 对象的所有属性和方法，请通过管道将该文件传递给 Get-Member cmdlet。例如，“final.doc | get-member”。

示例 2

C:\PS>set-itemproperty -path HKLM:\Software\MyCompany -name NoOfEmployees -value 823

C:\PS>get-itemproperty -path HKLM:\Software\MyCompany

PSPath        : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\software\mycompany
PSParentPath  : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\software
PSChildName   : mycompany
PSDrive       : HKLM
PSProvider    : Microsoft.PowerShell.Core\Registry
NoOfLocations : 2
NoOfEmployees : 823

C:\PS>set-itemproperty -path HKLM:\Software\MyCompany -name NoOfEmployees -value 824
C:\PS>get-itemproperty -path HKLM:\Software\MyCompany

PSPath        : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\software\mycompany
PSParentPath  : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\software
PSChildName   : mycompany
PSDrive       : HKLM
PSProvider    : Microsoft.PowerShell.Core\Registry
NoOfLocations : 2
NoOfEmployees : 824

说明
-----------
此示例演示如何使用 Set-ItemProperty 创建新的注册表条目并为该条目赋值。它在 HKLM\Software 项的 MyCompany 项中创建 NoOfEmployees 条目，并将该条目的值设置为 823。

因为注册表条目被视为是注册表项（项目）的属性，所以应使用 Set-ItemProperty 来创建注册表条目以及设定和更改它们的值。

第一条命令使用 Set-ItemProperty cmdlet 创建该注册表条目。它使用 Path 参数指定 HKLM: 驱动器和 Software\MyCompany 项的路径，使用 Name 参数指定该条目的名称，使用 Value 参数指定该条目的值。

第二条命令使用 Get-ItemProperty cmdlet 查看新的注册表条目。如果使用 Get-Item 或 Get-ChildItem cmdlet，则不会出现注册表条目，因为它们是项属性，而不是项或子项。

第三条命令将 NoOfEmployees 条目的值更改为 824。

也可以使用 New-ItemProperty cmdlet 创建注册表条目及其值，然后再使用 Set-ItemProperty 更改该值。

有关 HKLM: 驱动器的详细信息，请键入“get-help get-psdrive”。有关使用 Windows PowerShell 管理注册表的详细信息，请键入“get-help registry”。

示例 3

C:\PS>get-childitem weekly.txt | set-itemproperty -name IsReadOnly -value $true

说明
-----------
这些命令演示如何使用管道运算符 (|) 将项发送给 Set-ItemProperty。

此命令的第一部分使用 Get-ChildItem cmdlet 获取一个表示 Weekly.txt 文件的对象。此命令使用管道运算符将该文件对象发送给 Set-ItemProperty。Set-ItemProperty 命令使用 Name 和 Value 参数分别指定属性及其新值。

此命令与使用 InputObject 参数指定 Get-ChildItem 所获取的对象是等效的。

另请参阅

  • about_Providers
  • Get-ItemProperty
  • New-ItemProperty
  • Clear-ItemProperty
  • Remove-ItemProperty
  • Rename-ItemProperty
  • Move-ItemProperty
  • Copy-ItemProperty


Set-Location

将当前工作位置设置为指定的位置。

语法

Set-Location [-LiteralPath] <string> [-PassThru] [-UseTransaction] [<CommonParameters>]

Set-Location [[-Path] <string>] [-PassThru] [-UseTransaction] [<CommonParameters>]

Set-Location [-StackName <string>] [-PassThru] [-UseTransaction] [<CommonParameters>]

说明

Set-Location cmdlet 将工作位置设置为指定的位置。该位置可以是目录、子目录、注册表位置或其他位置堆栈。

参数

-LiteralPath <string>

指定位置的路径。LiteralPath 参数的值严格按照所键入的形式使用。不会将任何字符解释为通配符。如果路径包括转义符，请将其括在单引号中。单引号会告知 Windows PowerShell 不要将所有字符都解释为转义序列。

是否为必需？ | true
位置？ | 1
默认值 |
是否接受管道输入？ | true (ByPropertyName)
是否接受通配符？ | false

-PassThru

将表示位置的对象传递到管道。默认情况下，此 cmdlet 将不产生任何输出。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Path <string>

此参数用于指定新工作位置的路径。

是否为必需？ | false
位置？ | 1
默认值 |
是否接受管道输入？ | true (ByValue, ByPropertyName)
是否接受通配符？ | false

-StackName <string>

要将位置设置为的堆栈的名称。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | true (ByPropertyName)
是否接受通配符？ | false

-UseTransaction

将命令包含在活动事务中。仅当正在执行事务时，此参数才有效。有关详细信息，请参阅 about_Transactions。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

<CommonParameters>

此 cmdlet 支持通用参数：-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。有关详细信息，请参阅 about_Commonparameters.

输入和输出

输入类型是指可通过管道传递给 cmdlet 的对象的类型。返回类型是指 Cmdlet 所返回对象的类型。

输入 | System.String 可以通过管道将包含路径（但不是文本路径）的字符串传递给 Set-Location。
输出 | None 或 System.Management.Automation.PathInfo When you use the PassThru parameter, Set-Location generates a System.Management.Automation.PathInfo object that represents the location. 否则，此 cmdlet 将不产生任何输出。

说明

Set-Location cmdlet 用于处理由任何提供程序公开的数据。要列出会话中可用的提供程序，请键入“Get-PSProvider”。有关详细信息，请参阅 about_Providers。

示例 1

C:\PS>set-location HKLM:

说明
-----------
此命令将当前位置设置为所指定的位置；在此示例中，即为 HKLM 提供程序。

示例 2

C:\PS>set-location env: -passthru

Path
----
Env:\

说明
-----------
此命令将当前位置设置为所指定的位置；在此示例中，即为环境变量提供程序。

示例 3

C:\PS>set-location C:

说明
-----------
此命令将当前位置设置为所指定的位置；在此示例中，即为文件系统提供程序中的 C: 驱动器。

另请参阅

  • about_Providers
  • Get-Location
  • Pop-Location
  • Push-Location


Set-PSBreakpoint

在行、命令或变量上设置断点。

语法

Set-PSBreakpoint -Command <string[]> [[-Script] <string[]>] [-Action <scriptblock>] [<CommonParameters>]

Set-PSBreakpoint [-Script] <string[]> [-Line] <Int32[]> [[-Column] <int>] [-Action <scriptblock>] [<CommonParameters>]

Set-PSBreakpoint -Variable <string[]> [[-Script] <string[]>] [-Mode {<Read> | <Write> | <ReadWrite>}] [-Action <scriptblock>] [<CommonParameters>]

说明

Set-PSBreakpoint cmdlet 会在脚本或当前会话中运行的任何命令中设置一个断点。您可以在执行脚本或运行命令之前，或者在调试过程中在另一个断点处停止时，使用 Set-PSBreakpoint 设置断点。

注意：Set-PSBreakpoint 不能在远程计算机上设置断点。若要调试远程计算机上的脚本，请将该脚本复制到本地计算机，然后在本地调试。

每条 Set-PSBreakpoint 命令都创建以下三种断点中的一种：

-- 行断点：在特定的行和列坐标处设置断点。

-- 命令断点：在命令和函数上设置断点。

-- 变量断点：在变量上设置断点。

您可以使用一条 Set-PSBreakpoint 命令在多个行、命令或变量上设置断点，但是每条 Set-PSBreakpoint 命令只设置一种断点。

在断点处，Windows PowerShell 会暂时停止执行，将控制权交给调试程序。命令提示符会更改为“DBG>”，并且有一组调试程序命令可供使用。不过，您可以使用 Action 参数指定备用响应，如断点的条件或要执行其他任务（如日志记录或诊断）的指令。

Set-PSBreakpoint cmdlet 是设计用于调试 Windows PowerShell 脚本的多个 cmdlet 之一。有关 Windows PowerShell 调试程序的详细信息，请参阅 about_Debuggers。

参数

-Action <scriptblock>

指定在每个断点处运行的命令，而不是在该处中断。输入包含命令的脚本块。您可以使用此参数设置条件断点或执行其他任务，如测试或日志记录。

如果省略此参数或不指定操作，则会在断点处停止执行并启动调试程序。

在使用 Action 参数时，会在每个断点处运行 Action 脚本块。不会停止执行，除非脚本块包括 Break 关键字。如果您在脚本块中使用 Continue 关键字，将会继续执行，直到下一个断点。

有关详细信息，请参阅 about_Script_Blocks、about_Break 和 about_Continue。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Column <int>

指定脚本文件中执行过程将会停止的列的列号。只输入一个列号。默认值是第 1 列。

Column 值与 Line 参数的值结合使用以指定断点。如果 Line 参数指定多行，Column 参数会在每个指定行上的指定列设置一个断点。Windows PowerShell 会在包括指定行和列位置处的字符的语句或表达式之前停止执行。

列从左上角的空白处开始计数，列号从 1（而不是 0）开始。如果您指定了脚本中不存在的列，则不会声明错误，但从不执行该断点。

是否为必需？ | false
位置？ | 3
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Command <string[]>

设置命令断点。输入命令名称（如“Get-Process”）或函数名称。允许使用通配符。

执行过程恰好在执行每个命令的每个实例之前停止。如果命令是一个函数，则每次调用函数时以及在每个 BEGIN、PROCESS 和 END 部分，执行过程都会停止。

是否为必需？ | true
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | true

-Line <Int32[]>

在脚本中设置行断点。输入一个或多个行号（以逗号分隔）。Windows PowerShell 会恰好在执行开始于每个指定行的语句之前停止。

行从脚本文件左上角的空白处开始计数，行号从 1（而不是 0）开始。如果您指定空白行，执行过程会在下一个非空白行之前停止。如果行超出范围，则永远不会命中该断点。

是否为必需？ | true
位置？ | 2
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Mode <VariableAccessMode>

确定触发变量断点的访问模式。默认值为 Write。

仅当该命令中使用了 Variable 参数时，此参数才有效。该模式适用于命令中设置的所有断点。

有效值包括：

-- Write：恰好在将新值写入变量之前停止执行。

-- Read：在读取变量也就是访问变量的值（目的可能是要分配、显示或使用此值）时停止执行。在 Read 模式中，当变量的值更改时，执行过程不会停止。

-- ReadWrite：在读取或写入变量时停止执行。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Script <string[]>

在每个指定的脚本文件中设置断点。输入一个或多个脚本文件的路径和文件名。如果这些文件位于当前目录，则可以省略路径。允许使用通配符。

默认情况下，变量断点和命令断点设置在当前会话中运行的任何命令上。只有在设置行断点时才需要此参数。

是否为必需？ | false
位置？ | 1
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | true

-Variable <string[]>

设置变量断点。输入以逗号分隔的变量（无美元符号 ($)）列表。

使用 Mode 参数确定触发断点的访问模式。默认模式 Write 会恰好在将新值写入变量之前停止执行。

是否为必需？ | true
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

<CommonParameters>

此 cmdlet 支持通用参数：-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。有关详细信息，请参阅 about_Commonparameters.

输入和输出

输入类型是指可通过管道传递给 cmdlet 的对象的类型。返回类型是指 Cmdlet 所返回对象的类型。

输入 | None 不能通过管道将输入传递给 Set-PSBreakpoint。
输出 | 断点对象（System.Management.Automation.LineBreakpoint、System.Management.Automation.VariableBreakpoint、System.Management.Automation.CommandBreakpoint） Set-PSBreakpoint 返回一个表示它所设置的每个断点的对象。

说明

Set-PSBreakpoint 不能在远程计算机上设置断点。若要调试远程计算机上的脚本，请将该脚本复制到本地计算机，然后在本地调试。

当您在多个行、命令或变量上设置断点时，Set-PSBreakpoint 会为每个条目生成一个断点对象。

在命令提示符处设置函数或变量上的断点时，您可以在创建函数或变量之前或之后设置断点。

示例 1

C:\PS>set-psbreakpoint -script sample.ps1 -line 5

Column     : 0
Line       : 5
Action     :
Enabled    : True
HitCount   : 0
Id         : 0
Script     : C:\ps-test\sample.ps1
ScriptName : C:\ps-test\sample.ps1

说明
-----------
此命令在 Sample.ps1 脚本中的第 5 行设置断点。因此，当脚本运行时，执行过程会恰好在要执行第 5 行时停止。

当您按行号设置新断点时，Set-PSBreakpoint cmdlet 会生成一个包含断点 ID 和命中计数的行断点对象 (System.Management.Automation.LineBreakpoint)，如以下输出示例中所示。

示例 2

C:\PS>set-psbreakpoint -command Increment -script sample.ps1

Command    : Increment
Action     :
Enabled    : True
HitCount   : 0
Id         : 1
Script     : C:\ps-test\sample.ps1
ScriptName : C:\ps-test\sample.ps1

说明
-----------
此命令在 Sample.ps1 cmdlet 中的 Increment 函数上创建一个命令断点。此脚本恰好在每次调用指定函数之前停止执行。

结果会生成一个命令断点对象。在脚本运行之前，HitCount 属性的值为 0。

示例 3

C:\PS>set-psbreakpoint -script sample.ps1 -variable Server -Mode ReadWrite

说明
-----------
此命令在 Sample.ps1 脚本中的 Server 变量上设置断点。它使用值为 ReadWrite 的 Mode 参数，以便在读取变量值之后、值发生更改之前停止执行。

示例 4

C:\PS>set-psbreakpoint -script Sample.ps1 -command "write*"

说明
-----------
此命令在 Sample.ps1 脚本中每个以“write”开头的命令（如“write-host”）上设置一个断点。

示例 5

C:\PS>set-psbreakpoint -script test.ps1 -command DiskTest `
  -action { (if $disk -gt 2) { break } }

说明
-----------
只有当 $disk 变量的值大于 2 时，此命令才会在 Test.ps1 脚本中的 DiskTest 函数处停止执行。

它使用 Set-PSBreakpoint cmdlet 在 DiskTest 函数上设置命令断点。该操作值是用于测试函数中 $disk 变量值的脚本块。

该操作使用 BREAK 关键字在满足条件时停止执行。替代项（也是默认值）是 CONTINUE。

示例 6

C:\PS>set-psbreakpoint -command checkpoint-computer

Id       : 0
Command  : checkpoint-computer
Enabled  : True
HitCount : 0
Action   :

C:\PS> function CheckLog {
>> get-eventlog -log Application |
>> where {($_.source -like "TestApp") -and ($_.Message -like "*failed*")}
>>}
>>
C:\PS> Checklog
DEBUG: Hit breakpoint(s)
DEBUG:  Function breakpoint on 'prompt:Checklog'
C:\PS>>>

说明
-----------
此命令在 CheckLog 函数上设置断点。由于此命令未指定脚本，因此断点会设置在当前会话中运行的任何内容上。在调用函数而不是声明函数时，调试程序会中断。

示例 7

C:\PS>set-psbreakpoint -script sample.ps1 -line 1, 14, 19 -column 2 -action {&(log.ps1)}

Column     : 2
Line       : 1
Action     :
Enabled    : True
HitCount   : 0
Id         : 6
Script     : C:\ps-test\sample.ps1
ScriptName : C:\ps-test\sample.ps1

Column     : 2
Line       : 14
Action     :
Enabled    : True
HitCount   : 0
Id         : 7
Script     : C:\ps-test\sample.ps1
ScriptName : C:\ps-test\sample.ps1

Column     : 2
Line       : 19
Action     :
Enabled    : True
HitCount   : 0
Id         : 8
Script     : C:\ps-test\sample.ps1
ScriptName : C:\ps-test\sample.ps1

说明
-----------
此命令在 Sample.ps1 脚本中设置 3 个行断点。它在脚本中的每个指定行上的第 2 列设置一个断点。Action 参数中指定的操作适用于所有断点。

另请参阅

  • about_Debuggers
  • Get-PSBreakpoint
  • Enable-PSBreakpoint
  • Disable-PSBreakpoint
  • Remove-PSBreakpoint
  • Get-PSCallStack


Set-PSDebug

打开和关闭脚本调试功能，设置跟踪级别并切换 strict 模式。

语法

Set-PSDebug [-Off] [<CommonParameters>]

Set-PSDebug [-Step] [-Strict] [-Trace <int>] [<CommonParameters>]

说明

Set-PSDebug cmdlet 打开和关闭脚本调试功能，设置跟踪级别，并切换 strict 模式。

当 Trace 参数设置为 1 时，将在执行脚本的每一行时对其进行跟踪。当该参数设置为 2 时，还将跟踪变量赋值、函数调用和脚本调用。如果指定了 Step 参数，则在执行脚本的每一行之前将会提示您。

参数

-Off

关闭所有脚本调试功能。

注意：“set-strictmode –off”命令禁用“set-psdebug –strict”命令设置的验证。有关详细信息，请参阅 Set-StrictMode。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Step

打开脚本步进。在运行每一行之前，系统会提示用户停止、继续或输入新的解释器级别以检查脚本的状态。

注意：指定 Step 参数会自动将跟踪级别设置为 1。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Strict

指定如果在为某个变量赋值之前引用了该变量，解释器应引发异常。

注意：“set-strictmode –off”命令禁用“set-psdebug –strict”命令设置的验证。有关详细信息，请参阅 Set-StrictMode。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Trace <int>

指定跟踪级别：

0 - 关闭脚本跟踪

1 - 执行脚本行时跟踪它们

2 - 跟踪脚本行、变量赋值、函数调用和脚本。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

<CommonParameters>

此 cmdlet 支持通用参数：-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。有关详细信息，请参阅 about_Commonparameters.

输入和输出

输入类型是指可通过管道传递给 cmdlet 的对象的类型。返回类型是指 Cmdlet 所返回对象的类型。

输入 | None 不能通过管道将输入传递给此 cmdlet。
输出 | None 此 cmdlet 不返回任何输出。

示例 1

C:\PS>set-psdebug -trace 2; foreach ($i in 1..3) {$i}

DEBUG:    1+ Set-PsDebug -trace 2; foreach ($i in 1..3) {$i}
DEBUG:    1+ Set-PsDebug -trace 2; foreach ($i in 1..3) {$i}
1
DEBUG:    1+ Set-PsDebug -trace 2; foreach ($i in 1..3) {$i}
2
DEBUG:    1+ Set-PsDebug -trace 2; foreach ($i in 1..3) {$i}
3

说明
-----------
此命令将跟踪级别设置为 2，然后运行显示数字 1、2 和 3 的脚本。

示例 2

C:\PS>set-psdebug -step; foreach ($i in 1..3) {$i}

DEBUG:    1+ Set-PsDebug -step; foreach ($i in 1..3) {$i}
Continue with this operation?
   1+ Set-PsDebug -step; foreach ($i in 1..3) {$i}
[Y] Yes  [A] Yes to All  [N] No  [L] No to All  [S] Suspend  [?] Help
(default is "Y"):a
DEBUG:    1+ Set-PsDebug -step; foreach ($i in 1..3) {$i}
1
2
3

说明
-----------
此命令打开步进，然后
运行显示数字 1、2 和 3 的脚本。

示例 3

C:\PS>set-psdebug -off; foreach ($i in 1..3) {$i}

1
2
3

说明
-----------
此命令关闭所有调试功能，然后运行显示数字 1、2 和 3 的脚本。

示例 4

C:\PS>set-psdebug -strict; $NewVar

The variable $NewVar cannot be retrieved because it has not been set yet.
At line:1 char:28
+ Set-PsDebug -strict;$NewVar <<<<

说明
-----------
此命令将解释器置于 strict 模式，并尝试访问尚未设置的变量。

另请参阅

  • about_Debuggers
  • Debug-Process
  • Set-PSBreakpoint
  • Set-StrictMode
  • Write-Debug


Set-PSSessionConfiguration

更改已注册会话配置的属性。

语法

Set-PSSessionConfiguration [-AssemblyName] <string> [-ConfigurationTypeName] <string> [-Name] <string> [-ApplicationBase <string>] [-Force] [-MaximumReceivedDataSizePerCommandMB <double>] [-MaximumReceivedObjectSizeMB <double>] [-NoServiceRestart] [-SecurityDescriptorSDDL <string>] [-ShowSecurityDescriptorUI] [-StartupScript <string>] [-ThreadApartmentState {<STA> | <MTA> | <Unknown>}] [-ThreadOptions {<Default> | <UseNewThread> | <ReuseThread> | <UseCurrentThread>}] [-Confirm] [-WhatIf] [<CommonParameters>]

说明

Set-PSSessionConfiguration cmdlet 更改本地计算机上已注册的会话配置的属性。这是一个高级 cmdlet，供系统管理员为其用户管理自定义会话配置时使用。

使用 Name 参数标识要更改的配置。使用其他参数为会话配置的属性指定新值。要从配置中删除属性值（并使用默认值），则输入空字符串 ("") 或相应参数的 $null 值。

要查看会话配置的属性，请使用 Get-PSSessionConfiguration cmdlet 或 WS-Management 提供程序。有关 WS-Management 提供程序的详细信息，请键入“get-help wsman”。

参数

-ApplicationBase <string>

更改在 AssemblyName 参数值中指定的程序集文件 (*.dll) 的路径。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-AssemblyName <string>

为配置指定其他程序集文件。输入定义配置类型的程序集文件 (.dll) 的路径（可选）和文件名。

如果仅输入名称，则可在 ApplicationBase 参数的值中输入路径。

是否为必需？ | true
位置？ | 2
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-ConfigurationTypeName <string>

为配置指定其他配置类型。指定的类型必须实现 System.Management.Automation.Remoting.PSSessionConfiguration 类。

如果输入“$null”或空字符串，则将 DefaultRemotePowerShellConfiguration 类用于会话配置。

是否为必需？ | true
位置？ | 3
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Force

禁止显示所有用户提示，并重新启动 WinRM 服务而不显示提示。重新启动服务将使配置更改生效。

若要阻止重新启动并禁止显示重新启动提示，请使用 NoServiceRestart 参数。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-MaximumReceivedDataSizePerCommandMB <double>

更改在任何单个远程命令中可以发送给该计算机的数据量的限制。输入以兆字节 (MB) 为单位的数据大小。默认值是 50 MB。

如果 ConfigurationTypeName 参数中指定的配置类型定义了数据大小限制，则使用该配置类型中的限制，而忽略此参数的值。

是否为必需？ | false
位置？ | named
默认值 | 50
是否接受管道输入？ | false
是否接受通配符？ | false

-MaximumReceivedObjectSizeMB <double>

更改在任何单个对象中可以发送给该计算机的数据量的限制。输入以兆字节 (MB) 为单位的数据大小。默认值是 10 MB。

如果 ConfigurationTypeName 参数中指定的配置类型定义了对象大小限制，则使用该配置类型中的限制，而忽略此参数的值。

是否为必需？ | false
位置？ | named
默认值 | 10
是否接受管道输入？ | false
是否接受通配符？ | false

-Name <string>

指定要更改的会话配置的名称。

不能使用此参数更改会话配置的名称。

是否为必需？ | true
位置？ | 1
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-NoServiceRestart

不重新启动 WinRM 服务，并且禁止提示重新启动该服务。

默认情况下，当您输入 Set-PSSessionConfiguration 命令时，系统会提示您重新启动 WinRM 服务以使新的会话配置生效。在重新启动 WinRM 服务之前，新的会话配置不会生效。

若要重新启动 WinRM 服务并且不显示提示，请使用 Force 参数。若要手动重新启动 WinRM 服务，请使用 Restart-Service cmdlet。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-SecurityDescriptorSDDL <string>

为配置指定其他安全描述符定义语言 (SDDL) 字符串。

此字符串确定使用新的会话配置所需要的权限。要在会话中使用某个会话配置，用户对该配置必须至少拥有“执行(Invoke)”权限。

要使用配置的默认安全描述符，请输入空字符串 ("") 或 $null 值。默认为 WSMan: 驱动器中的根 SDDL。

如果安全描述符过于复杂，可考虑使用 ShowSecurityDescriptorUI 参数代替此参数。不能在同一个命令中同时使用这两个参数。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-ShowSecurityDescriptorUI

显示可帮助您为会话配置创建新 SDDL 的属性表。在输入 Set-PSSessionConfiguration 命令并重新启动 WinRM 服务后，该属性表将显示出来。

在设置配置的权限时，需记住用户必须至少具有“执行(Invoke)”权限才能在会话中使用该会话配置。

不能在同一个命令中同时使用 SecurityDescriptorSDDL 参数和此参数。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-StartupScript <string>

添加或更改配置的启动脚本。输入 Windows PowerShell 脚本的完全限定路径。指定的脚本在使用会话配置的新会话中运行。

要从会话配置中删除启动脚本，请输入空字符串 ("") 或 $null 值。

您可以使用启动脚本进一步配置用户的会话。如果脚本产生错误（甚至非终止错误），则不会创建会话，并且导致用户的 New-PSSession 命令失败。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-ThreadApartmentState <ApartmentState>

更改会话中的线程的单元状态设置。有效值为 STA、MTA 和 Unknown。默认值为 Unknown。

是否为必需？ | false
位置？ | named
默认值 | ApartmentState.Unknown
是否接受管道输入？ | false
是否接受通配符？ | false

-ThreadOptions <PSThreadOptions>

更改配置中的线程选项设置。此设置定义在会话中执行命令时如何创建和使用线程。有效值为 Default、ReuseThread、UseCurrentThread 和 UseNewThread。默认值为 UseCurrentThread。

是否为必需？ | false
位置？ | named
默认值 | PSThreadOptions.UserCurrentThread
是否接受管道输入？ | false
是否接受通配符？ | false

-Confirm

在执行命令之前提示您进行确认。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-WhatIf

描述如果执行该命令会发生什么情况（无需实际执行该命令）。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

<CommonParameters>

此 cmdlet 支持通用参数：-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。有关详细信息，请参阅 about_Commonparameters.

输入和输出

输入类型是指可通过管道传递给 cmdlet 的对象的类型。返回类型是指 Cmdlet 所返回对象的类型。

输入 | None 不能通过管道将输入传递给此 cmdlet。
输出 | Microsoft.WSMan.Management.WSManConfigLeafElement

说明

若要在 Windows Vista、Windows Server 2008 以及更高版本的 Windows 上运行此 cmdlet，您必须使用“以管理员身份运行”选项打开 Windows PowerShell。

Set-PSSessionConfiguration cmdlet 不会更改配置名称，而 WS-Management 提供程序不支持 Rename-Item cmdlet。要更改配置的名称，请使用 Unregister-PSSessionConfiguration cmdlet 删除该配置，然后使用 Register-PSSessionConfiguration cmdlet 创建并注册新的会话配置。

可以使用 Set-PSSessionConfiguration cmdlet 更改默认的 Microsoft.PowerShell 和 Microsoft.PowerShell32 会话配置。这些会话配置不受保护。要恢复为默认会话配置的原始版本，请使用 Unregister-PSSessionConfiguration cmdlet 删除默认会话配置，然后使用 Enable-PSRemoting cmdlet 将其还原。

示例 1

C:\PS>set-pssessionconfiguration -name MaintenanceShell -threadApartmentState STA

说明
-----------
此命令将 MaintenanceShell 配置中的线程单元状态更改为 STA。此更改在重新启动 WinRM 服务后生效。

示例 2

C:\PS>register-pssessionconfiguration -name AdminShell -assemblyName c:\shells\AdminShell.dll -configurationType AdminClass

C:\PS> set-pssessionconfiguration -name AdminShell -startupScript AdminConfig.ps1

C:\PS> set-pssessionconfiguration -name AdminShell -startupScript $null

说明
-----------
此示例说明如何创建并随后更改会话配置。

第一个命令使用 Register-PSSessionConfiguration cmdlet 创建 AdminShell 配置。

第二个命令使用 Set-PSSessionConfiguration cmdlet 将 AdminConfig.ps1 脚本添加到该配置中。更改在重新启动 WinRM 后生效。

第三个命令将 AdminConfig.ps1 脚本从该配置中删除。该命令使用 Set-PSSessionConfiguration cmdlet，并将 StartupScript 参数的值设置为 $null。

示例 3

C:\PS>Set-PSSessionConfiguration -name foo -MaximumReceivedObjectSizeMB 20

   WSManConfig: Microsoft.WSMan.Management\WSMan::localhost\Plugin\foo\InitializationParameters

ParamName                       ParamValue
---------                       ----------
psmaximumreceivedobjectsizemb   20

"Restart WinRM service"
WinRM service need to be restarted to make the changes effective. Do you want to run the command "restart-service winrm"?
[Y] Yes  [N] No  [S] Suspend  [?] Help (default is "Y"): y

说明
-----------
此示例说明 Set-PSSessionConfiguration cmdlet 的示例输出。

在本示例中，Set-PSSessionConfiguration 命令将 MaximumReceivedObjectSizeMB 属性的值增加到 20。

Set-PSSessionConfiguration 命令返回一个显示参数名称和新值的 Microsoft.WSMan.Management.WSManConfigLeafElement 对象。

该命令还提示您重新启动 WinRM 服务。Set-PSSessionConfiguration 更改要在重新启动 WinRM 服务之后才会生效。

示例 4

C:\PS>set-pssessionconfiguration -name MaintenanceShell -startupScript c:\ps-test\Maintenance.ps1

   WSManConfig: Microsoft.WSMan.Management\WSMan::localhost\Plugin\MaintenanceShell\InitializationParameters

ParamName            ParamValue
---------            ----------
startupscript        c:\ps-test\Mainte...

"Restart WinRM service"
WinRM service need to be restarted to make the changes effective. Do you want to run the command "restart-service winrm"?
[Y] Yes  [N] No  [S] Suspend  [?] Help (default is "Y"): y

C:\PS> get-pssessionConfiguration maintenanceshell | format-list -property *

xmlns            : http://schemas.microsoft.com/wbem/wsman/1/config/PluginConfiguration
Name             : MaintenanceShell
Filename         : %windir%\system32\pwrshplugin.dll
SDKVersion       : 1
XmlRenderingType : text
lang             : en-US
PSVersion        : 2.0
startupscript    : c:\ps-test\Maintenance.ps1
ResourceUri      : http://schemas.microsoft.com/powershell/MaintenanceShell
SupportsOptions  : true
ExactMatch       : true
Capability       : {Shell}
Permission       :

C:\PS> dir wsman:\localhost\plugin\MaintenanceShell\InitializationParameters

ParamName     ParamValue
---------     ----------
PSVersion     2.0
startupscript c:\ps-test\Maintenance.ps1

说明
-----------
此命令显示查看 Set-PSSessionConfiguration 命令的结果的不同方式。

第一个命令使用 Set-PSSessionConfiguration cmdlet 将 MaintenanceShell 配置中的启动脚本更改为 Maintenance.ps1。此命令的输出显示更改，并提示您重新启动 WinRM 服务。响应是“y”（是）。

第二个命令使用 Get-PSSessionConfiguration cmdlet 获取 MaintenanceShell 会话配置。该命令使用管道运算符 (|) 将命令的结果发送给 Format-List cmdlet，后者将以列表形式显示会话配置对象的所有属性。

第三个命令使用 WS-Management 提供程序查看 MaintenanceShell 配置的初始化参数。该命令使用 Get-ChildItem cmdlet（别名 = dir）获取 MaintenanceShell 插件的 InitializationParameters 节点中的子项。

有关 WS-Management 提供程序的详细信息，请键入“get-help wsman”。

另请参阅

  • about_Session_Configurations
  • Disable-PSSessionConfiguration
  • Enable-PSSessionConfiguration
  • Get-PSSessionConfiguration
  • Register-PSSessionConfiguration
  • Unregister-PSSessionConfiguration
  • WSMan Provider


Set-Service

启动、停止和挂起服务并更改服务的属性。

语法

Set-Service [-Name] <string> [-Description <string>] [-DisplayName <string>] [-PassThru] [-StartupType {<Automatic> | <Manual> | <Disabled>}] [-Status <string>] [-ComputerName <string[]>] [-Confirm] [-WhatIf] [<CommonParameters>]

Set-Service [-Description <string>] [-DisplayName <string>] [-InputObject <ServiceController>] [-PassThru] [-StartupType {<Automatic> | <Manual> | <Disabled>}] [-Status <string>] [-ComputerName <string[]>] [-Confirm] [-WhatIf] [<CommonParameters>]

说明

Set-Service cmdlet 可更改本地或远程服务的属性，其中包括状态、说明、显示名称和启动模式。可以使用此 cmdlet 启动、停止或挂起（暂停）服务。若要标识服务，请输入其服务名称或提交服务对象，或者通过管道将服务名称或服务对象传递给 Set-Service。

参数

-ComputerName <string[]>

指定一台或多台计算机。默认值为本地计算机。

键入远程计算机的 NetBIOS 名称、IP 地址或完全限定的域名。要指定本地计算机，请键入计算机名称、句点 (.) 或“localhost”。

此参数不依赖于 Windows PowerShell 远程处理。即使您的计算机未配置为运行远程命令，您也可以使用 Set-Service 的 ComputerName 参数。

是否为必需？ | false
位置？ | named
默认值 | local computer
是否接受管道输入？ | true (ByPropertyName)
是否接受通配符？ | false

-Description <string>

指定服务的新说明。

服务说明出现在计算机管理的“服务”中。Description 不是 Get-Service 所获取的 ServiceController 对象的属性。要查看服务说明，请使用 Get-WmiObject 获取表示服务的 Win32_Service 对象。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-DisplayName <string>

指定服务的新显示名称。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-InputObject <ServiceController>

指定 ServiceController 对象来表示要更改的服务。请输入包含该对象的变量，或者键入获取该对象的命令或表达式（如 Get-Service 命令）。也可以将服务对象通过管道传递给 Set-Service。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | true (ByValue)
是否接受通配符？ | false

-Name <string>

指定要更改的服务的服务名称。不允许使用通配符。还可以通过管道将服务名称传递给 Set-Service。

是否为必需？ | true
位置？ | 1
默认值 |
是否接受管道输入？ | true (ByValue, ByPropertyName)
是否接受通配符？ | false

-PassThru

返回表示已更改的服务的对象。默认情况下，此 cmdlet 将不产生任何输出。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-StartupType <ServiceStartMode>

更改服务的启动模式。StartupType 的有效值包括：

-- Automatic：在系统启动时启动。

-- Manual：仅在由用户或程序启动时才启动。

-- Disabled：无法启动。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Status <string>

启动、停止或挂起（暂停）服务。有效值包括：

-- Running：启动服务。

-- Stopped：停止服务。

-- Paused：挂起服务。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Confirm

在执行命令之前提示您进行确认。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-WhatIf

描述如果执行该命令会发生什么情况（无需实际执行该命令）。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

<CommonParameters>

此 cmdlet 支持通用参数：-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。有关详细信息，请参阅 about_Commonparameters.

输入和输出

输入类型是指可通过管道传递给 cmdlet 的对象的类型。返回类型是指 Cmdlet 所返回对象的类型。

输入 | System.ServiceProcess.ServiceController, System.String 可以将服务对象或包含服务名称的字符串通过管道传递给 Set-Service。
输出 | None 此 cmdlet 不返回任何对象。

说明

要在 Windows Vista 以及 Windows 的更高版本上使用 Set-Service，请使用“以管理员身份运行”选项启动 Windows PowerShell。

Set-Service 只有在当前用户有相应权限时才能控制服务。如果某个命令不能正常工作，则可能您不具有所需的权限。

若要查找服务名称并显示您的系统中的服务名称，请键入“get-service”。服务名称显示在 Name 列中，显示名称显示在 DisplayName 列中。

示例 1

C:\PS>set-service -name lanmanworkstation -DisplayName "LanMan Workstation"

说明
-----------
此命令将 lanmanworkstation 服务的显示名称更改为“LanMan Workstation”。（默认值为“Workstation”。）

示例 2

C:\PS>get-wmiobject win32_service -filter "name = 'SysmonLog'"

ExitCode  : 0
Name      : SysmonLog
ProcessId : 0
StartMode : Manual
State     : Stopped
Status    : OK

C:\PS> set-service sysmonlog -startuptype automatic

C:\PS> get-wmiobject win32_service -filter "name = 'SysmonLog'"

ExitCode  : 0
Name      : SysmonLog
ProcessId : 0
StartMode : Auto
State     : Stopped
Status    : OK

C:\PS> get-wmiobject win32_service | format-table Name, StartMode -auto

Name                                  StartMode
----                                  ---------
AdtAgent                              Auto
Alerter                               Disabled
ALG                                   Manual
AppMgmt                               Manual
...

说明
-----------
这些命令获取性能日志和警报 (SysmonLog) 服务的启动类型，将启动模式设置为自动，然后显示更改结果。

这些命令使用 Get-WmiObject cmdlet 获取表示服务的 Win32_Service 对象，因为 Get-Service 所返回的 ServiceController 对象不包含启动模式。

第一条命令使用 Get-WmiObject cmdlet 获取表示 SysmonLog 服务的 Windows Management Instrumentation (WMI) 对象。此命令的默认输出显示该服务的启动类型。

第二条命令使用 Set-Service 将启动模式更改为自动。然后，重复第一条命令以显示更改。

最后一条命令显示计算机上所有服务的启动模式。

示例 3

C:\PS>set-service -name Schedule -computername S1 -description "Configures and schedules tasks."

C:\PS> get-wmiobject win32_service -computername s1 | where-object {$_.Name -eq "Schedule"} | format-list Name, Description

说明
-----------
这些命令更改远程计算机 S1 上的任务计划程序服务的说明，然后显示结果。

这些命令使用 Get-WmiObject cmdlet 获取表示服务的 Win32_Service 对象，因为 Get-Service 所返回的 ServiceController 对象不包含服务说明。

第一条命令使用 Set-Service 命令来更改说明。它使用服务的服务名称“Schedule”来标识该服务。

第二条命令使用 Get-WmiObject cmdlet 来获取表示任务计划程序服务的 WMI Win32_Service 实例。该命令中的第一个元素获取 Win32_service 类的所有实例。

管道运算符 (|) 将结果传递给 Where-Object cmdlet，该 cmdlet 选择 Name 属性中包含“Schedule”值的实例。

另一个管道运算符将结果发送给 Format-List cmdlet，该 cmdlet 将输出的格式设置为只包含 Name 和 Description 属性的列表。

示例 4

C:\PS>set-service winrm -status Running -passthru -computername Server02

说明
-----------
此命令启动计算机 Server02 上的 WinRM 服务。此命令使用 Status 参数指定所需状态（“running”），使用 PassThru 参数指示 Set-Service 返回表示 WinRM 服务的对象。

示例 5

C:\PS>get-service schedule -computername S1, S2 | set-service -status paused

说明
-----------
此命令挂起远程计算机 S1 和 S2 上的计划服务。它使用 Get-Service cmdlet 来获取该服务。管道运算符 (|) 将该服务发送给 Set-Service cmdlet，后者将服务状态更改为“Paused”。

示例 6

C:\PS>$s = get-service schedule

C:\PS> set-service -inputobject $s -status stopped

说明
-----------
这些命令停止本地计算机上的计划服务。

第一条命令使用 Get-Service cmdlet 获取计划服务。此命令将该服务保存在 $s 变量中。

第二条命令使用 Set-Service cmdlet 将计划服务的状态更改为“Stopped”。它使用 InputObject 参数提交 $s 变量中存储的服务，使用 Status 参数指定所需状态。

另请参阅

  • Get-Service
  • Start-Service
  • Stop-Service
  • Restart-Service
  • Resume-Service
  • Suspend-Service
  • New-Service


Set-StrictMode

建立和强制执行表达式、脚本和脚本块中的编码规则。

语法

Set-StrictMode -Off [<CommonParameters>]

Set-StrictMode -Version <Version> [<CommonParameters>]

说明

Set-StrictMode cmdlet 为当前作用域（以及所有子作用域）配置 strict 模式，并打开和关闭该模式。当 strict 模式处于打开状态时，如果表达式、脚本或脚本块的内容违反了基本的最佳实践编码规则，则 Windows PowerShell 会生成终止错误。

使用 Version 参数可以确定要强制执行哪些编码规则。

与 Set-PSDebug cmdlet 不同，Set-StrictMode 仅影响当前作用域及其子作用域，因此它可以在脚本或函数中使用，而不会影响全局作用域。

如果 Set-StrictMode 关闭，则假定未初始化变量 (Version 1) 的值为 0（零）或 $null，具体取决于类型。引用不存在的属性会返回 $null，无效函数语法的结果因错误而异。不允许使用未命名的变量。

参数

-Off

关闭 strict 模式。此参数还会关闭“Set-PSDebug –Strict”。

是否为必需？ | true
位置？ | named
默认值 | 无
是否接受管道输入？ | false
是否接受通配符？ | false

-Version <Version>

指定在 strict 模式下导致错误的条件。此参数是必需的。

有效值为“1.0”、“2.0”和“Latest”。下表显示了每个值的作用。

1.0

-- 禁止引用未初始化的变量，但字符串中未初始化的变量例外。

2.0

-- 禁止引用未初始化的变量（包括字符串中未初始化的变量）。

-- 禁止引用对象的不存在的属性。

-- 禁止使用用于调用方法的语法来调用函数。

-- 禁止使用无名称的变量 (${})。

Latest：

--选择最新（最严格）的可用版本。使用该值可以确保脚本使用最严格的可用版本，即使有新版本添加到 Windows PowerShell 中也是如此。

是否为必需？ | true
位置？ | named
默认值 | 无
是否接受管道输入？ | false
是否接受通配符？ | false

<CommonParameters>

此 cmdlet 支持通用参数：-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。有关详细信息，请参阅 about_Commonparameters.

输入和输出

输入类型是指可通过管道传递给 cmdlet 的对象的类型。返回类型是指 Cmdlet 所返回对象的类型。

输入 | None 不能通过管道将输入传递给此 cmdlet。
输出 | None 此 cmdlet 不返回任何输出。

说明

Set-StrictMode 类似于 Set-PSDebug 的 Strict 参数。“Set-Strictmode -version 1”等效于“Set-PSDebug –strict”，两者的区别在于 Set-PSDebug 在所有作用域中都有效，而 Set-StrictMode 仅在设置了此参数的作用域及其子作用效中有效。有关 Windows PowerShell 中的作用域的详细信息，请参阅 about_Scopes。

示例 1

C:\PS>set-strictmode -version 1.0

C:\PS> $a -gt 5
False
The variable $a cannot be retrieved because it has not been set yet.
At line:1 char:3
+ $a <<<<  -gt 5
    + CategoryInfo          : InvalidOperation: (a:Token) [], RuntimeException
    + FullyQualifiedErrorId : VariableIsUndefined

说明
-----------
此命令打开 strict 模式，并将它设置为 version 1.0。因此，尝试引用未初始化的变量将会失败。

示例输出显示了 version 1.0 strict 模式的效果。

示例 2

C:\PS># set-strictmode -version 2.0

# Strict mode is off by default.

C:\PS> function add ($a, $b) {$a + $b}
C:\PS> add 3 4
7
C:\PS> add(3,4)
3
4

C:\PS> set-strictmode -version 2.0

C:\PS> add(3,4)

The function or command was called like a method. Parameters should be separated by spaces, as described in 'Get-Help about_Parameter.'
At line:1 char:4
+ add <<<< (3,4)
    + CategoryInfo          : InvalidOperation: (:) [], RuntimeException
    + FullyQualifiedErrorId : StrictModeFunctionCallWithParens

C:\PS> set-strictmode -off

C:\PS> $string = "This is a string".
C:\PS> $string.Month
C:\PS>

C:\PS> set-strictmode -version 2.0

C:\PS> $string = "This is a string".
C:\PS> $string.Month
Property 'month' cannot be found on this object; make sure it exists.
At line:1 char:9
+ $string. <<<< month
    + CategoryInfo          : InvalidOperation: (.:OperatorToken) [], RuntimeException
    + FullyQualifiedErrorId : PropertyNotFoundStrict

说明
-----------
此命令打开 strict 模式，并将它设置为 version 2.0。因此，如果使用方法语法（括号和逗号）进行函数调用，或者引用未初始化的变量或不存在的属性，Windows PowerShell 将引发错误。

示例输出显示了 version 2.0 strict 模式的效果。

如果 version 2.0 strict 模式关闭，则“(3,4)”值会被解释为没有添加任何内容的单个数组对象。如果 version 2.0 strict 模式打开，则该值将被正确解释为用于提交两个值的错误语法。

如果 version 2.0 关闭，则引用不存在的字符串 Month 属性只会返回 Null。如果 version 2.0 打开，则该引用将被正确解释为一个引用错误。

另请参阅

  • about_Debuggers
  • about_Scopes
  • Set-PSDebug


Set-TraceSource

配置、启动和停止对 Windows PowerShell 组件的跟踪。

语法

Set-TraceSource [[-Option] {<None> | <Constructor> | <Dispose> | <Finalizer> | <Method> | <Property> | <Delegates> | <Events> | <Exception> | <Lock> | <Error> | <Errors> | <Warning> | <Verbose> | <WriteLine> | <Data> | <Scope> | <ExecutionFlow> | <Assert> | <All>}] [-Debugger] [-FilePath <string>] [-Force] [-ListenerOption {<None> | <LogicalOperationStack> | <DateTime> | <Timestamp> | <ProcessId> | <ThreadId> | <Callstack>}] [-PassThru] [-PSHost] [-Name] <string[]> [<CommonParameters>]

Set-TraceSource [-RemoveListener <string[]>] [-Name] <string[]> [<CommonParameters>]

Set-TraceSource [-RemoveFileListener <string[]>] [-Name] <string[]> [<CommonParameters>]

说明

Set-TraceSource cmdlet 配置、启动和停止对 Windows PowerShell 组件的跟踪。可以使用此命令来指定要跟踪的组件以及将跟踪输出发送到的位置。

参数

-Debugger

将跟踪输出发送到调试程序。可以在任何用户模式或内核模式的调试程序或者 Microsoft Visual Studio 中查看输出。此参数还将选择默认的跟踪侦听程序。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-FilePath <string>

将跟踪输出发送到指定文件。此参数还将选择文件跟踪侦听程序。如果使用此参数来启动跟踪，则请使用 RemoveFileListener 参数来停止该跟踪。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Force

允许该 cmdlet 覆盖只读文件。与 FilePath 参数一起使用。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-ListenerOption <TraceOptions>

向输出中的每条跟踪消息的前缀添加可选数据。有效值包括“None”、“LogicalOperationStack”、“DateTime”、“Timestamp”、“ProcessId”、“ThreadId”和“Callstack”。“None”为默认值。

若要指定多个选项，请使用逗号分隔这些选项，但不要带有空格，并将这些选项括在引号中，例如 "ProcessID,ThreadID"。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Name <string[]>

确定要跟踪的组件。请输入各个组件的跟踪源的名称。允许使用通配符。

是否为必需？ | true
位置？ | 1
默认值 |
是否接受管道输入？ | true (ByValue, ByPropertyName)
是否接受通配符？ | false

-Option <PSTraceSourceOptions>

确定要跟踪的事件的类型。

有效值包括：“None”、“Constructor”、“Dispose”、“Finalizer”、“Method”、“Property”、“Delegates”、“Events”、“Exception”、“Lock”、“Error”、“Errors”、“Warning”、“Verbose”、“WriteLine”、“Data”、“Scope”、“ExecutionFlow”、“Assert”和“All”。默认值为“All”。

以下值是其他值的组合：

-- ExecutionFlow：（Constructor、Dispose、Finalizer、Method、Delegates、Events 和 Scope）

-- Data：（Constructor、Dispose、Finalizer、Property、Verbose 和 WriteLine）

-- Errors：（Error 和 Exception）。

若要指定多个选项，请使用逗号分隔这些选项，但不要带有空格，并将这些选项括在引号中，例如 "Constructor,Dispose"。

是否为必需？ | false
位置？ | 2
默认值 |
是否接受管道输入？ | true (ByPropertyName)
是否接受通配符？ | false

-PassThru

返回一个表示跟踪会话的对象。默认情况下，此 cmdlet 将不产生任何输出。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-PSHost

将跟踪输出发送到 Windows PowerShell 主机。此参数还将选择 PSHost 跟踪侦听程序。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-RemoveFileListener <string[]>

通过删除与指定文件相关联的文件跟踪侦听程序来停止跟踪。输入跟踪输出文件的路径和文件名。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-RemoveListener <string[]>

通过删除跟踪侦听程序来停止跟踪。

将以下值与 RemoveListener 结合使用：

-- 若要删除 PSHost（控制台），请键入“Host”。

-- 若要删除调试程序，请键入“Debug”。

-- 若要删除所有跟踪侦听器，请键入“*”。

若要删除文件跟踪侦听程序，请使用 RemoveFileListener 参数。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

<CommonParameters>

此 cmdlet 支持通用参数：-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。有关详细信息，请参阅 about_Commonparameters.

输入和输出

输入类型是指可通过管道传递给 cmdlet 的对象的类型。返回类型是指 Cmdlet 所返回对象的类型。

输入 | System.String 可以通过管道将包含名称的字符串传递给 Set-TraceSource。
输出 | None 或 System.Management.Automation.PSTraceSource 如果使用 PassThru 参数，则 Set-TraceSource 生成一个表示跟踪会话的 System.Management.Automation.PSTraceSource 对象。否则，此 cmdlet 将不产生任何输出。

说明

跟踪是开发人员用于调试和优化程序的一种方法。在跟踪过程中，程序将生成有关其内部处理过程中每个步骤的详细消息。

Windows PowerShell 跟踪 cmdlet 专为帮助 Windows PowerShell 开发人员而设计，但其可供所有用户使用。使用这些 cmdlet，您可以监控 Windows PowerShell 功能的几乎每个方面。

“跟踪源”是每个 Windows PowerShell 组件的一部分，用于管理跟踪和生成该组件的跟踪消息。若要跟踪某个组件，您应标识其跟踪源。

“跟踪侦听程序”接收跟踪的输出并将其显示给用户。您可以选择将跟踪数据发送给用户模式或内核模式的调试程序、控制台、文件，或将其发送给从 System.Diagnostics.TraceListener 类中派生的自定义侦听程序。

若要启动跟踪，请使用 -Name 参数来指定跟踪源（要跟踪的组件），并使用 FilePath、Debugger 或 PSHost 参数来指定侦听器（输出的目标）。使用 Options 参数可确定要跟踪的事件的类型，而使用 ListenerOptions 参数可配置跟踪输出。

若要更改跟踪的配置，请输入 Set-TraceSource 命令，就如同要启动跟踪一样。Windows PowerShell 可识别出跟踪源已被跟踪。它将停止跟踪、添加新配置，然后启动或重新启动跟踪。

若要停止跟踪，请使用 RemoveListener 参数。若要停止使用文件侦听程序的跟踪（即使用 -FilePath 参数启动的跟踪），请使用 RemoveFileListener 参数。在删除侦听程序后，跟踪即会停止。

若要确定可以跟踪哪些组件，请使用 Get-TraceSource。每个模块的跟踪源都是在该组件处于使用状态时自动加载的，并会显示在 Get-TraceSource 的输出中。

示例 1

C:\PS>Set-TraceSource -Name Parameterbinding -Option ExecutionFlow -PSHost '
-ListenerOption "ProcessID,TimeStamp"

说明
-----------
此命令启动对 Windows PowerShell 的 ParameterBinding 组件的跟踪。它使用 Name 参数来指定跟踪源、使用 Option 参数来选择 ExecutionFlow 跟踪事件，并使用 PSHost 参数来选择 Windows PowerShell 主机侦听程序，该侦听程序会将输出发送到控制台。ListenerOption 参数将“ProcessID”和“TimeStamp”值添加到跟踪消息前缀。

示例 2

C:\PS>set-tracesource -name ParameterBinding -RemoveListener Host

说明
-----------
此命令停止对 Windows PowerShell 的 ParameterBinding 组件的跟踪。它使用 Name 参数来标识已在跟踪的组件，并使用 RemoveListener 参数来标识跟踪侦听程序。

另请参阅

  • Get-TraceSource
  • Trace-Command
  • Set-PSDebug


Set-Variable

设置变量的值。如果不存在具有所请求名称的变量，则创建该变量。

语法

Set-Variable [-Name] <string[]> [[-Value] <Object>] [-Description <string>] [-Exclude <string[]>] [-Force] [-Include <string[]>] [-Option {<None> | <ReadOnly> | <Constant> | <Private> | <AllScope>}] [-PassThru] [-Scope <string>] [-Visibility {<Public> | <Private>}] [-Confirm] [-WhatIf] [<CommonParameters>]

说明

Set-Variable cmdlet 为指定变量赋值或更改当前值。如果变量不存在，cmdlet 会创建它。

参数

-Description <string>

指定变量的说明。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Exclude <string[]>

忽略指定项。此参数的值对 Path 参数进行限定。请输入路径元素或模式，例如“*.txt”。允许使用通配符。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Force

允许您创建与现有只读变量同名的变量，或更改只读变量的值。

默认情况下，您可以覆盖某个变量，除非该变量的选项值为“ReadOnly”或“Constant”。有关详细信息，请参阅 Option 参数。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Include <string[]>

只更改指定项。此参数的值对 Name 参数进行限定。输入名称或名称模式，如“c*”。允许使用通配符。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Name <string[]>

指定变量名称。

是否为必需？ | true
位置？ | 1
默认值 |
是否接受管道输入？ | true (ByPropertyName)
是否接受通配符？ | false

-Option <ScopedItemOptions>

更改变量的 Options 属性的值。有效值包括：

-- None：不设置任何选项。（“None”为默认值。）

-- ReadOnly：除非使用 Force 参数，否则无法更改变量的属性。您可以使用 Remove-Variable 来删除该变量。

-- Constant：无法删除变量，也无法更改其属性。“Constant”仅在您创建别名时才可用。不能将现有变量的选项更改为“Constant”。

-- Private：变量只在 Scope 参数指定的作用域内可用。它由子作用域继承。

-- AllScope：变量将复制到创建的所有新作用域中。

若要查看变量的 Options 属性，请键入“get-variable| Format-Table -property name, options -autosize”。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-PassThru

返回表示新变量的对象。默认情况下，此 cmdlet 将不产生任何输出。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Scope <string>

确定变量的作用域。有效值包括“Global”、“Local”、“Script”或者相对于当前作用域的数字（0 到作用域数，其中 0 是指当前作用域，1 是指其父作用域）。默认值为“Local”。有关详细信息，请参阅 about_Scopes。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Value <Object>

指定变量的值。

是否为必需？ | false
位置？ | 2
默认值 |
是否接受管道输入？ | true (ByValue, ByPropertyName)
是否接受通配符？ | false

-Visibility <SessionStateEntryVisibility>

确定变量在创建它的会话之外是否可见。此参数供传递给其他用户的脚本和命令使用。

有效值包括：

-- Public：变量可见。（“Public”为默认值。）

-- Private：变量不可见。

当变量为专用时，它不会出现在变量列表（如 Get-Variable 返回的变量列表）中，也不会出现在 Variable: 驱动器的显示内容中。读取或更改专用变量值的命令会返回错误。但是，用户可以运行使用专用变量的命令，前提是这些命令是在定义该变量的会话中写入的。

是否为必需？ | false
位置？ | named
默认值 | Public
是否接受管道输入？ | false
是否接受通配符？ | false

-Confirm

在执行命令之前提示您进行确认。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-WhatIf

描述如果执行该命令会发生什么情况（无需实际执行该命令）。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

<CommonParameters>

此 cmdlet 支持通用参数：-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。有关详细信息，请参阅 about_Commonparameters.

输入和输出

输入类型是指可通过管道传递给 cmdlet 的对象的类型。返回类型是指 Cmdlet 所返回对象的类型。

输入 | System.Object 可以通过管道将表示变量值的对象传递给 Set-Variable。
输出 | None 或 System.Management.Automation.PSVariable 如果使用 PassThru 参数，则 Set-Variable 生成一个表示新变量或已更改变量的 System.Management.Automation.PSVariable 对象。否则，此 cmdlet 将不产生任何输出。

示例 1

C:\PS>set-variable -name desc -value "A description"

C:\PS>get-variable -name desc

说明
-----------
这些命令将“desc”变量的值设置为“A description”，然后获取该变量的值。

示例 2

C:\PS>set-variable -name processes -value (Get-Process) -option constant -scope global -description "All processes" -passthru | format-list -property *

说明
-----------
此命令创建一个包含系统上所有进程的全局只读变量，然后显示该变量的所有属性。

此命令使用 Set-Variable cmdlet 来创建变量。它使用 PassThru 参数来创建表示新变量的对象，并使用管道运算符 (|) 将该对象传递给 Format-List cmdlet。它使用 Format-List 的值为 *（全部）的 Property 参数来显示新创建的变量的所有属性。

将值“(Get-Process)”括在圆括号内，以确保先执行该值，然后再将其存储到变量中。否则，变量将包含单词“Get-Process”。

示例 3

C:\PS># set-variable -name counter -visibility private

C:\PS> new-variable -name counter -visibility public -value 26

C:\PS> $counter
26

C:\PS> get-variable c*

Name Value
---- -----
Culture en-US
ConsoleFileName
ConfirmPreference High
CommandLineParameters {}
Counter 26

C:\PS> set-variable -name counter -visibility private

C:\PS> get-variable c*

Name Value
---- -----
Culture en-US
ConsoleFileName
ConfirmPreference High
CommandLineParameters {}

C:\PS> $counter
"Cannot access the variable '$counter' because it is a private variable"

C:\PS> .\use-counter.ps1
Commands completed successfully.

说明
-----------
此命令演示如何将变量的可见性更改为“Private”。可以使用所需权限通过脚本读取和更改此变量，但它对于用户不可见。

示例输出显示了公共变量和专用变量的行为差异。

另请参阅

  • Get-Variable
  • New-Variable
  • Remove-Variable
  • Clear-Variable


Set-WmiInstance

创建或更新现有 Windows Management Instrumentation (WMI) 类的实例。

语法

Set-WmiInstance [-类] <string> [[-Arguments] <hashtable>] [-Authentication {<Default> | <None> | <Connect> | <Call> | <Packet> | <PacketIntegrity> | <PacketPrivacy> | <Unchanged>}] [-Authority <string>] [-ComputerName <string[]>] [-Credential <PSCredential>] [-EnableAllPrivileges] [-Impersonation {<Default> | <Anonymous> | <Identify> | <Impersonate> | <Delegate>}] [-Locale <string>] [-命名空间 <string>] [-AsJob] [-PutType {<None> | <UpdateOnly> | <CreateOnly> | <UpdateOrCreate>}] [-ThrottleLimit <int>] [-Confirm] [-WhatIf] [<CommonParameters>]

Set-WmiInstance [-Authentication {<Default> | <None> | <Connect> | <Call> | <Packet> | <PacketIntegrity> | <PacketPrivacy> | <Unchanged>}] [-Authority <string>] [-ComputerName <string[]>] [-Credential <PSCredential>] [-EnableAllPrivileges] [-Impersonation {<Default> | <Anonymous> | <Identify> | <Impersonate> | <Delegate>}] [-Locale <string>] [-命名空间 <string>] [-AsJob] [-PutType {<None> | <UpdateOnly> | <CreateOnly> | <UpdateOrCreate>}] [-ThrottleLimit <int>] [-Confirm] [-WhatIf] [<CommonParameters>]

Set-WmiInstance -InputObject <ManagementObject> [-Arguments <hashtable>] [-AsJob] [-PutType {<None> | <UpdateOnly> | <CreateOnly> | <UpdateOrCreate>}] [-ThrottleLimit <int>] [-Confirm] [-WhatIf] [<CommonParameters>]

Set-WmiInstance -Path <string> [-Arguments <hashtable>] [-Authentication {<Default> | <None> | <Connect> | <Call> | <Packet> | <PacketIntegrity> | <PacketPrivacy> | <Unchanged>}] [-Authority <string>] [-ComputerName <string[]>] [-Credential <PSCredential>] [-EnableAllPrivileges] [-Impersonation {<Default> | <Anonymous> | <Identify> | <Impersonate> | <Delegate>}] [-Locale <string>] [-命名空间 <string>] [-AsJob] [-PutType {<None> | <UpdateOnly> | <CreateOnly> | <UpdateOrCreate>}] [-ThrottleLimit <int>] [-Confirm] [-WhatIf] [<CommonParameters>]

Set-WmiInstance [-Authentication {<Default> | <None> | <Connect> | <Call> | <Packet> | <PacketIntegrity> | <PacketPrivacy> | <Unchanged>}] [-Authority <string>] [-ComputerName <string[]>] [-Credential <PSCredential>] [-EnableAllPrivileges] [-Impersonation {<Default> | <Anonymous> | <Identify> | <Impersonate> | <Delegate>}] [-Locale <string>] [-命名空间 <string>] [-AsJob] [-PutType {<None> | <UpdateOnly> | <CreateOnly> | <UpdateOrCreate>}] [-ThrottleLimit <int>] [-Confirm] [-WhatIf] [<CommonParameters>]

Set-WmiInstance [-Authentication {<Default> | <None> | <Connect> | <Call> | <Packet> | <PacketIntegrity> | <PacketPrivacy> | <Unchanged>}] [-Authority <string>] [-ComputerName <string[]>] [-Credential <PSCredential>] [-EnableAllPrivileges] [-Impersonation {<Default> | <Anonymous> | <Identify> | <Impersonate> | <Delegate>}] [-Locale <string>] [-命名空间 <string>] [-AsJob] [-PutType {<None> | <UpdateOnly> | <CreateOnly> | <UpdateOrCreate>}] [-ThrottleLimit <int>] [-Confirm] [-WhatIf] [<CommonParameters>]

说明

Set-WmiInstance cmdlet 创建或更新现有 WMI 类的实例。创建或更新的实例将写入 WMI 存储库。

参数

-Arguments <hashtable>

指定要更改的属性的名称，以及该属性的新值。名称和值必须为“名称-值”对。该“名称-值”对在命令行上以哈希表形式传递。例如：

-argument @{Setting1=1; Setting2=5; Setting3="test"}。

是否为必需？ | false
位置？ | 2
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-AsJob

将命令作为后台作业运行。使用此参数可运行需要较长时间才能完成的命令。

使用 AsJob 参数时，该命令返回表示后台作业的对象，然后显示命令提示符。当作业完成时，您可以继续在此会话中工作。如果 Set-WmiObject 用于远程计算机，则作业在本地计算机上创建，并且来自远程计算机的结果将自动返回本地计算机。若要管理作业，请使用包含 Job 名词的 cmdlet (Job cmdlet)。要获取作业结果，请使用 Receive-Job cmdlet。

注意：若要将此参数用于远程计算机，必须为本地和远程计算机配置远程处理。此外，在 Windows Vista 和更高版本的 Windows 中，必须使用“以管理员身份运行”选项启动 Windows PowerShell。有关详细信息，请参阅 about_Remote_Requirements。

有关 Windows PowerShell 后台作业的详细信息，请参阅 about_Jobs 和 about_Remote_Jobs。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Authentication <AuthenticationLevel>

指定用于 WMI 连接的身份验证级别。有效值包括：

-1：不变

0：默认值

1：无（不执行身份验证。）

2：连接（仅当客户端与应用程序建立了关系时才执行身份验证。）

3：调用（应用程序收到请求时只在每次调用的开始执行身份验证。）

4：数据包（对从客户端收到的所有数据执行身份验证。）

5：数据包整体性（所有在客户端和应用程序之间传送的数据都经过身份验证和验证。）

6：数据包保密性（使用其他身份验证等级的属性，并且所有数据都加密。）

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Authority <string>

指定用于对 WMI 连接进行身份验证的授权机构。可以指定标准 NTLM 或 Kerberos 身份验证。若要使用 NTLM，请将授权机构设置设为“ntlmdomain:<DomainName>”，其中 <DomainName> 标识有效的 NTLM 域名。若要使用 Kerberos，请指定“kerberos:<DomainName>\<ServerName>”。连接到本地计算机时不能包含授权机构设置。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-类 <string>

指定 WMI 类的名称。

是否为必需？ | true
位置？ | 1
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-ComputerName <string[]>

指定要对其运行管理操作的计算机。值可以是完全限定的域名、NetBIOS 名称或 IP 地址。使用本地计算机名称、localhost 或点 (.)指定本地计算机。默认值为本地计算机。当远程计算机与用户位于不同的域时，必须使用完全限定的域名。可以通过使用管道将值传递给此参数来设置该参数的值。

此参数不依赖于 Windows PowerShell 远程处理，后者使用 WS-Management。即使您的计算机未配置为运行 WS-Management 远程命令，也可以使用 Get-WmiObject 的 ComputerName 参数。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Credential <PSCredential>

指定有权执行此操作的用户帐户。默认值为当前用户。键入用户名，例如“User01”、“Domain01\User01”或 User@Contoso.com。或者，输入 PSCredential 对象，例如 Get-Credential cmdlet 返回的对象。键入用户名时，将会提示您键入密码。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-EnableAllPrivileges

在命令进行 WMI 调用之前，启用当前用户的所有权限。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Impersonation <ImpersonationLevel>

指定要使用的模拟级别。有效值包括：

0：默认值（读取本地注册表的默认模拟级别，通常设置为“3：模拟”。）

1：匿名（隐藏调用方的凭据。）

2：标识（允许对象查询调用方的凭据。）

3：模拟（允许对象使用调用方的凭据。）

4：委派（允许对象允许其他对象使用调用方的凭据。）

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-InputObject <ManagementObject>

指定要用作输入的 ManagementObject 对象。如果使用此参数，则忽略 Arguments 参数之外的所有其他参数。

是否为必需？ | true
位置？ | named
默认值 |
是否接受管道输入？ | true (ByValue)
是否接受通配符？ | false

-Locale <string>

指定 WMI 对象的首选区域设置。按喜爱顺序将 Locale 参数指定为 MS_<LCID> 格式的数组。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-命名空间 <string>

当此参数与 Class 参数一起使用时，它将指定引用的 WMI 类所在的 WMI 存储库命名空间。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Path <string>

指定要创建或更新的实例的 WMI 对象路径。

是否为必需？ | true
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-PutType <PutType>

指示应创建还是更新 WMI 实例。有效值包括：

UpdateOnly：更新现有 WMI 实例。

CreateOnly：创建新的 WMI 实例。

UpdateOrCreate：如果 WMI 实例存在，则更新该实例；如果实例不存在，则创建一个新实例。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-ThrottleLimit <int>

允许用户为可同时执行的 WMI 操作数目指定一个限制值。此参数与 AsJob 参数一起使用。节流限制仅适用于当前命令，而不适用于会话或计算机。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Confirm

在执行命令之前提示您进行确认。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-WhatIf

描述如果执行该命令会发生什么情况（无需实际执行该命令）。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

<CommonParameters>

此 cmdlet 支持通用参数：-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。有关详细信息，请参阅 about_Commonparameters.

输入和输出

输入类型是指可通过管道传递给 cmdlet 的对象的类型。返回类型是指 Cmdlet 所返回对象的类型。

输入 | None 此 cmdlet 不接受输入。
输出 | None 此 cmdlet 将不产生输出。

示例 1

C:\PS>Set-WMIInstance -class Win32_WMISetting -argument @{LoggingLevel=2}

__GENUS                        : 2
__CLASS                        : Win32_WMISetting
__SUPERCLASS                   : CIM_Setting
__DYNASTY                      : CIM_Setting
__RELPATH                      : Win32_WMISetting=@
__PROPERTY_COUNT               : 27
__DERIVATION                   : {CIM_Setting}
__SERVER                       : SYSTEM01
__NAMESPACE                    : root\cimv2
__PATH                         : \\SYSTEM01\root\cimv2:Win32_WMISetting=@
ASPScriptDefaultNamespace      : \\root\cimv2
ASPScriptEnabled               : False
AutorecoverMofs                : {%windir%\system32\wbem\cimwin32.mof, %windir%\system32\wbem\ncprov.mof, %windir%\syst
                                 em32\wbem\wmipcima.mof, %windir%\system32\wbem\secrcw32.mof...}
AutoStartWin9X                 :
BackupInterval                 :
BackupLastTime                 :
BuildVersion                   : 6001.18000
Caption                        :
DatabaseDirectory              : C:\Windows\system32\wbem\repository
DatabaseMaxSize                :
Description                    :
EnableAnonWin9xConnections     :
EnableEvents                   : False
EnableStartupHeapPreallocation : False
HighThresholdOnClientObjects   :
HighThresholdOnEvents          : 20000000
InstallationDirectory          : C:\Windows\system32\wbem
LastStartupHeapPreallocation   :
LoggingDirectory               : C:\Windows\system32\wbem\Logs\
LoggingLevel                   : 2
LowThresholdOnClientObjects    :
LowThresholdOnEvents           : 10000000
MaxLogFileSize                 : 65536
MaxWaitOnClientObjects         :
MaxWaitOnEvents                : 2000
MofSelfInstallDirectory        :
SettingID                      :

说明
-----------
此命令将 WMI 记录级别设置为 2。此命令通过 argument 参数传递要设置的属性和值（二者合称为值对）。此参数接受由 @{property = value} 结构定义的哈希表。返回的类信息将反映出新值。

示例 2

C:\PS>set-wmiinstance -class win32_environment -argument @{Name="testvar";VariableValue="testvalue";UserName="<SYSTEM>"}

__GENUS          : 2
__CLASS          : Win32_Environment
__SUPERCLASS     : CIM_SystemResource
__DYNASTY        : CIM_ManagedSystemElement
__RELPATH        : Win32_Environment.Name="testvar",UserName="<SYSTEM>"
__PROPERTY_COUNT : 8
__DERIVATION     : {CIM_SystemResource, CIM_LogicalElement, CIM_ManagedSystemElement}
__SERVER         : SYSTEM01
__NAMESPACE      : root\cimv2
__PATH           : \\SYSTEM01\root\cimv2:Win32_Environment.Name="testvar",UserName="<SYSTEM>"
Caption          : <SYSTEM>\testvar
Description      : <SYSTEM>\testvar
InstallDate      :
Name             : testvar
Status           : OK
SystemVariable   : True
UserName         : <SYSTEM>
VariableValue    : testvalue

说明
-----------
此命令创建值为“testvalue”的 testvar 环境变量。它通过创建 Win32_Environment WMI 类的新实例来实现此目的。请注意，此操作需要适当的凭据，并且您可能需要重新启动 Windows PowerShell 才能查看新的环境变量。

示例 3

C:\PS>Set-WMIInstance -class Win32_WMISetting -argument @{LoggingLevel=2} -computername system01, system02, system03

__GENUS                        : 2
__CLASS                        : Win32_WMISetting
__SUPERCLASS                   : CIM_Setting
__DYNASTY                      : CIM_Setting
__RELPATH                      : Win32_WMISetting=@
__PROPERTY_COUNT               : 27
__DERIVATION                   : {CIM_Setting}
__SERVER                       : SYSTEM01
__NAMESPACE                    : root\cimv2
__PATH                         : \\SYSTEM01\root\cimv2:Win32_WMISetting=@
ASPScriptDefaultNamespace      : \\root\cimv2
ASPScriptEnabled               : False
AutorecoverMofs                : {%windir%\system32\wbem\cimwin32.mof, %windir%\system32\wbem\ncprov.mof, %windir%\syst
                                 em32\wbem\wmipcima.mof, %windir%\system32\wbem\secrcw32.mof...}
AutoStartWin9X                 :
BackupInterval                 :
BackupLastTime                 :
BuildVersion                   : 6001.18000
Caption                        :
DatabaseDirectory              : C:\Windows\system32\wbem\repository
DatabaseMaxSize                :
Description                    :
EnableAnonWin9xConnections     :
EnableEvents                   : False
EnableStartupHeapPreallocation : False
HighThresholdOnClientObjects   :
HighThresholdOnEvents          : 20000000
InstallationDirectory          : C:\Windows\system32\wbem
LastStartupHeapPreallocation   :
LoggingDirectory               : C:\Windows\system32\wbem\Logs\
LoggingLevel                   : 2
LowThresholdOnClientObjects    :
LowThresholdOnEvents           : 10000000
MaxLogFileSize                 : 65536
MaxWaitOnClientObjects         :
MaxWaitOnEvents                : 2000
MofSelfInstallDirectory        :
SettingID                      :

...

说明
-----------
此命令将 WMI 记录级别设置为 2。此命令通过 argument 参数传递要设置的属性和值（二者合称为值对）。此参数接受由 @{property = value} 结构定义的哈希表。返回的类信息将反映出新值。

另请参阅

  • Get-WmiObject
  • Invoke-WmiMethod
  • Remove-WmiObject
  • Get-WSManInstance
  • Invoke-WSManAction
  • New-WSManInstance
  • Remove-WSManInstance


Set-WSManInstance

修改与资源相关的管理信息。

语法

Set-WSManInstance [-ApplicationName <string>] [-ComputerName <string>] [-Fragment <string>] [-Port <int>] [-UseSSL] -ResourceURI <Uri> [[-SelectorSet] <hashtable>] [-Authentication <AuthenticationMechanism>] [-Credential <PSCredential>] [-Dialect <Uri>] [-FilePath <File>] [-SessionOption <hashtable>] [-ValueSet <hashtable>] [<CommonParameters>]

Set-WSManInstance [-ConnectionURI <Uri>] [-Fragment <string>] -ResourceURI <Uri> [[-SelectorSet] <hashtable>] [-Authentication <AuthenticationMechanism>] [-Credential <PSCredential>] [-Dialect <Uri>] [-FilePath <File>] [-SessionOption <hashtable>] [-ValueSet <hashtable>] [<CommonParameters>]

说明

Set-WSManInstance cmdlet 用于修改与资源相关的管理信息。

此 cmdlet 使用 WinRM 连接/传输层来修改这些信息。

参数

-ApplicationName <string>

指定连接中的应用程序名称。ApplicationName 参数的默认值为“WSMAN”。远程终结点的完整标识符采用以下格式：

<transport>://<server>:<port>/<ApplicationName>

例如：

http://server01:8080/WSMAN

承载会话的 Internet 信息服务 (IIS) 将请求连同此终结点转发到指定的应用程序。默认设置“WSMAN”适用于大多数使用情况。当有许多计算机建立了与运行 Windows PowerShell 的一台计算机的远程连接时，需要用到此参数。这种情况下，IIS 托管 Web Services for Management (WS-Management)，以保证效率。

是否为必需？ | false
位置？ | named
默认值 | wsman
是否接受管道输入？ | false
是否接受通配符？ | false

-Authentication <AuthenticationMechanism>

指定服务器上要使用的身份验证机制。可能值为：

- Basic：Basic 是一种方案，在该方案中，用户名和密码以明文形式发送到服务器或代理。

- Default：使用 WS-Management 协议实现的身份验证方法。这是默认设置。

- Digest：Digest 是一种质询响应方案，该方案将服务器指定的数据字符串用于质询。

- Kerberos：客户端计算机和服务器使用 Kerberos 证书相互进行身份验证。

- Negotiate：Negotiate 是一种质询响应方案，该方案与服务器或代理协商以确定要使用的身份验证方案。例如，此参数值允许进行协商以确定是使用 Kerberos 协议还是 NTLM。

- CredSSP：使用凭据安全服务提供程序 (CredSSP) 身份验证，这种方法允许用户委派凭据。此选项用于这样的命令：在一台远程计算机上运行，但从其他远程计算机上收集数据或者在其他远程计算机上运行其他命令。

注意：CredSSP 将本地计算机中的用户凭据委派给远程计算机。此操作增加了远程操作的安全风险。如果远程计算机的安全受到威胁，则在向该计算机传递凭据时，可使用这些凭据来控制网络会话。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-ComputerName <string>

指定要对其运行管理操作的计算机。值可以是完全限定的域名、NetBIOS 名称或 IP 地址。使用本地计算机名称、localhost 或点 (.)指定本地计算机。默认值为本地计算机。当远程计算机与用户位于不同的域时，必须使用完全限定的域名。可以通过管道将此参数的值传递给 cmdlet。

是否为必需？ | false
位置？ | named
默认值 | localhost
是否接受管道输入？ | false
是否接受通配符？ | false

-ConnectionURI <Uri>

指定连接终结点。此字符串的格式为：

<Transport>://<Server>:<Port>/<ApplicationName>

以下字符串是此参数的格式正确的值：

http://Server01:8080/WSMAN

URI 必须完全限定。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Credential <PSCredential>

指定有权执行此操作的用户帐户。默认值为当前用户。键入用户名，例如“User01”、“Domain01\User01”或“User@Domain.com”。或者，输入 PSCredential 对象，例如由 Get-Credential cmdlet 返回的对象。键入用户名时，将会提示您键入密码。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Dialect <Uri>

指定在筛选器谓词中使用的方言。这可以是远程服务支持的任何方言。以下别名可用于方言 URI：

- WQL：http://schemas.microsoft.com/wbem/wsman/1/WQL

- Selector：http://schemas.microsoft.com/wbem/wsman/1/wsman/SelectorFilter

- Association：http://schemas.dmtf.org/wbem/wsman/1/cimbinding/associationFilter

是否为必需？ | false
位置？ | named
默认值 | http://schemas.microsoft.com/wbem/wsman/1/WQL
是否接受管道输入？ | false
是否接受通配符？ | false

-FilePath <File>

指定用于更新管理资源的文件的路径。通过使用 ResourceURI 参数和 SelectorSet 参数来指定管理资源。例如，以下命令使用 FilePath 参数：

invoke-wsmanaction -action stopservice -resourceuri wmicimv2/Win32_Service -SelectorSet @{Name="spooler"} -FilePath:c:\input.xml -authentication default

此命令使用来自文件的输入对后台处理程序服务调用 StopService 方法。文件 Input.xml 包含以下内容：

<p:StopService_INPUT xmlns:p="http://schemas.microsoft.com/wbem/wsman/1/wmi/root/cimv2/Win32_Service"/>

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | true (ByPropertyName)
是否接受通配符？ | false

-Fragment <string>

指定实例中要针对指定操作更新或检索的部分。例如，要获取后台处理程序服务的状态，请指定“-Fragment Status”。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-OptionSet <hashtable>

将一组开关传递到服务以修改或调整请求的性质。这些与命令行 shell 中使用的开关的类似之处在于，它们也是特定于服务的。可以指定任意多个选项。

以下示例演示分别为 a、b 和 c 参数传递值 1、2 和 3 的语法：

-OptionSet @{a=1;b=2;c=3}

是否为必需？ |
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Port <int>

指定要在客户端连接到 WinRM 服务时使用的端口。如果传输方式为 HTTP，则默认端口为 80。如果传输方式为 HTTPS，则默认端口为 443。使用 HTTPS 作为传输方式时，ComputerName 参数的值必须与服务器的证书公用名 (CN) 匹配。但是，如果 SkipCNCheck 参数指定为 SessionOption 参数的一部分，则服务器的证书公用名不必与服务器的主机名称相匹配。SkipCNCheck 参数应仅用于受信任的计算机。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-ResourceURI <Uri>

包含资源类或实例的统一资源标识符 (URI)。URI 用于标识特定类型的资源，例如，计算机上的磁盘或进程。

URI 由前缀和资源的路径组成。例如：

http://schemas.microsoft.com/wbem/wsman/1/wmi/root/cimv2/Win32_LogicalDisk

http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2/CIM_NumericSensor

是否为必需？ | true
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-SelectorSet <hashtable>

指定一组用于选择特定管理资源实例的值对。当相应资源存在多个实例时，将使用 SelectorSet 参数。SelectorSet 参数的值必须为哈希表。以下示例说明如何为此参数输入值：

-SelectorSet @{Name="WinRM";ID="yyy"}

是否为必需？ | false
位置？ | 2
默认值 |
是否接受管道输入？ | true (ByValue, ByPropertyName)
是否接受通配符？ | false

-SessionOption <hashtable>

为 WS-Management 会话定义一组扩展选项。输入使用 New-WSManSessionOption cmdlet 创建的 SessionOption 对象。有关可用选项的详细信息，请参阅 New-WSManSessionOption。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-UseSSL

指定应使用安全套接字层 (SSL) 协议来建立与远程计算机的连接。默认情况下，不使用 SSL。

WS-Management 加密通过网络传输的所有 Windows PowerShell 内容。利用 UseSSL 参数，可以指定 HTTPS（而非 HTTP）的额外保护措施。如果在连接端口上 SSL 不可用并且指定了此参数，则命令将失败。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-ValueSet <hashtable>

指定一个用于帮助修改管理资源的哈希表。通过使用 ResourceURI 参数和 SelectorSet 参数来指定管理资源。ValueSet 参数的值必须为哈希表。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | true (ByPropertyName)
是否接受通配符？ | false

<CommonParameters>

此 cmdlet 支持通用参数：-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。有关详细信息，请参阅 about_Commonparameters.

输入和输出

输入类型是指可通过管道传递给 cmdlet 的对象的类型。返回类型是指 Cmdlet 所返回对象的类型。

输入 | None 此 cmdlet 不接受任何输入。
输出 | None 此 cmdlet 将不产生任何输出。

示例 1

C:\PS>set-wsmaninstance -resourceuri winrm/config/listener -selectorset @{address="*";transport="https"} -valueset @{Enabled="false"}

cfg                   : http://schemas.microsoft.com/wbem/wsman/1/config/listener
xsi                   : http://www.w3.org/2001/XMLSchema-instance
lang                  : en-US
Address               : *
Transport             : HTTPS
Port                  : 443
Hostname              :
Enabled               : false
URLPrefix             : wsman
CertificateThumbprint :
ListeningOn           : {127.0.0.1, 172.30.168.171, ::1, 2001:4898:0:fff:0:5efe:172.30.168.171...}

说明
-----------
此命令禁用本地计算机上的 https 侦听器。

重要说明：在与指定的属性进行匹配时，ValueSet 参数区分大小写。

例如，使用上述命令时，

以下形式的命令将失败：     -ValueSet @{enabled="False"}

以下形式的命令将成功：  -ValueSet @{Enabled="False"}

示例 2

C:\PS>set-wsmaninstance -resourceuri winrm/config -ValueSet @{MaxEnvelopeSizekb = "200"}

cfg                 : http://schemas.microsoft.com/wbem/wsman/1/config
lang                : en-US
MaxEnvelopeSizekb   : 200
MaxTimeoutms        : 60000
MaxBatchItems       : 32000
MaxProviderRequests : 4294967295
Client              : Client
Service             : Service
Winrs               : Winrs

说明
-----------
此命令在本地计算机上将 MaxEnvelopeSizekb 值设置为 200。

重要说明：在与指定的属性进行匹配时，ValueSet 参数区分大小写。

例如，使用上述命令时，

以下形式的命令将失败：     -ValueSet @{MaxEnvelopeSizeKB ="200"}

以下形式的命令将成功：  -ValueSet @{MaxEnvelopeSizekb ="200"}

示例 3

C:\PS>set-wsmaninstance -resourceuri winrm/config/listener -computername SERVER02 -selectorset @{address="*";transport="https"} -valueset @{Enabled="false"}

cfg                   : http://schemas.microsoft.com/wbem/wsman/1/config/listener
xsi                   : http://www.w3.org/2001/XMLSchema-instance
lang                  : en-US
Address               : *
Transport             : HTTPS
Port                  : 443
Hostname              :
Enabled               : false
URLPrefix             : wsman
CertificateThumbprint :
ListeningOn           : {127.0.0.1, 172.30.168.172, ::1, 2001:4898:0:fff:0:5efe:172.30.168.172...}

说明
-----------
此命令禁用远程计算机 SERVER02 上的 https 侦听器。

重要说明：在与指定的属性进行匹配时，ValueSet 参数区分大小写。

例如，使用上述命令时，

以下形式的命令将失败：     -ValueSet @{enabled="False"}

以下形式的命令将成功：  -ValueSet @{Enabled="False"}

另请参阅

  • Connect-WSMan
  • Disable-WSManCredSSP
  • Disconnect-WSMan
  • Enable-WSManCredSSP
  • Get-WSManCredSSP
  • Get-WSManInstance
  • Invoke-WSManAction
  • New-WSManInstance
  • New-WSManSessionOption
  • Remove-WSManInstance
  • Set-WSManQuickConfig
  • Test-WSMan


Set-WSManQuickConfig

配置本地计算机的远程管理。

语法

Set-WSManQuickConfig [-UseSSL] [<CommonParameters>]

说明

Set-WSManQuickConfig cmdlet 用于将计算机配置为接收使用 Web Services for Management (WS-Management) 技术发送的 Windows PowerShell 远程命令。

该 cmdlet 将执行以下操作：

1. 检查 WinRM 服务是否正在运行。如果 WinRM 服务未运行，则启动该服务。

2. 将 WinRM 服务的启动类型设置为自动。

3. 创建一个侦听器以接受任意 IP 地址上的请求。默认情况下，传输方式为 HTTP。

4. 对 WinRM 通信启用防火墙例外。

若要在 Windows Vista、Windows Server 2008 以及更高版本的 Windows 上运行此 cmdlet，您必须使用“以管理员身份运行”选项启动 Windows PowerShell。

参数

-UseSSL

指定应使用安全套接字层 (SSL) 协议来建立与远程计算机的连接。默认情况下，不使用 SSL。

WS-Management 加密通过网络传输的所有 Windows PowerShell 内容。利用 UseSSL 参数，可以指定应采用使用 HTTPS（而非 HTTP）的额外保护措施。如果指定了此参数，但 SSL 在用于连接的端口上不可用，则命令将失败。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

<CommonParameters>

此 cmdlet 支持通用参数：-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。有关详细信息，请参阅 about_Commonparameters.

输入和输出

输入类型是指可通过管道传递给 cmdlet 的对象的类型。返回类型是指 Cmdlet 所返回对象的类型。

输入 | None 此 cmdlet 不接受任何输入。
输出 | None 此 cmdlet 将不产生任何输出。

示例 1

C:\PS>Set-WSManQuickConfig

说明
-----------
此命令设置所需配置以启用本地计算机的远程管理。默认情况下，此命令创建用于 HTTP 的 WS-Management 侦听器。

示例 2

C:\PS>Set-WSManQuickConfig -UseSSL

说明
-----------
该命令设置所需配置以启用本地计算机的远程管理。UseSSL 参数使该命令创建用于 HTTPS 的 WS-Management 侦听器。

另请参阅

  • Connect-WSMan
  • Disable-WSManCredSSP
  • Disconnect-WSMan
  • Enable-PSRemoting
  • Enable-WSManCredSSP
  • Get-WSManCredSSP
  • Get-WSManInstance
  • Invoke-WSManAction
  • New-PSSession
  • New-WSManInstance
  • New-WSManSessionOption
  • Test-WSMan


Show-EventLog

在事件查看器中显示本地或远程计算机的事件日志。

语法

Show-EventLog [[-ComputerName] <string>] [<CommonParameters>]

说明

Show-EventLog cmdlet 在本地计算机上打开事件查看器，并在其中显示本地计算机或远程计算机上的所有传统事件日志。

要在 Windows Vista 及 Windows 的更高版本上打开事件查看器，当前用户必须是本地计算机上 Administrators 组的成员。

包含 EventLog 名词的 cmdlet (EventLog cmdlet) 仅适用于传统事件日志。要从使用 Windows Vista 以及 Windows 更高版本中的 Windows 事件日志技术的日志中获取事件，请使用 Get-WinEvent。

参数

-ComputerName <string>

指定远程计算机。Show-EventLog 在本地计算机上的事件查看器中显示指定计算机中的事件日志。默认值为本地计算机。

键入远程计算机的 NetBIOS 名称、Internet 协议 (IP) 地址或完全限定的域名。

此参数不依赖于 Windows PowerShell 远程处理。即使您的计算机未配置为运行远程命令，您也可以使用 Get-EventLog 的 ComputerName 参数。

是否为必需？ | false
位置？ | 1
默认值 | .
是否接受管道输入？ | false
是否接受通配符？ | false

<CommonParameters>

此 cmdlet 支持通用参数：-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。有关详细信息，请参阅 about_Commonparameters.

输入和输出

输入类型是指可通过管道传递给 cmdlet 的对象的类型。返回类型是指 Cmdlet 所返回对象的类型。

输入 | None 不能通过管道将输入传递给此 cmdlet。
输出 | None 此 cmdlet 将不产生任何输出。

说明

Windows PowerShell 命令提示符在事件查看器打开后立即返回。当事件查看器处于打开状态时，您可以在当前会话中工作。

因为此 cmdlet 需要用户界面，所以它无法在 Windows Server 的 Server Core 安装上运行。

示例 1

C:\PS>show-eventlog

说明
-----------
此命令打开事件查看器并在其中显示本地计算机上的传统事件日志。

示例 2

C:\PS>show-eventlog -computername Server01

说明
-----------
此命令打开事件查看器并在其中显示计算机 Server01 上的传统事件日志。

另请参阅

  • Clear-EventLog
  • Get-EventLog
  • Limit-EventLog
  • New-EventLog
  • Remove-EventLog
  • Write-EventLog
  • Get-WinEvent


Sort-Object

按属性值对对象进行排序。

语法

Sort-Object [[-Property] <Object[]>] [-CaseSensitive] [-Culture <string>] [-Descending] [-InputObject <psobject>] [-Unique] [<CommonParameters>]

说明

Sort-Object cmdlet 根据对象的属性值按升序或降序对对象排序。

您可以指定一个属性或多个属性（用于多键排序），也可以选择区分大小写或不区分大小写的排序。您还可以指示 Sort-Object 只显示对于特定属性具有唯一值的对象。

参数

-CaseSensitive

指示排序应区分大小写。默认情况下，排序不区分大小写。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Culture <string>

指定排序时要使用的区域性配置。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Descending

以降序对对象进行排序。默认值为升序。

Descending 参数适用于所有属性。若要按某些属性

以升序进行排序，然后按其他属性以降序进行排序，则必须使用哈希表来指定其属性值。有关详细信息，请参阅示例。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-InputObject <psobject>

指定要排序的对象。

使用 InputObject 参数提交项目集合时，Sort-Object 会收到表示该集合的一个对象。因为一个对象无法排序，所以 Sort-Object 会原样返回整个集合。

若要为对象排序，请通过管道将它们传递给 Sort-Object。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | true (ByValue)
是否接受通配符？ | false

-Property <Object[]>

指定排序时要使用的属性。对象将基于这些属性的值进行排序。输入属性的名称。允许使用通配符。

如果您指定多个属性，则先按第一个属性对对象进行排序。如果多个对象的第一个属性的值相同，则按第二个属性对这些对象排序。此过程将一直继续，直至没有其他指定的属性或没有对象组。

如果您未指定属性，cmdlet 会根据对象类型的默认属性进行排序。

Property 参数的值可以是新的计算属性。若要创建计算属性，请使用哈希表。有效键包括：

-- Expression <字符串> 或 <脚本块>

-- Ascending <布尔值>

-- Descending <布尔值>

是否为必需？ | false
位置？ | 1
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | true

-Unique

消除重复项，只返回集合的唯一成员。您可以使用此参数来代替 Get-Unique cmdlet。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

<CommonParameters>

此 cmdlet 支持通用参数：-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。有关详细信息，请参阅 about_Commonparameters.

输入和输出

输入类型是指可通过管道传递给 cmdlet 的对象的类型。返回类型是指 Cmdlet 所返回对象的类型。

输入 | System.Management.Automation.PSObject 可以通过管道将要排序的对象传递给 Sort-Object。
输出 | System.Management.Automation.PSObject Sort-Object 返回排序后的对象。

说明

Sort-Object 会根据您指定的属性或该类型对象的默认排序属性对对象进行排序。

如果某个对象不具有所指定的属性之一，则 cmdlet 会将该对象的属性值解释为 NULL，并将其放置在排序顺序的末尾。

在对对象进行排序时，Sort-Object 会对每个属性使用 Compare 方法。如果某个属性未实现 IComparable，则 cmdlet 会将属性值转换为字符串并使用 System.String 的 Compare 方法。

Sort-Object cmdlet 根据对象的属性值按升序或降序对对象排序。

如果您根据其值是枚举的属性排序，Sort-Object 会按数字顺序对枚举值排序，它不会对枚举成员名称排序。例如，如果您按状态对服务排序，则状态为“Stopped”的服务会出现在状态为“Running”的服务之前，因为状态值是一个 ServiceControllerStatus 枚举，其中“Stopped”的值为 1，“Running”的值为 4。

示例 1

C:\PS>get-childitem | sort-object

Mode                LastWriteTime     Length Name
----                -------------     ------ ----
-a---         9/13/2005   4:24 PM          0 0
-a---          9/6/2005   4:19 PM         12 a.csv
-a---         9/21/2005   3:49 PM        529 a.Ps
-a---         8/22/2005   4:14 PM         22 a.pl
-a---         9/27/2005  10:33 AM         24 a.txt
-a---         9/15/2005  10:31 AM        398 a.vbs
-a---         7/21/2005  12:39 PM      37066 a.xml
-a---         8/28/2005  11:30 PM       5412 a.xslt
-a---        10/25/2005   1:59 PM        125 AdamTravel.txt
-a---         7/21/2005   9:49 AM         59 add2Num.Ps
-a---         8/29/2005   5:42 PM       7111 add-content.xml
-a---         9/21/2005  12:46 PM       8771 aliens.Ps
-a---         8/10/2005   2:10 PM        798 array.xml
-a---          8/4/2004   5:00 AM        110 AUTORUN.INF
-a---          9/6/2005   4:20 PM        245 b.csv
...

说明
-----------
此命令对当前目录中的子目录和文件排序。由于未指定属性，因此文件和目录将按其默认排序属性 Name 的字母顺序升序排序。

示例 2

C:\PS>get-childitem | sort-object -property length

Mode                LastWriteTime     Length Name
----                -------------     ------ ----
-a---         12/3/2006   5:35 PM          2 pref.txt
-a---          9/6/2006   3:33 PM         15 count.txt
-a---         7/26/2006  10:01 AM         30 filenoext
-a---         8/18/2006   9:02 AM         52 temp.ps1
-a---         8/18/2006   9:02 AM         52 temp.msh
-a---          9/6/2006   3:33 PM         56 fivewords.txt
-a---         7/26/2006   9:28 AM         80 date.csv
-a---         7/29/2006   7:15 PM         84 test2.txt
-a---         7/29/2006   7:15 PM         84 test.ps1

说明
-----------
此命令按文件长度以升序显示当前目录中的文件。

示例 3

C:\PS>get-process | sort-object -property WS | select-object -last 5

Handles  NPM(K)    PM(K)      WS(K) VM(M)   CPU(s)     Id ProcessName
-------  ------    -----      ----- -----   ------     -- -----------
   1105      25    44236      18932   197    93.81   2032 iexplore
   2526      66    37668      36836   221   393.27    868 svchost
    974      19    22844      45928   371    88.39   3952 WINWORD
   1371      22    42192      61872   323    75.75   1584 INFOPATH
   2145      58    93088      70680   619   396.69   3908 OUTLOOK

说明
-----------
此命令根据进程的工作集大小显示计算机上占用内存最多的五个进程。

该命令使用 Get-Process cmdlet 获取进程列表。它使用管道运算符 (|) 将结果发送到 Sort-Object cmdlet，该 cmdlet 会按工作集顺序对对象进行排序。

另一个管道运算符会将结果发送到 Select-Object，后者只显示列表中的最后五项。

示例 4

C:\PS>get-history | sort-object -descending

Id CommandLine
-- -----------
51 get-history | sort -descending
50 get-history | sort -descending
49 get-history | sort -descending
48 get-history | sort -descending
47 get-history | sort -descending
46 get-history | sort -descending
45 get-history | sort -descending
44 cd $pshome
43 get-childitem | sort-object
42 gci *.txt

说明
-----------
此命令使用 ID 属性作为默认关键字对 HistoryInfo 对象进行排序。

示例 5

C:\PS>C:\PS> get-service | sort-object -property `
@{Expression="Status";Descending=$true}, `
@{Expression="DisplayName";Descending=$false}

Status   Name               DisplayName
------   ----               -----------
Running  ALG                Application Layer Gateway Service
Running  Ati HotKey Poller  Ati HotKey Poller
Running  wuauserv           Automatic Updates
Running  BITS               Background Intelligent Transfer Ser...
Running  Client for NFS     Client for NFS
...
Stopped  clr_optimizatio... .NET Runtime Optimization Service v...
Stopped  Alerter            Alerter
Stopped  AppMgmt            Application Management
Stopped  aspnet_state       ASP.NET State Service
Stopped  ATI Smart          ATI Smart
Stopped  ClipSrv            ClipBook

说明
-----------
此命令按 Status 的降序以及 DisplayName 的升序显示计算机上的服务。

此命令使用 Get-Service cmdlet 获取计算机上的服务。它使用管道运算符 (|) 将服务发送到 Sort-Object cmdlet。

为了按升序对一个属性排序，按降序对另一个属性排序，此命令需要对 Property 参数的值使用一个哈希表。该哈希表使用 Expression 键指定属性名称，使用 Ascending 或 Descending 键指定排序顺序。

生成的显示内容会按降序对 Status 值排序，将 Status 值为“Running”的属性列在 Status 值为“Stopped”的属性的前面。在按升序排序时，“Stopped”会出现在“Running”之前，因为 Status 是一个枚举的属性，其中“Stopped”的值 (1) 小于“Running”的值 (4)。

示例 6

C:\PS>get-childitem *.txt | sort-object -property @{Expression={$_.LastWriteTime - $_.CreationTime}; Ascending=$false} | Format-Table LastWriteTime, CreationTime

LastWriteTime                           CreationTime
-------------                           ------------
2/21/2006 10:22:20 AM                   10/3/2005 4:19:40 PM
2/27/2006 8:14:24 AM                    2/23/2006 10:41:08 PM
2/24/2006 1:26:19 PM                    2/23/2006 11:23:36 PM
1/5/2006 12:01:35 PM                    1/5/2006 11:35:30 AM
2/24/2006 9:25:40 AM                    2/24/2006 9:22:24 AM
2/24/2006 9:40:01 AM                    2/24/2006 9:39:41 AM
2/21/2006 10:21:30 AM                   2/21/2006 10:21:30 AM

说明
-----------
此命令按 CreationTime 与 LastWriteTime 之间的时间跨度以降序对文本文件进行排序。

示例 7

C:\PS>get-content servers.txt

localhost
test01
server01
server02
localhost
server01

C:\PS> get-content servers.txt | sort-object -unique
localhost
server01
server02
test01

说明
-----------
这些命令对文本文件中的服务器名称进行排序。第二条命令将 Sort-Object cmdlet 与 Unique 参数结合使用，以返回一个已排序且无重复项的列表。

另请参阅

  • Group-Object


Split-Path

返回指定的路径部分。

语法

Split-Path [-IsAbsolute] [-Path] <string[]> [-Credential <PSCredential>] [-LiteralPath <string[]>] [-Resolve] [-UseTransaction] [<CommonParameters>]

Split-Path [-Leaf] [-Path] <string[]> [-Credential <PSCredential>] [-LiteralPath <string[]>] [-Resolve] [-UseTransaction] [<CommonParameters>]

Split-Path [-NoQualifier] [-Path] <string[]> [-Credential <PSCredential>] [-LiteralPath <string[]>] [-Resolve] [-UseTransaction] [<CommonParameters>]

Split-Path [-Parent] [-Path] <string[]> [-Credential <PSCredential>] [-LiteralPath <string[]>] [-Resolve] [-UseTransaction] [<CommonParameters>]

Split-Path [-Qualifier] [-Path] <string[]> [-Credential <PSCredential>] [-LiteralPath <string[]>] [-Resolve] [-UseTransaction] [<CommonParameters>]

说明

Split-Path cmdlet 仅返回路径的指定部分，如父目录、子目录或文件名。它还显示拆分路径所引用的项，并指示该路径是相对路径还是绝对路径。

使用此 cmdlet 可以只显示或只提交路径的选定部分。

参数

-Credential <PSCredential>

指定有权执行此操作的用户帐户。默认值为当前用户。

键入用户名，例如“User01”或“Domain01\User01”。或者，输入 PSCredential 对象，例如由 Get-Credential cmdlet 生成的对象。如果键入用户名，则将提示您输入密码。

随同 Windows PowerShell 一起安装的任何提供程序都不支持此参数。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | true (ByPropertyName)
是否接受通配符？ | false

-IsAbsolute

如果路径为绝对路径，则返回 True；如果其为相对路径，则返回 False。绝对路径的长度大于零，并且不使用点 ( . ) 来指示当前路径。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Leaf

只返回路径中的最后一项或最后一个容器。例如，在路径“C:\Test\Logs\Pass1.log”中，该命令仅返回“Pass1.log”。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | true (ByPropertyName)
是否接受通配符？ | false

-LiteralPath <string[]>

指定要拆分的路径。与 Path 不同，LiteralPath 的值严格按照所键入的形式使用。不会将任何字符解释为通配符。如果路径包括转义符，请将其括在单引号中。单引号会告知 Windows PowerShell 不要将所有字符都解释为转义序列。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | true (ByPropertyName)
是否接受通配符？ | false

-NoQualifier

返回无限定符的路径。对于 FileSystem 或 Registry 提供程序，限定符是提供程序路径的驱动器，例如，C: 或 HKCU:。例如，在路径“C:\Test\Logs\Pass1.log”中，该命令仅返回“\Test\Logs\Pass1.log”。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | true (ByPropertyName)
是否接受通配符？ | false

-Parent

只返回路径所指定的项或容器的父容器。例如，在路径“C:\Test\Logs\Pass1.log”中，该命令返回“C:\Test\Logs”。Parent 参数是默认的拆分位置参数。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | true (ByPropertyName)
是否接受通配符？ | false

-Path <string[]>

指定要拆分的路径。允许使用通配符。如果路径包括空格，请将其括在引号中。还可以将路径通过管道传递给 Split-Path。

是否为必需？ | true
位置？ | 1
默认值 |
是否接受管道输入？ | true (ByValue, ByPropertyName)
是否接受通配符？ | false

-Qualifier

只返回指定路径的限定符。对于 FileSystem 或 Registry 提供程序，限定符是提供程序路径的驱动器，例如，C: 或 HKCU:。

是否为必需？ | false
位置？ | 2
默认值 |
是否接受管道输入？ | true (ByPropertyName)
是否接受通配符？ | false

-Resolve

显示生成的拆分路径所引用的项，而不是显示路径元素。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-UseTransaction

将命令包含在活动事务中。仅当正在执行事务时，此参数才有效。有关详细信息，请参阅 about_Transactions。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

<CommonParameters>

此 cmdlet 支持通用参数：-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。有关详细信息，请参阅 about_Commonparameters.

输入和输出

输入类型是指可通过管道传递给 cmdlet 的对象的类型。返回类型是指 Cmdlet 所返回对象的类型。

输入 | System.String 可以通过管道将包含路径的字符串传递给 Split-Path。
输出 | System.String Split-Path cmdlet 返回文本字符串。如果使用 Resolve 参数，则 Split-Path 返回一个表示项位置的字符串；而不返回表示项的对象，如 FileInfo 或 RegistryKey 对象。

说明

拆分位置参数（Qualifier、Parent、Leaf 和 NoQualifier）是互斥的。在每个命令中只能使用一个参数。

包含 Path 名词的 cmdlet (Path cmdlet) 采用路径名称作为参数，以所有 Windows PowerShell 提供程序都能够解释的简明格式返回名称。这些 cmdlet 用于需要在其中以特定格式显示全部或部分路径名称的程序或脚本中。您可以像使用 Dirname、Normpath、Realpath、Join 或其他路径操作程序那样使用这些 cmdlet。

可以将路径 cmdlet 与某些提供程序一起使用，包括 FileSystem、Registry 和 Certificate 提供程序。

Split-Path cmdlet 可使用由任何提供程序公开的数据。要列出会话中可用的提供程序，请键入“Get-PSProvider”。有关详细信息，请参阅 about_Providers。

示例 1

C:\PS>split-path "HKCU:\Software\Microsoft" -qualifier

HKCU:

说明
-----------
此命令只返回路径的限定符（驱动器）。

示例 2

C:\PS>split-path "C:\Test\Logs\*.log" -leaf -resolve

Pass1.log
Pass2.log
...

说明
-----------
此命令显示拆分路径所引用的文件。因为此路径拆分至最后一项（“叶”），所以将仅显示路径的文件名。

Resolve 参数指示 Split-Path 显示拆分路径所引用的项，而不是显示拆分路径。

与所有 Split-Path 命令一样，此命令也返回字符串，而不返回表示文件的 FileInfo 对象。

示例 3

C:\PS>split-path "C:\WINDOWS\system32\WindowsPowerShell\V1.0\about_*.txt"

C:\WINDOWS\system32\WindowsPowerShell\V1.0

说明
-----------
此命令只返回路径的父容器。因为不包括任何用于指定拆分的参数，所以 Split-Path 将使用拆分位置默认值 Parent。

示例 4

C:\PS>split-path ".\My Pictures\*.jpg" -IsAbsolute

False

说明
-----------
此命令确定路径是相对路径还是绝对路径。在此示例中，由于路径相对于由点 (.) 表示的当前目录，因此该命令返回 False ($false)。

示例 5

C:\PS>set-location (split-path $profile)

PS C:\Documents and Settings\juneb\My Documents\WindowsPowerShell>

说明
-----------
此命令将当前位置更改为包含 Windows PowerShell 配置文件的目录。
圆括号中的命令使用 Split-Path cmdlet 来只返回内置 $Profile 变量中存储的路径的父项。（Parent 参数为默认的拆分位置参数，因此可以在命令中省略该参数。）圆括号指示 Windows PowerShell 先执行该命令。通过此方式，可以便捷地导航到具有长路径名的目录。

示例 6

C:\PS>'C:\Documents and Settings\User01\My Documents\My Pictures' | split-path

C:\Documents and Settings\User01\My Documents

说明
-----------
此命令使用管道运算符 (|) 将路径发送给 Split-Path cmdlet。路径用引号引起以指示它是一个标记。

另请参阅

  • about_Providers
  • Test-Path
  • Convert-Path
  • Resolve-Path
  • Join-Path


Start-Job

启动 Windows PowerShell 后台作业。

语法

Start-Job [-ScriptBlock] <scriptblock> [[-InitializationScript] <scriptblock>] [-ArgumentList <Object[]>] [-Authentication {<Default> | <Basic> | <Negotiate> | <NegotiateWithImplicitCredential> | <Credssp> | <Digest> | <Kerberos>}] [-Credential <PSCredential>] [-InputObject <psobject>] [-Name <string>] [-RunAs32] [<CommonParameters>]

Start-Job [[-FilePath] <string>] [[-InitializationScript] <scriptblock>] [-ArgumentList <Object[]>] [-Authentication {<Default> | <Basic> | <Negotiate> | <NegotiateWithImplicitCredential> | <Credssp> | <Digest> | <Kerberos>}] [-Credential <PSCredential>] [-InputObject <psobject>] [-Name <string>] [-RunAs32] [<CommonParameters>]

说明

Start-Job cmdlet 在本地计算机上启动 Windows PowerShell 后台作业。

Windows PowerShell 后台作业“在后台”运行命令，而不与当前会话进行交互。启动后台作业时，会立即返回一个作业对象，即使该作业需要较长时间才能完成。您可以在作业运行的同时继续在此会话中工作，而不会产生中断。

作业对象包含作业的有用信息，但不包含作业结果。作业完成时，请使用 Receive-Job cmdlet 获取作业的结果。有关后台作业的详细信息，请参阅 about_Jobs。

若要在远程计算机上运行后台作业，请使用 AsJob 参数（该参数可在很多 cmdlet 中使用），或者使用 Invoke-Command cmdlet 在远程计算机上运行 Start-Job 命令。有关详细信息，请参阅 about_Remote_Jobs。

参数

-ArgumentList <Object[]>

指定由 FilePath 参数指定的脚本的实际参数（形式参数的值）。

由于跟在 ArgumentList 参数名称之后的所有值都被解释为 ArgumentList 的值，因此 ArgumentList 参数应为命令中的最后一个参数。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Authentication <AuthenticationMechanism>

指定用于对用户的凭据进行身份验证的机制。有效值为 Default、Basic、Credssp、Digest、Kerberos、Negotiate 和 NegotiateWithImplicitCredential。默认值为 Default。

CredSSP 身份验证仅在 Windows Vista、Windows Server 2008 和更高版本的 Windows 中可用。

有关该参数的值的信息，请参阅 MSDN 中 System.Management.Automation.Runspaces.AuthenticationMechanism 枚举的说明。

注意：在凭据安全服务提供程序 (CredSSP) 身份验证中，用户凭据传递到远程计算机中以进行验证，这种验证用于要求对多个资源（例如访问远程网络共享）进行验证的命令。此机制增加了远程操作的安全风险。如果远程计算机的安全受到威胁，则传递给该计算机的凭据可用于控制网络会话。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Credential <PSCredential>

指定有权执行此操作的用户帐户。默认值为当前用户。

键入用户名，如“User01”或“Domain01\User01”；或输入 PSCredential 对象，如 Get-Credential cmdlet 输入的一个 PSCredential 对象。

是否为必需？ | false
位置？ | named
默认值 | Current user
是否接受管道输入？ | false
是否接受通配符？ | false

-FilePath <string>

将指定本地脚本作为后台作业运行。输入脚本的路径和文件名，或将脚本路径通过管道传递给 Start-Job。脚本必须位于本地计算机上或者本地计算机能够访问的目录中。

使用此参数时，Windows PowerShell 将指定脚本文件的内容转换为脚本块，并将该脚本块作为后台作业运行。

是否为必需？ | false
位置？ | 1
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-InitializationScript <scriptblock>

指定在作业开始前运行的命令。用大括号 ({ }) 括起命令以形成脚本块。

使用此参数可以准备运行作业的会话。例如，可以使用它将函数、管理单元和模块添加到会话中。

是否为必需？ | false
位置？ | 2
默认值 | 无
是否接受管道输入？ | false
是否接受通配符？ | false

-InputObject <psobject>

指定命令的输入。请输入包含对象的变量，或者键入可生成对象的命令或表达式。

在 ScriptBlock 参数的值中，使用 $input 自动变量可表示输入对象。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | true (ByValue)
是否接受通配符？ | false

-Name <string>

为新作业指定一个友好名称。可以使用该名称向其他作业 cmdlet（如 Stop-Job）标识该作业。

默认友好名称为 Job#，其中“#”是针对每个作业递增的序号。

是否为必需？ | false
位置？ | named
默认值 | Job<number>
是否接受管道输入？ | true (ByPropertyName)
是否接受通配符？ | false

-RunAs32

在 32 位进程中运行作业。

使用此参数可强制作业在 64 位操作系统上的 32 位进程中运行。

是否为必需？ | false
位置？ | named
默认值 | False
是否接受管道输入？ | false
是否接受通配符？ | false

-ScriptBlock <scriptblock>

指定要在后台作业中运行的命令。用大括号 ({ }) 括起命令以形成脚本块。此参数是必需的。

是否为必需？ | true
位置？ | 1
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

<CommonParameters>

此 cmdlet 支持通用参数：-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。有关详细信息，请参阅 about_Commonparameters.

输入和输出

输入类型是指可通过管道传递给 cmdlet 的对象的类型。返回类型是指 Cmdlet 所返回对象的类型。

输入 | System.String 可以将文件路径通过管道传递给 Start-Job。
输出 | System.Management.Automation.RemotingJob Start-Job 返回一个表示它所启动的作业的对象。

说明

为了在后台运行，Start-Job 在当前会话中其自己的会话中运行。当您使用 Invoke-Command cmdlet 在远程计算机上的会话中运行 Start-Job 命令时，Start-Job 将在远程会话中的会话中运行。

示例 1

C:\PS>start-job -scriptblock {get-process}

C:\PS> start-job -command "get-process"

Id    Name  State    HasMoreData  Location   Command
---   ----  -----    -----------  --------   -------
1     Job1  Running  True         localhost  get-process

说明
-----------
此命令启动一个运行 Get-Process 命令的后台作业。此命令返回一个包含有关作业的信息的作业对象。命令提示符会立即返回，这样当作业在后台运行时，您可以在会话中工作。

示例 2

C:\PS>$jobWRM = invoke-command -computerName (get-content servers.txt) -scriptblock {get-service winrm} -jobname WinRM -throttlelimit 16 -AsJob

说明
-----------
此命令使用 Invoke-Command cmdlet 及其 AsJob 参数，启动一个在多台计算机上运行“get-service winrm”命令的后台作业。由于此命令在一台网络通信异常繁忙的服务器上运行，因此使用 Invoke-Command 的 ThrottleLimit 参数将并发命令的最多数量限制在 16。

此命令使用 ComputerName 参数来指定运行作业的计算机。ComputerName 参数的值是一个 Get-Content 命令，该命令获取 Servers.txt 文件（包含域中计算机名称的文件）中的文本。

该命令使用 ScriptBlock 参数来指定命令，并使用 JobName 参数来指定作业的友好名称。

示例 3

C:\PS>$j = start-job -scriptblock {get-eventlog -log system} -credential domain01\user01

C:\PS> $j | format-list -property *

HasMoreData   : True
StatusMessage :
Location      : localhost
Command       : get-eventlog -log system
JobStateInfo  : Running
Finished      : System.Threading.ManualResetEvent
InstanceId    : 2d9d775f-63e0-4d48-b4bc-c05d0e177f34
Id            : 1
Name          : Job1
ChildJobs     : {Job2}
Output        : {}
Error         : {}
Progress      : {}
Verbose       : {}
Debug         : {}
Warning       : {}
StateChanged  :

C:\PS> $j.JobStateInfo.state
Completed

C:\PS> $results = receive-job -job $j

C:\PS> $results
Index Time          Type        Source                EventID Message
----- ----          ----        ------                ------- -------
84366 Feb 18 19:20  Information Service Control M...     7036 The description...
84365 Feb 18 19:16  Information Service Control M...     7036 The description...
84364 Feb 18 19:10  Information Service Control M...     7036 The description...
...

说明
-----------
这些命令管理从事件查看器的系统日志中获取所有事件的后台作业。该作业在本地计算机上运行。

第一个命令使用 Start-Job cmdlet 来启动作业。它使用 Credential 参数指定有权在计算机上运行作业的用户的用户帐户。然后，该命令将 Start-Job 返回的作业对象保存在 $j 变量中。

此时，您可以在作业完成时恢复其他工作。

第二个命令使用管道运算符 (|) 将 $j 中的作业对象传递到 Format-List cmdlet。Format-List 命令使用值为 *（全部）的 Property 参数在列表中显示作业对象的所有属性。

第三个命令显示 JobStateInfo 属性的值。该值包含作业的状态。

第四条命令使用 Receive-Job cmdlet 来获取作业的结果。它将结果存储在 $results 变量中。

最后一个命令显示 $results 变量的内容。

示例 4

C:\PS>start-job -filepath c:\scripts\sample.ps1

说明
-----------
此命令将 Sample.ps1 脚本作为后台作业运行。

示例 5

C:\PS>start-job -name WinRm -scriptblock {get-process winrm}

说明
-----------
此命令运行一个获取本地计算机上的 WinRM 进程的后台作业。该命令使用 ScriptBlock 参数来指定在后台作业中运行的命令。它使用 Name 参数为新作业指定一个友好名称。

示例 6

C:\PS>start-job -name GetMappingFiles -initializationScript {import-module MapFunctions} -scriptblock {Get-Map -name * | set-content D:\Maps.tif} -runAs32

说明
-----------
此命令启动一个作业来收集大量数据并将数据保存在 .tif 文件中。此命令使用 InitializationScript 参数运行导入所需模块的脚本块。它还将使用 RunAs32 参数在 32 位进程中运行作业，即使计算机使用 64 位操作系统也如此。

另请参阅

  • about_Jobs
  • about_Job_Details
  • about_Remote_Jobs
  • Get-Job
  • Receive-Job
  • Wait-Job
  • Stop-Job
  • Remove-Job
  • Invoke-Command


Start-Process

启动本地计算机上的一个或多个进程。

语法

Start-Process [-FilePath] <string> [[-ArgumentList] <string[]>] [-Credential <PSCredential>] [-LoadUserProfile] [-NoNewWindow] [-PassThru] [-RedirectStandardError <string>] [-RedirectStandardInput <string>] [-RedirectStandardOutput <string>] [-UseNewEnvironment] [-Wait] [-WorkingDirectory <string>] [<CommonParameters>]

Start-Process [-FilePath] <string> [[-ArgumentList] <string[]>] [-PassThru] [-Verb <string>] [-Wait] [-WindowStyle {<Normal> | <Hidden> | <Minimized> | <Maximized>}] [-WorkingDirectory <string>] [<CommonParameters>]

说明

启动本地计算机上的一个或多个进程。要指定在进程中运行的程序，请输入可执行文件或脚本文件，或者可使用计算机上的程序打开的文件。如果指定不可执行文件，Start-Process 会启动与该文件关联的程序，这一点与 Invoke-Item cmdlet 非常类似。

使用 Start-Process 的参数可以指定加载用户配置文件、在新窗口中启动进程或使用备用凭据等选项。

参数

-ArgumentList <string[]>

指定启动进程时要使用的参数或参数值。参数名（“Arguments”）是可选的。

是否为必需？ | false
位置？ | 2
默认值 | 无
是否接受管道输入？ | false
是否接受通配符？ | false

-Credential <PSCredential>

指定有权执行此操作的用户帐户。键入用户名，如“User01”或“Domain01\User01”；或输入 PSCredential 对象，如 Get-Credential cmdlet 输入的一个 PSCredential 对象。默认情况下，该 cmdlet 使用当前用户的凭据。

是否为必需？ | false
位置？ | named
默认值 | Current user.
是否接受管道输入？ | false
是否接受通配符？ | false

-FilePath <string>

指定在进程中运行的程序的路径（可选）和文件名。请输入与计算机上的程序相关联的可执行文件或文档（如 .txt 或 .doc 文件）的名称。此参数是必需的。

如果仅指定文件名，请使用 WorkingDirectory 参数指定路径。

是否为必需？ | true
位置？ | 1
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-LoadUserProfile

加载当前用户的 HKEY_USERS 注册表项中所存储的 Windows 用户配置文件。默认值为 FALSE。

此参数不影响 Windows PowerShell 配置文件。（请参阅 about_Profiles。）

是否为必需？ | false
位置？ | named
默认值 | False
是否接受管道输入？ | false
是否接受通配符？ | false

-NoNewWindow

阻止进程在新窗口中运行。默认情况下，在新窗口中运行进程。

是否为必需？ | false
位置？ | named
默认值 | False
是否接受管道输入？ | false
是否接受通配符？ | false

-PassThru

为 cmdlet 启动的每个进程返回一个进程对象。默认情况下，此 cmdlet 将不产生任何输出。

是否为必需？ | false
位置？ | named
默认值 | False
是否接受管道输入？ | false
是否接受通配符？ | false

-RedirectStandardError <string>

将进程产生的所有错误发送给指定的文件。请输入路径和文件名。默认情况下，在控制台中显示这些错误。

是否为必需？ | false
位置？ | named
默认值 | Errors are displayed in the console
是否接受管道输入？ | false
是否接受通配符？ | false

-RedirectStandardInput <string>

从指定文件读取输入。请输入输入文件的路径和文件名。默认情况下，进程从键盘获取其输入。

是否为必需？ | false
位置？ | named
默认值 | Keyboard
是否接受管道输入？ | false
是否接受通配符？ | false

-RedirectStandardOutput <string>

将进程产生的输出发送给指定的文件。请输入路径和文件名。默认情况下，在控制台中显示该输出。

是否为必需？ | false
位置？ | named
默认值 | FALSE
是否接受管道输入？ | false
是否接受通配符？ | false

-UseNewEnvironment

使用为进程指定的新环境变量。默认情况下，使用为计算机和用户指定的环境变量运行启动的进程。

是否为必需？ | false
位置？ | named
默认值 | False
是否接受管道输入？ | false
是否接受通配符？ | false

-Verb <string>

指定启动进程时要使用的动词，如 Edit、Open 或 Print。

每种文件类型都有一组可供使用的动词。要查找可用于进程的动词，请使用对象的 Verbs 属性。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Wait

等到指定进程完成后再接受更多输入。此参数禁止显示命令提示符或在进程完成之前一直保留窗口。

是否为必需？ | false
位置？ | named
默认值 | False
是否接受管道输入？ | false
是否接受通配符？ | false

-WindowStyle <ProcessWindowStyle>

指定用于进程的窗口的状态。有效值包括 Normal、Hidden、Minimized 和 Maximized。默认值为 Normal。

是否为必需？ | false
位置？ | named
默认值 | Normal
是否接受管道输入？ | false
是否接受通配符？ | false

-WorkingDirectory <string>

指定在进程中运行的可执行文件或文档的位置。默认值为当前目录。

是否为必需？ | false
位置？ | named
默认值 | Current directory
是否接受管道输入？ | false
是否接受通配符？ | false

<CommonParameters>

此 cmdlet 支持通用参数：-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。有关详细信息，请参阅 about_Commonparameters.

输入和输出

输入类型是指可通过管道传递给 cmdlet 的对象的类型。返回类型是指 Cmdlet 所返回对象的类型。

输入 | None 不能通过管道将输入传递给 Start-Process。
输出 | None 或 System.Diagnostics.Process 如果使用 PassThru 参数，则 Start-Process 生成 System.Diagnostics.Process。否则，此 cmdlet 不返回任何输出。

说明

此 cmdlet 通过使用 System.Diagnostics.Process 类的 Start 方法来实现。有关此方法的详细信息，请参阅 MSDN (Microsoft Developer Network) 库中的“Process.Start 方法”，网址是 http://go.microsoft.com/fwlink/?LinkId=143602。

示例 1

C:\PS>start-process sort.exe

说明
-----------
此命令启动一个进程，该进程使用当前目录中的 Sort.exe 文件。此命令使用所有默认值，其中包括默认窗口样式、工作目录和凭据。

示例 2

C:\PS>start-process myfile.txt -workingdirectory "C:\PS-Test" -verb Print

说明
-----------
此命令启动一个打印 C:\PS-Test\MyFile.txt 文件的进程。

示例 3

C:\PS>start-process Sort.exe -RedirectStandardInput Testsort.txt -RedirectStandardOutput Sorted.txt -RedirectStandardError SortError.txt -UseNewEnvironment

说明
-----------
此命令启动一个进程，该进程对 Testsort.txt 文件中的项进行排序，然后在 Sorted.txt 文件中返回排序后的项。所有错误都将写入 SortError.txt 文件中。

UseNewEnvironment 参数指定该进程使用自己的环境变量来运行。

示例 4

C:\PS>start-process notepad -wait -windowstyle Maximized

说明
-----------
此命令启动 Notepad 进程。它将最大化窗口并在该进程完成之前一直保留该窗口。

另请参阅

  • Start-Service
  • Get-Process
  • Stop-Process
  • Wait-Process
  • Debug-Process


Start-Service

启动一个或多个已停止的服务。

语法

Start-Service [-Name] <string[]> [-Exclude <string[]>] [-Include <string[]>] [-PassThru] [-Confirm] [-WhatIf] [<CommonParameters>]

Start-Service -DisplayName <string[]> [-Exclude <string[]>] [-Include <string[]>] [-PassThru] [-Confirm] [-WhatIf] [<CommonParameters>]

Start-Service [-InputObject <ServiceController[]>] [-Exclude <string[]>] [-Include <string[]>] [-PassThru] [-Confirm] [-WhatIf] [<CommonParameters>]

说明

Start-Service cmdlet 为每一个指定的服务向 Windows 服务控制器发送一条启动消息。如果服务已在运行，则无错误忽略该消息。您可以通过服务名称或显示名称来指定服务，也可以使用 InputObject 参数提供一个服务对象来表示要启动的服务。

参数

-DisplayName <string[]>

指定要启动的服务的显示名称。允许使用通配符。

是否为必需？ | true
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Exclude <string[]>

忽略指定服务。此参数的值对 Name 参数进行限定。请输入名称元素或模式，例如“s*”。允许使用通配符。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Include <string[]>

只启动指定的服务。此参数的值对 Name 参数进行限定。请输入名称元素或模式，例如“s*”。允许使用通配符。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-InputObject <ServiceController[]>

指定表示要启动的服务的 ServiceController 对象。输入一个包含对象的变量，或键入可获取对象的命令或表达式。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | true (ByValue)
是否接受通配符？ | false

-Name <string[]>

指定要启动的服务的服务名称。

参数名为可选项。可以使用“-Name”或其别名“-ServiceName”，也可以忽略该参数名称。

是否为必需？ | true
位置？ | 1
默认值 |
是否接受管道输入？ | true (ByValue, ByPropertyName)
是否接受通配符？ | false

-PassThru

返回一个表示服务的对象。默认情况下，此 cmdlet 将不产生任何输出。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Confirm

在执行命令之前提示您进行确认。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-WhatIf

描述如果执行该命令会发生什么情况（无需实际执行该命令）。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

<CommonParameters>

此 cmdlet 支持通用参数：-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。有关详细信息，请参阅 about_Commonparameters.

输入和输出

输入类型是指可通过管道传递给 cmdlet 的对象的类型。返回类型是指 Cmdlet 所返回对象的类型。

输入 | System.ServiceProcess.ServiceController, System.String 可以通过管道将对象（该对象表示包含服务名称的服务或字符串）传递给 Start-Service。
输出 | None 或 System.ServiceProcess.ServiceController 如果使用 PassThru 参数，则 Start-Service 生成表示服务的 System.ServiceProcess.ServiceController 对象。否则，此 cmdlet 将不产生任何输出。

说明

还可以使用 Start-Service 的内置别名“sasv”来对其进行引用。有关详细信息，请参阅 about_Aliases。

Start-Service 只有在当前用户有相应权限时才能控制服务。如果某个命令不能正常工作，则可能您不具有所需的权限。

若要查找服务名称并显示您的系统中的服务名称，请键入“get-service”。服务名称显示在 Name 列中，显示名称显示在 DisplayName 列中。

只能启动具有“Manual”或“Automatic”启动类型的服务。无法启动其启动类型为“Disabled”的服务。如果 Start-Service 命令失败，并且显示消息“无法启动计算机上的服务 <服务名称>”，请使用 Get-WmiObject 命令来查找该服务的启动类型，如有必要，还可以使用 Set-Service 命令来更改该服务的启动类型。

某些服务在没有工作时将自动停止，例如性能日志和警报 (SysmonLog) 服务。如果 Windows PowerShell 启动服务后，该服务几乎立即自行停止，则会显示以下消息：“服务 <显示名称> 启动失败。”

示例 1

C:\PS>start-service -name eventlog

说明
-----------
此命令启动本地计算机上的 EventLog 服务。它使用 Name 参数通过服务名称来标识服务。

示例 2

C:\PS>start-service -displayname *remote* -whatif

说明
-----------
此命令显示在启动显示名称中包含“remote”的服务后会发生的情况。它使用 DisplayName 参数通过服务的显示名称（而不是服务名称）来指定服务。另外，它使用 WhatIf 参数来显示执行该命令后会发生的情况，而不是实际执行该命令。

示例 3

C:\PS>$s = get-service wmi

C:\PS>start-service -InputObject $s -passthru | format-list >> services.txt

说明
-----------
这些命令启动计算机上的 Windows Management Instrumentation (WMI) 服务，并将操作记录添加到 services.txt 文件中。第一条命令使用 Get-Service cmdlet 来获取表示 WMI 服务的对象，并将该对象存储在 $s 变量中。

第二条命令使用 Start-Service cmdlet 来启动 WMI 服务。该命令通过使用 InputObject 参数将包含 WMI 服务对象的 $s 变量传递给 Start-Service 来标识服务。然后，它使用 PassThru 参数来创建表示启动该服务的对象。如果不使用此参数，则 Start-Service 不创建任何输出。

管道运算符 (|) 将 Start-Service 创建的对象传递给 Format-List cmdlet，该 cmdlet 将对象的格式设置为其属性的列表。追加重定向运算符 (>>) 将输出重定向到 services.txt 文件，并在其中将该输出添加到现有文件的末尾。

示例 4

C:\PS># start-service

说明
-----------
这一组命令显示在服务启动类型为“Disabled”时如何启动服务。第一条命令使用 Start-Service cmdlet 来启动 Telnet 服务 (tlntsvr)，但执行失败。

C:\PS>start-service tlntsvr

Start-Service : Service 'Telnet (TlntSvr)' cannot be started due to the    following error: Cannot start service TlntSvr on computer '.'.
At line:1 char:14
+ start-service  <<<< tlntsvr

第二条命令使用 Get-WmiObject cmdlet 来获取 Tlntsvr 服务。此命令在 StartMode 字段中检索具有启动类型属性的对象。结果显示 Tlntsvr 服务的启动类型为“Disabled”。

C:\PS> get-wmiobject win32_service | where-object {$_.Name -eq "tlntsvr"}

ExitCode  : 0
Name      : TlntSvr
ProcessId : 0
StartMode : Disabled
State     : Stopped
Status    : OK

下一个命令使用 Set-Service cmdlet 将 Tlntsvr 服务的启动类型更改为“Manual”。

C:\PS> set-service tlntsvr -startuptype manual

现在，可以重新提交 Start-Service 命令。这次，该命令执行成功。

C:\PS> start-service tlntsvr

若要验证命令是否成功，请使用 Get-Service。

另请参阅

  • Get-Service
  • Suspend-Service
  • Stop-Service
  • Restart-Service
  • Resume-Service
  • Set-Service
  • New-Service


Start-Sleep

将脚本或会话中的活动挂起指定的一段时间。

语法

Start-Sleep -Milliseconds <int> [<CommonParameters>]

Start-Sleep [-Seconds] <int> [<CommonParameters>]

说明

Start-Sleep cmdlet 会将脚本或会话中的活动挂起指定的一段时间。您可以使用它完成许多任务，如等待操作完成或在重复操作之前暂停。

参数

-Milliseconds <int>

指定资源休眠的毫秒数。该参数可以缩写为“-m”。

是否为必需？ | true
位置？ | named
默认值 |
是否接受管道输入？ | true (ByPropertyName)
是否接受通配符？ | false

-Seconds <int>

指定资源休眠的秒数。可以省略参数名称（“Seconds”），也可以将其缩写为“-s”。

是否为必需？ | true
位置？ | 1
默认值 |
是否接受管道输入？ | true (ByValue, ByPropertyName)
是否接受通配符？ | false

<CommonParameters>

此 cmdlet 支持通用参数：-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。有关详细信息，请参阅 about_Commonparameters.

输入和输出

输入类型是指可通过管道传递给 cmdlet 的对象的类型。返回类型是指 Cmdlet 所返回对象的类型。

输入 | System.Int32 可以通过管道将该秒数传递给 Start-Sleep。
输出 | None 此 cmdlet 不返回任何输出。

说明

还可以使用 Start-Sleep 的内置别名“sleep”来对其进行引用。有关详细信息，请参阅 about_Aliases。

示例 1

C:\PS>Start-Sleep -s 15

说明
-----------
此命令让会话中的所有命令休眠 15 秒。

示例 2

C:\PS>Start-Sleep -m 500

说明
-----------
此命令让会话中的所有命令休眠 1/2 秒（500 毫秒）。


Start-Transaction

启动事务。

语法

Start-Transaction [-Independent] [-RollbackPreference {<Error> | <TerminatingError> | <Never>}] [-Timeout <int>] [-Confirm] [-WhatIf] [<CommonParameters>]

说明

Start-Transaction cmdlet 启动事务，事务是作为一个单元进行管理的一系列命令。事务的状态可以是已完成（“已提交”），也可以是已完全撤消（“已回滚”），以便将由事务更改的所有数据还原为其原始状态。由于事务中的命令作为一个单元进行管理，因此所有命令不是全部提交就是全部回滚。

默认情况下，如果事务中的任何命令发生错误，事务都会自动回滚，但您可以使用 RollbackPreference 参数更改此行为。

事务中使用的 cmdlet 必须设计为支持事务。支持事务的 cmdlet 具有 UseTransaction 参数。要通过提供程序执行事务，该提供程序必须支持事务。Windows Vista 以及 Windows 更高版本中的 Windows PowerShell Registry 提供程序支持事务。在支持 Windows PowerShell 的任意版本的 Windows 上，也可以使用 Microsoft.PowerShell.Commands.Management.TransactedString 类在事务中包含表达式。其他 Windows PowerShell 提供程序也可以支持事务。

一次只能有一个事务处于活动状态。如果您在事务正在进行（既未完成也未撤消）时启动一个新的独立事务，则新事务将成为活动事务，您必须先提交或回滚新事务，然后才能对原来的事务进行任何更改。

Start-Transaction cmdlet 是 Windows PowerShell 中支持事务功能的一组 cmdlet 之一。有关详细信息，请参阅 about_Transactions。

参数

-Independent

启动一个独立于任何正在执行的事务的事务。默认情况下，如果您在另一个事务正在执行时使用 Start-Transaction，则会向正在执行的事务添加一个新的订阅者。仅当会话中已经在执行某项事务时，此参数才有效。

默认情况下，如果您在事务正在执行时使用 Start-Transaction，则将重用现有事务对象，并且订阅者计数将会递增。这与加入原来事务的效果非常类似。Undo-Transaction 命令用于回滚整个事务。要完成事务，您必须为每个订阅者输入一个 Complete-Transaction 命令。因为同时执行的多数事务都是相关的，所以默认设置可满足大多数用途的要求。

如果使用 Independent 参数，则将创建一个新事务，它可以在不影响原事务的情况下完成或撤消。但是，由于一次只能有一个事务处于活动状态，因此必须完成或回滚新事务，然后才能继续处理原来的事务。

是否为必需？ | false
位置？ | named
默认值 | Reuse the original transaction object.
是否接受管道输入？ | false
是否接受通配符？ | false

-RollbackPreference <RollbackSeverity>

指定自动回滚事务的条件。默认值为“Error”。

有效值包括：

-- Error：当发生终止错误或非终止错误时，自动回滚事务。“Error”是默认值。

-- Terminating error：当发生终止错误时，自动回滚事务。

-- Never：从不自动回滚事务。

是否为必需？ | false
位置？ | named
默认值 | Error
是否接受管道输入？ | false
是否接受通配符？ | false

-Timeout <int>

指定事务处于活动状态的最长时间，以分钟为单位。当该超时到期时，将自动回滚事务。

默认情况下，在命令行启动的事务没有超时值。如果事务由脚本启动，则默认超时值为 30 分钟。

是否为必需？ | false
位置？ | named
默认值 | No timeout (infinite)
是否接受管道输入？ | false
是否接受通配符？ | false

-Confirm

在执行命令之前提示您进行确认。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-WhatIf

描述如果执行该命令会发生什么情况（无需实际执行该命令）。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

<CommonParameters>

此 cmdlet 支持通用参数：-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。有关详细信息，请参阅 about_Commonparameters.

输入和输出

输入类型是指可通过管道传递给 cmdlet 的对象的类型。返回类型是指 Cmdlet 所返回对象的类型。

输入 | None 不能通过管道将输入传递给此 cmdlet。
输出 | None 此 cmdlet 将不产生任何输出。

示例 1

C:\PS>cd hkcu:\software

PS HKCU:\software> start-transaction

PS HKCU:\software> new-item MyCompany -UseTransaction

PS HKCU:\software> new-itemproperty MyCompany -name MyKey -value 123 -UseTransaction

PS HKCU:\software> undo-transaction

说明
-----------
这些命令先启动事务，然后回滚事务。由于回滚了事务，因此未对注册表进行更改。

示例 2

C:\PS>cd hkcu:\software

PS HKCU:\software> start-transaction

PS HKCU:\software> new-item MyCompany -UseTransaction

PS HKCU:\software> new-itemproperty MyCompany -name MyKey -value 123 -UseTransaction

PS HKCU:\software> complete-transaction

说明
-----------
这些命令先启动事务，然后完成事务。在使用 Complete-Transaction 命令之前，不会对注册表进行任何更改。

示例 3

C:\PS>cd HKCU:\software
PS HKCU:\software> start-transaction
PS HKCU:\software> new-item -path NoPath -name MyCompany -UseTransaction
PS HKCU:\software> new-item -path . -name MyCompany -UseTransaction

PS HKCU:\software> start-transaction -RollbackPreference never
PS HKCU:\software> new-item -path NoPath -name MyCompany -UseTransaction
PS HKCU:\software> new-item -path . -name MyCompany -UseTransaction

# Start-Transaction (-rollbackpreference error)

PS HKCU:\software> start-transaction
PS HKCU:\software> new-item -path NoPath -Name MyCompany -UseTransaction
New-Item : The registry key at the specified path does not exist.
At line:1 char:9
+ new-item <<<<  -path NoPath -Name MyCompany -UseTransaction

PS HKCU:\software> new-item -path . -name MyCompany -UseTransaction
New-Item : Cannot use transaction. The transaction has been rolled back or has timed out.
At line:1 char:9
+ new-item <<<<  -path . -name MyCompany -UseTransaction

# Start-Transaction (-rollbackpreference never)
PS HKCU:\software> start-transaction -RollbackPreference never
PS HKCU:\software> new-item -path NoPath -name MyCompany -UseTransaction
New-Item : The registry key at the specified path does not exist.
At line:1 char:9
+ new-item <<<<  -path NoPath -name MyCompany -UseTransaction

PS HKCU:\software> new-item -path . -name MyCompany -UseTransaction
  Hive: HKEY_CURRENT_USER\Software

SKC  VC Name                           Property
---  -- ----                           --------
  0   0 MyCompany                      {}

PS HKCU:\Software> complete-transaction
# Succeeds

说明
-----------
此示例演示了更改 RollbackPreference 参数值的效果。

在第一组命令中，Start-Transaction 命令未使用 RollbackPreference 参数。因此使用了默认值（“Error”）。当事务命令中发生错误（指定路径不存在）时，自动回滚事务。

在第二组命令中，Start-Transaction 命令使用值为“Never”的 RollbackPreference 参数。因此当事务命令发生错误时，事务仍处于活动状态并且可以成功完成。

由于大多数事务都必须在没有错误的情况下执行，因此 RollbackPreference 参数的默认值通常是首选的。

示例 4

C:\PS>cd HKCU:\software

PS HKCU:\software> start-transaction
PS HKCU:\software> new-item MyCompany -UseTransaction

PS HKCU:\software> start-transaction
PS HKCU:\software> get-transaction
PS HKCU:\software> new-item MyCompany2 -UseTransaction

PS HKCU:\software> complete-transaction
PS HKCU:\software> complete-transaction

PS HKCU:\Software> Get-Transaction

RollbackPreference   SubscriberCount   Status
------------------   ---------------   ------
Error                2                 Active

说明
-----------
此示例演示了当事务正在执行时使用 Start-Transaction 命令的效果。这与加入正在执行的事务的效果非常类似。

虽然这是一个简化的命令，但当事务涉及到运行包含完整事务的脚本时，通常会发生这种情况。

第一个 Start-Transaction 命令启动事务。第一个 New-Item 命令包含在该事务中。

第二个 Start-Transaction 命令向该事务添加新的订阅者。此时 Get-Transaction 命令返回一个其订阅者计数为 2 的事务。第二个 New-Item 命令也包含在该同一事务中。

在整个事务完成之前，不会对注册表进行任何更改。要完成事务，您必须输入两个 Complete-Transaction 命令，为每个订阅者分别输入一次。如果要在任意时刻回滚事务，则会对这两个订阅者回滚整个事务。

示例 5

C:\PS>cd HKCU:\software
PS HKCU:\software> start-transaction
PS HKCU:\software> new-item MyCompany -UseTransaction

PS HKCU:\software> start-transaction -independent
PS HKCU:\software> get-transaction
PS HKCU:\software> undo-transaction

PS HKCU:\software> new-itemproperty -path MyCompany -name MyKey -value 123 -UseTransaction
PS HKCU:\software> complete-transaction
PS HKCU:\software> dir my*

PS HKCU:\Software> get-transaction

RollbackPreference   SubscriberCount   Status
------------------   ---------------   ------
Error                1                 Active

PS HKCU:\software> undo-transaction
PS HKCU:\software> new-itemproperty -path MyCompany -name MyKey -value 123 -UseTransaction

MyKey
-----
123

PS HKCU:\software> complete-transaction
PS HKCU:\software> dir my*

   Hive: HKEY_CURRENT_USER\Software

SKC  VC Name                           Property
---  -- ----                           --------
  0   1 MyCompany                      {MyKey}

说明
-----------
此示例演示了当某一事务正在执行时，使用 Start-Transaction 的 Independent 参数启动另一个事务的效果。在本例中，将回滚新事务，而不影响原来的事务。

虽然事务在逻辑上是独立的，但由于一次只能有一个事务处于活动状态，因此您必须回滚或提交最新事务，然后才能继续处理原来的事务。

第一组命令启动一个事务。New-Item 命令包含在第一个事务中。

在第二组命令中，Start-Transaction 命令使用 Independent 参数。随后的 Get-Transaction 命令显示活动事务（最新事务）的事务对象。订阅者计数等于 1，表明这两个事务不相关。

当使用 Undo-Transaction 命令回滚活动事务后，原来的事务将恢复为活动状态。

包含在原来事务中的 New-ItemProperty 命令正常完成（未发生错误），并且可以通过使用 Complete-Transaction 命令来完成原来的事务。因此注册表会发生更改。

示例 6

C:\PS>cd hkcu:\software

PS HKCU:\software> start-transaction
PS HKCU:\software> new-item MyCompany1 -UseTransaction
PS HKCU:\software> new-item MyCompany2
PS HKCU:\software> new-item MyCompany3 -UseTransaction

PS HKCU:\software> dir my*

PS HKCU:\software> complete-transaction
PS HKCU:\software> dir my*

PS HKCU:\Software> dir my*

   Hive: HKEY_CURRENT_USER\Software

SKC  VC Name                           Property
---  -- ----                           --------
  0   0 MyCompany2                     {}

PS HKCU:\Software> complete-transaction

PS HKCU:\Software> dir my*

   Hive: HKEY_CURRENT_USER\Software

SKC  VC Name                           Property
---  -- ----                           --------
  0   0 MyCompany1                     {}
  0   0 MyCompany2                     {}
  0   0 MyCompany3                     {}

说明
-----------
此示例演示了在事务正在执行时提交的命令可以包含在事务中，也可以不包含在事务中。只有使用 UseTransaction 参数的命令才包含在事务中。

第一个和第三个 New-Item 命令使用 UseTransaction 参数。这两个命令都包含在事务中。因为第二个 New-Item 命令未使用 UseTransaction 参数，所以它未包含在事务中。

第一个“dir”命令显示结果。第二个 New-Item 命令将立即完成，而第一个和第三个 New-Item 命令直到事务提交后才生效。

Complete-Transaction 命令提交事务。因此，第二个“dir”命令显示添加到注册表中的所有新项。

示例 7

C:\PS>start-transaction -timeout 2

# Wait two minutes...

C:\PS> get-transaction

C:\PS> new-item HKCU:\Software\MyCompany -UseTransaction

C:\PS> start-transaction -timeout 2

# Wait two minutes...

C:\PS>> get-transaction

RollbackPreference   SubscriberCount   Status
------------------   ---------------   -----------
Error                1                 RolledBack

C:\PS> new-item HKCU:\Software\MyCompany -UseTransaction
New-Item : Cannot use transaction. The transaction has been rolled back or has timed out.
At line:1 char:9
+ new-item <<<<  MyCompany -UseTransaction

说明
-----------
此命令使用 Start-Transaction 的 Timeout 参数启动必须在两分钟内完成的事务。如果事务未在该超时期限内完成，则将自动回滚。

当该超时到期时，您不会收到通知，但事务对象的 Status 属性将设置为 RolledBack，并且使用 UseTransaction 参数的命令将失败。

另请参阅

  • about_Transactions
  • Get-Transaction
  • Complete-Transaction
  • Undo-Transaction
  • Use-Transaction


Start-Transcript

在文本文件中创建全部或部分 Windows PowerShell 会话的记录。

语法

Start-Transcript [[-Path] <string>] [-Append] [-Force] [-NoClobber] [-Confirm] [-WhatIf] [<CommonParameters>]

说明

Start-Transcript cmdlet 在文本文件中创建全部或部分 Windows PowerShell 会话的记录。该脚本包括用户键入的所有命令以及控制台上显示的所有输出。

参数

-Append

将新脚本添加到现有文件的末尾。使用 Path 参数来指定文件。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Force

允许该 cmdlet 将脚本追加到现有只读文件。用于只读文件时，该 cmdlet 会将文件权限更改为读写权限。即使使用 Force 参数，该 cmdlet 也无法覆盖安全限制。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-NoClobber

将不会覆盖现有文件（替换其内容）。默认情况下，如果指定的路径中存在脚本文件，则 Start-Transcript 将覆盖该文件，而不会发出警告。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Path <string>

指定脚本文件的位置。输入 .txt 文件的路径。不允许使用通配符。

如果未指定路径，则 Start-Transcript 将使用 $Transcript 全局变量值中的路径。如果尚未创建此变量，则 Start-Transcript 会在 $Home\My Documents 目录中将脚本存储为 \PowerShell_transcript.<时间戳>.txt 文件。

如果路径中有任何目录不存在，则该命令将会失败。

是否为必需？ | false
位置？ | 1
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Confirm

在执行命令之前提示您进行确认。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-WhatIf

描述如果执行该命令会发生什么情况（无需实际执行该命令）。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

<CommonParameters>

此 cmdlet 支持通用参数：-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。有关详细信息，请参阅 about_Commonparameters.

输入和输出

输入类型是指可通过管道传递给 cmdlet 的对象的类型。返回类型是指 Cmdlet 所返回对象的类型。

输入 | None 不能通过管道将对象传递给此 cmdlet。
输出 | System.String Start-Transcript 返回一个包含确认消息和输出文件路径的字符串。

说明

若要停止脚本，请使用 Stop-Transcript cmdlet。

若要记录整个会话，请将 Start-Transcript 命令添加到您的配置文件中。有关详细信息，请参阅 about_Profiles。

示例 1

C:\PS>start-transcript

说明
-----------
此命令启动默认文件位置中的脚本。

示例 2

C:\PS>start-transcript -path c:\transcripts\transcript0.txt -noclobber

说明
-----------
此命令启动 C:\transcripts 下 Transcript0.txt 文件中的脚本。NoClobber 参数可防止覆盖任何现有文件。如果 Transcript0.txt 文件已存在，则该命令将会失败。

另请参阅

  • Stop-Transcript


Stop-Computer

停止（关闭）本地和远程计算机。

语法

Stop-Computer [[-ComputerName] <string[]>] [[-Credential] <PSCredential>] [-AsJob] [-Authentication {<Default> | <None> | <Connect> | <Call> | <Packet> | <PacketIntegrity> | <PacketPrivacy> | <Unchanged>}] [-Force] [-Impersonation {<Default> | <Anonymous> | <Identify> | <Impersonate> | <Delegate>}] [-ThrottleLimit <int>] [-Confirm] [-WhatIf] [<CommonParameters>]

说明

Stop-Computer cmdlet 关闭远程计算机。它也可以关闭本地计算机。

可以使用 Stop-Computer 的参数将关闭操作作为后台作业运行，指定身份验证级别和备用凭据，限制为运行该命令而创建的并发连接数以及强制立即关闭。

除非您使用 AsJob 参数，否则此 cmdlet 不需要 Windows PowerShell 远程处理。

参数

-AsJob

将命令作为后台作业运行。

注意：若要使用此参数，必须为本地计算机和远程计算机配置远程处理，并且在 Windows Vista 以及更高版本的 Windows 上，还必须使用“以管理员身份运行”选项打开 Windows PowerShell。有关详细信息，请参阅 about_Remote_Requirements。

使用 AsJob 参数时，此命令立即返回代表后台作业的对象。当作业完成时，您可以继续在此会话中工作。作业在本地计算机上创建，并且来自远程计算机的结果将自动返回本地计算机。要管理作业，请使用 Job cmdlet。要获取作业结果，请使用 Receive-Job cmdlet。

有关 Windows PowerShell 后台作业的详细信息，请参阅 about_Jobs 和 about_Remote_Jobs。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Authentication <AuthenticationLevel>

指定用于 WMI 连接的身份验证级别。（Stop-Computer 使用 WMI。）默认值为 Packet。

有效值包括：

Unchanged： 身份验证级别与前一个命令相同。

Default： Windows 身份验证。

None： 无 COM 身份验证。

Connect： 连接级 COM 身份验证。

Call： 调用级 COM 身份验证。

Packet： 数据包级 COM 身份验证。

PacketIntegrity：数据包完整性级 COM 身份验证。

PacketPrivacy： 数据包隐私级 COM 身份验证。

是否为必需？ | false
位置？ | named
默认值 | 4
是否接受管道输入？ | false
是否接受通配符？ | false

-ComputerName <string[]>

停止指定的计算机。默认值为本地计算机。

在一个逗号分隔列表中键入一台或多台计算机的 NETBIOS 名称、IP 地址或完全限定的域名。要指定本地计算机，请键入计算机名称或“localhost”。

此参数不依赖于 Windows PowerShell 远程处理。即使您的计算机未配置为运行远程命令，您也可以使用 ComputerName 参数。

是否为必需？ | false
位置？ | 1
默认值 | .
是否接受管道输入？ | true (ByPropertyName)
是否接受通配符？ | false

-Credential <PSCredential>

指定有权执行此操作的用户帐户。默认值为当前用户。

键入用户名，如“User01”或“Domain01\User01”；或输入 PSCredential 对象，如 Get-Credential cmdlet 输入的一个 PSCredential 对象。

是否为必需？ | false
位置？ | 2
默认值 | Current user
是否接受管道输入？ | false
是否接受通配符？ | false

-Force

强制立即关闭计算机。

是否为必需？ | false
位置？ | named
默认值 | False
是否接受管道输入？ | false
是否接受通配符？ | false

-Impersonation <ImpersonationLevel>

指定调用 WMI 时使用的模拟级别。（Stop-Computer 使用 WMI。）默认值为“Impersonate”。

有效值包括：

Default： 默认模拟。

Anonymous： 隐藏调用方的身份。

Identify： 允许对象查询调用方的凭据。

Impersonate： 允许对象使用调用方的凭据。

是否为必需？ | false
位置？ | named
默认值 | Impersonate
是否接受管道输入？ | false
是否接受通配符？ | false

-ThrottleLimit <int>

指定为运行此命令可建立的并发连接的最大数目。如果省略此参数或输入 0 值，则使用默认值 32。

节流限制仅适用于当前命令，而不适用于会话或计算机。

是否为必需？ | false
位置？ | named
默认值 | 32
是否接受管道输入？ | false
是否接受通配符？ | false

-Confirm

在执行命令之前提示您进行确认。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-WhatIf

描述如果执行该命令会发生什么情况（无需实际执行该命令）。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

<CommonParameters>

此 cmdlet 支持通用参数：-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。有关详细信息，请参阅 about_Commonparameters.

输入和输出

输入类型是指可通过管道传递给 cmdlet 的对象的类型。返回类型是指 Cmdlet 所返回对象的类型。

输入 | None 不能通过管道将输入传递给此 cmdlet。
输出 | None 或 System.Management.Automation.RemotingJob 当您使用 AsJob 参数时，该 cmdlet 返回一个作业对象 (System.Management.Automation.RemotingJob)。否则，将不产生任何输出。

说明

此 cmdlet 使用 Win32_OperatingSystem WMI 类的 Win32Shutdown 方法。

示例 1

C:\PS>stop-computer

说明
-----------
此命令关闭本地计算机。

示例 2

C:\PS>stop-computer -computername Server01, Server02, localhost

说明
-----------
此命令停止两台远程计算机 Server01 和 Server02 以及标识为“localhost”的本地计算机。

示例 3

C:\PS>$j = stop-computer -computername Server01, Server02 -asjob

C:\PS> $results = $j | receive-job

C:\PS> $results

说明
-----------
这些命令在两台远程计算机上将 Stop-Computer 命令作为后台作业运行，然后获取结果。

第一条命令使用 AsJob 参数将该命令作为后台作业运行。此命令将生成的作业对象保存在 $j 变量中。

第二条命令使用管道运算符将 $j 中的作业对象发送给 Receive-Job cmdlet，后者将获取作业结果。该命令将结果保存在 $results 变量中。

第三条命令显示保存在 $results 变量中的结果。

因为 AsJob 参数在本地计算机上创建作业，并将结果自动返回给本地计算机，所以您可以将 Receive-Job 命令作为本地命令运行。

示例 4

C:\PS>stop-computer -comp Server01 -impersonation anonymous -authentication PacketIntegrity

说明
-----------
此命令重新启动远程计算机 Server01。此命令将使用自定义模拟和身份验证设置。

示例 5

C:\PS>$s = get-content domain01.txt

C:\PS> $c = get-credential domain01\admin01

C:\PS> stop-computer -computername $s -force -throttlelimit 10 -credential $c

说明
-----------
这些命令强制立即关闭 Domain01 中的所有计算机。

第一条命令获取该域中计算机的列表，并将该列表保存在 $s 变量中。

第二条命令获取域管理员的凭据，并将这些凭据保存在 $c 变量中。

第三条命令关闭这些计算机。它使用 ComputerName 参数提交 $s 变量中的计算机列表，使用 Force 参数强制立即关闭，并使用 Credential 参数提交保存在 $c 变量中的凭据。此外，它还使用 ThrottleLimit 参数将该命令限制在 10 个并发连接范围内。

另请参阅

  • Add-Computer
  • Checkpoint-Computer
  • Remove-Computer
  • Restart-Computer
  • Restore-Computer
  • Test-Connection


Stop-Job

停止 Windows PowerShell 后台作业。

语法

Stop-Job [[-InstanceId] <Guid[]>] [-PassThru] [-Confirm] [-WhatIf] [<CommonParameters>]

Stop-Job [-Job] <Job[]> [-PassThru] [-Confirm] [-WhatIf] [<CommonParameters>]

Stop-Job [[-Name] <string[]>] [-PassThru] [-Confirm] [-WhatIf] [<CommonParameters>]

Stop-Job [-Id] <Int32[]> [-PassThru] [-Confirm] [-WhatIf] [<CommonParameters>]

Stop-Job [-State {<NotStarted> | <Running> | <Completed> | <Failed> | <Stopped> | <Blocked>}] [-PassThru] [-Confirm] [-WhatIf] [<CommonParameters>]

说明

Stop-Job cmdlet 停止正在进行的 Windows PowerShell 后台作业。可以使用此 cmdlet 停止所有作业，或者基于作业的名称、ID、实例 ID 或状态，或通过将作业对象传递到 Stop-Job 来停止选定的作业。

可以使用 Stop-Job 来停止通过使用 Start-Job 或 Invoke-Command 的 AsJob 参数启动的作业。停止后台作业时，Windows PowerShell 将完成该作业队列中挂起的所有任务，然后终止作业。提交此命令之后，将不会有新任务添加到队列中。

此 cmdlet 不删除后台作业。若要删除作业，请使用 Remove-Job。

参数

-Id <Int32[]>

停止具有指定 ID 的作业。默认值为当前会话中的所有作业。

ID 是一个整数，用于在当前会话中唯一标识作业。它比 InstanceId 更容易记住和键入，但它仅仅在当前会话中是唯一的。可以键入一个或多个 ID（以逗号分隔）。要查找作业的 ID，请键入不带参数的“Get-Job”。

是否为必需？ | true
位置？ | 1
默认值 |
是否接受管道输入？ | true (ByPropertyName)
是否接受通配符？ | false

-InstanceId <Guid[]>

仅停止具有指定实例 ID 的作业。默认值为所有作业。

实例 ID 是一个 GUID，用于在计算机上唯一地标识作业。若要查找作业的实例 ID，请使用 Get-Job。

是否为必需？ | false
位置？ | 1
默认值 |
是否接受管道输入？ | true (ByPropertyName)
是否接受通配符？ | false

-Job <Job[]>

指定要停止的作业。输入包含作业的变量或获取作业的命令。也可以使用管道运算符将作业提交到 Stop-Job cmdlet。默认情况下，Stop-Job 删除在当前会话中启动的所有作业。

是否为必需？ | true
位置？ | 1
默认值 |
是否接受管道输入？ | true (ByValue, ByPropertyName)
是否接受通配符？ | false

-Name <string[]>

仅停止具有指定友好名称的作业。以逗号分隔的列表形式输入作业名称，或使用通配符 (*) 来输入作业名称模式。默认情况下，Stop-Job 停止在当前会话中创建的所有作业。

由于不能保证友好名称是唯一的，因此在通过名称来指定要停止的作业时，请使用 WhatIf 和 Confirm 参数。

是否为必需？ | false
位置？ | 1
默认值 |
是否接受管道输入？ | true (ByPropertyName)
是否接受通配符？ | true

-PassThru

返回表示新后台作业的对象。默认情况下，此 cmdlet 将不产生任何输出。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-State <JobState>

仅停止处于指定状态的作业。有效值是 NotStarted、Running、Completed、Stopped、Failed 和 Blocked。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | true (ByPropertyName)
是否接受通配符？ | false

-Confirm

在执行命令之前提示您进行确认。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-WhatIf

描述如果执行该命令会发生什么情况（无需实际执行该命令）。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

<CommonParameters>

此 cmdlet 支持通用参数：-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。有关详细信息，请参阅 about_Commonparameters.

输入和输出

输入类型是指可通过管道传递给 cmdlet 的对象的类型。返回类型是指 Cmdlet 所返回对象的类型。

输入 | System.Management.Automation.RemotingJob 可将作业对象通过管道传递给 Stop-Job。
输出 | None 或 System.Management.Automation.RemotingJob 如果使用 PassThru 参数，则 Stop-Job 返回作业对象。否则，此 cmdlet 将不产生任何输出。

示例 1

C:\PS>$s = new-pssession -computername Server01 -credential domain01\admin02

C:\PS> $j = invoke-command -session $s -scriptblock {start-job -scriptblock {get-eventlog system}}

C:\PS> invoke-command -session $s -scriptblock {param($j) stop-job -job $j} -ArgumentList $j

说明
-----------
此示例说明如何使用 Stop-Job cmdlet 停止在远程计算机上运行的作业。

由于该作业是通过使用 Invoke-Command 远程运行 Start-Job 命令而启动的，因此作业对象存储在远程计算机上，您必须使用另一个 Invoke-Command 命令来远程运行 Stop-Job 命令。有关远程后台作业的详细信息，请参阅 about_Remote_Jobs。

第一个命令在 Server01 计算机上创建一个 Windows PowerShell 会话 (PSSession)，并将会话对象保存在 $s 变量中。该命令使用某个域管理员的凭据。

第二个命令使用 Invoke-Command cmdlet 在会话中运行 Start-Job 命令。作业中的此命令获取系统事件日志中的所有事件。生成的作业对象存储在 $j 变量中。

第三个命令停止作业。该命令使用 Invoke-Command cmdlet 在 Server01 上的 PSSession 中运行 Stop-Job 命令。由于作业对象存储在本地计算机上的变量 $j 中，因此该命令使用“param”关键字声明命令中的局部变量，并使用 ArgumentList 参数为变量提供值。

当该命令完成时，作业停止，$s 中的 PSSession 可供使用。

示例 2

C:\PS>stop-job -state failed

说明
-----------
此命令停止状态值为“Failed”的所有作业。

示例 3

C:\PS>stop-job -name job1

说明
-----------
此命令停止 Job1 后台作业。

示例 4

C:\PS>stop-job -id 1, 3, 4

说明
-----------
此命令停止三个作业。它通过 ID 来标识作业。

示例 5

C:\PS>get-job | stop-job

说明
-----------
此命令停止当前会话中的所有后台作业。

示例 6

C:\PS>stop-job -state blocked

说明
-----------
此命令停止作业状态为“Blocked”的所有作业。

示例 7

C:\PS>get-job | format-table ID, Name, Command, @{Label="State";Expression={$_.jobstateinfo.state}}, I
nstanceID -auto

Id Name Command                 State  InstanceId
-- ---- -------                 -----  ----------
 1 Job1 start-service schedule Running 05abb67a-2932-4bd5-b331-c0254b8d9146
 3 Job3 start-service schedule Running c03cbd45-19f3-4558-ba94-ebe41b68ad03
 5 Job5 get-service s*         Blocked e3bbfed1-9c53-401a-a2c3-a8db34336adf

C:\PS> stop-job -instanceid e3bbfed1-9c53-401a-a2c3-a8db34336adf

说明
-----------
这些命令说明如何根据作业的实例 ID 来停止作业。

第一个命令使用 Get-Job 命令获取当前会话中的作业。该命令使用管道运算符 (|) 将作业发送到 Format-Table 命令，后者显示每个作业的指定属性的表。该表包括每个作业的实例 ID。它使用计算属性来显示作业状态。

第二个命令使用带有 InstanceID 参数的 Stop-Job 命令来停止选定的作业。

示例 8

C:\PS>$j = invoke-command -computername Server01 -scriptblock {get-eventlog system} -asjob

C:\PS> $j | stop-job -passthru

Id    Name    State      HasMoreData     Location         Command
--    ----    ----      -----------     --------          -------
5     Job5    Stopped    True            judithh-tablet   get-eventlog system

说明
-----------
此示例说明如何使用 Stop-Job cmdlet 停止在远程计算机上运行的作业。

由于作业是使用 Invoke-Command 的 AsJob 参数启动的，因此即使作业在远程计算机上运行，作业对象也位于本地计算机上。因此，可以使用本地 Stop-Job 命令来停止作业。

第一个命令使用 Invoke-Command cmdlet 在 Server01 计算机上启动后台作业。此命令使用 AsJob 参数将远程命令作为后台作业运行。

此命令返回一个作业对象，此作业对象与 Start-Job 返回的作业对象相同。此命令将作业对象保存在 $j 变量中。

第二个命令使用管道运算符将 $j 变量中的作业发送到 Stop-Job。该命令使用 PassThru 参数来指示 Stop-Job 返回作业对象。作业对象的显示确认作业的状态为“Stopped”。

有关远程后台作业的详细信息，请参阅 about_Remote_Jobs。

另请参阅

  • about_Jobs
  • about_Job_Details
  • about_Remote_Jobs
  • Start-Job
  • Get-Job
  • Receive-Job
  • Wait-Job
  • Remove-Job
  • Invoke-Command


Stop-Process

停止一个或多个正在运行的进程。

语法

Stop-Process [-Id] <Int32[]> [-Force] [-PassThru] [-Confirm] [-WhatIf] [<CommonParameters>]

Stop-Process -InputObject <Process[]> [-Force] [-PassThru] [-Confirm] [-WhatIf] [<CommonParameters>]

Stop-Process -Name <string[]> [-Force] [-PassThru] [-Confirm] [-WhatIf] [<CommonParameters>]

说明

Stop-Process cmdlet 停止一个或多个正在运行的进程。可以通过进程名称或进程 ID (PID) 来指定进程，也可以将进程对象传递给 Stop-Process。Stop-Process 仅对在本地计算机上运行的进程有效。

在 Windows Vista 以及 Windows 的更高版本上，要停止不是由当前用户拥有的进程，您必须使用“以管理员身份运行”选项启动 Windows PowerShell。此外，还会提示您进行确认，除非您使用 Force 参数。

参数

-Force

在不提示确认的情况下停止指定的进程。默认情况下，Stop-Process 在停止不是由当前用户拥有的任何进程之前都会提示确认。

要查找进程的所有者，请使用 Get-WmiMethod cmdlet 获取表示该进程的 Win32_Process 对象，然后使用该对象的 GetOwner 方法。

是否为必需？ | false
位置？ | named
默认值 | False
是否接受管道输入？ | false
是否接受通配符？ | false

-Id <Int32[]>

指定要停止的进程的进程 ID。若要指定多个 ID，请使用逗号分隔 ID。要查找进程的 PID，请键入“get-process”。参数名（“Id”）为可选项。

是否为必需？ | true
位置？ | 1
默认值 |
是否接受管道输入？ | true (ByPropertyName)
是否接受通配符？ | false

-InputObject <Process[]>

停止由指定的进程对象表示的进程。输入一个包含对象的变量，或键入可获取对象的命令或表达式。

是否为必需？ | true
位置？ | named
默认值 |
是否接受管道输入？ | true (ByValue)
是否接受通配符？ | false

-Name <string[]>

指定要停止的进程的进程名称。可以键入多个进程名称（以逗号分隔）或使用通配符。

是否为必需？ | true
位置？ | named
默认值 |
是否接受管道输入？ | true (ByPropertyName)
是否接受通配符？ | false

-PassThru

返回一个表示进程的对象。默认情况下，此 cmdlet 将不产生任何输出。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Confirm

在执行命令之前提示您进行确认。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-WhatIf

描述如果执行该命令会发生什么情况（无需实际执行该命令）。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

<CommonParameters>

此 cmdlet 支持通用参数：-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。有关详细信息，请参阅 about_Commonparameters.

输入和输出

输入类型是指可通过管道传递给 cmdlet 的对象的类型。返回类型是指 Cmdlet 所返回对象的类型。

输入 | System.Diagnostics.Process 可以将进程对象通过管道传递给 Stop-Process。
输出 | None 或 System.Diagnostics.Process 如果使用 PassThru 参数，则 Stop-Process 返回一个表示已停止进程的 System.Diagnostics.Process 对象。否则，此 cmdlet 将不产生任何输出。

说明

还可以通过其内置别名“kill”和“spps”来引用 Stop-Process。有关详细信息，请参阅 about_Aliases。

您也可以使用 Windows PowerShell 中的 Windows Management Instrumentation (WMI) Win32_Process 对象的属性和方法。有关详细信息，请参阅 Get-WmiObject 和 WMI SDK。

停止进程时，应注意停止进程可能会停止依赖该进程的进程和服务。在极端情况下，停止进程可能会使 Windows 停止。

示例 1

C:\PS>stop-process -name notepad

说明
-----------
此命令停止计算机上 Notepad 进程的所有实例。（Notepad 的每个实例都运行在其自身进程中。）它使用 Name 参数来指定进程，所有进程都具有相同的名称。如果要使用 ID 参数来停止相同进程，则必须列出每个 Notepad 实例的进程 ID。

示例 2

C:\PS>stop-process -id 3952 -confirm -passthru

Confirm
Are you sure you want to perform this action?
Performing operation "Stop-Process" on Target "notepad (3952)".
[Y] Yes  [A] Yes to All  [N] No  [L] No to All  [S] Suspend  [?] Help
(default is "Y"):y
Handles  NPM(K)    PM(K)      WS(K) VM(M)   CPU(s)     Id ProcessName
-------  ------    -----      ----- -----   ------     -- -----------
     41       2      996       3212    31            3952 notepad

说明
-----------
此命令停止 Notepad 进程的特定实例。它使用进程 ID 3952 来标识该进程。Confirm 参数指示 Windows PowerShell 在停止该进程之前提示用户。由于提示中包含进程名称及其 ID，因此这是最佳实践。PassThru 参数将该进程对象传递给格式化程序以进行显示。如果不使用此参数，则在执行 Stop-Process 命令后将不显示结果。

示例 3

C:\PS>calc

c:\PS>$p = get-process calc

c:\PS>stop-process -inputobject $p

c:\PS>get-process | where-object {$_.HasExited}

说明
-----------
这一组命令启动和停止 Calc 进程，然后检测已停止的进程。

第一条命令（“calc”）启动一个计算器实例。第二条命令（“$p = get-process calc”）使用 Get-Process cmdlet 来获取表示 Calc 进程的对象，并将该对象存储在 $p 变量中。第三条命令（“stop-process -inputobject $p”）使用 Stop-Process cmdlet 来停止 Calc 进程。它使用 InputObject 参数将该对象传递给 Stop-Process。

最后一条命令获取计算机上所有曾经运行但现已停止的进程。它使用 Get-Process cmdlet 来获取计算机上的所有进程。管道运算符 (|) 将结果传递给 Where-Object cmdlet，该 cmdlet 从中选择 HasExited 属性值为 TRUE 的结果。HasExited 只是进程对象的一个属性。要查找所有属性，请键入“get-process | get-member”。

示例 4

C:\PS>get-process lsass | stop-process

Stop-Process : Cannot stop process 'lsass (596)' because of the following error: Access is denied
At line:1 char:34
+ get-process lsass  | stop-process <<<<

[ADMIN]: C:\PS> get-process lsass | stop-process
Warning!
Are you sure you want to perform this action?
Performing operation 'Stop-Process' on Target 'lsass(596)'
[Y] Yes  [A] Yes to All  [N] No  [L] No to All  [S] Suspend  [?] Help (default is "Y"):

[ADMIN]: C:\PS> get-process lsass | stop-process -force
[ADMIN]: C:\PS>

说明
-----------
这些命令演示了使用 Force 参数停止不是由用户拥有的进程的效果。

第一条命令使用 Get-Process cmdlet 获取 Lsass 进程。管道运算符将该进程发送给 Stop-Process cmdlet 以停止该进程。如示例输出中所示，第一条命令失败并显示“访问被拒绝”消息，因为此进程只能由计算机上 Administrator 组的成员停止。

当使用“以管理员身份运行”选项打开 Windows PowerShell 并重新执行该命令时，Windows PowerShell 会提示您进行确认。

第二条命令使用 Force 参数禁止显示提示。因此进程将在不提示确认的情况下停止。

另请参阅

  • Get-Process
  • Start-Process
  • Stop-Process
  • Wait-Process
  • Debug-Process


Stop-Service

停止一个或多个正在运行的服务。

语法

Stop-Service [-Name] <string[]> [-Exclude <string[]>] [-Force] [-Include <string[]>] [-PassThru] [-Confirm] [-WhatIf] [<CommonParameters>]

Stop-Service -DisplayName <string[]> [-Exclude <string[]>] [-Force] [-Include <string[]>] [-PassThru] [-Confirm] [-WhatIf] [<CommonParameters>]

Stop-Service [-InputObject <ServiceController[]>] [-Exclude <string[]>] [-Force] [-Include <string[]>] [-PassThru] [-Confirm] [-WhatIf] [<CommonParameters>]

说明

Stop-Service cmdlet 为每一个指定的服务向 Windows 服务控制器发送一条停止消息。您可以通过服务名称或显示名称来指定服务，也可以使用 InputObject 参数传递一个服务对象来表示要停止的服务。

参数

-DisplayName <string[]>

指定要停止的服务的显示名称。允许使用通配符。

是否为必需？ | true
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Exclude <string[]>

忽略指定服务。此参数的值对 Name 参数进行限定。请输入名称元素或模式，例如“s*”。允许使用通配符。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Force

允许 cmdlet 停止服务（即使该服务有依赖服务）。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Include <string[]>

只停止指定的服务。此参数的值对 Name 参数进行限定。请输入名称元素或模式，例如“s*”。允许使用通配符。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-InputObject <ServiceController[]>

指定 ServiceController 对象来表示要停止的服务。输入一个包含对象的变量，或键入可获取对象的命令或表达式。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | true (ByValue)
是否接受通配符？ | false

-Name <string[]>

指定要停止的服务的服务名称。允许使用通配符。

参数名为可选项。可以使用“Name”或其别名“ServiceName”，也可以忽略该参数名称。

是否为必需？ | true
位置？ | 1
默认值 |
是否接受管道输入？ | true (ByValue, ByPropertyName)
是否接受通配符？ | false

-PassThru

返回一个表示服务的对象。默认情况下，此 cmdlet 将不产生任何输出。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Confirm

在执行命令之前提示您进行确认。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-WhatIf

描述如果执行该命令会发生什么情况（无需实际执行该命令）。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

<CommonParameters>

此 cmdlet 支持通用参数：-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。有关详细信息，请参阅 about_Commonparameters.

输入和输出

输入类型是指可通过管道传递给 cmdlet 的对象的类型。返回类型是指 Cmdlet 所返回对象的类型。

输入 | System.ServiceProcess.ServiceController or System.String 可以将服务对象或包含服务名称的字符串通过管道传递给 Stop-Service。
输出 | None 或 System.ServiceProcess.ServiceController 如果使用 PassThru 参数，则 Stop-Service 生成表示服务的 System.ServiceProcess.ServiceController 对象。否则，此 cmdlet 将不产生任何输出。

说明

还可以使用其内置别名“spsv”来引用 Stop-Service。有关详细信息，请参阅 about_Aliases。

Stop-Service 只有在当前用户有相应权限时才能控制服务。如果某个命令不能正常工作，则可能您不具有所需的权限。

若要查找服务名称并显示您的系统中的服务名称，请键入“get-service”。服务名称显示在 Name 列中，显示名称显示在 DisplayName 列中。

示例 1

C:\PS>stop-service sysmonlog

说明
-----------
此命令停止本地计算机上的性能日志和警报 (SysmonLog) 服务。

示例 2

C:\PS>get-service -displayname telnet | stop-service

说明
-----------
此命令停止本地计算机上的 Telnet 服务。此命令使用 Get-Service cmdlet 来获取表示 Telnet 服务的对象。管道运算符 (|) 通过管道将该对象传递给 Stop-Service cmdlet，该 cmdlet 将停止服务。

示例 3

C:\PS>get-service iisadmin | format-list -property name, dependentservices

C:PS>stop-service iisadmin -force -confirm

说明
-----------
Stop-Service 命令停止本地计算机上的 IISAdmin 服务。由于停止此服务时也会停止依赖于 IISAdmin 服务的服务，因此在执行 Stop-Service 命令之前，最好先执行相应命令以列出依赖于 IISAdmin 服务的服务。

第一条命令列出依赖于 IISAdmin 的服务。它使用 Get-Service cmdlet 来获取表示 IISAdmin 服务的对象。管道运算符 (|) 将结果传递给 Format-List cmdlet。该命令使用 Format-List 的 Property 参数来只列出该服务的 Name 和 DependentServices 属性。

第二条命令停止 IISAdmin 服务。需要使用 Force 参数来停止具有依赖服务的服务。该命令使用 Confirm 参数在停止每个服务之前请求用户进行确认。

另请参阅

  • Get-Service
  • Suspend-Service
  • Start-Service
  • Restart-Service
  • Resume-Service
  • Set-Service
  • New-Service


Stop-Transcript

停止脚本。

语法

Stop-Transcript [<CommonParameters>]

说明

Stop-Transcript cmdlet 停止通过使用 Start-Transcript cmdlet 启动的脚本。还可以通过结束会话来停止脚本。

参数

<CommonParameters>

此 cmdlet 支持通用参数：-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。有关详细信息，请参阅 about_Commonparameters.

输入和输出

输入类型是指可通过管道传递给 cmdlet 的对象的类型。返回类型是指 Cmdlet 所返回对象的类型。

输入 | None 不能通过管道将输入传递给此 cmdlet。
输出 | System.String Stop-Transcript 返回一个包含状态消息和输出文件路径的字符串。

说明

如果尚未启动脚本，则该命令将会失败。

示例 1

C:\PS>stop-transcript

说明
-----------
此命令停止所有正在运行的脚本。

另请参阅

  • Start-Transcript


Suspend-Service

挂起（暂停）一个或多个正在运行的服务。

语法

Suspend-Service [-Name] <string[]> [-Exclude <string[]>] [-Include <string[]>] [-PassThru] [-Confirm] [-WhatIf] [<CommonParameters>]

Suspend-Service -DisplayName <string[]> [-Exclude <string[]>] [-Include <string[]>] [-PassThru] [-Confirm] [-WhatIf] [<CommonParameters>]

Suspend-Service [-InputObject <ServiceController[]>] [-Exclude <string[]>] [-Include <string[]>] [-PassThru] [-Confirm] [-WhatIf] [<CommonParameters>]

说明

Suspend-Service cmdlet 为每一个指定的服务向 Windows 服务控制器发送一条挂起消息。在挂起期间，服务仍在运行，但其操作已停止，直至通过使用 Resume-Service 等方法恢复该服务。您可以通过服务名称或显示名称来指定服务，也可以使用 InputObject 参数传递一个表示要挂起的服务的服务对象。

参数

-DisplayName <string[]>

指定要挂起的服务的显示名称。允许使用通配符。

是否为必需？ | true
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Exclude <string[]>

忽略指定服务。此参数的值对 Name 参数进行限定。请输入名称元素或模式，例如“s*”。允许使用通配符。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Include <string[]>

只挂起指定的服务。此参数的值对 Name 参数进行限定。请输入名称元素或模式，例如“s*”。允许使用通配符。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-InputObject <ServiceController[]>

指定 ServiceController 对象来表示要挂起的服务。输入一个包含对象的变量，或键入可获取对象的命令或表达式。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | true (ByValue)
是否接受通配符？ | false

-Name <string[]>

指定要挂起的服务的服务名称。允许使用通配符。

参数名为可选项。可以使用“Name”或其别名“ServiceName”，也可以忽略该参数名称。

是否为必需？ | true
位置？ | 1
默认值 |
是否接受管道输入？ | true (ByValue, ByPropertyName)
是否接受通配符？ | false

-PassThru

返回一个表示服务的对象。默认情况下，此 cmdlet 将不产生任何输出。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Confirm

在执行命令之前提示您进行确认。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-WhatIf

描述如果执行该命令会发生什么情况（无需实际执行该命令）。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

<CommonParameters>

此 cmdlet 支持通用参数：-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。有关详细信息，请参阅 about_Commonparameters.

输入和输出

输入类型是指可通过管道传递给 cmdlet 的对象的类型。返回类型是指 Cmdlet 所返回对象的类型。

输入 | System.ServiceProcess.ServiceController or System.String 可以将服务对象或包含服务名称的字符串通过管道传递给 Suspend-Service。
输出 | None 或 System.ServiceProcess.ServiceController 如果使用 PassThru 参数，则 Suspend-Service 生成表示服务的 System.ServiceProcess.ServiceController 对象。否则，此 cmdlet 将不产生任何输出。

说明

Suspend-Service 只有在当前用户有相应权限时才能控制服务。如果某个命令不能正常工作，则可能您不具有所需的权限。

而且，Suspend-Service 只能挂起支持被挂起和恢复的服务。若要确定是否可以挂起特定服务，请将 Get-Service cmdlet 与 CanPauseAndContinue 属性一起使用。例如，“get-service wmi | Format-List name, canpauseandcontinue”。要查找计算机上所有可挂起的服务，请键入“get-service | Where-Object {$_.canpauseandcontinue -eq "True"}”。

若要查找服务名称并显示您的系统中的服务名称，请键入“get-service”。服务名称显示在 Name 列中，显示名称显示在 DisplayName 列中。

示例 1

C:\PS>suspend-service -displayname "Telnet"

说明
-----------
此命令挂起本地计算机上的 Telnet 服务 (Tlntsvr)。

示例 2

C:\PS>suspend-service -name lanman* -whatif

说明
-----------
此命令显示在挂起服务名称以“lanman”开头的服务后会发生的情况。若要挂起服务，请在不带 WhatIf 参数的情况下重新运行该命令。

示例 3

C:\PS>get-service schedule | suspend-service

说明
-----------
此命令使用 Get-Service cmdlet 来获取计算机上表示任务计划程序 (Schedule) 服务的对象。管道运算符 (|) 将结果传递给 Suspend-Service cmdlet，该 cmdlet 将挂起服务。

示例 4

C:\PS>get-service | where-object {$_.canpauseandcontinue -eq "True"} | suspend-service -confirm

说明
-----------
此命令挂起计算机上所有可挂起的服务。它使用 Get-Service cmdlet 来获取计算机上表示相应服务的对象。管道运算符 (|) 将结果传递给 Where-Object cmdlet，该 cmdlet 只选择其 CanPauseAndContinue 属性值为“True”的服务。另一个管道运算符将结果传递给 Suspend-Service cmdlet。Confirm 参数用于在挂起每个服务前提示您进行确认。

另请参阅

  • Get-Service
  • Start-Service
  • Stop-Service
  • Restart-Service
  • Resume-Service
  • Set-Service
  • New-Service


Tee-Object

将命令输出保存在文件或变量中，并将其显示在控制台中。

语法

Tee-Object [-FilePath] <string> [-InputObject <psobject>] [<CommonParameters>]

Tee-Object -Variable <string> [-InputObject <psobject>] [<CommonParameters>]

说明

Tee-Object cmdlet 向两个方向（类似字母“T”）发送命令的输出。它将输出存储在文件或变量中，同时通过管道向后发送。如果 Tee-Object 是管道中的最后一个命令，则会在控制台中显示该命令的输出。

参数

-FilePath <string>

指定 cmdlet 将对象存储于其中的文件。接受可解析为单个文件的通配符。

是否为必需？ | true
位置？ | 1
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-InputObject <psobject>

指定 cmdlet 的对象输入。请输入包含对象的变量，或者键入可获取对象的命令或表达式。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | true (ByValue)
是否接受通配符？ | false

-Variable <string>

将对输入对象的引用赋予指定的变量。

是否为必需？ | true
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

<CommonParameters>

此 cmdlet 支持通用参数：-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。有关详细信息，请参阅 about_Commonparameters.

输入和输出

输入类型是指可通过管道传递给 cmdlet 的对象的类型。返回类型是指 Cmdlet 所返回对象的类型。

输入 | System.Management.Automation.PSObject 可以通过管道将对象重定向到 Tee-Object。
输出 | System.Management.Automation.PSObject Tee-Object 返回它重定向的对象。

说明

您也可以使用 Out-File cmdlet 或重定向运算符，它们都会将输出保存在一个文件中，但是不会通过管道向后发送。

Tee-Object 在写入到文件时使用 Unicode 编码。因此，在采用不同编码的文件中，可能无法正确设置输出内容的格式。若要指定编码，请使用 Out-File cmdlet。

示例 1

C:\PS>get-process | tee-object -filepath C:\Test1\testfile2.txt

Handles  NPM(K)    PM(K)      WS(K) VM(M)   CPU(s)    Id ProcessName
-------  ------    -----      ----- -----   ------    -- -----------
   83       4     2300       4520    39     0.30    4032 00THotkey
  272       6     1400       3944    34     0.06    3088 alg
   81       3      804       3284    21     2.45     148 ApntEx
   81       4     2008       5808    38     0.75    3684 Apoint
...

说明
-----------
此命令获取在计算机上运行的进程的列表，并将结果发送给文件。因为没有指定其他路径，所以结果将显示在控制台中。

示例 2

C:\PS>get-process notepad | tee-object -variable proc | select-object processname,handles

ProcessName                              Handles
-----------                              -------
notepad                                  43
notepad                                  37
notepad                                  38
notepad                                  38

说明
-----------
此命令获取在计算机上运行的进程的列表，并将结果发送给名为“proc”的变量。然后，它通过管道将所得到的对象传递给 Select-Object，后者将选择 ProcessName 和 Handles 属性。请注意，$proc 变量包含由 Get-Process 返回的默认信息。

另请参阅

  • about_Redirection
  • Select-Object


Test-ComputerSecureChannel

测试并修复本地计算机与其域之间的安全通道。

语法

Test-ComputerSecureChannel [-Repair] [-Server <string>] [-Confirm] [-WhatIf] [<CommonParameters>]

说明

Test-ComputerSecureChannel cmdlet 通过检查本地计算机与其域之间的安全通道的信任关系的状态，来验证安全通道是否正常工作。如果连接失败，您可以使用 Repair 参数尝试恢复它。

如果安全通道正常工作，则 Test-ComputerSecureChannel 将返回“True”；否则，返回“False”。此结果使您可以在函数和脚本的条件语句中使用该 cmdlet。要获取详细的测试结果，请使用 Verbose 参数。

此 cmdlet 的工作原理与 NetDom.exe 非常类似。NetDom 和 Test-ComputerSecureChannel 均使用 NetLogon 服务执行操作。

参数

-Repair

删除由 NetLogon 服务建立的安全通道，然后再重建该通道。使用此参数可尝试恢复未通过测试（返回“False”）的连接。

要使用此参数，当前用户必须是本地计算机上 Administrators 组的成员。

是否为必需？ | false
位置？ | named
默认值 | 无
是否接受管道输入？ | false
是否接受通配符？ | false

-Server <string>

使用指定的域控制器运行该命令。如果省略此参数，则 Test-ComputerSecureChannel 会选择默认域控制器来执行操作。

是否为必需？ | false
位置？ | named
默认值 | 无
是否接受管道输入？ | false
是否接受通配符？ | false

-Confirm

在执行命令之前提示您进行确认。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-WhatIf

描述如果执行该命令会发生什么情况（无需实际执行该命令）。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

<CommonParameters>

此 cmdlet 支持通用参数：-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。有关详细信息，请参阅 about_Commonparameters.

输入和输出

输入类型是指可通过管道传递给 cmdlet 的对象的类型。返回类型是指 Cmdlet 所返回对象的类型。

输入 | None 不能通过管道将输入传递给此 cmdlet。
输出 | System.Boolean 如果连接正常工作，则该 cmdlet 将返回“True”；否则，返回“False”。

说明

要在 Windows Vista 以及 Windows 的更高版本上运行 Test-ComputerSecureChannel 命令，必须使用“以管理员身份运行”选项打开 Windows PowerShell。

Test-ComputerSecureChannel 通过使用 I_NetLogonControl2 函数来实现，该函数可控制 Netlogon 服务的各个方面。

示例 1

C:\PS>test-computersecurechannel

True

说明
-----------
此命令测试本地计算机与它所加入的域之间的安全通道。

示例 2

C:\PS>test-computersecurechannel -server DCName.fabrikam.com

True

说明
-----------
此命令指定要进行测试的首选域控制器。

示例 3

C:\PS>Test-ComputerSecureChannel -repair

True

说明
-----------
此命令重置本地计算机与其域之间的安全通道。

示例 4

C:\PS>test-computerSecureChannel -verbose

VERBOSE: Performing operation "Test-ComputerSecureChannel" on Target "SERVER01".
True
VERBOSE: "The secure channel between 'SERVER01' and 'net.fabrikam.com' is alive and working correctly."

说明
-----------
此命令使用通用参数 Verbose 请求有关操作的详细消息。有关 Verbose 参数的详细信息，请参阅 about_CommonParameters。

示例 5

C:\PS>set-alias tcsc test-computersecurechannel

if (!(tcsc))
     {write-host "Connection failed. Reconnect and retry."}
else { &(.\get-servers.ps1) }

说明
-----------
此示例演示了如何使用 Test-ComputerSecureChannel 在运行需要连接的脚本之前测试连接。

第一条命令使用 Set-Alias cmdlet 为该 cmdlet 名称创建一个别名。这可节省空间并避免键入错误。

If 语句将在运行脚本之前检查 Test-ComputerSecureChannel 返回的值。

另请参阅

  • Checkpoint-Computer
  • Restart-Computer
  • Stop-Computer
  • Reset-ComputerMachinePassword


Test-Connection

将 ICMP 回显请求数据包（“ping”）发送给一台或多台计算机。

语法

Test-Connection [-ComputerName] <string[]> [[-Source] <string[]>] [-AsJob] [-Authentication {<Default> | <None> | <Connect> | <Call> | <Packet> | <PacketIntegrity> | <PacketPrivacy> | <Unchanged>}] [-BufferSize <int>] [-Count <int>] [-Credential <PSCredential>] [-Delay <int>] [-Impersonation {<Default> | <Anonymous> | <Identify> | <Impersonate> | <Delegate>}] [-Quiet] [-ThrottleLimit <int>] [-TimeToLive <int>] [<CommonParameters>]

说明

Test-Connection cmdlet 将 Internet 控制消息协议 (ICMP) 回显请求数据包（“ping”）发送给一台或多台远程计算机并返回回显响应回复。可以使用此 cmdlet 确定是否可通过 Internet 协议 (IP) 网络联系特定的计算机。

使用 Test-Connection 的参数可以指定发送和接收计算机，将该命令作为后台作业运行，设置 ping 的超时值和数量以及配置连接和身份验证。

与传统的“ping”命令不同，Test-Connection 返回一个 Win32_PingStatus 对象（您可在 Windows PowerShell 中研究该对象），但可以使用 Quiet 参数强制使它只返回布尔值。

参数

-AsJob

将命令作为后台作业运行。

注意：若要使用此参数，必须为本地计算机和远程计算机配置远程处理，并且在 Windows Vista 以及更高版本的 Windows 上，还必须使用“以管理员身份运行”选项打开 Windows PowerShell。有关详细信息，请参阅 about_Remote_Requirements。

使用 AsJob 参数时，此命令立即返回代表后台作业的对象。当作业完成时，您可以继续在此会话中工作。作业在本地计算机上创建，并且来自远程计算机的结果将自动返回本地计算机。要获取作业结果，请使用 Receive-Job cmdlet。

有关 Windows PowerShell 后台作业的详细信息，请参阅 about_Jobs 和 about_Remote_Jobs。

是否为必需？ | false
位置？ | named
默认值 | False
是否接受管道输入？ | false
是否接受通配符？ | false

-Authentication <AuthenticationLevel>

指定用于 WMI 连接的身份验证级别。（Test-Connection 使用 WMI。）

有效值包括：

Unchanged： 身份验证级别与前一个命令相同。

Default： Windows 身份验证。

None： 无 COM 身份验证。

Connect： 连接级 COM 身份验证。

Call： 调用级 COM 身份验证。

Packet： 数据包级 COM 身份验证。

PacketIntegrity：数据包完整性级 COM 身份验证。

PacketPrivacy： 数据包隐私级 COM 身份验证。

是否为必需？ | false
位置？ | named
默认值 | 4
是否接受管道输入？ | false
是否接受通配符？ | false

-BufferSize <int>

指定使用此命令发送的缓冲区的大小，以字节为单位。默认值为 32。

是否为必需？ | false
位置？ | named
默认值 | 32
是否接受管道输入？ | false
是否接受通配符？ | false

-ComputerName <string[]>

指定要对其执行 ping 操作的计算机。请键入计算机名称或者以 IPv4 或 IPv6 格式键入 IP 地址。不允许使用通配符。此参数是必需的。

此参数不依赖于 Windows PowerShell 远程处理。即使您的计算机未配置为运行远程命令，您也可以使用 ComputerName 参数。

是否为必需？ | true
位置？ | 1
默认值 |
是否接受管道输入？ | true (ByPropertyName)
是否接受通配符？ | false

-Count <int>

指定要发送的回显请求数。默认值为 4。

是否为必需？ | false
位置？ | named
默认值 | 4
是否接受管道输入？ | false
是否接受通配符？ | false

-Credential <PSCredential>

指定有权执行此操作的用户帐户。键入用户名，如“User01”或“Domain01\User01”；或输入 PSCredential 对象，如 Get-Credential cmdlet 输入的一个 PSCredential 对象。

是否为必需？ | false
位置？ | named
默认值 | Current user
是否接受管道输入？ | false
是否接受通配符？ | false

-Delay <int>

指定两次 ping 操作之间的间隔时间，以秒为单位。

是否为必需？ | false
位置？ | named
默认值 | 1 (second)
是否接受管道输入？ | false
是否接受通配符？ | false

-Impersonation <ImpersonationLevel>

指定调用 WMI 时使用的模拟级别。（Test-Connection 使用 WMI。）默认值为“Impersonate”。

有效值包括：

Default： 默认模拟。

Anonymous： 隐藏调用方的身份。

Identify： 允许对象查询调用方的凭据。

Impersonate： 允许对象使用调用方的凭据。

是否为必需？ | false
位置？ | named
默认值 | 3
是否接受管道输入？ | false
是否接受通配符？ | false

-Quiet

禁止显示所有的错误，并且若有任何 ping 成功则返回 $True，全部失败则返回 $False。

是否为必需？ | false
位置？ | named
默认值 | False
是否接受管道输入？ | false
是否接受通配符？ | false

-Source <string[]>

指定发出 ping 请求的计算机的名称。请输入以逗号分隔的计算机名称的列表。默认值为本地计算机。

是否为必需？ | false
位置？ | 2
默认值 | Local computer
是否接受管道输入？ | false
是否接受通配符？ | false

-ThrottleLimit <int>

指定为运行此命令可建立的并发连接的最大数目。如果省略此参数或输入 0 值，则使用默认值 32。

节流限制仅适用于当前命令，而不适用于会话或计算机。

是否为必需？ | false
位置？ | named
默认值 | 32
是否接受管道输入？ | false
是否接受通配符？ | false

-TimeToLive <int>

指定每个回显请求数据包（“ping”）处于活动状态的最长时间，以秒为单位。默认值是 80（秒）。TimeToLive 参数的别名是 TTL。

是否为必需？ | false
位置？ | named
默认值 | 80
是否接受管道输入？ | false
是否接受通配符？ | false

<CommonParameters>

此 cmdlet 支持通用参数：-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。有关详细信息，请参阅 about_Commonparameters.

输入和输出

输入类型是指可通过管道传递给 cmdlet 的对象的类型。返回类型是指 Cmdlet 所返回对象的类型。

输入 | None 不能通过管道将输入传递给此 cmdlet。
输出 | System.Management.ManagementObject#root\cimv2\Win32_PingStatus, System.Management.Automation.RemotingJob, System.Boolean 如果使用 AsJob 参数，则此 cmdlet 返回作业对象。使用 Quiet 参数时，它会返回一个布尔值。否则，此 cmdlet 为每个 ping 返回一个 Win32_PingStatus 对象。

说明

此 cmdlet 使用 Win32_PingStatus 类。“get-wmiojbect win32_pingstatus”命令与 Test-Connection 命令等效。

示例 1

C:\PS>test-connection server01

Source        Destination     IPV4Address     IPV6Address  Bytes    Time(ms)
------        -----------     -----------     -----------  -----    --------
ADMIN1        Server01        157.59.137.44                32       0
ADMIN1        Server01        157.59.137.44                32       0
ADMIN1        Server01        157.59.137.44                32       0
ADMIN1        Server01        157.59.137.44                32       1

说明
-----------
此命令将来自本地计算机的回显请求数据包（“ping”）发送到计算机 Server01。此命令使用 ComputerName 参数指定计算机 Server01，但省略可选的参数名称。

示例 2

C:\PS>test-connection -computername server01, server02, server12 -credential domain01\user01

说明
-----------
此命令将来自本地计算机的 ping 请求发送到多台远程计算机。它使用 Credential 参数指定有权对所有这些远程计算机执行 ping 操作的用户帐户。

示例 3

C:\PS>test-connection -source Server02, Server 12, localhost -computername Server01

说明
-----------
此命令将来自不同源计算机的 ping 请求发送到一台远程计算机 Server01。使用此命令格式可从多个点来测试连接的延迟时间。

示例 4

C:\PS>test-connection -computername Server01 -count 3 -delay 2 -TTL 256 -buffersize 256 -throttle 32

说明
-----------
此命令将来自本地计算机的三个 ping 请求发送到计算机 Server01。它使用 Test-Connection 的参数来自定义该命令。

如果因跃点数增加或网络流量较高而预计 ping 响应比往常需要更长时间，请使用此命令格式。

示例 5

C:\PS>$job = test-connection -computername (get-content servers.txt) -asjob

C:\PS> if ($job.jobstateinfo.state -ne "Running") {$results = receive-job $job}

说明
-----------
此示例演示了如何将 Test-Connection 命令作为 Windows PowerShell 后台作业运行。

第一条命令使用 Test-Connection cmdlet 对企业中的多台计算机执行 ping 操作。ComputerName 参数的值是从 Servers.txt 文件读取计算机名称列表的 Get-Content 命令。此命令使用 AsJob 参数将命令作为后台作业运行。

第二条命令检查该作业是否仍在运行；如果该作业未运行，则使用 Receive-Job 命令获取结果并将结果存储在 $results 变量中。

示例 6

C:\PS>test-connection Server55 -credential domain55\user01 -impersonation Identify

说明
-----------
此命令使用 Test-Connection cmdlet 对远程计算机执行 ping 操作。此命令使用 Credential 参数指定有权对远程计算机执行 ping 操作的用户帐户，使用 Impersonation 参数将模拟级别更改为“Identify”。

示例 7

C:\PS>if (test-connection -computername Server01 -quiet) {new-pssession Server01}

说明
-----------
仅当发送到 Server01 上的至少一条 ping 成功时，此命令才会在该计算机上创建一个 PSSession。

此命令使用 Test-Connection cmdlet 对 Server01 计算机执行 ping 操作。此命令使用 Quiet 参数，这样将返回布尔值，而不是 Win32_PingStatus 对象。如果这四条 ping 中有任何 ping 成功，则该返回值为 $True，否则为 False。

如果 Test-Connection 命令返回 $True 值，则该命令将使用 New-PSSession cmdlet 创建 PSSession。

另请参阅

  • Add-Computer
  • Restart-Computer
  • Stop-Computer


Test-ModuleManifest

验证模块清单文件是否准确描述了模块的内容。

语法

Test-ModuleManifest [-Path] <string> [<CommonParameters>]

说明

Test-ModuleManifest cmdlet 验证在模块清单 (.psd1) 文件中列出的文件在指定路径下是否实际存在。

此 cmdlet 旨在帮助模块作者测试其清单文件。模块用户也可以在脚本和命令中使用此 cmdlet，在运行依赖于该模块的脚本之前检测错误。

Test-ModuleManifest cmdlet 返回一个表示模块的对象（该对象与 Get-Module 返回的对象属于同种类型）。如果有任何文件在清单中指定的位置不存在，则该 cmdlet 还会针对每个缺少的文件生成一个错误。

参数

-Path <string>

指定模块清单文件的路径。输入具有 .psd1 文件扩展名的模块清单文件的路径（可选）和名称。默认位置为当前目录。此参数是必需的。参数名（“Path”）为可选项。还可以将路径通过管道传递给 Test-ModuleManifest。

是否为必需？ | true
位置？ | 1
默认值 | 无
是否接受管道输入？ | true (ByValue, ByPropertyName)
是否接受通配符？ | false

<CommonParameters>

此 cmdlet 支持通用参数：-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。有关详细信息，请参阅 about_Commonparameters.

输入和输出

输入类型是指可通过管道传递给 cmdlet 的对象的类型。返回类型是指 Cmdlet 所返回对象的类型。

输入 | System.String 可以将模块清单的路径通过管道传送到 Test-ModuleManifest。
输出 | System.Management.Automation.PSModuleInfo Test-ModuleManifest 返回表示模块的 PSModuleInfo 对象。即使清单存在错误，它也会返回此对象。

示例 1

C:\PS>test-ModuleManifest -path $pshome\Modules\TestModule.psd1

说明
-----------
此命令测试 TestModule.psd1 模块清单。

示例 2

C:\PS>"$pshome\Modules\TestModule.psd1" | test-modulemanifest

Test-ModuleManifest : The specified type data file 'C:\Windows\System32\Wi
ndowsPowerShell\v1.0\Modules\TestModule\TestTypes.ps1xml' could not be pro
cessed because the file was not found. Please correct the path and try aga
in.
At line:1 char:34
+ "$pshome\Modules\TestModule.psd1" | test-modulemanifest <<<<
    + CategoryInfo          : ResourceUnavailable: (C:\Windows\System32\Win
dowsPowerShell\v1.0\Modules\TestModule\TestTypes.ps1xml:String) [Test-Modul
eManifest], FileNotFoundException
    + FullyQualifiedErrorId : Modules_TypeDataFileNotFound,Microsoft.
PowerShell.Commands.TestModuleManifestCommandName

Name              : TestModule
Path              : C:\Windows\system32\WindowsPowerShell\v1.0\Modules\Test
Module\TestModule.psd1
Description       :
Guid              : 6f0f1387-cd25-4902-b7b4-22cff6aefa7b
Version           : 1.0
ModuleBase        : C:\Windows\system32\WindowsPowerShell\v1.0\Modules\Test
Module
ModuleType        : Manifest
PrivateData       :
AccessMode        : ReadWrite
ExportedAliases   : {}
ExportedCmdlets   : {}
ExportedFunctions : {}
ExportedVariables : {}
NestedModules     : {}

说明
-----------
此命令使用管道运算符 (|) 将路径字符串发送到 Test-ModuleManifest。

命令输出显示出测试失败，原因是没有找到在清单中列出的 TestTypes.ps1xml 文件。

示例 3

C:\PS>function Bool-ModuleManifest ($path)
    {$a = dir $path | test-modulemanifest -erroraction SilentlyContinue; $?}

说明
-----------
此函数类似于 Test-ModuleManifest，但它返回一个布尔值；如果清单通过测试，则返回“True”，否则返回“False”。

该函数使用 Get-ChildItem cmdlet（别名为 dir）获取由 $path 变量指定的模块清单。它使用管道运算符 (|) 将文件对象传递到 Test-ModuleManifest cmdlet。

Test-ModuleManifest 命令使用值为 SilentlyContinue 的 ErrorAction 通用参数来禁止显示命令生成的任何错误。该命令还将 Test-ModuleManifest 返回的 PSModuleInfo 对象保存在 $a 变量中，使得该对象不会显示。

然后，该命令在单独的命令中（分号 [;] 是命令分隔符）显示 $? 自动变量的值。如果前一个命令没有生成错误，则该自动变量返回“True”，否则返回“False”。

可以在条件语句中使用此函数，例如在 Import-Module 命令或使用模块的命令前面的语句。

另请参阅

  • Import-Module
  • Get-Module
  • New-Module
  • Remove-Module
  • Export-ModuleMember
  • New-ModuleManifest
  • about_Modules


Test-Path

确定路径的所有元素是否存在。

语法

Test-Path [-LiteralPath] <string[]> [-Credential <PSCredential>] [-Exclude <string[]>] [-Filter <string>] [-Include <string[]>] [-IsValid] [-PathType {<Any> | <Container> | <Leaf>}] [-UseTransaction] [<CommonParameters>]

Test-Path [-Path] <string[]> [-Credential <PSCredential>] [-Exclude <string[]>] [-Filter <string>] [-Include <string[]>] [-IsValid] [-PathType {<Any> | <Container> | <Leaf>}] [-UseTransaction] [<CommonParameters>]

说明

Test-Path cmdlet 确定路径的所有元素是否存在。如果所有元素都存在，它将返回 True ($true)；如果缺少任一元素，则返回 False ($false)。它还指示路径语法是否有效，以及路径是指向容器还是终端（叶）元素。

参数

-Credential <PSCredential>

指定有权执行此操作的用户帐户。默认值为当前用户。

键入用户名，例如“User01”或“Domain01\User01”。或者，输入 PSCredential 对象，例如由 Get-Credential cmdlet 生成的对象。如果键入用户名，则将提示您输入密码。

随同 Windows PowerShell 一起安装的任何提供程序都不支持此参数。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | true (ByPropertyName)
是否接受通配符？ | false

-Exclude <string[]>

忽略指定项。此参数的值对 Path 参数进行限定。请输入路径元素或模式，例如“*.txt”。允许使用通配符。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Filter <string>

以提供程序的格式或语言指定筛选器。此参数的值对 Path 参数进行限定。筛选器的语法（包括通配符的使用）取决于提供程序。筛选器比其他参数更有效，因为提供程序是在检索对象时应用筛选器，而不是在检索对象后再由 Windows PowerShell 筛选对象。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Include <string[]>

只测试指定的路径。此参数的值对 Path 参数进行限定。请输入路径元素或模式，例如“*.txt”。允许使用通配符。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-IsValid

确定路径的语法是否正确（不管路径的元素是否存在）。如果路径语法有效，则此参数返回 TRUE，否则返回 FALSE。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-LiteralPath <string[]>

指定要测试的路径。与 Path 不同，LiteralPath 参数的值严格按照所键入的形式使用。不会将任何字符解释为通配符。如果路径包括转义符，请将其括在单引号中。单引号会告知 Windows PowerShell 不要将所有字符都解释为转义序列。

是否为必需？ | true
位置？ | 1
默认值 |
是否接受管道输入？ | true (ByPropertyName)
是否接受通配符？ | false

-Path <string[]>

指定要测试的路径。允许使用通配符。如果路径包括空格，请将其括在引号中。参数名（“Path”）为可选项。

是否为必需？ | true
位置？ | 1
默认值 |
是否接受管道输入？ | true (ByValue, ByPropertyName)
是否接受通配符？ | false

-PathType <TestPathType>

指示路径中的最后一个元素是否为特定类型。如果元素为指定的类型，则此参数返回 TRUE，如果不是，则返回 FALSE。

有效值包括：

-- Container：包含其他元素的元素，例如目录或注册表项。

-- Leaf：不包含其他元素的元素，例如文件。

-- Any：Container 或 Leaf。指示路径中的最后一个元素是否为特定类型。如果元素为指定的类型，则返回 True；如果不是，则返回 False。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-UseTransaction

将命令包含在活动事务中。仅当正在执行事务时，此参数才有效。有关详细信息，请参阅 about_Transactions。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

<CommonParameters>

此 cmdlet 支持通用参数：-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。有关详细信息，请参阅 about_Commonparameters.

输入和输出

输入类型是指可通过管道传递给 cmdlet 的对象的类型。返回类型是指 Cmdlet 所返回对象的类型。

输入 | System.String 可以通过管道将包含路径（但不是文本路径）的字符串传递给 Test-Path。
输出 | System.Boolean 如果连接正常工作，则该 cmdlet 将返回“True”；否则，返回“False”。

说明

包含 Path 名词的 cmdlet (Path cmdlet) 采用路径名称作为参数，以所有 Windows PowerShell 提供程序都能够解释的简明格式返回名称。这些 cmdlet 用于需要在其中以特定格式显示全部或部分路径名称的程序或脚本中。您可以像使用 Dirname、Normpath、Realpath、Join 或其他路径操作程序那样使用这些 cmdlet。

可以将路径 cmdlet 与某些提供程序一起使用，包括 FileSystem、Registry 和 Certificate 提供程序。

Test-Path cmdlet 可使用由任何提供程序公开的数据。要列出会话中可用的提供程序，请键入“Get-PSProvider”。有关详细信息，请参阅 about_Providers。

示例 1

C:\PS>test-path -path "C:\Documents and Settings\NicoleH"

说明
-----------
此命令指示路径中的所有元素（即 C: 目录、Documents and Settings 目录和 NicoleH 目录）是否存在。如果缺少任一元素，则该 cmdlet 将返回 FALSE。否则，返回 TRUE。

示例 2

C:\PS>test-path -path $profile

C:\PS>test-path -path $profile -IsValid

说明
-----------
这些命令测试指向 Windows PowerShell 配置文件的路径。

第一条命令确定路径中的所有元素是否都存在。第二条命令确定路径的语法是否正确。在此示例中，路径为 False，但语法是正确的 (True)。这些命令使用自动变量 $profile 指向配置文件所在位置，即使配置文件不存在也是如此。

有关自动变量的详细信息，请参阅 about_Automatic_Variables。

示例 3

C:\PS>test-path -path "C:\CAD\Commercial Buildings\*" -exclude *.dwg

说明
-----------
此命令指示 Commercial Buildings 目录中是否存在除 .dwg 文件以外的任何文件。

此命令使用 Path 参数来指定路径。因为该路径包含空格，所以用引号引起来。该路径末尾的星号指示 Commercial Building 目录的内容。（使用类似此路径的长路径时，应键入路径的前几个字母，然后使用 Tab 键完成路径。）

此命令使用 Exclude 参数指定计算过程中将省略的文件。

在本例中，因为该目录仅包含 .dwg 文件，所以结果为 FALSE。

示例 4

C:\PS>test-path -path $profile -pathtype leaf

说明
-----------
此命令指示 $profile 变量中所存储的路径是否指向文件。在本例中，因为 Windows PowerShell 配置文件是一个 .ps1 文件，所以该 cmdlet 返回 TRUE。

示例 5

C:\PS>test-path -path HKLM:\Software\Microsoft\PowerShell\1\ShellIds\Microsoft.PowerShell

TRUE

C:\PS> test-path -path HKLM:\Software\Microsoft\PowerShell\1\ShellIds\Microsoft.PowerShell\ExecutionPolicy
FALSE

说明
-----------
这些命令对 Windows PowerShell 注册表提供程序使用 Test-Path cmdlet。

第一条命令测试系统上 Microsoft.PowerShell 注册表项的注册表路径是否正确。如果 Windows PowerShell 安装正确，则该 cmdlet 将返回 TRUE。

Test-Path 并不适用于所有 Windows PowerShell 提供程序。例如，您可以使用 Test-Path 测试注册表项的路径，但如果使用该命令来测试注册表条目的路径，则该命令始终返回 FALSE，即使该注册表条目存在也是如此。

另请参阅

  • about_Providers
  • Convert-Path
  • Split-Path
  • Resolve-Path
  • Join-Path


Test-WSMan

测试 WinRM 服务是否正在本地或远程计算机上运行。

语法

Test-WSMan [[-ComputerName] <string>] [-Authentication <Authentication>] [-Credential <PSCredential>] [<CommonParameters>]

说明

Test-WSMan cmdlet 提交一个识别请求以确定 WinRM 服务是在本地计算机还是远程计算机上运行。如果接受测试的计算机正在运行该服务，则该 cmdlet 将显示被测服务的 WS-Management 标识方案、协议版本、产品供应商及产品版本。

参数

-Authentication <Authentication>

指定服务器上要使用的身份验证机制。可能值为：

- Basic：Basic 是一种方案，在该方案中，用户名和密码以明文形式发送到服务器或代理。

- Default：使用 WS-Management 协议实现的身份验证方法。

- Digest：Digest 是一种质询响应方案，该方案将服务器指定的数据字符串用于质询。

- Kerberos：客户端计算机和服务器使用 Kerberos 证书相互进行身份验证。

- Negotiate：Negotiate 是一种质询响应方案，该方案与服务器或代理协商以确定要使用的身份验证方案。例如，此参数值允许进行协商以确定是使用 Kerberos 协议还是 NTLM。

- CredSSP：使用凭据安全服务提供程序 (CredSSP) 身份验证，这种方法允许用户委派凭据。此选项用于这样的命令：在一台远程计算机上运行，但从其他远程计算机上收集数据或者在其他远程计算机上运行其他命令。

注意：CredSSP 将本地计算机中的用户凭据委派给远程计算机。此操作增加了远程操作的安全风险。如果远程计算机的安全受到威胁，则在向该计算机传递凭据时，可使用这些凭据来控制网络会话。

重要说明：如果不指定 authentication 参数，则以匿名方式（不使用身份验证）将 Test-WSMan 请求发送到远程计算机。如果 Test-WSMan 请求是以匿名方式发出的，则不会返回任何针对操作系统版本的信息。实际上，Test-WSMan 将操作系统版本和 Service Pack 级别显示为空值 (OS: 0.0.0 SP: 0.0)。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-ComputerName <string>

指定要对其运行管理操作的计算机。值可以是完全限定的域名、NetBIOS 名称或 IP 地址。使用本地计算机名称、localhost 或点 (.)指定本地计算机。默认值为本地计算机。当远程计算机与用户位于不同的域时，必须使用完全限定的域名。

是否为必需？ | false
位置？ | 1
默认值 | localhost
是否接受管道输入？ | false
是否接受通配符？ | false

-Credential <PSCredential>

指定有权执行此操作的用户帐户。默认值为当前用户。键入用户名，例如“User01”、“Domain01\User01”或 User@Domain.com。或者，输入 PSCredential 对象，例如由 Get-Credential cmdlet 返回的对象。键入用户名时，将会提示您键入密码。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

<CommonParameters>

此 cmdlet 支持通用参数：-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。有关详细信息，请参阅 about_Commonparameters.

输入和输出

输入类型是指可通过管道传递给 cmdlet 的对象的类型。返回类型是指 Cmdlet 所返回对象的类型。

输入 | None 此 cmdlet 不接受任何输入。
输出 | None 此 cmdlet 将不产生任何输出对象。

说明

默认情况下，Test-WSMan cmdlet 在查询 WinRM 服务时不使用身份验证，并且不返回针对操作系统版本的任何信息。而是将操作系统版本和 Service Pack 级别显示为空值 (OS: 0.0.0 SP: 0.0)。

示例 1

C:\PS>test-wsman

wsmid           : http://schemas.dmtf.org/wbem/wsman/identity/1/wsmanidentity.xsd
ProtocolVersion : http://schemas.dmtf.org/wbem/wsman/1/wsman.xsd
ProductVendor   : Microsoft Corporation
ProductVersion  : OS: 0.0.0 SP: 0.0 Stack: 2.0

说明
-----------
此命令确定 WinRM 服务正在本地计算机还是远程计算机上运行。

示例 2

C:\PS>test-wsman -computername server01

wsmid           : http://schemas.dmtf.org/wbem/wsman/identity/1/wsmanidentity.xsd
ProtocolVersion : http://schemas.dmtf.org/wbem/wsman/1/wsman.xsd
ProductVendor   : Microsoft Corporation
ProductVersion  : OS: 0.0.0 SP: 0.0 Stack: 2.0

说明
-----------
此命令确定 WinRM 服务是否正在名为 server01 的计算机上运行。

示例 3

C:\PS>test-wsman -authentication default

wsmid           : http://schemas.dmtf.org/wbem/wsman/identity/1/wsmanidentity.xsd
ProtocolVersion : http://schemas.dmtf.org/wbem/wsman/1/wsman.xsd
ProductVendor   : Microsoft Corporation
ProductVersion  : OS: 6.0.6001 SP: 1.0 Stack: 2.0

说明
-----------
此命令将使用 authentication 参数进行测试以了解 WS-Management (WinRM) 服务是否正在本地计算机上运行。

使用 authentication 参数可允许 Test-WSMan cmdlet 返回操作系统的版本。

示例 4

C:\PS>test-wsman -computername server01 -authentication default

wsmid           : http://schemas.dmtf.org/wbem/wsman/identity/1/wsmanidentity.xsd
ProtocolVersion : http://schemas.dmtf.org/wbem/wsman/1/wsman.xsd
ProductVendor   : Microsoft Corporation
ProductVersion  : OS: 6.1.7021 SP: 0.0 Stack: 2.0

说明
-----------
此命令将使用 authentication 参数进行测试以了解 WS-Management (WinRM) 服务是否正在名为 server01 的计算机上运行。

使用 authentication 参数可允许 Test-WSMan cmdlet 返回操作系统的版本。

另请参阅

  • Connect-WSMan
  • Disable-WSManCredSSP
  • Disconnect-WSMan
  • Enable-WSManCredSSP
  • Get-WSManCredSSP
  • Get-WSManInstance
  • Invoke-WSManAction
  • New-WSManInstance
  • New-WSManSessionOption
  • Remove-WSManInstance
  • Set-WSManInstance
  • Set-WSManQuickConfig


Trace-Command

配置并启动对指定表达式或命令的跟踪。

语法

Trace-Command [-Command] <string> [-ArgumentList <Object[]>] [-Name] <string[]> [[-Option] {<None> | <Constructor> | <Dispose> | <Finalizer> | <Method> | <Property> | <Delegates> | <Events> | <Exception> | <Lock> | <Error> | <Errors> | <Warning> | <Verbose> | <WriteLine> | <Data> | <Scope> | <ExecutionFlow> | <Assert> | <All>}] [-Debugger] [-FilePath <string>] [-Force] [-InputObject <psobject>] [-ListenerOption {<None> | <LogicalOperationStack> | <DateTime> | <Timestamp> | <ProcessId> | <ThreadId> | <Callstack>}] [-PSHost] [<CommonParameters>]

Trace-Command [-表达式] <scriptblock> [-Name] <string[]> [[-Option] {<None> | <Constructor> | <Dispose> | <Finalizer> | <Method> | <Property> | <Delegates> | <Events> | <Exception> | <Lock> | <Error> | <Errors> | <Warning> | <Verbose> | <WriteLine> | <Data> | <Scope> | <ExecutionFlow> | <Assert> | <All>}] [-Debugger] [-FilePath <string>] [-Force] [-InputObject <psobject>] [-ListenerOption {<None> | <LogicalOperationStack> | <DateTime> | <Timestamp> | <ProcessId> | <ThreadId> | <Callstack>}] [-PSHost] [<CommonParameters>]

说明

Trace-Command cmdlet 配置并启动对指定表达式或命令的跟踪。其工作方式与 Set-TraceSource 相似，但仅适用于指定的命令。

参数

-ArgumentList <Object[]>

为要跟踪的命令指定参数和参数值。ArgumentList 的别名为 Args。对于调试动态参数，此功能尤其有用。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Command <string>

指定要在跟踪期间处理的命令。

是否为必需？ | true
位置？ | 2
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Debugger

将跟踪输出发送到调试程序。可以在任何用户模式或内核模式的调试程序或者 Visual Studio 中查看输出。此参数还将选择默认的跟踪侦听程序。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-表达式 <scriptblock>

指定要在跟踪期间处理的表达式。将表达式放在大括号 ({}) 中。

是否为必需？ | true
位置？ | 2
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-FilePath <string>

将跟踪输出发送到指定文件。此参数还将选择文件跟踪侦听程序。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Force

允许该 cmdlet 将跟踪信息追加到只读文件。与 FilePath 参数一起使用。即使使用 Force 参数，该 cmdlet 也无法覆盖安全限制。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-InputObject <psobject>

为要在跟踪期间处理的表达式提供输入。

可以输入表示表达式接受的输入的变量，或通过管道传递对象。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | true (ByValue)
是否接受通配符？ | false

-ListenerOption <TraceOptions>

向输出中的每条跟踪消息的前缀添加可选数据。有效值包括 None、LogicalOperationStack、DateTime、Timestamp、ProcessId、ThreadId 和 Callstack。“None”为默认值。

若要指定多个选项，请使用逗号分隔这些选项，但不要带有空格，并将这些选项括在引号中，例如 "ProcessID,ThreadID"。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Name <string[]>

确定要跟踪的 Windows PowerShell 组件。请输入各个组件的跟踪源的名称。允许使用通配符。若要在计算机上查找跟踪源，请键入“Get-TraceSource”。

是否为必需？ | true
位置？ | 1
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Option <PSTraceSourceOptions>

确定要跟踪的事件的类型。

有效值包括 None、Constructor、Dispose、Finalizer、Method、Property、Delegates、Events、Exception、Lock、Error、Errors、Warning、Verbose、WriteLine、Data、Scope、ExecutionFlow、Assert 和 All。默认值为“All”。

以下值是其它值的组合：

-- ExecutionFlow：（Constructor、Dispose、Finalizer、Method、Delegates、Events 和 Scope）

-- Data：（Constructor、Dispose、Finalizer、Property、Verbose 和 WriteLine）

-- Errors：（Error 和 Exception）。

若要指定多个选项，请使用逗号分隔这些选项，但不要带有空格，并将这些选项括在引号中，例如 "Constructor,Dispose"。

是否为必需？ | false
位置？ | 3
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-PSHost

将跟踪输出发送到 Windows PowerShell 主机。此参数还将选择 PSHost 跟踪侦听程序。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

<CommonParameters>

此 cmdlet 支持通用参数：-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。有关详细信息，请参阅 about_Commonparameters.

输入和输出

输入类型是指可通过管道传递给 cmdlet 的对象的类型。返回类型是指 Cmdlet 所返回对象的类型。

输入 | System.Management.Automation.PSObject 可以通过管道将表示表达式输入的对象传递给 Trace-Command。
输出 | System.Management.Automation.PSObject 在调试流中返回命令跟踪。

说明

跟踪是开发人员用于调试和优化程序的一种方法。在跟踪过程中，程序将生成有关其内部处理过程中每个步骤的详细消息。

Windows PowerShell 跟踪 cmdlet 专为帮助 Windows PowerShell 开发人员而设计，但其可供所有用户使用。使用这些 cmdlet，您可以监控外壳程序功能的几乎每个方面。

若要查找已为跟踪启用的 Windows PowerShell 组件，请键入“Get-Help Get-TraceSource”。

“跟踪源”是每个 Windows PowerShell 组件的一部分，用于管理跟踪和生成该组件的跟踪消息。若要跟踪某个组件，您应标识其跟踪源。

“跟踪侦听程序”接收跟踪的输出并将其显示给用户。您可以选择将跟踪数据发送给用户模式或内核模式的调试程序、主机或控制台、文件，或将其发送给从 System.Diagnostics.TraceListener 类中派生的自定义侦听程序。

使用 Command 参数集时，Windows PowerShell 将采用与在管道中处理命令相似的方式来处理该命令。例如，不对每个传入对象重复执行命令发现。

Name、Expression、Option 和 Command 参数的名称为可选项。如果省略参数名称，则未命名参数的值必须按以下顺序出现：Name、Expression、Option 或 Name、Command、-Option。如果包括参数名称，则参数能够以任何顺序出现。

示例 1

C:\PS>trace-command -name metadata,parameterbinding,cmdlet -expression {get-process notepad} -pshost

说明
-----------
此命令启动对“get-process notepad”表达式的元数据处理、参数绑定以及 cmdlet 创建和破坏的跟踪。它使用 Name 参数来指定跟踪源、使用 Expression 参数来指定命令，并使用 PSHost 参数来将输出发送到控制台。由于该命令未指定任何跟踪选项或侦听程序选项，因此它会将默认值“All”用作跟踪选项，并将“None”用作侦听程序选项。

示例 2

C:\PS>trace-command -name commandprocessor,pipelineprocessor -command get-alias -argumentlist "ghy" -option executionflow -listenerOption "timestamp,callstack" -filepath c:\test\debug.txt

说明
-----------
此命令启动对处理“get-alias cd”命令过程中命令处理程序和管道处理程序的跟踪。

它使用 Name 参数来指定跟踪源、使用 Command 参数来指定命令、使用 ArgumentList 参数来指定 Get-Alias 命令的参数、使用 Option 参数来指定跟踪选项，并使用 ListenerOption 参数来指定跟踪消息前缀中的字段。FilePath 参数将输出发送到 C:\Test\Debug.txt 文件。

示例 3

C:\PS>$a = "i*"

C:\PS> trace-command parameterbinding {get-alias $input} -pshost -inputobject $a

说明
-----------
这些命令跟踪在 Windows PowerShell 处理从管道中获取输入的 Get-Alias 表达式时其 ParameterBinding 操作的过程。

在 Trace-Command 中，InputObject 参数将对象传递给要在跟踪期间处理的表达式。

第一条命令将字符串“i*”存储在 $a 变量中。第二条命令对 ParameterBinding 跟踪源使用 Trace-Command cmdlet。PSHost 参数将输出发送到控制台。

要处理的表达式为“get-alias $input”，其中 $input 变量与 InputObject 参数相关联。InputObject 参数将变量 $a 传递给该表达式。实际上，在跟踪期间要处理的命令是“get-alias -inputobject $a" or "$a | get-alias”。

另请参阅

  • Get-TraceSource
  • Set-TraceSource


Undo-Transaction

回滚活动事务。

语法

Undo-Transaction [-Confirm] [-WhatIf] [<CommonParameters>]

说明

Undo-Transaction cmdlet 回滚活动事务。回滚事务时，由事务中的命令所做的更改将被丢弃，数据将还原到其原始形式。

如果事务包含多个订阅者，则 Undo-Transaction 命令将为所有订阅者回滚整个事务。

默认情况下，如果事务中的任何命令发生错误，事务都会自动回滚。但是，可以使用不同的回滚首选项启动事务，并且您可以使用此 cmdlet 随时回滚活动事务。

Undo-Transaction cmdlet 是 Windows PowerShell 中支持事务功能的一组 cmdlet 之一。有关详细信息，请参阅 about_Transactions。

参数

-Confirm

在执行命令之前提示您进行确认。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-WhatIf

描述如果执行该命令会发生什么情况（无需实际执行该命令）。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

<CommonParameters>

此 cmdlet 支持通用参数：-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。有关详细信息，请参阅 about_Commonparameters.

输入和输出

输入类型是指可通过管道传递给 cmdlet 的对象的类型。返回类型是指 Cmdlet 所返回对象的类型。

输入 | None 不能通过管道将输入传递给此 cmdlet。
输出 | None 此 cmdlet 不返回任何输出。

说明

不能回滚已提交的事务。

不能回滚活动事务之外的任何事务。要回滚其他独立事务，必须先提交或回滚活动事务。

回滚事务将会终止该事务。要再次使用事务，必须启动新事务。

示例 1

C:\PS>undo-transaction

说明
-----------
此命令回滚当前（活动）事务。

示例 2

C:\PS>cd hkcu:\software

PS HKCU:\Software> start-transaction
PS HKCU:\Software> new-item MyCompany -usetransaction
PS HKCU:\Software> undo-transaction

说明
-----------
此命令先启动一项事务，然后回滚它。因此未对注册表进行更改。

示例 3

C:\PS>cd hkcu:\software

PS HKCU:\Software> start-transaction
PS HKCU:\Software> new-item MyCompany -usetransaction
PS HKCU:\Software> get-transaction

RollbackPreference   SubscriberCount   Status
------------------   ---------------   -----
Error                1                 Active

PS HKCU:\Software> start-transaction
PS HKCU:\Software> get-transaction

RollbackPreference   SubscriberCount   Status
------------------   ---------------   -----
Error                2                 Active

PS HKCU:\Software> undo-transaction
PS HKCU:\Software> get-transaction

RollbackPreference   SubscriberCount   Status
------------------   ---------------   -----
Error                0                 RolledBack

说明
-----------
此示例演示了当任何订阅者回滚事务时，将为所有订阅者回滚整个事务。

第一条命令将位置更改为 HKCU:\Software 注册表项。

第二条命令启动事务。

第三条命令使用 New-Item cmdlet 创建新的注册表项。该命令使用 UseTransaction 参数包含在该事务中所做的更改。

第四条命令使用 Get-Transaction cmdlet 获取活动事务您会看到状态为 Active，订阅者计数为 1。

第五条命令同样使用 Start-Transaction 命令。通常，
如果主事务使用的脚本包含其自己的完整事务，则会在某一事务正在执行期间启动另一个事务。（此示例以交互方式执行，以便您可以分阶段检查。）

如果在另一个事务正在执行时输入 Start-Transaction 命令，该命令将作为新的“订阅者”加入现有事务，并且订阅者计数将会递增。

第六条命令使用 Get-Transaction cmdlet 获取活动事务。您会看到此时订阅者计数为 2。

第七条命令使用 Undo-Transaction cmdlet 回滚事务。此命令不返回任何对象。

最后一条命令是获取活动事务（在本例中为最近活动的事务）的 Get-Transaction 命令。结果显示事务已回滚并且订阅者计数为 0，这表明已为所有订阅者回滚事务。

另请参阅

  • about_Transactions
  • about_Providers
  • Start-Transaction
  • Get-Transaction
  • Complete-Transaction
  • Use-Transaction


Unregister-Event

取消事件订阅。

语法

Unregister-Event [-SubscriptionId] <int> [-Force] [-Confirm] [-WhatIf] [<CommonParameters>]

Unregister-Event [-SourceIdentifier] <string> [-Force] [-Confirm] [-WhatIf] [<CommonParameters>]

说明

Unregister-Event cmdlet 取消使用 Register-EngineEvent、Register-ObjectEvent 或 Register-WmiEvent cmdlet 创建的事件订阅。

在取消事件订阅后，系统会将事件订阅者从会话中删除，订阅的事件不再被添加到事件队列。当您取消使用 New-Event cmdlet 创建的事件订阅时，还会将新事件从会话中删除。

Unregister-Event 不会删除事件队列中的事件。若要删除事件，请使用 Remove-Event cmdlet。

参数

-Force

取消所有事件订阅，包括使用 Register-ObjectEvent、Register-WmiEvent 和 Register-EngineEvent 的 SupportEvent 参数隐藏的订阅。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-SourceIdentifier <string>

取消具有指定的源标识符的事件订阅。

每个命令中都必须包含 SourceIdentifier 或 SubscriptionId 参数。

是否为必需？ | true
位置？ | 1
默认值 |
是否接受管道输入？ | true (ByPropertyName)
是否接受通配符？ | false

-SubscriptionId <int>

取消具有指定的订阅标识符的事件订阅。

每个命令中都必须包含 SourceIdentifier 或 SubscriptionId 参数。

是否为必需？ | true
位置？ | 1
默认值 |
是否接受管道输入？ | true (ByPropertyName)
是否接受通配符？ | false

-Confirm

在执行命令之前提示您进行确认。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-WhatIf

描述如果执行该命令会发生什么情况（无需实际执行该命令）。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

<CommonParameters>

此 cmdlet 支持通用参数：-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。有关详细信息，请参阅 about_Commonparameters.

输入和输出

输入类型是指可通过管道传递给 cmdlet 的对象的类型。返回类型是指 Cmdlet 所返回对象的类型。

输入 | System.Management.Automation.PSEventSubscriber 您可以通过管道将 Get-EventSubscriber 的输出传递给 Unregister-Event。
输出 | None 此 cmdlet 不返回任何输出。

说明

事件、事件订阅和事件队列仅存在于当前会话中。如果关闭当前会话，将丢弃事件队列并取消事件订阅。

Unregister-Event 无法删除使用 New-Event cmdlet 创建的事件，除非您已经使用 Register-EngineEvent cmdlet 订阅了该事件。若要从会话中删除自定义事件，您必须以编程方式删除事件或关闭会话。

示例 1

C:\PS>unregister-event -sourceIdentifier ProcessStarted

说明
-----------
此命令取消源标识符为“ProcessStarted”的事件订阅。

若要查找事件的源标识符，请使用 Get-Event cmdlet。若要查找事件订阅的源标识符，请使用 Get-EventSubscriber cmdlet。

示例 2

C:\PS>unregister-event -subscriptionId 2

说明
-----------
此命令取消订阅标识符为 2 的事件订阅。

若要查找事件订阅的订阅标识符，请使用 Get-EventSubscriber cmdlet。

示例 3

C:\PS>get-eventsubscriber -force | unregister-event -force

说明
-----------
此命令取消会话中的所有事件订阅。

此命令使用 Get-EventSubscriber cmdlet 获取会话中的所有事件订阅者对象，包括使用事件注册 cmdlet 的 SupportEvent 参数隐藏的订阅者。

它使用管道运算符 (|) 将事件订阅者对象发送到 Unregister-Event，后者将它们从会话中删除。若要完成该任务，还需要在 Unregister-Event 上使用Force 参数。

另请参阅

  • Register-ObjectEvent
  • Register-EngineEvent
  • Register-WmiEvent
  • Unregister-Event
  • Get-Event
  • New-Event
  • Remove-Event
  • Wait-Event
  • Get-EventSubscriber


Unregister-PSSessionConfiguration

从计算机上删除已注册的会话配置。

语法

Unregister-PSSessionConfiguration [-Name] <string> [-Force] [-NoServiceRestart] [-Confirm] [-WhatIf] [<CommonParameters>]

说明

Unregister-PSSessionConfiguration cmdlet 从计算机上删除已注册的会话配置。这是一个高级 cmdlet，供系统管理员为其用户管理自定义会话配置时使用。

如果意外删除了默认的 Microsoft.PowerShell 或 Microsoft.PowerShell32 会话配置，可使用 Enable-PSRemoting cmdlet 还原它们。

参数

-Force

禁止显示所有用户提示，并重新启动 WinRM 服务而不显示提示。重新启动服务将使配置更改生效。

若要阻止重新启动并禁止显示重新启动提示，请使用 NoServiceRestart 参数。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Name <string>

指定要删除的会话配置的名称。输入一个或多个配置名称。允许使用通配符。此参数是必需的。

也可以通过管道将会话配置对象传递给 Unregister-PSSessionConfiguration。

是否为必需？ | true
位置？ | 1
默认值 |
是否接受管道输入？ | true (ByPropertyName)
是否接受通配符？ | false

-NoServiceRestart

不重新启动 WinRM 服务，并且禁止提示重新启动该服务。

默认情况下，当您输入 Unregister-PSSessionConfiguration 命令时，系统会提示您重新启动 WinRM 服务以使更改生效。在重新启动 WinRM 服务之前，用户仍然可以使用未注册的会话配置，即使 Get-PSSessionConfiguration 找不到该会话配置也如此。

若要重新启动 WinRM 服务并且不显示提示，请使用 Force 参数。若要手动重新启动 WinRM 服务，请使用 Restart-Service cmdlet。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Confirm

在执行命令之前提示您进行确认。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-WhatIf

描述如果执行该命令会发生什么情况（无需实际执行该命令）。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

<CommonParameters>

此 cmdlet 支持通用参数：-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。有关详细信息，请参阅 about_Commonparameters.

输入和输出

输入类型是指可通过管道传递给 cmdlet 的对象的类型。返回类型是指 Cmdlet 所返回对象的类型。

输入 | Microsoft.PowerShell.Commands.PSSessionConfigurationCommands#PSSessionConfiguration 可以通过管道将会话配置对象从 Get-PSSessionConfiguration 传递给 Unregister-PSSessionConfiguration。
输出 | None 此 cmdlet 不返回任何对象。

说明

若要在 Windows Vista、Windows Server 2008 以及更高版本的 Windows 上运行此 cmdlet，您必须使用“以管理员身份运行”选项启动 Windows PowerShell。

示例 1

C:\PS>unregister-pssessionconfiguration -name MaintenanceShell

说明
-----------
此命令将 MaintenanceShell 会话配置从计算机中删除。

示例 2

C:\PS>unregister-pssessionconfiguration -maintenanceShell -force

说明
-----------
此命令将 MaintenanceShell 会话配置从计算机中删除。该命令使用 Force 参数禁止显示所有用户消息，并重新启动 WinRM 服务而不显示提示。

示例 3

C:\PS>unregister-pssessionconfiguration -name *

C:\PS> get-pssessionconfiguration -name * | unregister-pssessionconfiguration

说明
-----------
此命令将删除计算机上的所有会话配置。这些命令的效果相同，因此可以互换。

示例 4

C:\PS>unregister-pssessionconfiguration -name maintenanceShell -noServiceRestart

C:\PS> get-pssessionconfiguration -name maintenanceShell

Get-PSSessionConfiguration -name maintenanceShell : No Session Configuration matches criteria "maintenanceShell".
    + CategoryInfo          : NotSpecified: (:) [Write-Error], WriteErrorException
    + FullyQualifiedErrorId : Microsoft.PowerShell.Commands.WriteErrorException

C:\PS> new-pssession -configurationName MaintenanceShell

 Id Name      ComputerName    State    Configuration         Availability
 -- ----      ------------    -----    -------------         ------------
  1 Session1  localhost       Opened   MaintenanceShell      Available

C:\PS> restart-service winrm

C:\PS> new-pssession -configurationName MaintenanceShell
[localhost] Connecting to remote server failed with the following error message : The WS-Management service cannot process the request. The resource
URI (http://schemas.microsoft.com/powershell/MaintenanceShell) was not found in the WS-Management catalog. The catalog contains the metadata that describes resour
ces, or logical endpoints. For more information, see the about_Remote_Troubleshooting Help topic.
    + CategoryInfo          : OpenError: (System.Manageme....RemoteRunspace:RemoteRunspace) [], PSRemotingTransportException
    + FullyQualifiedErrorId : PSSessionOpenFailed

说明
-----------
此示例说明使用 Unregister-PSSessionConfiguration 的 NoServiceRestart 参数的作用。此参数用于阻止服务重新启动，防止对计算机上的任何会话造成中断。

第一个命令使用 Unregister-PSSessionConfiguration cmdlet 删除 MaintenanceShell 会话配置。但是，由于该命令使用 NoServiceRestart 参数，因此 WinRM 服务不会重新启动，并且更改仍未完全生效。

第二个命令使用 Get-PSSessionConfiguration cmdlet 获取 MaintenanceShell 会话。因为该会话已经从 WS-Management 资源表中删除，所以 Get-PSSession 无法返回该会话。

第三个命令使用 New-PSSession cmdlet 在本地计算机上创建一个使用 MaintenanceShell 配置的会话。该命令成功运行。

第四个命令使用 Restart-Service cmdlet 重新启动 WinRM 服务。

第五个命令再次使用 New-PSSession cmdlet 创建使用 MaintenanceShell 配置的会话。此次因为 MaintenanceShell 配置已被删除，会话将失败。

另请参阅

  • about_Session_Configurations
  • Disable-PSSessionConfiguration
  • Enable-PSSessionConfiguration
  • Get-PSSessionConfiguration
  • Register-PSSessionConfiguration
  • Set-PSSessionConfiguration
  • WSMan Provider


Update-FormatData

更新当前会话中的格式数据。

语法

Update-FormatData [[-AppendPath] <string[]>] [-PrependPath <string[]>] [-Confirm] [-WhatIf] [<CommonParameters>]

说明

Update-FormatData cmdlet 将格式设置文件中的格式数据重新加载到当前会话。使用此 cmdlet，无需重新启动 Windows PowerShell 即可更新格式数据。

在不使用参数的情况下，Update-FormatData 将重新加载它以前加载的格式设置文件。可以使用 Update-FormatData 的参数将新的格式设置文件添加到会话中。

格式设置文件是 XML 格式的文本文件，其文件扩展名为 format.ps1xml。这些文件中的格式数据定义会话中的 Microsoft .NET Framework 对象的显示。

当 Windows PowerShell 启动时，它会将 Windows PowerShell 安装目录 ($pshome) 的格式设置文件中的格式数据加载到会话。您可以使用 Update-FormatData 将格式数据重新加载到当前会话，而无需重新启动 Windows PowerShell。当您已添加或更改了格式设置文件，但不希望中断会话时，这会十分有用。

有关 Windows PowerShell 中格式设置文件的详细信息，请参阅 about_Format.ps1xml。

参数

-AppendPath <string[]>

将指定的格式设置文件添加到会话中。这些文件在 Windows PowerShell 加载内置格式设置文件之后加载。

在对 .NET 对象进行格式设置时，Windows PowerShell 将为每个 .NET 类型使用它所找到的第一个格式设置定义。如果使用 AppendPath 参数，则 Windows PowerShell 将从内置文件搜索数据，直到遇到要添加的格式数据。

使用此参数可添加一个文件，以用于为内置格式设置文件中未引用的 .NET 对象设置格式。

是否为必需？ | false
位置？ | 1
默认值 |
是否接受管道输入？ | true (ByValue, ByPropertyName)
是否接受通配符？ | false

-PrependPath <string[]>

将指定的格式设置文件添加到会话中。这些文件在 Windows PowerShell 加载内置格式设置文件之前加载。

在对 .NET 对象进行格式设置时，Windows PowerShell 将为每个 .NET 类型使用它所找到的第一个格式设置定义。如果使用 PrependPath 参数，则 Windows PowerShell 将从要添加的文件中搜索数据，直到遇到内置文件中的格式数据。

使用此参数可添加一个文件，以用于为也在内置格式设置文件中引用的 .NET 对象设置格式。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Confirm

在执行命令之前提示您进行确认。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-WhatIf

描述如果执行该命令会发生什么情况（无需实际执行该命令）。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

<CommonParameters>

此 cmdlet 支持通用参数：-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。有关详细信息，请参阅 about_Commonparameters.

输入和输出

输入类型是指可通过管道传递给 cmdlet 的对象的类型。返回类型是指 Cmdlet 所返回对象的类型。

输入 | System.String 可以通过管道将包含追加路径的字符串传递给 Update-FormatData。
输出 | None 该 cmdlet 不返回任何输出。

说明

Update-FormatData 也会在从模块导入的会话中更新命令的格式数据。如果模块的格式设置文件发生更改，可以运行 Update-FormatData 命令以更新已导入命令的格式数据。无需重新导入模块。

示例 1

C:\PS>update-formatdata

说明
-----------
此命令重新加载它以前加载的格式设置文件。

示例 2

C:\PS>update-formatdata -appendpath trace.format.ps1xml, log.format.ps1xml

说明
-----------
此命令将格式设置文件重新加载到会话，其中包括两个新文件 Trace.format.ps1xml 和 Log.format.ps1xml。

由于该命令使用 AppendPath 参数，因此新文件中的格式数据将在内置文件中的格式数据之后加载。

之所以使用 AppendPath 参数，是因为新文件包含内置文件中未引用的对象的格式数据。

示例 3

C:\PS>update-formatdata -prependPath c:\test\NewFiles.format.ps1xml

# Edit the NewFiles.format.ps1 file.

C:\PS> update-formatdata

说明
-----------
此示例说明如何在编辑格式设置文件后重新加载该文件。

第一条命令将 NewFiles.format.ps1xml 文件添加到会话中。它之所以使用 PrependPath 参数，是因为该文件包含内置文件中引用的对象的格式数据。

在添加 NewFiles.format.ps1xml 文件并在这些会话中对其进行测试后，作者会编辑该文件。

第二条命令使用 Update-FormatData cmdlet 重新加载格式设置文件。由于 NewFiles.format.ps1xml 文件以前加载过，因此在不使用参数的情况下 Update-FormatData 会自动重新加载它。


Update-List

在包含对象集合的属性值中添加和删除项。

语法

Update-List [-Add <Object[]>] [-Remove <Object[]>] [[-Property] <string>] [-InputObject <psobject>] [<CommonParameters>]

Update-List -Replace <Object[]> [[-Property] <string>] [-InputObject <psobject>] [<CommonParameters>]

说明

Update-List cmdlet 在对象的属性值中添加和删除项，然后返回更新的对象。此 cmdlet 用于包含对象集合的属性。

Add 和 Remove 参数分别在集合中添加和删除各项。Replace 参数将替换整个集合。

如果不在命令中指定属性，Update-List 会返回描述更新的对象，而不是对该对象进行更新。您可以将更新对象提交给更改对象的 cmdlet，如 Set-* cmdlet。

仅当被更新的属性支持 Update-List 使用的 IList 接口时，此 cmdlet 才有效。此外，接受更新的任何 Set-* cmdlet 都必须支持 IList 接口。随 Windows PowerShell 一起安装的核心 cmdlet 不支持此接口。若要确定 cmdlet 是否支持 Update-List，请参阅该 cmdlet 的帮助主题。

参数

-Add <Object[]>

指定要添加到集合中的属性值。按照值应该在集合中出现的顺序输入值。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-InputObject <psobject>

指定要更新的对象。您也可以通过管道将要更新的对象传递给 Update-List。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | true (ByValue)
是否接受通配符？ | false

-Property <string>

标识包含要更新的集合的属性。如果省略此参数，Update-List 会返回一个表示更改的对象，而不是更改该对象。

是否为必需？ | false
位置？ | 1
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Remove <Object[]>

指定要从集合中删除的属性值。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Replace <Object[]>

指定新集合。此参数会将原始集合中的所有项目替换为此参数指定的项目。

是否为必需？ | true
位置？ | named
默认值 | 无
是否接受管道输入？ | false
是否接受通配符？ | false

<CommonParameters>

此 cmdlet 支持通用参数：-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。有关详细信息，请参阅 about_Commonparameters.

输入和输出

输入类型是指可通过管道传递给 cmdlet 的对象的类型。返回类型是指 Cmdlet 所返回对象的类型。

输入 | System.Management.Automation.PSObject 可以通过管道将要更新的对象传递给 Update-List。
输出 | Objects or System.Management.Automation.PSListModifier Update-List 返回更新的对象，或返回一个表示更新操作的对象。

示例 1

C:\PS>get-mailbox | update-list -Property aliases -Add "A","B" -Remove "X","Y" | set-mailbox

说明
-----------
此命令在邮箱的 Aliases 属性中添加 A 和 B，删除 X 和 Y。

该命令使用 Get-MailBox cmdlet 从 Microsoft Exchange Server 获取邮箱。管道运算符会将邮箱对象发送到 Update-List cmdlet。

Update-List 命令使用 Property 参数指明要更新邮箱的 Aliases 属性，使用 Add 和 Remove 参数指定要在集合中添加和删除的项。Aliases 属性满足 Update-List 的条件，因为它存储具有 Add 和 Remove 方法的 Microsoft .NET Framework 对象的集合。

Update-List cmdlet 返回更新的邮箱，然后通过管道将其传递给 Set-MailBox cmdlet，由该 cmdlet 来更改邮箱。

有关 Get-Mailbox 的详细信息，请参阅 http://go.microsoft.com/fwlink/?LinkId=111536。

示例 2

C:\PS>$m = get-mailbox

C:\PS> update-list -InputObject $m -Property aliases -Add "A","B" -Remove "X", "Y" | set-mailbox

说明
-----------
此命令在邮箱的 Aliases 属性中添加 A 和 B，删除 X 和 Y。此命令与上一个命令的效果相同，尽管其格式略有不同。

此命令使用 Get-MailBox cmdlet 获取邮箱，并将邮箱保存在 $m 变量中。它使用 Update-List 的 InputObject 参数指定邮箱。InputObject 的值为 $m 变量中的邮箱。它使用 Property 参数指定 Aliases 属性，使用 Add 和 Remove 参数指定要在 Aliases 的值中添加和删除的项目。

该命令使用管道运算符 (|) 将更新的邮箱对象发送给 Set-Mailbox cmdlet，由该 cmdlet 来更改邮箱。

示例 3

C:\PS>get-mailbox | set-mailbox -alias (update-list -Add "A", "B" -Remove "X","Y")

说明
-----------
此命令在邮箱的 Aliases 属性中添加 A 和 B，删除 X 和 Y。此命令与前两个命令的效果相同，但是它采用不同的过程来执行任务。

此命令不会在将邮箱发送到 Set-Mailbox 之前更新邮箱的 Aliases 属性，而是使用 Update-List 创建一个表示此项更改的对象。然后，它将更改提交给 Set-Mailbox 的 Alias 参数。

该命令使用 Get-MailBox cmdlet 来获取邮箱。管道运算符将邮箱对象发送给 Set-Mailbox cmdlet，由该 cmdlet 来更改邮箱。

该命令使用 Set-Mailbox 的 Alias 参数来更改邮箱对象的 Aliases 属性。Alias 参数的值是一个 Update-List 命令，该命令创建表示更新的对象。Update-List 命令括在圆括号内，以确保它在计算 Alias 参数的值之前运行。在 Set-Mailbox 命令完成后，邮箱即被更改。

示例 4

C:\PS>update-list -InputObject $a -Property aliases -replace "A", "B" | set-mailbox

说明
-----------
此命令使用 Update-List 的 Replace 运算符将 $a 中对象的 Aliases 属性中的集合替换为新集合。

此命令使用 InputObject 参数，在此情况下等效于使用管道运算符将 $a 传递给 Update-List。

另请参阅

  • Select-Object


Update-TypeData

通过将 *.types.ps1xml 文件重新加载到内存中来更新当前的扩展类型配置。

语法

Update-TypeData [[-AppendPath] <string[]>] [-PrependPath <string[]>] [-Confirm] [-WhatIf] [<CommonParameters>]

说明

Update-TypeData cmdlet 通过将 *.types.ps1xml 文件重新加载到内存，更新当前扩展的类型配置。如果 Windows PowerShell 需要扩展类型信息所包含的类型信息，则通常会加载扩展类型信息。Update-TypeData cmdlet 可用于预加载所有类型信息。在开发类型并希望加载这些新类型以进行测试时，此命令尤其有用。

有关 Windows PowerShell 中 *types.ps1xml 文件的详细信息，请参阅 about_Types.ps1xml。

参数

-AppendPath <string[]>

指定要包括在已加载文件列表中的可选 .ps1xml 文件的路径。在加载内置文件后，将对这些文件进行处理。

是否为必需？ | false
位置？ | 1
默认值 |
是否接受管道输入？ | true (ByValue, ByPropertyName)
是否接受通配符？ | false

-PrependPath <string[]>

指定要包括在已加载文件列表中的可选 .ps1xml 文件的路径。不过，在加载内置文件之前，将按指定这些文件的顺序对其进行处理。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Confirm

在执行命令之前提示您进行确认。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-WhatIf

描述如果执行该命令会发生什么情况（无需实际执行该命令）。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

<CommonParameters>

此 cmdlet 支持通用参数：-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。有关详细信息，请参阅 about_Commonparameters.

输入和输出

输入类型是指可通过管道传递给 cmdlet 的对象的类型。返回类型是指 Cmdlet 所返回对象的类型。

输入 | System.String 可以通过管道将包含追加路径的字符串传递给 Update-TypeData。
输出 | None 此 cmdlet 不返回任何输出。

示例 1

C:\PS>update-typedata

说明
-----------
此示例更新 *.types.ps1xml 文件中的扩展类型配置。

示例 2

C:\PS>update-typedata -prependpath typesA.types.Ps1xml, typesB.types.Ps1xml

说明
-----------
此示例更新 *.types.ps1xml 文件中的扩展类型配置，以便先处理 typesA 和 typesB 文件。


Use-Transaction

将脚本块添加到活动事务中。

语法

Use-Transaction [-TransactedScript] <scriptblock> [-UseTransaction] [<CommonParameters>]

说明

Use-Transaction cmdlet 将脚本块添加到活动事务中。这使您可以使用支持事务的 Microsoft .NET Framework 对象编写事务处理脚本。该脚本块只能包含支持事务的 .NET Framework 对象，如 Microsoft.PowerShell.Commands.Management.TransactedString 类的实例。

使用此 cmdlet 时，需要使用 UseTransaction 参数，此参数对于大多数 cmdlet 是可选的。

Use-Transaction cmdlet 是 Windows PowerShell 中支持事务功能的一组 cmdlet 之一。有关详细信息，请参阅 about_Transactions。

参数

-TransactedScript <scriptblock>

指定在事务中运行的脚本块。可输入用大括号 ( { } ) 括起的任何有效脚本块。此参数是必需的。

是否为必需？ | true
位置？ | 1
默认值 | 无
是否接受管道输入？ | false
是否接受通配符？ | false

-UseTransaction

将命令包含在活动事务中。仅当正在执行事务时，此参数才有效。有关详细信息，请参阅 about_Transactions。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

<CommonParameters>

此 cmdlet 支持通用参数：-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。有关详细信息，请参阅 about_Commonparameters.

输入和输出

输入类型是指可通过管道传递给 cmdlet 的对象的类型。返回类型是指 Cmdlet 所返回对象的类型。

输入 | None 不能通过管道将输入传递给此 cmdlet。
输出 | PSObject Use-Transaction 返回事务结果。

说明

Use-Transaction 参数将命令包含在活动事务中。由于 Use-Transaction cmdlet 始终用在事务中，因此任何 Use-Transaction 命令都需要使用此参数才能生效。

示例 1

C:\PS>start-transaction

C:\PS> $transactedString = New-Object Microsoft.PowerShell.Commands.Management.TransactedString

C:\PS> $transactedString.Append("Hello")
C:\PS> use-transaction -TransactedScript { $transactedString.Append(", World") } -UseTransaction

C:\PS> $transactedString.ToString()
Hello

C:\PS> use-transaction -transactedScript { $transactedString.ToString() } -UseTransaction
Hello, World

C:\PS> complete-transaction
C:\PS> $transactedString.ToString()
Hello, World

说明
-----------
此示例演示了如何使用 Use-Transaction cmdlet 为支持事务的 .NET Framework 对象撰写脚本。在本例中，该对象为 TransactedString 对象。

第一条命令使用 Start-Transaction cmdlet 启动事务。

第二条命令使用 New-Object 命令创建 TransactedString 对象。它将该对象存储在 $TransactedString 变量中。

第三条和第四条命令均使用 TransactedString 对象的 Append 方法将文本添加到 $TransactedString 的值中。其中一条命令包含在事务中；另一条命令则不包含在事务中。

第三条命令使用事务处理字符串的 Append 方法将“Hello”添加到 $TransactedString 的值中。由于该命令未包含在事务中，因此会立即应用所做更改。

第四条命令使用 Use-Transaction cmdlet 将文本添加到事务内的字符串中。该命令使用 Append 方法将“, World”添加到 $TransactedString 的值中。用大括号 ( {} ) 将命令括起来以形成脚本块。在此命令中需要使用 UseTransaction 参数。

第五条和第六条命令使用 TransactedString 对象的 ToString 方法将 TransactedString 的值显示为字符串。同样，其中一条命令包含在事务中；另一条命令则不包含在事务中。

第五条命令使用 ToString 方法显示 $TransactedString 变量的当前值。因为它未包含在事务中，所以它仅显示字符串的当前状态。

第六条命令使用 Use-Transaction cmdlet 在事务中运行同一命令。由于该命令包含在事务中，因此它会显示事务中字符串的当前值，这与预览事务更改非常类似。

第七条命令使用 Complete-Transaction cmdlet 提交事务。

最后一条命令使用 ToString 方法将变量的结果值显示为字符串。

示例 2

C:\PS>start-transaction

C:\PS> $transactedString = New-Object Microsoft.PowerShell.Commands.Management.TransactedString

C:\PS> $transactedString.Append("Hello")
C:\PS> use-transaction -TransactedScript { $transactedString.Append(", World") } -UseTransaction

C:\PS> undo-transaction

C:\PS> $transactedString.ToString()
Hello

说明
-----------
此示例演示了回滚包含 Use-Transaction 命令的事务的效果。与事务中的所有命令一样，当事务回滚后，事务型更改将被丢弃，而数据保持不变。

第一条命令使用 Start-Transaction cmdlet 启动事务。

第二条命令使用 New-Object 命令创建 TransactedString 对象。它将该对象存储在 $TransactedString 变量中。

第三条命令（未包含在事务中）使用 Append 方法将“Hello”添加到 $TransactedString 的值中。

第四条命令使用 Use-Transaction cmdlet 运行在事务中使用 Append 方法的另一个命令。该命令使用 Append 方法将“, World”添加到 $TransactedString 的值中。

第五条命令使用 Undo-Transaction cmdlet 回滚事务。因此在事务中执行的所有命令都将被恢复。

最后一条命令使用 ToString 方法将 $TransactedString 的结果值显示为字符串。结果显示只有在事务外部所做的更改才被应用于对象。

另请参阅

  • about_Transactions
  • Start-Transaction
  • Get-Transaction
  • Complete-Transaction
  • Undo-Transaction


Wait-Event

等到引发特定事件后再继续运行。

语法

Wait-Event [[-SourceIdentifier] <string>] [-Timeout <int>] [<CommonParameters>]

说明

Wait-Event cmdlet 将挂起脚本或函数的执行，直到引发特定事件。在检测到事件后会继续执行。若要取消等待，请按 CTRL+C。

此功能为事件的轮询提供了一种替代方法。它还允许您通过两种方式确定对事件的响应：使用事件订阅的 Action 参数；等待事件返回，然后通过一个操作进行响应。

参数

-SourceIdentifier <string>

只等待具有指定源标识符的事件。默认情况下，Wait-Event 等待任何事件。

是否为必需？ | false
位置？ | 1
默认值 | All events
是否接受管道输入？ | true (ByPropertyName)
是否接受通配符？ | false

-Timeout <int>

确定 Wait-Event 等待事件发生的最长时间，以秒为单位。默认值为 -1，表示无限期地等待。计时从您提交 Wait-Event 命令时开始。

如果超过指定时间，则等待结束，命令提示符返回，即使尚未引发事件也是如此。不显示错误消息。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

<CommonParameters>

此 cmdlet 支持通用参数：-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。有关详细信息，请参阅 about_Commonparameters.

输入和输出

输入类型是指可通过管道传递给 cmdlet 的对象的类型。返回类型是指 Cmdlet 所返回对象的类型。

输入 | System.String
输出 | System.String

说明

事件、事件订阅和事件队列仅存在于当前会话中。如果关闭当前会话，将丢弃事件队列并取消事件订阅。

示例 1

C:\PS>wait-event

说明
-----------
此命令等待引发下一个事件。

示例 2

C:\PS>wait-event -sourceIdentifier "ProcessStarted"

说明
-----------
此命令等待引发具有源标识符“ProcessStarted”的下一个事件。

示例 3

C:\PS>$timer.Interval = 2000
C:\PS> $timer.Autoreset = $false
C:\PS> $timer.Enabled = $true; Wait-Event Timer.Elapsed

# After 2 seconds

EventIdentifier  : 12
Sender           : System.Timers.Timer
SourceEventArgs  : System.Timers.ElapsedEventArgs
SourceArgs       : {System.Timers.Timer, System.Timers.ElapsedEventArgs}
SourceIdentifier : Timer.Elapsed
TimeGenerated    : 6/10/2008 3:24:18 PM
MessageData      :
ForwardEvent     : False

说明
-----------
此命令使用 Wait-Event cmdlet 等待一个定时器事件，定时器设置为 2000 毫秒。

示例 4

C:\PS>wait-event -sourceIdentifier "ProcessStarted" -timeout 90

说明
-----------
此命令等待引发具有源标识符“ProcessStarted”的下一个事件的最长时间为 90 秒。如果达到该指定时间，则等待结束。

另请参阅

  • Register-ObjectEvent
  • Register-EngineEvent
  • Register-WmiEvent
  • Unregister-Event
  • Get-Event
  • New-Event
  • Remove-Event
  • Wait-Event
  • Get-EventSubscriber


Wait-Job

禁止显示命令提示符，直至在会话中运行的一个或全部 Windows PowerShell 后台作业完成。

语法

Wait-Job [[-InstanceId] <Guid[]>] [-Any] [-Timeout <int>] [<CommonParameters>]

Wait-Job [-Job] <Job[]> [-Any] [-Timeout <int>] [<CommonParameters>]

Wait-Job [[-Name] <string[]>] [-Any] [-Timeout <int>] [<CommonParameters>]

Wait-Job [-Id] <Int32[]> [-Any] [-Timeout <int>] [<CommonParameters>]

Wait-Job [-State {<NotStarted> | <Running> | <Completed> | <Failed> | <Stopped> | <Blocked>}] [-Any] [-Timeout <int>] [<CommonParameters>]

说明

Wait-Job cmdlet 会等待 Windows PowerShell 后台作业完成，然后再显示命令提示符。可以等待某一个后台作业完成或所有后台作业完成，并可为作业设置最长等待时间。

可以使用 Wait-Job 来获取通过使用 Start-Job 或 Invoke-Command 的 AsJob 参数启动的后台作业。

当作业中的命令完成时，Wait-Job 将显示命令提示符并返回作业对象，这样您就可以将该对象通过管道传递给另一个命令。

参数

-Any

作业完成时显示命令提示符（并返回作业对象）。默认情况下，Wait-Job 等到所有指定的作业都完成后才显示提示。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Id <Int32[]>

等待具有指定 ID 的作业。

ID 是一个整数，用于在当前会话中唯一标识作业。它比 InstanceId 更容易记住和键入，但它仅仅在当前会话中是唯一的。可以键入一个或多个 ID（以逗号分隔）。要查找作业的 ID，请键入不带参数的“Get-Job”。

是否为必需？ | true
位置？ | 1
默认值 |
是否接受管道输入？ | true (ByPropertyName)
是否接受通配符？ | false

-InstanceId <Guid[]>

等待具有指定实例 ID 的作业。默认值为所有作业。

实例 ID 是一个 GUID，用于在计算机上唯一地标识作业。若要查找作业的实例 ID，请使用 Get-Job。

是否为必需？ | false
位置？ | 1
默认值 |
是否接受管道输入？ | true (ByPropertyName)
是否接受通配符？ | false

-Job <Job[]>

等待指定的作业。请输入包含作业对象的变量或获取作业对象的命令。也可以使用管道运算符将作业对象发送到 Wait-Job cmdlet。默认情况下，Wait-Job 等待在当前会话中创建的所有作业。

是否为必需？ | true
位置？ | 1
默认值 |
是否接受管道输入？ | true (ByValue, ByPropertyName)
是否接受通配符？ | false

-Name <string[]>

等待具有指定友好名称的作业。

是否为必需？ | false
位置？ | 1
默认值 |
是否接受管道输入？ | true (ByPropertyName)
是否接受通配符？ | false

-State <JobState>

等待处于指定状态的作业。有效值是 NotStarted、Running、Completed、Stopped、Failed 和 Blocked。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | true (ByPropertyName)
是否接受通配符？ | false

-Timeout <int>

确定每个后台作业的最长等待时间（以秒为单位）。默认值为 -1，即等待作业完成，而不管作业运行多长时间。计时从您提交 Wait-Job 命令时开始，而不是从提交 Start-Job 命令时开始。

如果超过此时间，则等待结束，命令提示符返回，即使作业仍然在运行也是如此。不显示错误消息。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

<CommonParameters>

此 cmdlet 支持通用参数：-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。有关详细信息，请参阅 about_Commonparameters.

输入和输出

输入类型是指可通过管道传递给 cmdlet 的对象的类型。返回类型是指 Cmdlet 所返回对象的类型。

输入 | System.Management.Automation.RemotingJob 可将作业对象通过管道传递给 Wait-Job。
输出 | System.Management.Automation.RemotingJob Wait-Job 返回表示已完成作业的作业对象。如果等待由于超过 Timeout 参数的值而终止，则 Wait-Job 不会返回任何对象。

示例 1

C:\PS>get-job | wait-job

说明
-----------
此命令等待在会话中运行的所有后台作业完成。

示例 2

C:\PS>$s = new-pssession server01, server02, server03

C:\PS> invoke-command -session $s -scriptblock {start-job -name Date1 -scriptblock {get-date}}

C:\PS> $done = invoke-command -session $s -command {wait-job -name Date1}

C:\PS> $done.count
3

说明
-----------
此示例说明如何使用 Wait-Job cmdlet 来处理通过使用 Start-Job cmdlet 在远程计算机上启动的作业。Start-Job 和 Wait-Job 命令都通过使用 Invoke-Command cmdlet 提交到远程计算机。

此示例使用 Wait-Job 来确定在三台不同计算机上作为后台作业运行的 Get-Date 命令是否完成。

第一个命令在所有三台远程计算机上创建 Windows PowerShell 会话 (PSSession)，并将这些会话存储在 $s 变量中。

第二个命令使用 Invoke-Command cmdlet 在 $s 中的所有三个会话中运行 Start-Job 命令。所有作业都被命名为 Date1。

第三个命令使用 Invoke-Command cmdlet 来运行 Wait-Job 命令。此命令等待每台计算机上 Date1 作业的完成。它将生成的作业对象集合（数组）存储在 $done 变量中。

第四个命令使用 $done 变量中的作业对象数组的 Count 属性来确定有多少作业完成了。

示例 3

C:\PS>$s = new-pssession (get-content machines.txt)

C:\PS> $c = 'get-eventlog -log system | where {$_.EntryType -eq "error" -and $_.Source -eq "LSASRV"} | out-file errors.txt'

C:\PS> invoke-command -session $s -scriptblock {param($c)start-job -scriptblock {$c}} -ArgumentList $c

C:\PS> invoke-command -session $s -scriptblock {wait-job -any}

说明
-----------
此示例使用 Wait-Job 的 Any 参数来确定在当前会话中运行的大量后台作业中的第一个作业何时完成。它还说明如何使用 Wait-Job cmdlet 等待远程作业完成。

第一个命令在 Machines.txt 文件中列出的每台计算机上创建 PSSession，并将 PSSession 存储在 $s 变量中。该命令使用 Get-Content cmdlet 获取文件的内容。Get-Content 命令括在圆括号中，以确保它在 New-PSSession 命令之前运行。

第二个命令将 Get-EventLog 命令字符串（括在引号内）存储在 $c 变量中。

第三个命令使用 Invoke-Command cmdlet 在 $s 中的每个会话中运行 Start-Job 命令。Start-Job 命令启动一个运行 $c 中的命令的后台作业。

由于 $c 变量在本地计算机上，因此该命令使用“param”关键字声明命令中的局部变量，并使用 ArgumentList 参数提供这些变量的值。

第四个命令使用 Invoke-Command cmdlet 在会话中运行 Wait-Job 命令。该命令使用 Wait-Job cmdlet 来等待远程计算机上的第一个作业完成。

示例 4

C:\PS>$s = new-pssession Server01, Server02, Server03

C:\PS> $jobs = invoke-command -session $s -scriptblock {start-job -script {get-date}}

C:\PS> $done = invoke-command -session $s -scriptblock {wait-job -timeout 30}

说明
-----------
此示例说明如何使用 Wait-Job 的 Timeout 参数设置在远程计算机上运行的作业的最长等待时间。

第一个命令在所有三台远程计算机（Server01、Server02 和 Server03）上创建 PSSession，并将这些 PSSession 保存在 $s 变量中。

第二个命令使用 Invoke-Command cmdlet 在 $s 中的每个 PSSession 中运行 Start-Job 命令。此命令将生成的作业对象保存在 $jobs 变量中。

第三个命令使用 Invoke-Command cmdlet 在 $s 中的每个 PSSession 中运行 Wait-Job 命令。Wait-Job 命令确定所有命令是否都已在 30 秒内完成。该命令使用值为 30（秒）的 Timeout 参数确立最长等待时间，并将命令的结果保存在 $done 变量中。

在本例中，30 秒后，只有 Server02 计算机上的命令完成。Wait-Job 终止等待，显示命令提示符，并返回表示已完成的作业的对象。

$done 变量包含表示在 Server02 上运行的作业的作业对象。

示例 5

C:\PS>wait-job -id 1,2,5 -any

说明
-----------
此命令通过 ID 标识三个作业，并等待其中任何一个作业完成。当第一个作业完成时，命令提示符返回。

示例 6

C:\PS>wait-job -name DailyLog -timeout 120

说明
-----------
此命令等待 DailyLog 作业完成，等待时间为 120 秒（2 分钟）。如果作业未在接下来的 2 分钟之内完成，则命令提示符返回，作业继续在后台运行。

示例 7

C:\PS>wait-job -name Job3

说明
-----------
此 Wait-Job 命令使用作业名称来标识要等待的作业。

示例 8

C:\PS>C:\PS> $j = start-job -script {get-childitem *.ps1| where {$_lastwritetime -gt ((get-date) - (new-timespan -days 7))}}

C:\PS> $j | wait-job

说明
-----------
此示例说明如何使用 Wait-Job cmdlet 来处理通过使用 Start-Job cmdlet 在本地计算机上启动的作业。

这些命令启动一个获取在上一周添加或更新的 Windows PowerShell 脚本文件的作业。

第一个命令使用 Start-Job cmdlet 在本地计算机上启动后台作业。该作业运行 Get-ChildItem 命令，后者获取在上一周添加或更新的文件扩展名为“ps1”的所有文件。

第三个命令使用 Wait-Job cmdlet 来等待作业完成。作业完成时，该命令显示包含有关作业的信息的作业对象。

示例 9

C:\PS>$s = new-pssession Server01, Server02, Server03

C:\PS> $j = invoke-command -session $s -scriptblock {get-process} -asjob

C:\PS> $j | wait-job

说明
-----------
此示例说明如何使用 Wait-Job cmdlet 来处理通过使用 Invoke-Command cmdlet 的 AsJob 参数在远程计算机上启动的作业。使用 AsJob 时，作业是在本地计算机上创建的，结果也自动返回到本地计算机，即使作业运行在远程计算机上也是如此。

此示例使用 Wait-Job 来确定在三台远程计算机上的会话中运行的 Get-Process 命令是否完成。

第一个命令在三台计算机上创建 PSSession 并将它们存储在 $s 变量中。

第二个命令使用 Invoke-Command cmdlet 在 $s 中的所有三个 PSSession 中运行 Get-Process 命令。此命令使用 AsJob 参数将命令作为后台作业异步运行。此命令返回一个作业对象（就像通过使用 Start-Job 启动的作业），并将该作业对象存储在 $j 变量中。

第三个命令使用管道运算符 (|) 将 $j 中的作业对象发送到 Wait-Job cmdlet。请注意，此示例中不需要 Invoke-Command 命令，因为作业驻留在本地计算机上。

示例 10

C:\PS>get-job

Id   Name     State      HasMoreData     Location             Command
--   ----     -----      -----------     --------             -------
1    Job1     Completed  True            localhost,server01.. get-service
4    Job4     Completed  True            localhost            dir | where

C:\PS> wait-job -id 1

说明
-----------
此命令等待 ID 值为 1 的作业。

另请参阅

  • about_Jobs
  • about_Job_Details
  • about_Remote_Jobs
  • Start-Job
  • Get-Job
  • Receive-Job
  • Stop-Job
  • Remove-Job
  • Invoke-Command


Wait-Process

等到进程停止后再接受更多输入。

语法

Wait-Process [-Id] <Int32[]> [[-Timeout] <int>] [<CommonParameters>]

Wait-Process -InputObject <Process[]> [[-Timeout] <int>] [<CommonParameters>]

Wait-Process [-Name] <string[]> [[-Timeout] <int>] [<CommonParameters>]

说明

Wait-Process cmdlet 等到一个或多个运行的进程停止后再接受输入。在 Windows PowerShell 控制台中，此 cmdlet 禁止显示命令提示符，直到进程停止。可以通过进程名称或进程 ID (PID) 来指定进程，也可以通过管道将进程对象传递给 Wait-Process。

Wait-Process 仅对在本地计算机上运行的进程有效。

参数

-Id <Int32[]>

指定进程的进程 ID。若要指定多个 ID，请使用逗号分隔 ID。要查找进程的 PID，请键入“get-process”。参数名（“Id”）为可选项。

是否为必需？ | true
位置？ | 1
默认值 |
是否接受管道输入？ | true (ByPropertyName)
是否接受通配符？ | false

-InputObject <Process[]>

通过提交进程对象来指定进程。请输入包含进程对象的变量，或键入获取进程对象的命令或表达式（如 Get-Process 命令）。

是否为必需？ | true
位置？ | named
默认值 |
是否接受管道输入？ | true (ByValue)
是否接受通配符？ | false

-Name <string[]>

指定进程的进程名称。若要指定多个名称，请使用逗号分隔这些名称。

是否为必需？ | true
位置？ | 1
默认值 |
是否接受管道输入？ | true (ByPropertyName)
是否接受通配符？ | false

-Timeout <int>

确定 Wait-Process 等待指定进程停止的最长时间，以秒为单位。当此时间间隔到期时，该命令会显示一个非终止错误（列出仍在运行的进程）并结束等待。

是否为必需？ | false
位置？ | 2
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

<CommonParameters>

此 cmdlet 支持通用参数：-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。有关详细信息，请参阅 about_Commonparameters.

输入和输出

输入类型是指可通过管道传递给 cmdlet 的对象的类型。返回类型是指 Cmdlet 所返回对象的类型。

输入 | System.Diagnostics.Process 可以将进程对象通过管道传递给 Wait-Process。
输出 | None 此 cmdlet 将不产生任何输出。

说明

此 cmdlet 使用 System.Diagnostics.Process 类的 WaitForExit 方法。有关该方法的详细信息，请参阅 Microsoft .NET Framework SDK。

示例 1

C:\PS>$nid = (get-process notepad).id

C:\PS> stop-process -id $nid

C:\PS> wait-process -id $nid

说明
-----------
这些命令停止 Notepad 进程，然后等到该进程停止后，再继续下一个命令。

第一条命令使用 Get-Process cmdlet 获取 Notepad 进程的 ID。它将该 ID 保存在 $nid 变量中。

第二条命令使用 Stop-Process cmdlet 停止具有保存在 $nid 中的 ID 的进程。

第三条命令使用 Wait-Process cmdlet 等待 Notepad 进程停止。它使用 Wait-Process 的 ID 参数标识该进程。

示例 2

C:\PS>$p = get-process notepad

C:\PS> wait-process -id $p.id

C:\PS> wait-process -name notepad

C:\PS> wait-process -inputobject $p

说明
-----------
这些命令演示了为 Wait-Process cmdlet 指定进程的三种不同方法。第一条命令获取 Notepad 进程并将其保存在 $p 变量中。

第二条命令使用 ID 参数，第三条命令使用 Name 参数，第四条命令使用 InputObject 参数。

这些命令的结果相同，因此可以互换。

示例 3

C:\PS>wait-process -name outlook, winword -timeout 30

说明
-----------
此命令用 30 秒的时间等待 Outlook 和 Winword 进程停止。如果这两个进程均未停止，则该 cmdlet 会显示非终止错误以及命令提示符。

另请参阅

  • Get-Process
  • Start-Process
  • Stop-Process
  • Wait-Process
  • Debug-Process


Where-Object

创建控制哪些对象沿着命令管道传递的筛选器。

语法

Where-Object [-FilterScript] <scriptblock> [-InputObject <psobject>] [<CommonParameters>]

说明

Where-Object cmdlet 从传递给它的对象集合中选择对象。它使用脚本块作为筛选器，并对每个对象的脚本块进行评估。如果评估结果为“True”，则返回该对象。如果评估结果不是“True”，则忽略该对象。

参数

-FilterScript <scriptblock>

指定用于筛选对象的脚本块。脚本块需放在大括号 ({}) 中。

是否为必需？ | true
位置？ | 1
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-InputObject <psobject>

指定要筛选的对象。还可将对象通过管道传递给 Where-Object。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | true (ByValue)
是否接受通配符？ | false

<CommonParameters>

此 cmdlet 支持通用参数：-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。有关详细信息，请参阅 about_Commonparameters.

输入和输出

输入类型是指可通过管道传递给 cmdlet 的对象的类型。返回类型是指 Cmdlet 所返回对象的类型。

输入 | System.Management.Automation.PSObject 可以通过管道将要筛选的对象传递给 Where-Object。
输出 |

示例 1

C:\PS>get-service | where-object {$_.Status -eq "Stopped"}

说明
-----------
此命令获取当前被停止的所有服务的列表。“$”符号代表传递给 Where-Object cmdlet 的每个对象。

示例 2

C:\PS>get-process | where-object {$_.workingset -gt 25000*1024}

说明
-----------
此命令列出了工作集大于 25,000 KB（千字节）的进程。由于 WorkingSet 属性的值以字节存储，因此需将值 25,000 与 1,024 相乘。

示例 3

C:\PS>get-process | where-object { $_.ProcessName -match "^p.*" }

说明
-----------
此命令获取 ProcessName 属性以字母“p”开头的进程。通过此匹配运算符，您可以在 Where 子句中使用正则表达式。

示例 4

C:\PS>get-process -name svchost | where-object {$True}

说明
-----------
此命令列出名为“svchost”的所有进程。

Where-Object cmdlet 对脚本块进行评估（脚本块通常包含对管道 ($_) 中的当前对象的引用），并将结果强制转换为布尔类型：True 或 False。如果结果为“True”，则返回该对象。否则，将丢弃该对象。

在本例中，脚本块仅返回 True，因此将返回所有对象。


Write-Debug

将调试消息写入控制台。

语法

Write-Debug [-Message] <string> [<CommonParameters>]

说明

Write-Debug cmdlet 将调试消息从脚本或命令写入控制台。

默认情况下，调试消息不会显示在控制台中，但您可以使用 Debug 参数或 $DebugPreference 变量来显示它们。

参数

-Message <string>

指定要发送到控制台的调试消息。

是否为必需？ | true
位置？ | 1
默认值 |
是否接受管道输入？ | true (ByValue)
是否接受通配符？ | false

<CommonParameters>

此 cmdlet 支持通用参数：-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。有关详细信息，请参阅 about_Commonparameters.

输入和输出

输入类型是指可通过管道传递给 cmdlet 的对象的类型。返回类型是指 Cmdlet 所返回对象的类型。

输入 | System.String 可以通过管道将包含调试消息的字符串传递给 Write-Debug。
输出 | None Write-Debug 只写入调试流。它不返回任何输出。

示例 1

C:\PS>Write-Debug "Cannot open file."

说明
-----------
此命令会写入一条调试消息。由于 $DebugPreference 的值是“SilentlyContinue”，因此该消息不会显示在控制台中。

示例 2

C:\PS>$DebugPreference

SilentlyContinue

C:\PS> Write-Debug "Cannot open file."
C:\PS>

C:\PS> Write-Debug "Cannot open file." -debug
DEBUG: Cannot open file.

说明
-----------
此示例演示了如何使用 Debug 通用参数来重写特定命令的 $DebugPreference 变量的值。

第一条命令显示 $DebugPreference 变量的值，默认情况下该值为“SilentlyContinue”。

第二条命令写入一条调试消息，但由于 $DebugPreference 值的原因，该消息不会显示。

第三条命令写入一条调试消息。它使用 Debug 通用参数来重写 $DebugPreference 的值，并显示此命令生成的调试消息。

因此，即使 $DebugPreference 的值是“SilentlyContinue”，也会显示调试消息。

有关 Debug 通用参数的详细信息，请参阅 about_CommonParameters。

示例 3

C:\PS>$DebugPreference

SilentlyContinue

C:\PS> Write-Debug "Cannot open file."
C:\PS>

C:\PS> $DebugPreference = "Continue"

C:\PS> Write-Debug "Cannot open file."
DEBUG: Cannot open file.

说明
-----------
此命令显示更改 $DebugPreference 变量的值对显示调试消息的影响。

第一条命令显示 $DebugPreference 变量的值，默认情况下该值为“SilentlyContinue”。

第二条命令写入一条调试消息，但由于 $DebugPreference 值的原因，该消息不会显示。

第三条命令为 $DebugPreference 变量赋予值“Continue”。

第四条命令写入一条调试消息，该消息会出现在控制台上。

有关 $DebugPreference 的详细信息，请参阅 about_Preference_Variables。

另请参阅

  • Write-Verbose
  • Write-Error
  • Write-Host
  • Write-Progress
  • Write-Output
  • Write-Warning


Write-Error

将对象写入错误流。

语法

Write-Error -ErrorRecord <ErrorRecord> [-CategoryActivity <string>] [-CategoryReason <string>] [-CategoryTargetName <string>] [-CategoryTargetType <string>] [-RecommendedAction <string>] [<CommonParameters>]

Write-Error [-Message] <string> [-Category {<NotSpecified> | <OpenError> | <CloseError> | <DeviceError> | <DeadlockDetected> | <InvalidArgument> | <InvalidData> | <InvalidOperation> | <InvalidResult> | <InvalidType> | <MetadataError> | <NotImplemented> | <NotInstalled> | <ObjectNotFound> | <OperationStopped> | <OperationTimeout> | <SyntaxError> | <ParserError> | <PermissionDenied> | <ResourceBusy> | <ResourceExists> | <ResourceUnavailable> | <ReadError> | <WriteError> | <FromStdErr> | <SecurityError>}] [-ErrorId <string>] [-TargetObject <Object>] [-CategoryActivity <string>] [-CategoryReason <string>] [-CategoryTargetName <string>] [-CategoryTargetType <string>] [-RecommendedAction <string>] [<CommonParameters>]

Write-Error -Exception <Exception> [-Category {<NotSpecified> | <OpenError> | <CloseError> | <DeviceError> | <DeadlockDetected> | <InvalidArgument> | <InvalidData> | <InvalidOperation> | <InvalidResult> | <InvalidType> | <MetadataError> | <NotImplemented> | <NotInstalled> | <ObjectNotFound> | <OperationStopped> | <OperationTimeout> | <SyntaxError> | <ParserError> | <PermissionDenied> | <ResourceBusy> | <ResourceExists> | <ResourceUnavailable> | <ReadError> | <WriteError> | <FromStdErr> | <SecurityError>}] [-ErrorId <string>] [-Message <string>] [-TargetObject <Object>] [-CategoryActivity <string>] [-CategoryReason <string>] [-CategoryTargetName <string>] [-CategoryTargetType <string>] [-RecommendedAction <string>] [<CommonParameters>]

说明

Write-Error cmdlet 将错误写入 Windows PowerShell 错误流。默认情况下，将错误与输出一起发送到主机程序以进行显示。

可以通过提交错误消息字符串 ErrorRecord 对象或 Exception 对象来写入错误。使用 Write-Error 的其他参数可填充错误记录。

参数

-Category <ErrorCategory>

指定错误的类别。默认值为 NotSpecified。

有关错误类别的信息，请参阅 MSDN (Microsoft Developer Network) Library 中的“ErrorCategory 枚举”，网址是 http://go.microsoft.com/fwlink/?LinkId=143600。

是否为必需？ | false
位置？ | named
默认值 | NotSpecified
是否接受管道输入？ | false
是否接受通配符？ | false

-CategoryActivity <string>

描述导致该错误的操作。

是否为必需？ | false
位置？ | named
默认值 | 无
是否接受管道输入？ | false
是否接受通配符？ | false

-CategoryReason <string>

说明活动导致出现该错误的方式或原因。

是否为必需？ | false
位置？ | named
默认值 | 无
是否接受管道输入？ | false
是否接受通配符？ | false

-CategoryTargetName <string>

指定出现错误时正在处理的对象的名称。

是否为必需？ | false
位置？ | named
默认值 | 无
是否接受管道输入？ | false
是否接受通配符？ | false

-CategoryTargetType <string>

指定出现错误时正在处理的对象的 .NET 类型。

是否为必需？ | false
位置？ | named
默认值 | 无
是否接受管道输入？ | false
是否接受通配符？ | false

-ErrorId <string>

指定标识错误的 ID 字符串。该字符串对于该错误应该是唯一的。

是否为必需？ | false
位置？ | named
默认值 | 无
是否接受管道输入？ | false
是否接受通配符？ | false

-ErrorRecord <ErrorRecord>

指定一个错误记录对象，其中包含描述该错误的属性。

若要获取错误记录对象，请使用 New-Object cmdlet 或从 $Error 自动变量中的数组中获取错误记录对象。

是否为必需？ | true
位置？ | named
默认值 | 无
是否接受管道输入？ | false
是否接受通配符？ | false

-Exception <Exception>

指定表示错误的异常。

您可以使用异常，而无需指定消息文本或异常记录。

是否为必需？ | true
位置？ | named
默认值 | 无
是否接受管道输入？ | false
是否接受通配符？ | false

-Message <string>

指定错误的消息文本。如果文本包含空格或特殊字符，则使用引号将其括起来。还可以通过管道将消息字符串传递给 Write-Error。

是否为必需？ | true
位置？ | 1
默认值 | 无
是否接受管道输入？ | true (ByValue)
是否接受通配符？ | false

-RecommendedAction <string>

描述用户应采取的措施以解决或预防该错误。

是否为必需？ | false
位置？ | named
默认值 | 无
是否接受管道输入？ | false
是否接受通配符？ | false

-TargetObject <Object>

指定出现错误时正在处理的对象。输入对象（如字符串）、包含对象的变量或获取对象的命令。

是否为必需？ | false
位置？ | named
默认值 | 无
是否接受管道输入？ | false
是否接受通配符？ | false

<CommonParameters>

此 cmdlet 支持通用参数：-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。有关详细信息，请参阅 about_Commonparameters.

输入和输出

输入类型是指可通过管道传递给 cmdlet 的对象的类型。返回类型是指 Cmdlet 所返回对象的类型。

输入 | System.String 可以通过管道将包含错误消息的字符串传递给 Write-Error。
输出 | Error object Write-Error 只写入错误流。它不返回任何对象。

示例 1

C:\PS>get-childitem | foreach-object { if ($_.gettype().tostring() -eq "Microsoft.Win32.RegistryKey") {write-error "Out-of-band object" -errorID B1 -targetobject $_ } else {$_ } }

说明
-----------
当 Get-ChildItem cmdlet 返回 Microsoft.Win32.RegistryKey 对象（如 Windows PowerShell Registry 提供程序的 HKLM: 或 HKCU 驱动器中的对象）时，此命令会写入错误。

示例 2

C:\PS>write-error  "Access denied."

说明
-----------
此命令写入“Access denied”错误。此命令使用 Message 参数指定消息，但省略可选的 Message 参数名称。

示例 3

C:\PS>write-error -message "Error: Too many input values." -category InvalidArgument

说明
-----------
此命令写入错误并指定错误类别。

另请参阅

  • Write-Debug
  • Write-Verbose
  • Write-Output
  • Write-Host
  • Write-Progress
  • Write-Warning


Write-EventLog

将事件写入事件日志。

语法

Write-EventLog [-LogName] <string> [-Source] <string> [-EventID] <int> [-Message] <string> [[-EntryType] {<Error> | <Warning> | <Information> | <SuccessAudit> | <FailureAudit>}] [-Category <Int16>] [-ComputerName <string>] [-RawData <Byte[]>] [<CommonParameters>]

说明

Write-EventLog cmdlet 将事件写入事件日志。

要将事件写入事件日志，计算机上必须存在该事件日志，并且您必须为该事件日志注册来源。

包含 EventLog 名词的 cmdlet (EventLog cmdlet) 仅适用于传统事件日志。要从使用 Windows Vista 以及 Windows 更高版本中的 Windows 事件日志技术的日志中获取事件，请使用 Get-WinEvent。

参数

-Category <Int16>

指定事件的任务类别。请输入一个与事件日志的类别消息文件中的字符串相关联的整数。

是否为必需？ | false
位置？ | named
默认值 | 1
是否接受管道输入？ | false
是否接受通配符？ | false

-ComputerName <string>

指定远程计算机。默认值为本地计算机。

键入远程计算机的 NetBIOS 名称、Internet 协议 (IP) 地址或完全限定的域名。

此参数不依赖于 Windows PowerShell 远程处理。即使您的计算机未配置为运行远程命令，您也可以使用 Get-EventLog 的 ComputerName 参数。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-EntryType <EventLogEntryType>

指定事件的条目类型。有效值包括 Error、Warning、Information、SuccessAudit 和 FailureAudit。默认值为 Information。

有关这些值的说明，请参阅 MSDN (Microsoft Developer Network) 库中的 System.Diagnostics.EventLogEntryType，网址是 http://go.microsoft.com/fwlink/?LinkId=143599。

是否为必需？ | false
位置？ | 4
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-EventID <int>

指定事件标识符。此参数是必需的。

是否为必需？ | true
位置？ | 3
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-LogName <string>

指定要向其中写入事件的日志的名称。请输入日志名称（Log 属性的值，而不是 LogDisplayName）。不允许使用通配符。此参数是必需的。

是否为必需？ | true
位置？ | 1
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Message <string>

指定事件消息。此参数是必需的。

是否为必需？ | true
位置？ | 5
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-RawData <Byte[]>

指定与事件关联的二进制数据，以字节为单位。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Source <string>

指定事件来源，这通常是将事件写入日志的应用程序的名称。

是否为必需？ | true
位置？ | 2
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

<CommonParameters>

此 cmdlet 支持通用参数：-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。有关详细信息，请参阅 about_Commonparameters.

输入和输出

输入类型是指可通过管道传递给 cmdlet 的对象的类型。返回类型是指 Cmdlet 所返回对象的类型。

输入 | None 不能通过管道将输入传递给此 cmdlet。
输出 | System.Diagnostics.EventLogEntry Write-EventLog 返回表示日志中事件的对象。

说明

要在 Windows Vista 以及更高版本的 Windows 上使用 Write-EventLog，请使用“以管理员身份运行”选项启动 Windows PowerShell。

示例 1

C:\PS>write-eventlog -logname Application -source MyApp -eventID 3001 -entrytype Information -message "MyApp added a user-requested feature to the display." -category 1 -rawdata 10,20

说明
-----------
此命令将一个事件从 MyApp 源写入应用程序事件日志。

示例 2

C:\PS>write-eventlog -computername Server01 -logname Application -source MyApp -eventID 3001 -message "MyApp added a user-requested feature to the display."

说明
-----------
此命令将一个事件从 MyApp 源写入远程计算机 Server01 上的应用程序事件日志。

另请参阅

  • Clear-EventLog
  • Get-EventLog
  • Limit-EventLog
  • New-EventLog
  • Remove-EventLog
  • Show-EventLog
  • Write-EventLog
  • Get-WinEvent


Write-Host

将自定义的输出内容写入主机。

语法

Write-Host [[-Object] <Object>] [-BackgroundColor {<Black> | <DarkBlue> | <DarkGreen> | <DarkCyan> | <DarkRed> | <DarkMagenta> | <DarkYellow> | <Gray> | <DarkGray> | <Blue> | <Green> | <Cyan> | <Red> | <Magenta> | <Yellow> | <White>}] [-ForegroundColor {<Black> | <DarkBlue> | <DarkGreen> | <DarkCyan> | <DarkRed> | <DarkMagenta> | <DarkYellow> | <Gray> | <DarkGray> | <Blue> | <Green> | <Cyan> | <Red> | <Magenta> | <Yellow> | <White>}] [-NoNewline] [-Separator <Object>] [<CommonParameters>]

说明

Write-Host cmdlet 自定义输出内容。您可以使用 ForegroundColor 参数来指定文本颜色，还可以使用 BackgroundColor 参数来指定背景色。使用 Separator 参数，您可以指定用于分隔所显示对象的字符串。特定结果取决于承载 Windows PowerShell 的程序。

参数

-BackgroundColor <ConsoleColor>

指定背景色。没有默认值。

是否为必需？ | false
位置？ | named
默认值 | 无
是否接受管道输入？ | false
是否接受通配符？ | false

-ForegroundColor <ConsoleColor>

指定文本颜色。没有默认值。

是否为必需？ | false
位置？ | named
默认值 | 无
是否接受管道输入？ | false
是否接受通配符？ | false

-NoNewline

指定在控制台中显示的内容不以换行符结束。

是否为必需？ | false
位置？ | named
默认值 | 无
是否接受管道输入？ | false
是否接受通配符？ | false

-Object <Object>

要显示在控制台中的对象。

是否为必需？ | false
位置？ | 1
默认值 | 无
是否接受管道输入？ | true (ByValue)
是否接受通配符？ | false

-Separator <Object>

在控制台上所显示对象之间输出的字符串。

是否为必需？ | false
位置？ | named
默认值 | 无
是否接受管道输入？ | false
是否接受通配符？ | false

<CommonParameters>

此 cmdlet 支持通用参数：-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。有关详细信息，请参阅 about_Commonparameters.

输入和输出

输入类型是指可通过管道传递给 cmdlet 的对象的类型。返回类型是指 Cmdlet 所返回对象的类型。

输入 | System.Object 可以通过管道将要写入的对象传递给主机。
输出 | None Write-Host 将对象发送到主机。它不返回任何对象。但是，主机可能显示 Write-Host 向其发送的对象。

示例 1

C:\PS>write-host "no newline test " -nonewline

no newline test C:\PS>

说明
-----------
此命令显示输入到控制台的内容，但由于存在 NoNewline 参数，因此输出内容后直接跟提示符。

示例 2

C:\PS>write-host (2,4,6,8,10,12) -Separator ", +2= "

2, +2= 4, +2= 6, +2= 8, +2= 10, +2= 12

说明
-----------
此命令显示从 2 到 12 的偶数。Separator 参数用于添加字符串 , +2= （逗号、空格、+、2、=、空格）。

示例 3

C:\PS>write-host (2,4,6,8,10,12) -Separator ", -> " -foregroundcolor DarkGreen -backgroundcolor white

说明
-----------
此命令显示从 2 到 12 之间的偶数。它使用 ForegroundColor 参数来输出深绿色文本，并使用 BackgroundColor 参数来显示白色背景。

示例 4

C:\PS>write-host "Red on white text." -ForegroundColor red -BackgroundColor white

Red on white text.

说明
-----------
此命令显示字符串“Red on white text”。文本颜色为红色，如 ForegroundColor 参数定义。背景色为白色，如 BackgroundColor 参数定义。

另请参阅

  • Write-Verbose
  • Write-Error
  • Write-Progress
  • Write-Debug
  • Write-Output
  • Write-Warning
  • Out-Host


Write-Output

将指定对象发送到管道中的下一个命令。如果该命令是管道中的最后一个命令，则在控制台上显示这些对象。

语法

Write-Output [-InputObject] <PSObject[]> [<CommonParameters>]

说明

Write-Output cmdlet 将指定对象发送到管道中的下一个命令。如果该命令是管道中的最后一个命令，则会在控制台中显示该对象。

Write-Output 会沿着主要管道向下发送对象，主要管道也称为“输出流”或“成功管道”。若要沿着错误管道向下发送错误对象，请使用 Write-Error。

此 cmdlet 通常在脚本中使用以便在控制台上显示字符串和其它对象。但是，由于默认行为是在管道结束时显示对象，因此通常没必要使用该 cmdlet。例如，“get-process | write-output”与“get-process”等效。

参数

-InputObject <PSObject[]>

指定要沿着管道向下发送的对象。输入一个包含对象的变量，或键入可获取对象的命令或表达式。

是否为必需？ | true
位置？ | 1
默认值 |
是否接受管道输入？ | true (ByValue)
是否接受通配符？ | false

<CommonParameters>

此 cmdlet 支持通用参数：-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。有关详细信息，请参阅 about_Commonparameters.

输入和输出

输入类型是指可通过管道传递给 cmdlet 的对象的类型。返回类型是指 Cmdlet 所返回对象的类型。

输入 | System.Management.Automation.PSObject 可以通过管道将对象传递给 Write-Output。
输出 | System.Management.Automation.PSObject Write-Output 返回作为输入提交的对象。

示例 1

C:\PS>$p = get-process

c:\PS> write-output $p

c:\PS> $p

说明
-----------
这些命令获取表示计算机上所运行进程的对象，然后在控制台上显示这些对象。

示例 2

C:\PS>write-output "test output" | get-member

说明
-----------
此命令通过管道将字符串“test output”传递给 Get-Member cmdlet，后者显示 String 类的成员，从而表明沿着管道传递了该字符串。

另请参阅

  • Write-Debug
  • Write-Verbose
  • Write-Error
  • Write-Progress
  • Write-Host
  • Write-Warning
  • Tee-Object


Write-Progress

在 Windows PowerShell 命令窗口内显示进度栏。

语法

Write-Progress [-Activity] <string> [-Status] <string> [[-Id] <int>] [-Completed] [-CurrentOperation <string>] [-ParentId <int>] [-PercentComplete <int>] [-SecondsRemaining <int>] [-SourceId <int>] [<CommonParameters>]

说明

Write-Progress cmdlet 会在 Windows PowerShell 命令窗口中显示一个进度栏，描绘正在运行的命令或脚本的状态。您可以选择进度栏所反映的指示器，以及进度栏的上方和下方显示的文本。

参数

-Activity <string>

指定状态栏上方标题中的第一行文本。此文本描述正在报告其进度的活动。

是否为必需？ | true
位置？ | 1
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Completed

指示进度栏是否可见。如果省略此参数，则 Write-Progress 会显示进度信息。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-CurrentOperation <string>

指定进度栏下方的文本行。此文本描述当前正在进行的操作。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Id <int>

指定区分各个进度栏的 ID。当您在一条命令中创建多个进度栏时，请使用此参数。如果不为进度栏指定不同的 ID，它们会重叠起来，而不会连续地显示。

是否为必需？ | false
位置？ | 3
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-ParentId <int>

标识当前活动的父活动。如果当前活动没有父活动，请使用值 -1。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-PercentComplete <int>

指定已完成的活动的百分比。如果完成百分比未知或不适用，请使用值 -1。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-SecondsRemaining <int>

指定预计的在完成活动之前剩余的秒数。如果剩余秒数未知或不适用，请使用值 -1。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-SourceId <int>

标识记录源。

是否为必需？ | false
位置？ | named
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

-Status <string>

指定状态栏上方标题中的第二行文本。此文本描述活动的当前状态。

是否为必需？ | true
位置？ | 2
默认值 |
是否接受管道输入？ | false
是否接受通配符？ | false

<CommonParameters>

此 cmdlet 支持通用参数：-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。有关详细信息，请参阅 about_Commonparameters.

输入和输出

输入类型是指可通过管道传递给 cmdlet 的对象的类型。返回类型是指 Cmdlet 所返回对象的类型。

输入 | None 不能通过管道将输入传递给此 cmdlet。
输出 | None Write-Progress 不生成任何输出。

说明

如果进度栏未显示，请检查 $ProgressPreference 变量的值。如果将值设置为 SilentlyContinue，则不会显示进度栏。有关 Windows PowerShell 首选项的详细信息，请参阅 about_Preference_Variables。

该 cmdlet 的参数对应于 ProgressRecord 类 (System.Management.Automation.ProgressRecord) 的属性。有关详细信息，请参阅 Windows PowerShell 软件开发工具包 (SDK) 中的 ProgressRecord 主题。

示例 1

C:\PS>for ($i = 1; $i -lt 101; $i++ )
{for ($j=0;$j -lt 10000;$j++) {} write-progress -activity "Search in Progress" -status "% Complete:" -percentcomplete $i;}

说明
-----------
此命令显示两个嵌套 For 循环的进度。第一个循环数到 100，对于该循环的每次递增，第二个循环都会数到 10000。
Write-Progress 命令包括一个状态栏标题（“activity”）、一个状态行和变量 $i（For 循环中的计数器），该变量用来指明任务的相对完成程度。

示例 2

C:\PS>for($i = 1; $i -lt 101; $i++ ) {write-progress -activity Updating -status progress-> -percentcomplete $i -currentOperation OuterLoop} for($i = 1; $i -lt 101; $i++ ) {write-progress -activity Updating -status progress -percentcomplete $i -id  1 -currentOperation InnerLoop}

Updating
   progress ->
   [oooooooooooooooooo                                                   ]

   OutsideLoop

Updating
  progress
  [oooooooooooooooooo                                                    ]

  InnerLoop

说明
-----------
此示例显示两个嵌套 For 循环的进度，每个 For 循环都由一个进度栏表示。

第二个进度栏的 Write-Progress 命令包含用来与第一个进度栏进行区分的 Id 参数。若不使用 Id 参数，进度栏会彼此重叠，而不会按顺序上下显示。

示例 3

C:\PS>$events = get-eventlog -logname system

C:\PS> $events | foreach-object -begin {clear-host;$i=0;$out=""} `
-process {if($_.message -like "*bios*") {$out=$out + $_.Message};
$i = $i+1;`
write-progress -activity "Searching Events" `
-status "Progress:" -percentcomplete ($i/$events.count*100)} `
-end {$out}

说明
-----------
此命令显示在系统事件日志消息中查找字符串“bios”的命令的进度。

在命令的第一行中，Get-EventLog cmdlet 会获取系统日志中的事件，并将它们存储在 $events 变量中。

在第二行中，通过管道将这些事件传递给 ForEach-Object cmdlet。在开始处理前，使用 Clear-Host cmdlet 来清除屏幕、将计数器变量 $i 设置为零，并将输出变量 $out 设置为空字符串。

第三行是 ForEach-Object cmdlet 的 Process 脚本块，该 cmdlet 在每个传入对象的消息属性中搜索“bios”。如果找到该字符串，则会将消息添加到 $out。

在第四行中，计数器变量 $i 将递增以记录又检查了一个事件。

第五行将 Write-Progress cmdlet 与 Activity 和 Status 文本字段的值结合使用，分别创建进度栏标题的第一行和第二行。通过将已处理的事件数 ($i) 除以检索到的事件总数 ($events.count)，然后再乘以 100 计算得出 PercentComplete 参数值。

在最后一行中，ForEach-Object cmdlet 的 End 参数用于显示 $out 变量中存储的消息。

另请参阅

  • Write-Verbose
  • Write-Error
  • Write-Host
  • Write-Debug
  • Write-Output
  • Write-Warning


Write-Verbose

将文本写入详细消息流。

语法

Write-Verbose [-Message] <string> [<CommonParameters>]

说明

Write-Verbose cmdlet 将文本写入 Windows PowerShell 中的详细消息流。通常，详细消息流用来提供有关命令处理的信息，以用于调试某个命令。

默认情况下不显示详细消息流，但是您可以通过更改 $VerbosePreference 变量的值或在任何命令中使用 Verbose 通用参数来显示它。

参数

-Message <string>

指定要显示的消息。此参数是必需的。还可以通过管道将消息字符串传递给 Verbose-Message。

是否为必需？ | true
位置？ | 1
默认值 |
是否接受管道输入？ | true (ByValue)
是否接受通配符？ | false

<CommonParameters>

此 cmdlet 支持通用参数：-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。有关详细信息，请参阅 about_Commonparameters.

输入和输出

输入类型是指可通过管道传递给 cmdlet 的对象的类型。返回类型是指 Cmdlet 所返回对象的类型。

输入 | System.String 可以通过管道将包含消息的字符串传递给 Write-Verbose。
输出 | None Write-Verbose 只写入详细消息流。

示例 1

C:\PS>Write-Verbose -message "Searching the Application Event Log."

C:\PS> Write-Verbose -message "Searching the Application Event Log." -verbose

说明
-----------
这些命令使用 Write-Verbose cmdlet 显示一条状态消息。默认情况下不显示该消息。

第二条命令使用 Verbose 通用参数显示任何详细消息，无论 $VerbosePreference 变量的值如何。

示例 2

C:\PS>$VerbosePreference = "Continue"

C:\PS> Write-Verbose "Copying file $filename"

说明
-----------
这些命令使用 Write-Verbose cmdlet 显示一条状态消息。默认情况下不显示该消息。

第一条命令为 $VerbosePreference 首选项变量赋予值“Continue”。默认值“SilentlyContinue”禁止显示详细消息。

第二条命令写入一条详细消息。

另请参阅

  • Write-Error
  • Write-Warning
  • about_Preference_Variables


Write-Warning

写入警告消息。

语法

Write-Warning [-Message] <string> [<CommonParameters>]

说明

Write-Warning cmdlet 会将警告消息写入 Windows PowerShell 主机。对警告的响应取决于用户的 $WarningPreference 变量的值以及 WarningAction 通用参数的使用。

参数

-Message <string>

指定警告消息。

是否为必需？ | true
位置？ | 1
默认值 |
是否接受管道输入？ | true (ByValue)
是否接受通配符？ | false

<CommonParameters>

此 cmdlet 支持通用参数：-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。有关详细信息，请参阅 about_Commonparameters.

输入和输出

输入类型是指可通过管道传递给 cmdlet 的对象的类型。返回类型是指 Cmdlet 所返回对象的类型。

输入 | System.String 可以通过管道将包含警告的字符串传递给 Write-Warning。
输出 | None Write-Warning 只写入警告流。它不会生成任何其他输出。

说明

$WarningPreference 变量的默认值是“Continue”，它显示警告，然后继续执行命令。若要确定诸如 $WarningPreference 等首选项变量的有效值，请将其设置为由随机字符（如“abc”）组成的字符串。所得到的错误消息将列出有效值。

示例 1

C:\PS>write-warning "This is only a test warning."

说明
-----------
此命令显示消息“WARNING: This is only a test warning.”

示例 2

C:\PS>$w = "This is only a test warning."

C:\PS> $w | write-warning

说明
-----------
此示例说明如何使用管道运算符 (|) 将字符串发送至 Write-Warning。您可以将字符串保存在变量中，如此命令中所示，或者通过管道直接将字符传递给 Write-Warning。

示例 3

C:\PS>$warningpreference

Continue

C:\PS> write-warning "This is only a test warning."
This is only a test warning.

C:\PS> $warningpreference = "SilentlyContinue"

C:\PS> write-warning "This is only a test warning."
C:\PS>

C:\PS> $warningpreference = "Stop"

C:\PS> write-warning "This is only a test warning."
WARNING: This is only a test message.
Write-Warning : Command execution stopped because the shell variable "WarningPreference" is set to Stop.
At line:1 char:14
+ write-warning <<<<  "This is only a test message."

说明
-----------
此示例演示了 $WarningPreference 变量的值对 Write-Warning 命令的影响。

第一条命令显示 $WarningPreference 变量的默认值，即“Continue”。因此，当您写入警告时，会显示该警告消息并且执行过程将会继续。

当您更改 $WarningPreference 变量的值时，Write-Warning 命令的作用又发生变化。值为“SilentlyContinue”时会禁止警告。值为“Stop”时会显示警告，然后停止执行该命令。

有关 $WarningPreference 变量的详细信息，请参阅 about_Preference_Variables。

示例 4

C:\PS>write-warning "This is only a test warning." -warningaction Inquire

WARNING: This is only a test warning.

Confirm
Continue with this operation?
[Y] Yes  [A] Yes to All  [H] Halt Command  [S] Suspend  [?] Help (default is "Y"):

说明
-----------
此示例演示了 WarningAction 通用参数的值对 Write-Warning 命令的影响。您可以将 WarningAction 通用参数与任何 cmdlet 结合使用，来确定 Windows PowerShell 如何响应从该命令生成的警告。WarningAction 通用参数只为该特定命令覆盖 $WarningPreference 的值。

此命令使用 Write-Warning cmdlet 显示警告。值为“Inquire”的 WarningAction 通用参数指示系统在命令显示警告时提示用户。

有关 WarningAction 通用参数的详细信息，请参阅 about_CommonParameters。

另请参阅

  • about_Preference_Variables
  • about_Commonparameters
  • Write-Debug
  • Write-Error
  • Write-Host
  • Write-Output
  • Write-Progress
  • Write-Verbose


Windows PowerShell 提供程序帮助主题

Windows PowerShell 提供程序是 .NET 程序，它们使在特殊数据存储中的数据在 Windows PowerShell 中可用，以便您可以方便地查看和管理该数据。由提供程序公开的数据出现在非常类似于文件系统驱动器的驱动器中。有关详细信息，请参阅 about_Providers。

本节包含有关随 Windows PowerShell 一起安装的提供程序的帮助主题。

提供程序 | 说明
Alias Provider | 提供对 Windows PowerShell 别名及其值的访问。
Certificate Provider | 提供对 X509 证书存储区和证书的只读访问。
Environment Provider | 提供对 Windows 环境变量的访问。
FileSystem Provider | 提供对文件和目录的访问。
Function Provider | 提供对 Windows PowerShell 中所定义函数的访问。
Registry Provider | 提供对系统注册表项和注册表值的访问。
Variable Provider | 提供对 Windows PowerShell 变量及其值的访问。
WSMan Provider | 提供对 WSMan 配置信息的访问。

另请参阅

  • Windows PowerShell Cmdlet 帮助主题
  • Windows PowerShell About 帮助主题
  • Windows PowerShell 入门指南
  • PowerShell.exe 控制台帮助
  • Windows PowerShell SDK


Alias Provider

提供程序名称

Alias

驱动器

Alias:

简短说明

提供对 Windows PowerShell 别名以及它们所表示的值的访问。

详细说明

使用 Windows PowerShell Alias 提供程序，您可以获取、添加、更改、清除和删除 Windows PowerShell 中的别名。

别名是 cmdlet、函数或可执行文件的替代名称。Windows PowerShell 包含一系列内置别名。另外，您可以将您自己的别名添加到当前会话以及 Windows PowerShell 配置文件中。

Alias 提供程序是一个仅包含别名对象的平面命名空间。这些别名没有子项。

每个别名都是 System.Management.Automation.AliasInfo 类的实例。

Alias 提供程序在 Alias: 驱动器中公开其数据存储。若要使用别名，您可以使用以下命令将您的位置更改为 Alias: 驱动器：

Set-Location alias:

或者，您可以从任何其他 Windows PowerShell 驱动器中使用别名。若要从其他位置引用别名，请在路径中使用“Alias:”驱动器名称。

Windows PowerShell 包括一组用于查看和更改别名的 cmdlet：

Export-Alias

Get-Alias

Import-Alias

New-Alias

Set-Alias

在使用这些 cmdlet 时，无需在名称中指定 Alias: 驱动器。

Alias 提供程序支持拥有 Item 名词的所有 cmdlet（Invoke-Item cmdlet 除外）。此外，该提供程序还支持 Get-Content 和 Set-Content cmdlet。Alias 提供程序不支持拥有 ItemProperty 名词的 cmdlet。此外，该提供程序也不支持任何 cmdlet 中的 Filter 参数。

对别名的所有更改仅会影响当前会话。若要保存更改，请将更改添加到 Windows PowerShell 配置文件中。或者，可以使用 Export-Alias 和 Import-Alias cmdlet。

示例

转到 Alias: 驱动器

-------------------------- 示例 1 --------------------------

此命令将当前位置更改为 Alias: 驱动器。您可以从 Windows PowerShell 的任一驱动器中使用此命令。若要返回到文件系统驱动器，请键入驱动器名称。例如，键入“set-location c:”。

set-location alias:

获取别名

-------------------------- 示例 1 --------------------------

此命令获取当前会话中所有别名的列表。在任何 Windows PowerShell 驱动器中，都可以使用此命令。

get-item -path alias:

-------------------------- 示例 2 --------------------------

此命令获取“ls”别名。由于该别名包含路径，因此可以在任何 Windows PowerShell 驱动器中使用该别名。

get-item -path alias:ls

如果您位于 Alias: 驱动器中，则可以省略路径中的驱动器名称。

-------------------------- 示例 3 --------------------------

此命令获取与 Get-ChildItem cmdlet 关联的别名的列表。它使用存储 cmdlet 名称的 Definition 属性。

get-item -path alias:* | where-object {$_.Definition -eq "Get-Childitem"}

如果有别名的项是可执行文件，则 Definition 包含该文件的完全限定路径。

-------------------------- 示例 4 --------------------------

在当前位置是 Alias: 驱动器时，此命令可获取所有别名的列表。它使用通配符 (*) 来表示当前位置的所有内容。

get-item -path *

在 Alias: 驱动器中，表示当前位置的点 (.) 和表示当前位置中的所有项目的通配符 (*) 具有相同效果。例如，“get-item -path .”与“get-item *”会产生相同的结果。

创建新别名

-------------------------- 示例 1 --------------------------

此命令为 Get-Service cmdlet 创建“serv”别名。由于当前位置位于 Alias: 驱动器中，因此 Path 参数的值为一个点 (.)。点表示当前位置。

此命令还使用 Options 动态参数来设置别名上的 AllScope 和 Constant 选项。只有位于 Alias: 驱动器中时，才能在 New-Item cmdlet 中使用 Options 参数。

new-item -path . -name serv -value Get-Service -Options "AllScope,Constant"

如果您位于 Alias: 驱动器中，则可以省略路径中的驱动器名称。

-------------------------- 示例 2 --------------------------

您可以为调用命令的任何项创建别名。此命令为 Notepad.exe 创建“np”别名。

new-item -path alias:np -value c:\windows\notepad.exe

-------------------------- 示例 3 --------------------------

可以为任何函数创建别名。可以使用此功能来创建包括 cmdlet 以及其参数的别名。

第一个命令创建 CD32 函数，该函数将当前目录更改为 System32 目录。第二个命令为 CD32 函数创建别名“go”。分号 (;) 是命令分隔符。

当该命令完成时，您可以使用“CD32”或“go”调用该函数。

function CD32 {set-location -path c:\windows\system32} set-item -path alias:go -value CD32

显示别名的属性和方法

-------------------------- 示例 1 --------------------------

此命令使用 Get-Item 来获取所有别名。管道运算符 (|) 将结果发送给 Get-Member cmdlet，后者显示该对象的方法和属性。

get-item -path alias:* | get-member

在通过管道将对象集合（例如 Alias: 驱动器中的别名集合）传递给 Get-Member 时，Get-Member 将分别评估该集合中的每个对象。然后 Get-Member 返回它找到的有关每个对象类型的信息。如果所有对象都为同一类型，则它将返回有关该唯一对象类型的信息。在本例中，所有别名均为 AliasInfo 对象。 若要获取有关 AliasInfo 对象集合的信息，请使用 Get-Member 的 InputObject 参数。例如，使用下面的命令： Get-Member -InputObject (Get-Item alias:*) 使用 InputObject 时，Get-Member 将对集合而不是集合中的对象进行评估。

-------------------------- 示例 2 --------------------------

此命令列出了“dir”别名的属性值。此命令使用 Get-Item cmdlet 来获取表示“dir”别名的对象。管道运算符 (|) 将结果发送到 Format-List 命令。Format-List 命令对 Property 参数使用通配符 (*) 来设置所有“dir”别名属性值的格式并显示这些值。

get-item alias:dir | format-list -property *

更改别名的属性

-------------------------- 示例 1 --------------------------

您可以使用 Set-Item cmdlet 以及 Options 动态参数来更改别名的 Options 属性的值。

此命令设置“dir”别名的 AllScope 选项和 ReadOnly 选项。此命令使用 Set-Item cmdlet 的 Options 动态参数。只有在将 Options 参数与 Alias 或 Function 提供程序一起使用时，该参数才在 Set-Item 中可用。

set-item -path alias:dir -options "AllScope,ReadOnly"

-------------------------- 示例 2 --------------------------

此命令使用 Set-Item cmdlet 来更改“gp”别名，以便让该别名表示 Get-Process cmdlet 而不是 Get-ItemProperty cmdlet。由于“gp”别名的 Options 属性值设置为 ReadOnly，因此 Force 参数是必需的。由于从 Alias: 驱动器中提交该命令，因此路径中没有指定驱动器。

set-item -path gp -value get-process -force

该更改将影响用于定义别名与命令之间关联的四个属性。若要查看更改的效果，请键入以下命令： get-item -path gp | format-list -property *

-------------------------- 示例 3 --------------------------

此命令使用 Rename-Item cmdlet 将“popd”别名更改为“pop”。

rename-item -path alias:popd -newname pop

复制别名

-------------------------- 示例 1 --------------------------

此命令复制 pushd 别名，从而为 Push-Location cmdlet 创建新的 push 别名。

copy-item -path alias:pushd -destination alias:push

创建该新别名时，其 Description 属性拥有 null 值。另外，其 Options 属性的值为 None。 如果从 Alias: 驱动器中发出该命令，则可以在 Path 参数值中省略驱动器名称。

删除别名

-------------------------- 示例 1 --------------------------

此命令从当前会话中删除 serv 别名。在任何 Windows PowerShell 驱动器中，都可以使用此命令。

remove-item -path alias:serv

如果您位于 Alias: 驱动器中，则可以省略路径中的驱动器名称。

-------------------------- 示例 2 --------------------------

此命令删除以“s”开头的别名。但它不删除只读别名。

clear-item -path alias:s*

-------------------------- 示例 3 --------------------------

此命令从当前会话中删除所有别名，但 Options 属性值为 Constant 的别名除外。如果不使用 Force 参数，则此命令不删除 Options 属性值为 ReadOnly 的别名。

remove-item alias:* -force

动态参数

动态参数是由 Windows PowerShell 提供程序添加的 cmdlet 参数，且只可用于在启用了提供程序的驱动器中使用 cmdlet 的情况。

Options <System.Management.Automation.ScopedItemOptions>

确定别名的 Options 属性的值。

Value | Description
None | 无选项。此值为默认值。
Constant | 无法删除别名，也无法更改其属性。Constant 仅在创建别名时可用。不能将现有别名的选项更改为 Constant。
Private | 别名仅在当前作用域（不包含子作用域）中可见。
ReadOnly | 除非使用 Force 参数，否则无法更改别名的属性。您可以使用 Remove-Item 来删除别名。
AllScope | 别名将复制到创建的所有新作用域中。

支持 Cmdlet

  • New-Item

  • Set-Item

另请参阅

  • about_Aliases
  • about_Providers


Certificate Provider

提供程序名称

Certificate

驱动器

Cert:

简短说明

提供对 X.509 证书存储和对 Windows PowerShell 中的证书的访问。

详细说明

Windows PowerShell 安全策略支持使用 Authenticode 签名和 X.509 编码的数字公钥证书对脚本进行签名。Windows PowerShell 的签名功能并不完整，但这些功能允许用户对脚本进行签名，并允许 Windows PowerShell 识别已签名和未签名的脚本，以及确定脚本是否源自 Internet。

Windows PowerShell 证书提供程序允许您在证书命名空间中进行导航并查看证书存储和证书。它还允许您复制、移动和删除证书和证书存储，并在 Microsoft 管理控制台 (MMC) 中打开证书管理单元。

证书提供程序在 Windows PowerShell 中将证书命名空间公开为 Cert: 驱动器。Cert: 驱动器具有以下三个级别：

-- 存储位置 (Microsoft.PowerShell.Commands.X509StoreLocation)，它是对当前用户和所有用户证书进行分组的高级容器。每个系统具有一个 CurrentUser 和 LocalMachine（所有用户）存储位置。

-- 证书存储区 (System.Security.Cryptography.X509Certificates.X509Store)，它是保存和管理证书的物理存储区。

-- X.509 证书 (System.Security.Cryptography.X509Certificates.X509Certificate2)，其中每个证书表示计算机上的一个 X.509 证书。证书通过证书指纹进行识别。

Windows PowerShell 证书提供程序支持 Set-Location、Get-Location、Get-Item、Get-ChildItem 和 Invoke-Item cmdlet。

另外，包括证书提供程序的 Windows PowerShell 安全性管理单元 (Microsoft.PowerShell.Security) 还包括获取和设置 Authenticode 签名和获取证书的管理单元。要获取安全性管理单元中的 cmdlet 列表，请键入“get-command -module *security”。

示例

在 Cert: 驱动器中导航

-------------------------- 示例 1 --------------------------

此命令使用 Set-Location cmdlet 更改 Cert: 驱动器的当前位置。

set-location cert:

-------------------------- 示例 2 --------------------------

此命令使用 Set-Location 命令将当前位置更改为 LocalMachine 存储位置中的 Root 证书存储。使用反斜杠 (\) 或正斜杠 (/) 指示 Cert: 驱动器的级别。

set-location -path LocalMachine\Root

如果您不在 Cert: 驱动器中，请在路径前面添加驱动器名称。

显示 Cert: 驱动器的内容

-------------------------- 示例 1 --------------------------

此命令使用 Get-ChildItem cmdlet 显示 CurrentUser 证书存储位置中的证书存储。

get-childitem -path cert:\CurrentUser

如果您位于 Cert: 驱动器中，则可以省略驱动器名称。

-------------------------- 示例 2 --------------------------

此命令使用 Get-ChildItem cmdlet 显示 My 证书存储中的证书。

get-childitem -path cert:\CurrentUser\My

如果您位于 Cert: 驱动器中，则可以省略驱动器名称。

-------------------------- 示例 3 --------------------------

此命令使用 Get-Item cmdlet 获取“My”证书存储，并使用 Format-List 带通配符 (*) 的 Property 参数来显示存储的所有属性。

get-item -path cert:\CurrentUser\My | format-list *

-------------------------- 示例 4 --------------------------

此命令获取证书并显示证书的所有属性。它使用 Get-ChildItem cmdlet 获取证书，并使用 Format-List 带通配符 (*) 的 Property 参数来显示证书的所有属性。

证书通过证书指纹进行识别。

get-childitem -path cert:\CurrentUser\my\6B8223358119BB08840DEE50FD8AF9EA776CE66B | format-list -property *

-------------------------- 示例 5 --------------------------

此命令使用 Get-ChildItem cmdlet 获取计算机上的所有证书，并使用其 CodeSigningCert 动态参数来仅获取具有代码签名颁发机构的证书。

get-childitem -path * -codesigningcert -recurse

打开 MMC 证书管理单元

-------------------------- 示例 1 --------------------------

此命令打开 MMC 证书管理单元来管理指定的证书。

invoke item cert:\CurrentUser\my\6B8223358119BB08840DEE50FD8AF9EA776CE66B

动态参数

动态参数是由 Windows PowerShell 提供程序添加的 cmdlet 参数，且只可用于在启用了提供程序的驱动器中使用 cmdlet 的情况。

CodeSigningCert <System.Management.Automation.SwitchParameter>

仅获取那些具有代码签名颁发机构的证书。

支持 Cmdlet

  • Get-Item

  • Get-ChildItem

另请参阅

  • about_Providers
  • about_Signing
  • Get-AuthenticodeSignature
  • Set-AuthenticodeSignature
  • Get-PfxCertificate


Environment Provider

提供程序名称

Environment

驱动器

Env:

简短说明

提供对 Windows 环境变量的访问。

详细说明

使用 Windows PowerShell Environment 提供程序，您可以获取、添加、更改、清除和删除 Windows PowerShell 中的 Windows 环境变量。

Environment 提供程序是一个仅包含表示环境变量的对象的平面命名空间。这些变量没有子项。

每个环境变量都是 System.Collections.DictionaryEntry 类的实例。环境变量的名称为字典键。环境变量的值为字典值。

Environment 提供程序在 Env: 驱动器中公开其数据存储。若要使用环境变量，可将您的位置更改为 Env: 驱动器（“set-location env:”），也可从其他 Windows PowerShell 驱动器中使用环境变量。若要从其他位置引用环境变量，请在路径中使用 Env: 驱动器名称。

环境变量提供程序支持包含 Item 名词的所有 cmdlet（Invoke-Item 除外）。此外，该提供程序还支持 Get-Content 和 Set-Content cmdlet。但是，该提供程序不支持包含 ItemProperty 名词的 cmdlet，也不支持任何 cmdlet 中的 Filter 参数。

环境变量必须符合通常的命名标准。此外，环境变量名称不能包含等号 (=)。

对环境变量的更改仅会影响当前会话。若要保存更改，请将这些更改添加到 Windows PowerShell 配置文件中，或使用 Export-Console 保存当前会话。

示例

转到 Env: 驱动器

-------------------------- 示例 1 --------------------------

此命令将当前位置更改为 Env: 驱动器：

set-location env:

您可以从 Windows PowerShell 的任一驱动器中使用此命令。若要返回到文件系统驱动器，请键入驱动器名称。例如，键入： set-location c:

获取环境变量

-------------------------- 示例 1 --------------------------

此命令列出当前会话中的所有环境变量：

get-childitem -path env:

您可以从任一 Windows PowerShell 驱动器中使用此命令。

-------------------------- 示例 2 --------------------------

此命令获取 WINDIR 环境变量：

get-childitem -path env:windir

-------------------------- 示例 3 --------------------------

此命令获取当前会话中所有环境变量的列表，然后按名称对这些环境变量进行排序：

get-childitem  | sort-object -property name

默认情况下，将按 Windows PowerShell 发现环境变量的顺序显示这些变量。在 Env: 驱动器中提交此命令。 从其他驱动器中运行此命令时，请添加值为 Env: 的 Path 参数。

创建新的环境变量

-------------------------- 示例 1 --------------------------

此命令创建值为 Non-Admin 的 USERMODE 环境变量：

new-item -path . -name USERMODE -value Non-Admin

由于当前位置位于 Env: 驱动器中，因此 Path 参数的值为一个点 (.)。点表示当前位置。 如果您不是位于 Env: 驱动器中，则 Path 参数的值将为 Env:。

显示环境变量的属性和方法

-------------------------- 示例 1 --------------------------

此命令使用 Get-ChildItem cmdlet 来获取所有环境变量：

get-childitem -path env: | get-member

管道运算符 (|) 将结果发送给 Get-Member，后者显示该对象的方法和属性。 在通过管道将对象集合（例如 Env: 驱动器中的环境变量集合）传递给 Get-Member 时，Get-Member 将分别评估该集合中的每个对象。然后 Get-Member 将返回它找到的有关每个对象类型的信息。如果所有对象都为同一类型，则它将返回有关该唯一对象类型的信息。在本例中，所有环境变量均为 DictionaryEntry 对象。 若要获取有关 DictionaryEntry 对象集合的信息，请使用 Get-Member 的 InputObject 参数。例如，键入： get-member -inputobject (get-childitem env:) 使用 InputObject 参数时，Get-Member 将对集合而不是对集合中的对象进行评估。

-------------------------- 示例 2 --------------------------

此命令列出了 WINDIR 环境变量的属性值：

get-item env:windir | format-list -property *

此命令使用 Get-Item cmdlet 来获取表示 WINDIR 环境变量的对象。管道运算符 (|) 将结果发送到 Format-List 命令。该命令对 Property 参数使用通配符 (*) 来设置 WINDIR 环境变量的所有属性值的格式并显示这些值。

更改环境变量的属性

-------------------------- 示例 1 --------------------------

此命令使用 Rename-Item cmdlet 将您创建的 USERMODE 环境变量的名称更改为 USERROLE：

rename-item -path env:USERMODE -newname USERROLE

此更改将影响 DictionaryEntry 对象的 Name、Key 和 PSPath 属性。 请不要更改系统使用的环境变量的名称。尽管这些更改仅影响当前会话，但它们可能会导致系统或程序运行不正常。

-------------------------- 示例 2 --------------------------

此命令使用 Set-Item cmdlet 将 USERROLE 环境变量的值更改为 Administrator：

set-item -path env:USERROLE -value Administrator

复制环境变量

-------------------------- 示例 1 --------------------------

此命令将 USERROLE 环境变量的值复制到 USERROLE2 环境变量：

copy-item -path env:USERROLE -destination env:USERROLE2

删除环境变量

-------------------------- 示例 1 --------------------------

此命令从当前会话中删除 USERROLE2 环境变量：

remove-item -path env:USERROLE2

在任何 Windows PowerShell 驱动器中，都可以使用此命令。如果您位于 Env: 驱动器中，则可以省略路径中的驱动器名称。

-------------------------- 示例 2 --------------------------

此命令删除 USERROLE 环境变量。

clear-item -path env:USERROLE

另请参阅

  • about_Providers


FileSystem Provider

提供程序名称

FileSystem

驱动器

C，D

简短说明

提供对文件和目录的访问。

详细说明

使用 Windows PowerShell FileSystem 提供程序，您可以获取、添加、更改、清除和删除 Windows PowerShell 中的文件和目录。

FileSystem 提供程序公开了与您的计算机上所配置的逻辑驱动器（包括映射到网络共享的驱动器）相对应的 Windows PowerShell 驱动器。例如，某台计算机具有一个软盘驱动器、一个硬盘驱动器和一个映射的网络共享目录，其驱动器分别名为 A、C 和 Z。FileSystem 提供程序将公开直接对应于 A、C 和 Z 的 Windows PowerShell 驱动器，从而允许您从 Windows PowerShell 中引用这些驱动器。例如，若要引用驱动器 C，您可以按下例所示使用 C:：

Get-ChildItem c:

此命令将返回 C 驱动器上的所有内容，包括文件和目录。在通过 FileSystem 提供程序引用特定目录或文件时，您必须提供必要的信息以识别该目录或文件。这意味着，在某些情况下您必须提供完全限定的名称。完全限定名称包括驱动器名称（带有冒号）、任何目录和子目录名称以及文件名（如果适用）。例如，以下示例显示了 Shell.dll 文件的完全限定名称，该文件位于 C 驱动器上 Windows 目录的 System32 子目录中：

c:\windows\system32\shell.dll

正如您所见，完全限定名称的每个元素均由反斜杠 (\) 分隔。Windows PowerShell 还允许您使用正斜杠 (/) 以与其他各种 shell 保持一致。

在某些情况下，您无需在引用文件或目录时提供完全限定的名称。例如，当您要访问当前工作位置中的文件时，只需提供文件名。如果您的当前工作位置为 c:\windows，则您可以使用以下命令来查看该目录中所有 .dll 文件的列表：

Get-ChildItem *.dll

如果您的工作目录是 c:\windows 之外的其他目录，例如 c:\program files\Windows PowerShell，则您的命令可能需要包括完全限定的名称：

Get-ChildItem c:\windows\*.dll

在某些情况下，您可以使用位置的相对引用。如果您的工作位置为 c:\windows，并且您希望查看 c:\windows\system32 目录下的 .dll 文件列表，则您可以使用以下命令：

Get-ChildItem .\system32\*.dll

\system32 前面的句点表示当前工作位置。

在某些情况下，您的当前工作位置可能位于 FileSystem 驱动器之外的其他驱动器上。在这种情况下，您必须始终在引用中包括目标驱动器的名称。例如，假定您的当前工作位置为 env: 驱动器。若要查看 C 驱动器的内容，您可以使用以下命令：

Get-ChildItem c:

示例

在文件系统中导航

-------------------------- 示例 1 --------------------------

此命令获取当前位置：

get-location

Get-Location cmdlet 提供与 Windows 命令提示符中的 cd 命令以及 UNIX 中的 pwd 命令类似的命令功能。有关详细信息，请键入： get-help get-location

-------------------------- 示例 2 --------------------------

此命令设置当前位置：

set-location C:

获取文件和目录信息

-------------------------- 示例 1 --------------------------

此命令获取当前目录中的所有文件和目录：

get-childitem

默认情况下，Get-ChildItem cmdlet 不进行递归。如果在运行此命令时当前目录中存在文件和文件夹，则将返回一个 System.IO.FileInfo 对象和一个 System.IO.DirectoryInfo 对象。

-------------------------- 示例 2 --------------------------

此命令使用 Get-ChildItem 获取当前目录中的所有文件和目录：

get-childitem | where-object {!$_.psiscontainer}

它通过管道将结果传递给 Where-Object，后者将检查 PSIsContainer 属性并且只允许非 (!) 容器对象通过管道。

-------------------------- 示例 3 --------------------------

此命令使用 Get-ChildItem 获取当前目录中的所有文件和目录。它通过管道将结果传递给 Where-Object，后者将检查 PSIsContainer 属性并且只允许容器对象通过管道。

get-childitem | where-object {$_.psiscontainer}

-------------------------- 示例 4 --------------------------

此命令使用 Get-ChildItem 获取当前目录中的所有文件和目录：

get-item -path a | format-list *

它通过管道将结果传递给 Where-Object cmdlet，后者将检查 PSIsContainer 属性并且只允许容器对象通过管道。

-------------------------- 示例 5 --------------------------

此命令使用 Get-Item cmdlet 获取有关 Test.txt 文件的信息：

get-item -path test.txt | format-list *

Format-List cmdlet 用于显示所得到的对象的所有属性。

复制文件和目录

-------------------------- 示例 1 --------------------------

此命令将 C:\A 目录中的文件 A.txt 复制到 C:\A\Bb 目录下：

copy-item -path C:\a\a.txt -destination C:\a\bb\a.txt

此命令将覆盖目标目录中的文件，并且不提示您进行确认。

-------------------------- 示例 2 --------------------------

此命令将 C:\A\Bb 目录中文件扩展名为 .txt 的所有文件都复制到 C:\A\Cc\Ccc\ 目录下：

copy-item -path C:\a\bb\*.txt -destination C:\a\cc\ccc\

此命令使用文件的原始名称。此命令将覆盖目标目录中的现有文件，并且不提示您进行确认。

-------------------------- 示例 3 --------------------------

将 C:\a 目录中的所有目录和文件复制到 C:\c 目录下。如果要复制的任何目录在目标目录中已存在，则除非指定 Force 参数，否则此命令将会失败。

copy-item -path C:\a\* -destination C:\c -recurse

移动文件和目录

-------------------------- 示例 1 --------------------------

此命令将 C:\A 目录中的 C.txt 文件移动到 C:\A\Aa 目录下：

move-item -path C:\a\c.txt -destination C:\a\aa

此命令将不会自动覆盖现有的同名文件。要强制该 cmdlet 覆盖现有文件，请指定 Force 参数。

-------------------------- 示例 2 --------------------------

此命令将 C:\A 目录及其所有内容移动到 C:\B 目录下：

move-item -path C:\a -destination C:\b

无法移动当前所在的目录。

管理文件内容

-------------------------- 示例 1 --------------------------

此命令将字符串“test content”追加到 Test.txt 文件中：

add-content -path test.txt -value "test content"

这样将不会删除 Test.txt 文件中的现有内容。

-------------------------- 示例 2 --------------------------

此命令获取 Test.txt 文件的内容并在控制台中显示这些内容：

get-content -path test.txt

可以通过管道将文件内容传递给其他 cmdlet。例如，下面命令将读取 Test.txt 文件的内容，并将这些内容作为输入提供给 ConvertTo-HTML cmdlet： get-content -path test.txt |convertto-html

-------------------------- 示例 3 --------------------------

此命令用字符串“test content”替换 Test.txt 文件的内容：

set-content -path test.txt -value "test content"

该命令将覆盖 Test.txt 的内容。在创建文件时，您可以使用 New-Item cmdlet 的 Value 参数向文件中添加内容。

管理安全描述符

-------------------------- 示例 1 --------------------------

此命令返回一个 System.Security.AccessControl.FileSecurity 对象：

get-acl -path test.txt | format-list -property *

有关此对象的详细信息，请通过管道将此命令传递给 Get-Member cmdlet。或者，请查看 MSDN (Microsoft Developer Network ) Library 中的“FileSecurity 类”，网址是 http://go.microsoft.com/fwlink/?LinkId=145718。

-------------------------- 示例 2 --------------------------

此命令返回一个 System.Security.AccessControl.DirectorySecurity 对象：

get-acl -path test_directory | format-list -property *

有关此对象的详细信息，请通过管道将此命令传递给 Get-Member cmdlet。或者，请查看 MSDN Library 中的“DirectorySecurity 类”，网址是 http://go.microsoft.com/fwlink/?LinkId=145736。

创建文件和目录

-------------------------- 示例 1 --------------------------

此命令将在 C 驱动器中创建 Logfiles 目录：

new-item -path c:\ -name logfiles -type directory

-------------------------- 示例 2 --------------------------

此命令在 C: Logfiles 目录中创建 Log2.txt 文件，并将字符串“test log”添加到该文件中：

new-item -path c:\logfiles -name log.txt -type file

-------------------------- 示例 3 --------------------------

在 C:\logfiles 目录中创建名为 Log2.txt 的文件，并将字符串“test log”添加到该文件中。

new-item -path c:\logfiles -name log2.txt -type file -value "test log"

重命名文件和目录

-------------------------- 示例 1 --------------------------

此命令将 C:\A 目录中的文件 A.txt 重命名为 B.txt：

rename-item -path c:\a\a.txt -newname b.txt

-------------------------- 示例 2 --------------------------

此命令将 C:\A\Cc 目录重命名为 C:\A\Dd：

rename-item -path c:\a\cc -newname dd

删除文件和目录

-------------------------- 示例 1 --------------------------

此命令删除当前目录中的 Test.txt 文件：

remove-item -path test.txt

-------------------------- 示例 2 --------------------------

此命令删除当前目录中文件扩展名为 .xml 的所有文件：

remove-item -path *.xml

通过调用关联文件来启动程序

-------------------------- 示例 1 --------------------------

第一个命令使用 Get-Service cmdlet 获取有关本地服务的信息。

它通过管道将信息传递给 Export-Csv cmdlet，并将这些信息存储在 Services.csv 文件中。

第二个命令使用 Invoke-Item 在与 .csv 扩展名相关联的程序中打开 Services.csv：

get-service | export-csv -path services.csv

invoke-item -path services.csv

动态参数

动态参数是由 Windows PowerShell 提供程序添加的 cmdlet 参数，且只可用于在启用了提供程序的驱动器中使用 cmdlet 的情况。

Encoding <Microsoft.PowerShell.Commands.FileSystemCmdletProviderEncoding>

Value | Description
Unknown | 编码类型未知或无效。数据可作为二进制处理。
String | 使用针对字符串的编码类型。
Unicode | 采用使用 little-endian 字节顺序的 UTF-16 格式进行编码。
Byte | 将一组字符编码为一个字节序列。
BigEndianUnicode | 采用使用 big-endian 字节顺序的 UTF-16 格式进行编码。
UTF8 | 采用 UTF-8 格式进行编码。
UTF7 | 采用 UTF-7 格式进行编码。
ASCII | 使用针对 ASCII（7 位）字符集的编码方式。

支持 Cmdlet

  • Add-Content

  • Get-Content

  • Set-Content

Delimiter <System.String>

指定读取文件时使用的分隔符。默认分隔符为“\n”（行尾）。

支持 Cmdlet

  • Get-Content

Wait <System.Management.Automation.SwitchParameter>

等待要追加到文件的内容。如果已追加内容，则此参数将返回追加的内容。如果内容已更改，则返回整个文件。

在等待过程中，Get-Content 将每隔一秒检查一次文件，直至中断该操作（例如通过按 Ctrl+C）。

支持 Cmdlet

  • Get-Content

另请参阅

  • about_Providers


Function Provider

提供程序名称

Function

驱动器

Function:

简短说明

提供对 Windows PowerShell 中所定义函数的访问。

详细说明

使用 Windows PowerShell Function 提供程序，您可以获取、添加、更改、清除和删除 Windows PowerShell 中的函数和筛选器。

函数是用于执行某操作的命名代码块。在键入函数名称后，将会运行该函数中的代码。筛选器是用于确定操作条件的命名代码块。可以键入筛选器的名称来代替条件，例如在 Where-Object 命令中。

在 Function: 驱动器中，函数以标签“Function”开头，而筛选器以标签“Filter”开头；不过，无论其标签如何，只要在正确的上下文中使用，两者都可以正常运行。

Function 提供程序是一个仅包含函数和筛选器对象的平面命名空间。函数和筛选器都没有子项。

每个函数都是 System.Management.Automation.FunctionInfo 类的实例。每个筛选器都是 System.Management.Automation.FilterInfo 类的实例。

本节中的示例显示了如何管理函数，而这些方法也可以用于筛选器。

Function 提供程序在 Function: 驱动器中公开其数据存储。若要使用函数，可以将您的位置更改为 Function: 驱动器（“set-location function:”）。或者，您可以从其他 Windows PowerShell 驱动器中使用函数。若要从其他位置引用函数，请在路径中使用驱动器名称 (Function:)。

Function 提供程序支持名称中包含 Item 名词的所有 cmdlet (Item cmdlet)（Invoke-Item 除外）。此外，该提供程序还支持 Get-Content 和 Set-Content cmdlet。但是，该提供程序不支持名称中包含 ItemProperty 名词的 cmdlet (ItemProperty cmdlet)，也不支持任何 cmdlet 中的 Filter 参数。

对函数的所有更改仅会影响当前控制台。若要保存更改，请将该函数添加到 Windows PowerShell 配置文件中，或使用 Export-Console 保存当前控制台。

示例

转到 Function: 驱动器

-------------------------- 示例 1 --------------------------

将当前位置更改为 Function: 驱动器。您可以从 Windows PowerShell 的任一驱动器中使用此命令。若要返回到文件系统驱动器，请键入驱动器名称。例如，键入“set-location c:”。

set-location function:

获取函数

-------------------------- 示例 1 --------------------------

此命令获取当前会话中所有函数的列表。您可以从任一 Windows PowerShell 驱动器中使用此命令。

get-childitem -path function:

-------------------------- 示例 2 --------------------------

此命令从 Function: 驱动器中获取“man”函数。此命令使用 Get-Item cmdlet 来获取该函数。管道运算符 (|) 将结果发送给 Format-Table。

Wrap 参数将一行中容纳不下的文本转至下一行。Autosize 参数重新调整各表列的大小以容纳文本。

get-item -path man | format-table -wrap -autosize

如果您位于其他驱动器中，请将驱动器名称 (Function:) 添加到路径中。

-------------------------- 示例 3 --------------------------

这些命令都可获取名为“c:”的函数。第一个命令可在任何驱动器中使用。第二个命令在 Function: 驱动器中使用。

由于名称以冒号结束（这是用于驱动器的语法），因此您必须使用驱动器名称来限定路径。在 Function: 驱动器中，可以使用两种格式之一。在第二个命令中，点 (.) 表示当前位置。

c:\PS> get-item -path function:c:

PS Function> get-item -path .\c:

创建函数

-------------------------- 示例 1 --------------------------

此命令使用 New-Item cmdlet 来创建一个名为“HKLM:”的函数。大括号中的表达式是以函数名称表示的脚本块。

new-item -path function:hklm: -value {set-location hklm:}

也可以通过在 Windows PowerShell 命令行中键入函数来创建函数。例如，键入“function:hklm: {set-location hklm:}”。如果您位于 Function: 驱动器中，则可以省略驱动器名称。 由于在 New-Item 中无法指定“Filter”标签，因此筛选器被标记为函数，不过它们使用任何标签都能正常运行。若要创建带有“Filter”标签的筛选器，请在命令行中键入 filter。例如，键入“filter:Running {$_.Status -eq "Running"}”。

-------------------------- 示例 2 --------------------------

此命令使用 New-Item cmdlet 来创建一个名为 Csrss 的函数。此命令使用 Options 动态参数将该函数的 Options 属性值指定为 ReadOnly。

new-item -path function: -name csrss -options readonly -value {get-process csrss}

此命令可以从任何位置运行。如果您位于 Function: 驱动器中，则可以点 (.) 来指定路径。点表示当前位置。

删除函数

-------------------------- 示例 1 --------------------------

此命令从当前会话中删除“hklm:”函数。

remove-item function:hklm:

-------------------------- 示例 2 --------------------------

此命令从当前会话中删除所有函数，但其 Options 属性的值为 Constant 的函数除外。如果不使用 Force 参数，则此命令不删除 Options 属性值为 ReadOnly 的函数。

remove-item function:* -force

在删除所有函数后，命令提示符将会更改，这是由于删除了用于定义命令提示符内容的 prompt 函数。

显示函数的属性和方法

-------------------------- 示例 1 --------------------------

此命令使用 Get-Item cmdlet 来获取所有函数。管道运算符将结果发送给 Get-Member cmdlet，后者显示该对象的方法和属性。

get-item -path function:* | get-member

在通过管道将对象集合（例如 Function: 驱动器中的函数集合）传递给 Get-Member 时，Get-Member 将分别评估该集合中的每个对象，并返回它找到的有关每个对象类型的信息。如果所有对象都为同一类型，则它将返回有关单一对象类型的信息。在本例中，所有函数均为 FunctionInfo 对象。 若要获取有关 FunctionInfo 对象集合的信息，请使用 Get-Member 的 InputObject 参数。例如，键入“get-member -InputObject (get-item function:*)”。使用 InputObject 参数时，Get-Member 将对集合而不是对集合中的对象进行评估。

-------------------------- 示例 2 --------------------------

此命令列出了“prompt”函数的属性值。此命令使用 Get-Item cmdlet 来获取表示“prompt”函数的对象。管道运算符 (|) 将结果发送到 Format-List 命令。Format-List 命令对 Property 参数使用通配符 (*) 来设置“prompt”函数的所有属性值的格式并显示这些值。

get-item function:prompt | format-list -property *

更改函数的属性

-------------------------- 示例 1 --------------------------

您可以使用 Set-Item cmdlet 以及 Options 动态参数来更改函数的 Options 属性的值。

此命令设置“prompt”函数的 AllScope 选项和 ReadOnly 选项。此命令使用 Set-Item cmdlet 的 Options 动态参数。只有在将 Options 参数与 Alias 或 Function 提供程序一起使用时，该参数才在 Set-Item 中可用。

set-item -path function:prompt -options "AllScope,ReadOnly"

-------------------------- 示例 2 --------------------------

此命令使用 Set-Item cmdlet 来更改“prompt”函数，以便让该函数在路径之前显示时间。

set-item -path function:prompt -value {'PS '+ $(Get-Date -format t) + " " + $(Get-Location) + '> '}

此更改将同时影响 FunctionInfo 对象的 Definition 和 ScriptBlock 属性。若要查看更改的效果，请键入“get-item -path function:prompt | format-list -property *”。

-------------------------- 示例 3 --------------------------

此命令使用 Rename-Item cmdlet 将“help”函数的名称更改为“gh”。

rename-item -path function:help -newname gh

复制函数

-------------------------- 示例 1 --------------------------

此命令将“prompt”函数复制为“oldPrompt”，其效果相当于为与 prompt 函数相关联的脚本块创建了一个新名称。如果计划更改原始 prompt 函数，您可以使用此命令来保存该函数。

新函数的 Options 属性的值为 None。若要更改 Options 属性的值，请使用 Set-Item。

copy-item -path function:prompt -destination function:oldPrompt

动态参数

动态参数是由 Windows PowerShell 提供程序添加的 cmdlet 参数，且只可用于在启用了提供程序的驱动器中使用 cmdlet 的情况。

Options <System.Management.Automation.ScopedItemOptions>

确定函数的 Options 属性的值。

Value | Description
None | 无选项。“None”为默认值。
Constant | 无法删除函数，也无法更改其属性。Constant 仅在您创建函数时才可用。不能将现有函数的选项更改为 Constant。
Private | 函数仅在当前作用域（不包含子作用域）中可见。
ReadOnly | 除非使用 Force 参数，否则无法更改函数的属性。可以使用 Remove-Item 删除函数。
AllScope | 函数将复制到创建的所有新作用域中。

支持 Cmdlet

  • New-Item

  • Set-Item

另请参阅

  • about_Functions
  • about_Providers


Registry Provider

提供程序名称

Registry

驱动器

HKLM:, HKCU:

简短说明

提供从 Windows PowerShell 对系统注册表项和注册表值的访问。

详细说明

使用 Windows PowerShell Registry 提供程序，您可以获取、添加、更改、清除和删除 Windows PowerShell 中的注册表项和注册表值。

注册表项表示为 Microsoft.Win32.RegistryKey 类的实例。注册表值表示为 PSCustomObject 类的实例。

使用 Registry 提供程序，您可以访问由注册表项和子项组成的分层命名空间。注册表值和数据不是该层次结构中的组件。实际上，它们是每个注册表项的属性。

Registry 提供程序支持包含 Item 名词的所有 cmdlet (Item cmdlet)，例如 Get-Item、Copy-Item 和 Rename Item。在处理注册表项和子项时使用 Item cmdlet。Registry 提供程序还支持包含 ItemProperty 名词的 cmdlet (ItemProperty cmdlet)。在处理注册表值和数据时使用 ItemProperty cmdlet。不能将包含 Content 名词的 cmdlet (Content cmdlet) 与 Registry 提供程序一起使用。

每个注册表项均由一个安全描述符进行保护。您可以使用 Get-Acl 来查看注册表项的安全描述符。

功能

ShouldProcess

示例

在注册表中导航

-------------------------- 示例 1 --------------------------

此命令将当前位置设置为 HKEY_LOCAL_MACHINE\Software 注册表项：

set-location hklm:\software

-------------------------- 示例 2 --------------------------

此命令显示当前位置：

get-location

管理注册表项

-------------------------- 示例 1 --------------------------

此命令显示有关 HKEY_LOCAL_MACHINE\Software 注册表项的每个直接子项的信息：此命令显示 HKEY_CURRENT_USER\Environment 注册表项中的每个注册表条目的值名称和值数据：

get-childitem -path hklm:\software

只有当 Default 注册表条目具有注册表值时，才会返回该项。

-------------------------- 示例 2 --------------------------

此命令在 HKCU:\Environment 子项下创建 TestNew 子项：此命令显示 HKEY_CURRENT_USER\Environment 注册表项中的 Temp 注册表条目的值名称和值数据：

new-item -path hkcu:\Environment\TestNew

-------------------------- 示例 3 --------------------------

此命令删除 HKEY_CURRENT_USER\Environment 注册表项的 TestNew 子项：此命令在 HKEY_CURRENT_USER 项中创建注册表条目 pstest，并将它的值设置为 pstestvalue：

remove-item -path hkcu:\Environment\TestNew

-------------------------- 示例 4 --------------------------

此命令将 TestNew 项复制到 TestCopy 子项：此命令将 HKEY_CURRENT_USER\Environment 项中的注册表条目 pstest 的值更新为 updatedvalue：

copy-item -path  hkcu:\Environment\TestNew  hkcu:\Environment\TestNew\TestCopy

-------------------------- 示例 5 --------------------------

此命令显示有关 HKEY_LOCAL_MACHINE\Software 注册表项的所有子项的信息：此命令将 HKEY_CURRENT_USER\Environment 项中的注册表条目 pstest 的值名称重命名为 pstestnew：

get-childitem -path hklm:\Software -recurse

-------------------------- 示例 6 --------------------------

此命令将 HKEY_CURRENT_USER\Environment\testnewcopy 注册表项及其属性以及它的所有子项及其属性一起移动到 HKEY_CURRENT_USER\Environment\testnew：此命令将 HKEY_CURRENT_USER\Environment 项中的注册表条目 pstestnew 复制到 HKEY_CURRENT_USER\Environment\testnewcopy 项：

move-item -path hkcu:\environment\testnewcopy `
-destination hkcu:\environment\testnew

-------------------------- 示例 7 --------------------------

此命令将 HKEY_CURRENT_USER\Environment\testnew 注册表项重命名为 HKEY_CURRENT_USER\Environment\test：此命令将 HKEY_CURRENT_USER\environment\testnewcopy 项中的注册表条目 pstestnew 复制到 HKEY_CURRENT_USER\environment\testnew 项：

rename-item -path hkcu:\environment\testnew\ -newname test

-------------------------- 示例 8 --------------------------

此命令显示指定注册表项的安全描述符：此命令清除 HKEY_CURRENT_USER\Environment\testnew 项中的注册表条目 pstestnew 的值：

get-acl -path hkcu:\environment\testnew | format-list -property *

您可以使用 Clear-Item cmdlet 来清除子项的默认注册表条目的值。例如，以下命令清除 HKEY_CURRENT_USER\Environment\testnew 注册表项的默认条目的值： clear-item -path hkcu:\environment\testnew

-------------------------- 示例 1 --------------------------

此命令显示有关 HKEY_LOCAL_MACHINE\Software 注册表项的每个直接子项的信息：此命令显示 HKEY_CURRENT_USER\Environment 注册表项中的每个注册表条目的值名称和值数据：

get-childitem -path hklm:\software

只有当 Default 注册表条目具有注册表值时，才会返回该项。

-------------------------- 示例 2 --------------------------

此命令在 HKCU:\Environment 子项下创建 TestNew 子项：此命令显示 HKEY_CURRENT_USER\Environment 注册表项中的 Temp 注册表条目的值名称和值数据：

new-item -path hkcu:\Environment\TestNew

-------------------------- 示例 3 --------------------------

此命令删除 HKEY_CURRENT_USER\Environment 注册表项的 TestNew 子项：此命令在 HKEY_CURRENT_USER 项中创建注册表条目 pstest，并将它的值设置为 pstestvalue：

remove-item -path hkcu:\Environment\TestNew

-------------------------- 示例 4 --------------------------

此命令将 TestNew 项复制到 TestCopy 子项：此命令将 HKEY_CURRENT_USER\Environment 项中的注册表条目 pstest 的值更新为 updatedvalue：

copy-item -path  hkcu:\Environment\TestNew  hkcu:\Environment\TestNew\TestCopy

-------------------------- 示例 5 --------------------------

此命令显示有关 HKEY_LOCAL_MACHINE\Software 注册表项的所有子项的信息：此命令将 HKEY_CURRENT_USER\Environment 项中的注册表条目 pstest 的值名称重命名为 pstestnew：

get-childitem -path hklm:\Software -recurse

-------------------------- 示例 6 --------------------------

此命令将 HKEY_CURRENT_USER\Environment\testnewcopy 注册表项及其属性以及它的所有子项及其属性一起移动到 HKEY_CURRENT_USER\Environment\testnew：此命令将 HKEY_CURRENT_USER\Environment 项中的注册表条目 pstestnew 复制到 HKEY_CURRENT_USER\Environment\testnewcopy 项：

move-item -path hkcu:\environment\testnewcopy `
-destination hkcu:\environment\testnew

-------------------------- 示例 7 --------------------------

此命令将 HKEY_CURRENT_USER\Environment\testnew 注册表项重命名为 HKEY_CURRENT_USER\Environment\test：此命令将 HKEY_CURRENT_USER\environment\testnewcopy 项中的注册表条目 pstestnew 复制到 HKEY_CURRENT_USER\environment\testnew 项：

rename-item -path hkcu:\environment\testnew\ -newname test

-------------------------- 示例 8 --------------------------

此命令显示指定注册表项的安全描述符：此命令清除 HKEY_CURRENT_USER\Environment\testnew 项中的注册表条目 pstestnew 的值：

get-acl -path hkcu:\environment\testnew | format-list -property *

您可以使用 Clear-Item cmdlet 来清除子项的默认注册表条目的值。例如，以下命令清除 HKEY_CURRENT_USER\Environment\testnew 注册表项的默认条目的值： clear-item -path hkcu:\environment\testnew

-------------------------- 示例 9 --------------------------

此命令从 HKEY_CURRENT_USER\Environment\testnew 注册表项中删除注册表条目 pstestnew：

remove-itemproperty -path hkcu:\environment\testnew `
-name pstestnew

-------------------------- 示例 10 --------------------------

此命令将 HKEY_CURRENT_USER\Environment\testnew 项中的默认注册表条目的值更新为“default value”：

set-itemproperty -path hkcu:\environment\testnew `
-name "(default)" -value "default value"

也可以使用 Set-Item cmdlet 来更新注册表项的默认值。例如，以下命令更新 testnew 项的默认值： set-item -path hkcu:\environment\testnew -value "another default value"

管理注册表项

-------------------------- 示例 1 --------------------------

此命令显示有关 HKEY_LOCAL_MACHINE\Software 注册表项的每个直接子项的信息：此命令显示 HKEY_CURRENT_USER\Environment 注册表项中的每个注册表条目的值名称和值数据：

get-childitem -path hklm:\software

只有当 Default 注册表条目具有注册表值时，才会返回该项。

-------------------------- 示例 2 --------------------------

此命令在 HKCU:\Environment 子项下创建 TestNew 子项：此命令显示 HKEY_CURRENT_USER\Environment 注册表项中的 Temp 注册表条目的值名称和值数据：

new-item -path hkcu:\Environment\TestNew

-------------------------- 示例 3 --------------------------

此命令删除 HKEY_CURRENT_USER\Environment 注册表项的 TestNew 子项：此命令在 HKEY_CURRENT_USER 项中创建注册表条目 pstest，并将它的值设置为 pstestvalue：

remove-item -path hkcu:\Environment\TestNew

-------------------------- 示例 4 --------------------------

此命令将 TestNew 项复制到 TestCopy 子项：此命令将 HKEY_CURRENT_USER\Environment 项中的注册表条目 pstest 的值更新为 updatedvalue：

copy-item -path  hkcu:\Environment\TestNew  hkcu:\Environment\TestNew\TestCopy

-------------------------- 示例 5 --------------------------

此命令显示有关 HKEY_LOCAL_MACHINE\Software 注册表项的所有子项的信息：此命令将 HKEY_CURRENT_USER\Environment 项中的注册表条目 pstest 的值名称重命名为 pstestnew：

get-childitem -path hklm:\Software -recurse

-------------------------- 示例 6 --------------------------

此命令将 HKEY_CURRENT_USER\Environment\testnewcopy 注册表项及其属性以及它的所有子项及其属性一起移动到 HKEY_CURRENT_USER\Environment\testnew：此命令将 HKEY_CURRENT_USER\Environment 项中的注册表条目 pstestnew 复制到 HKEY_CURRENT_USER\Environment\testnewcopy 项：

move-item -path hkcu:\environment\testnewcopy `
-destination hkcu:\environment\testnew

-------------------------- 示例 7 --------------------------

此命令将 HKEY_CURRENT_USER\Environment\testnew 注册表项重命名为 HKEY_CURRENT_USER\Environment\test：此命令将 HKEY_CURRENT_USER\environment\testnewcopy 项中的注册表条目 pstestnew 复制到 HKEY_CURRENT_USER\environment\testnew 项：

rename-item -path hkcu:\environment\testnew\ -newname test

-------------------------- 示例 8 --------------------------

此命令显示指定注册表项的安全描述符：此命令清除 HKEY_CURRENT_USER\Environment\testnew 项中的注册表条目 pstestnew 的值：

get-acl -path hkcu:\environment\testnew | format-list -property *

您可以使用 Clear-Item cmdlet 来清除子项的默认注册表条目的值。例如，以下命令清除 HKEY_CURRENT_USER\Environment\testnew 注册表项的默认条目的值： clear-item -path hkcu:\environment\testnew

-------------------------- 示例 1 --------------------------

此命令显示有关 HKEY_LOCAL_MACHINE\Software 注册表项的每个直接子项的信息：此命令显示 HKEY_CURRENT_USER\Environment 注册表项中的每个注册表条目的值名称和值数据：

get-childitem -path hklm:\software

只有当 Default 注册表条目具有注册表值时，才会返回该项。

-------------------------- 示例 2 --------------------------

此命令在 HKCU:\Environment 子项下创建 TestNew 子项：此命令显示 HKEY_CURRENT_USER\Environment 注册表项中的 Temp 注册表条目的值名称和值数据：

new-item -path hkcu:\Environment\TestNew

-------------------------- 示例 3 --------------------------

此命令删除 HKEY_CURRENT_USER\Environment 注册表项的 TestNew 子项：此命令在 HKEY_CURRENT_USER 项中创建注册表条目 pstest，并将它的值设置为 pstestvalue：

remove-item -path hkcu:\Environment\TestNew

-------------------------- 示例 4 --------------------------

此命令将 TestNew 项复制到 TestCopy 子项：此命令将 HKEY_CURRENT_USER\Environment 项中的注册表条目 pstest 的值更新为 updatedvalue：

copy-item -path  hkcu:\Environment\TestNew  hkcu:\Environment\TestNew\TestCopy

-------------------------- 示例 5 --------------------------

此命令显示有关 HKEY_LOCAL_MACHINE\Software 注册表项的所有子项的信息：此命令将 HKEY_CURRENT_USER\Environment 项中的注册表条目 pstest 的值名称重命名为 pstestnew：

get-childitem -path hklm:\Software -recurse

-------------------------- 示例 6 --------------------------

此命令将 HKEY_CURRENT_USER\Environment\testnewcopy 注册表项及其属性以及它的所有子项及其属性一起移动到 HKEY_CURRENT_USER\Environment\testnew：此命令将 HKEY_CURRENT_USER\Environment 项中的注册表条目 pstestnew 复制到 HKEY_CURRENT_USER\Environment\testnewcopy 项：

move-item -path hkcu:\environment\testnewcopy `
-destination hkcu:\environment\testnew

-------------------------- 示例 7 --------------------------

此命令将 HKEY_CURRENT_USER\Environment\testnew 注册表项重命名为 HKEY_CURRENT_USER\Environment\test：此命令将 HKEY_CURRENT_USER\environment\testnewcopy 项中的注册表条目 pstestnew 复制到 HKEY_CURRENT_USER\environment\testnew 项：

rename-item -path hkcu:\environment\testnew\ -newname test

-------------------------- 示例 8 --------------------------

此命令显示指定注册表项的安全描述符：此命令清除 HKEY_CURRENT_USER\Environment\testnew 项中的注册表条目 pstestnew 的值：

get-acl -path hkcu:\environment\testnew | format-list -property *

您可以使用 Clear-Item cmdlet 来清除子项的默认注册表条目的值。例如，以下命令清除 HKEY_CURRENT_USER\Environment\testnew 注册表项的默认条目的值： clear-item -path hkcu:\environment\testnew

-------------------------- 示例 9 --------------------------

此命令从 HKEY_CURRENT_USER\Environment\testnew 注册表项中删除注册表条目 pstestnew：

remove-itemproperty -path hkcu:\environment\testnew `
-name pstestnew

-------------------------- 示例 10 --------------------------

此命令将 HKEY_CURRENT_USER\Environment\testnew 项中的默认注册表条目的值更新为“default value”：

set-itemproperty -path hkcu:\environment\testnew `
-name "(default)" -value "default value"

也可以使用 Set-Item cmdlet 来更新注册表项的默认值。例如，以下命令更新 testnew 项的默认值： set-item -path hkcu:\environment\testnew -value "another default value"

动态参数

动态参数是由 Windows PowerShell 提供程序添加的 cmdlet 参数，且只可用于在启用了提供程序的驱动器中使用 cmdlet 的情况。

Type <Microsoft.Win32.RegistryValueKind>

指定在将值存储到注册表中时使用的数据类型，或标识注册表中的值的数据类型。

Value | Description
String | 指定以 Null 结尾的字符串。与 REG_SZ 等效。
ExpandString | 指定一个以 Null 结尾的字符串，该字符串包含对环境变量的未展开引用，这些引用在检索值时展开。与 REG_EXPAND_SZ 等效。
Binary | 指定任意格式的二进制数据。与 REG_BINARY 等效。
DWord | 指定一个 32 位的二进制数。与 REG_DWORD 等效。
MultiString | 指定一个包含以 Null 结尾的字符串的数组，该数组以两个 Null 字符终止。与 REG_MULTI_SZ 等效。
QWord | 指定一个 64 位的二进制数。与 REG_QWORD 等效。
Unknown | 指示不支持的注册表数据类型，如 REG_RESOURCE_LIST。

支持 Cmdlet

  • Set-Item

另请参阅

  • about_Providers


Variable Provider

提供程序名称

Variable

驱动器

Variable:

简短说明

提供对 Windows PowerShell 变量及其值的访问。

详细说明

使用 Windows PowerShell Variable 提供程序，您可以在当前控制台中获取、添加、更改、清除和删除 Windows PowerShell 变量。

Windows PowerShell Variable 提供程序支持 Windows PowerShell 创建的变量，包括自动变量、首选项变量以及您创建的变量。

Variable 提供程序是一个仅包含变量对象的平面命名空间。这些变量没有子项。

大多数变量是 System.Management.Automation.PSVariable 类的实例。不过，也存在某些变体。例如，“?”变量是 QuestionMarkVariable 类的成员，而“MaximumVariableCount”变量是 SessionStateCapacityVariable 类的成员。

Variable 提供程序在 Variable: 驱动器中公开其数据存储。若要使用变量，可以将您的位置更改为 Variable: 驱动器（“set-location variable:”），也可以从其他任何 Windows PowerShell 驱动器中使用变量。若要从其他位置引用变量，请在路径中使用驱动器名称 (Variable:)。

Windows PowerShell 提供一组专门用于查看和更改变量的 cmdlet：

-- Get-Variable

-- New-Variable

-- Set-Variable

-- Remove-Variable

-- Clear-Variable

在使用这些 cmdlet 时，无需在名称中指定 Variable: 驱动器。

Variable 提供程序支持名称中包含 Item 名词的所有 cmdlet (Item cmdlet)（Invoke-Item 除外）。Variable 提供程序支持 Get-Content 和 Set-Content cmdlet。但是，该提供程序不支持名称中包含 ItemProperty 名词的 cmdlet (ItemProperty cmdlet)，也不支持任何 cmdlet 中的 Filter 参数。

还可以使用 Windows PowerShell 表达式分析程序来创建、查看和更改变量的值，而无需使用 cmdlet。在直接使用变量时，使用美元符号 ($) 可将名称标识为变量，且使用赋值运算符 (=) 可建立和更改该变量的值。例如，“$p = get-process”将创建“p”变量，并将“get-process”命令的结果存储到该变量中。

对变量的所有更改仅会影响当前会话。若要保存更改，请将这些更改添加到 Windows PowerShell 配置文件中，或使用 Export-Console 保存当前控制台。

示例

转到 Variable: 驱动器

-------------------------- 示例 1 --------------------------

此命令将当前位置更改为 Variable: 驱动器。您可以从 Windows PowerShell 的任一驱动器中使用此命令。若要返回到文件系统驱动器，请键入驱动器名称。例如，键入“set-location c:”。

set-location variable:

显示变量的值

-------------------------- 示例 1 --------------------------

此命令可获取当前会话中所有变量及其值的列表。您可以从任一 Windows PowerShell 驱动器中使用此命令。

get-childitem -path variable:

-------------------------- 示例 2 --------------------------

此命令获取名称以“max”开头的变量。您可以从任一 Windows PowerShell 驱动器中使用此命令。

get-childitem -path variable:max*

如果您位于 Variable: 驱动器中，则可以省略路径中的驱动器名称。

-------------------------- 示例 3 --------------------------

此命令通过在命令行键入 WhatIfPreference 变量来获取其值。

变量名称以美元符号 ($) 开头，以指示其为变量。不指定 Variable: 驱动器名称。

$WhatIfPreference

-------------------------- 示例 4 --------------------------

此命令使用 Get-ChildItem 的 LiteralPath 参数从 Variable: 驱动器中获取“?”变量的值。Get-ChildItem 不会尝试解析 LiteralPath 参数值中的任何通配符。

get-childitem -literalpath ?

若要显示具有特殊字符名称的变量的值，同时不使用 cmdlet，请键入一个美元符号 ($) 以及该变量名称。例如，若要显示变量“?”的值，请键入“$?”。

-------------------------- 示例 5 --------------------------

此命令获取其 Options 属性值为“ReadOnly”或“Constant”的变量。

get-childitem -path variable: | where-object {$_.options -match "Constant" -or $_.options -match "ReadOnly"} | format-list -property name, value, options

创建新变量

-------------------------- 示例 1 --------------------------

此命令创建“services”变量并在该变量中存储 Get-Service 命令的结果。由于当前位置位于 Variable: 驱动器中，因此 Path 参数的值为一个点 (.)，该点表示当前位置。

Get-Service 命令两侧的圆括号可确保在创建变量之前执行此命令。如果没有圆括号，则新变量的值将为“Get-Service”字符串。

new-item -path . -name services -value (Get-Service)

如果您不是位于 Variable: 驱动器中，请在路径中包括 Variable: 驱动器名称。

-------------------------- 示例 2 --------------------------

此命令创建“services”变量并在该变量中存储 Get-Service 命令的结果。

此命令使用美元符号 ($) 来指示变量，并使用赋值运算符 (=) 将 Get-Service 命令的结果赋给新创建的变量。

$services = Get-Service

若要创建没有值的变量，请省略赋值运算符。

显示变量的属性和方法

-------------------------- 示例 1 --------------------------

此命令使用 Get-Item cmdlet 来获取所有变量。管道运算符 (|) 将结果发送给 Get-Member cmdlet，后者显示该对象的方法和属性。

get-item -path variable:* | get-member

在通过管道将对象集合（例如 Variable: 驱动器中的变量集合）传递给 Get-Member 时，Get-Member 将分别评估该集合中的每个对象，并返回它发现的有关每个对象类型的信息。 若要获取有关 Variable: 驱动器中的对象集合的信息，请使用 Get-Member 的 InputObject 参数。例如“get-member -inputobject (get-item variable:*)”。使用 InputObject 时，Get-Member 将对集合而不是集合中的对象进行评估。

-------------------------- 示例 2 --------------------------

此命令列出了“home”变量的属性值。此命令使用 Get-Item cmdlet 来获取表示“home”变量的对象。管道运算符 (|) 将结果发送到 Format-List 命令。Format-List 命令将对 Property 参数使用通配符 (*) 来设置“home”变量的所有属性值的格式并显示这些值。

get-item variable:home | format-list -property *

更改变量的属性

-------------------------- 示例 1 --------------------------

此命令使用 Rename-Item cmdlet 将“a”变量的名称更改为“processes”。

rename-item -path variable:a -newname processes

-------------------------- 示例 2 --------------------------

此命令使用 Set-Item cmdlet 将 ErrorActionPreference 变量的值更改为“Stop”。

set-item -path variable:ErrorActionPreference -value Stop

-------------------------- 示例 3 --------------------------

此命令将 ErrorActionPreference 变量的值更改为“Stop”。

此命令使用美元符号 ($) 来指示变量，并使用赋值运算符 (=) 进行赋值。

$ErrorActionPreference = Stop

复制变量

-------------------------- 示例 1 --------------------------

此命令使用 Copy-Item cmdlet 将“processes”变量复制为“old_processes”。这样，将创建一个名为“old_processes”的新变量，该变量的值与“processes”变量的值相同。

copy-item -path variable:processes -destination variable:old_processes

如果从 Variable: 驱动器中发出该命令，则可以省略 Path 参数值中的驱动器名称。

-------------------------- 示例 2 --------------------------

此命令将“processes”变量复制为“old_processes”，而无需使用 cmdlet。此命令使用美元符号 ($) 来指示变量，并使用赋值运算符将 $processes 的值赋予 old_processes。

$old_processes = $processes

删除变量

-------------------------- 示例 1 --------------------------

此命令从当前会话中删除“serv”变量。在任何 Windows PowerShell 驱动器中，都可以使用此命令。

remove-variable -path variable:serv

-------------------------- 示例 2 --------------------------

此命令从当前会话中删除所有变量，但其 Options 属性的值为 Constant 的变量除外。如果不使用 Force 参数，则此命令不删除 Options 属性值为 ReadOnly 的变量。

remove-item variable:* -force

将变量的值设置为 NULL

-------------------------- 示例 1 --------------------------

此命令使用 Clear-Item cmdlet 将“processes”变量的值更改为 NULL。

clear-item -path variable:processes

-------------------------- 示例 2 --------------------------

此命令通过将 null 值赋予“processes”变量来清除该变量的值。此命令使用 $null 自动变量来表示 NULL 值。

$processes = $null

另请参阅

  • about_Variables
  • about_Automatic_Variables
  • about_Providers


WSMan Provider

提供程序名称

WSMan

驱动器

WSMan

简短说明

提供对 Web Services for Management (WS-Management) 配置信息的访问。

详细说明

使用 Windows PowerShell 的 WS-Management 提供程序，您可以添加、更改、清除和删除本地或远程计算机上的 WS-Management 配置数据。

WS-Management 提供程序将公开一个 Windows PowerShell 驱动器，此驱动器具有与 WS-Management 配置设置的逻辑分组对应的目录结构。这些分组称为容器。

-- Client

可以配置 WS-Management 客户端的各个方面。配置信息存储在注册表中。

-- Service

可以配置 WS-Management 服务的各个方面。配置信息存储在注册表中。

注意：服务配置有时称为服务器配置。

-- Shell

可以配置 WS-Management shell 的各个方面，例如允许远程 shell 访问 (AllowRemoteShellAccess) 的设置和允许的最大并发用户数 (MaxConcurrentUsers)。

-- Listener

可以创建和配置侦听器。侦听器是一项用于实现 WS-Management 协议以发送和接收消息的管理服务。

-- Plugin

插件由 WS-Management 服务加载和使用以提供各种功能。默认情况下，Windows PowerShell 提供三个插件：Event Forwarding 插件、Microsoft.PowerShell 插件和 Windows Management Instrumentation (WMI) 提供程序插件。这三个插件支持事件转发、配置和 WMI 访问。

-- ClientCertificate

可以创建和配置客户端证书。在 WS-Management 客户端配置为使用证书身份验证时使用客户端证书。

WS-Management 提供程序的目录层次结构

---------------

本地计算机的 WS-Management 提供程序的目录层次结构如下所示：

WSMan:\localhost

--- Client

--- Service

--- Shell

--- Listener

------ <Specific_Listener>

--- Plugin

------ Event Forwarding Plugin

--------- InitializationParameters

--------- Resources

------------ Security

------ Microsoft.Powershell

--------- InitializationParameters

--------- Resources

------------ Security

------ WMI Provider

--------- InitializationParameters

--------- Resources

------------ Security

--- ClientCertificate

远程计算机的 WS-Management 提供程序的目录层次结构与本地计算机相同。但是，若要访问远程计算机的配置设置，需要使用 Connect-WSMan 建立与远程计算机的连接。建立与远程计算机的连接后，远程计算机的名称将显示在该提供程序中。

WSMan:\<Remote_Computer_Name>

--- Client

--- Service

--- Shell

--- Listener

------ <Specific_Listener>

--- Plugin

------ Event Forwarding Plugin

--------- InitializationParameters

--------- Resources

------------ Security

------ Microsoft.Powershell

--------- InitializationParameters

--------- Resources

------------ Security

------ WMI Provider

--------- InitializationParameters

--------- Resources

------------ Security

--- ClientCertificate

客户提供程序帮助

--------------------

Listener、Plugin（IntitializationParameters、Resources、Security）和 ClientCertificate 提供程序路径提供了特定的 New-Item 支持。在相关路径中键入“get-help New-Item”可获得自定义帮助。

示例

在 WSMan: 驱动器中导航

-------------------------- 示例 1 --------------------------

此命令使用 Set-Location cmdlet 更改 WSMan: 驱动器的当前位置。

Set-Location WSMan:

-------------------------- 示例 2 --------------------------

此命令使用 Set-Location 命令将当前位置更改为 Localhost 存储位置中的根目录位置。使用反斜杠 (\) 或正斜杠 (/) 指示 WSMan: 驱动器的级别。

Set-Location -Path Localhost

如果您不在 WSMan: 驱动器中，请在路径前面添加驱动器名称。

-------------------------- 示例 3 --------------------------

此命令使用 Set-Location 命令将当前位置更改为远程系统存储位置中的根目录位置。使用反斜杠 (\) 或正斜杠 (/) 指示 WSMan: 驱动器的级别。

Set-Location -Path  WSMan:\SERVER01

如果您不在 WSMan: 驱动器中，请在路径前面添加驱动器名称。 上述命令假设与远程系统的连接已存在。如果尚未建立与远程系统的连接，则在导航到远程系统存储位置中的根目录位置之前可以立即建立连接。例如： WSMan-Connect SERVER01 Set-Location -Path WSMan:\SERVER01

-------------------------- 示例 4 --------------------------

此命令使用 Set-Location 命令将当前位置更改为 Localhost 存储位置中的客户端位置。使用反斜杠 (\) 或正斜杠 (/) 指示 WSMan: 驱动器的级别。

Set-Location -Path Localhost\Client

如果您不在 WSMan: 驱动器中，请在路径前面添加驱动器名称。

显示 WSMan: 驱动器的内容

-------------------------- 示例 1 --------------------------

此命令使用 Get-Childitem cmdlet 在 Localhost 存储位置中显示 WS-Management 存储。

get-childitem -path WSMan:\Localhost

如果您位于 WSMan: 驱动器中，则可以省略驱动器名称。

-------------------------- 示例 2 --------------------------

此命令使用 Get-Childitem cmdlet 在远程计算机 (SERVER01) 存储位置中显示 WS-Management 存储。

get-childitem -path WSMan:\SERVER01

如果您位于 WSMan: 驱动器中，则可以省略驱动器名称。 上述命令假设与远程系统的连接已存在。如果尚未建立与远程系统的连接，则在远程系统存储位置中显示属性和容器时可以立即建立连接。例如： WSMan-Connect SERVER01 get-childitem -path WSMan:\SERVER01

-------------------------- 示例 3 --------------------------

此命令使用 Get-Childitem cmdlet 显示当前 WS-Management 连接。

get-childitem -path WSMan:\

如果您位于 WSMan: 驱动器中，则可以省略驱动器名称。

-------------------------- 示例 4 --------------------------

此命令使用 Get-Item cmdlet 来获取当前存储中的属性和容器。

Get-Childitem

上述命令将返回属性和容器的列表。例如： PS WSMan:\localhost&gt; get-childitem WSManConfig: Microsoft.WSMan.Management\WSMan::localhost 名称 值 类型 ---- ----- ---- MaxEnvelopeSizekb 150 System.String MaxTimeoutms 60000 System.String MaxBatchItems 32000 System.String MaxProviderRequests 4294967295 System.String Client 容器 Service 容器 Shell 容器 Listener 容器 Plugin 容器 ClientCertificate 容器

动态参数

动态参数是由 Windows PowerShell 提供程序添加的 cmdlet 参数，且只可用于在启用了提供程序的驱动器中使用 cmdlet 的情况。

Address <String>

指定对其创建了此侦听器的地址。其值可以为以下值之一：

-- 文本字符串“*”。（通配符 (*) 使该命令绑定所有网络接口卡 [NIC] 上的所有 IP 地址。）

-- 文本字符串“IP:”，后跟 IPv4 点分十进制格式或 IPv6 冒号十六进制格式的有效 IP 地址。

-- 文本字符串“MAC:”，后跟 NIC 的 MAC 地址。例如：MAC:32-a3-58-90-be-cc。

注意：创建侦听器时会设置地址值。

支持 Cmdlet

  • Get-Item

AllowRemoteShellAccess <Boolean>

启用对远程 shell 的访问。如果将此参数设置为 False，则服务器将会拒绝新远程 shell 连接。默认值为 True。

支持 Cmdlet

  • Get-Item

  • Set-Item

AllowUnEncrypted <Boolean>

允许客户端计算机请求未加密的通信。默认情况下，客户端计算机需要加密的网络通信。

支持 Cmdlet

  • Get-Item

  • Set-Item

Arguments <String>

指定参数字符串和要传递给自定义 shell 的命令行参数。此参数是可选的。

支持 Cmdlet

  • Get-Item

  • Set-Item

Basic <Boolean>

允许客户端计算机使用基本身份验证。基本身份验证是一种方案，在该方案中，用户名和密码以明文形式发送到服务器或代理服务器。此方法是最不安全的身份验证方法。

支持 Cmdlet

  • Get-Item

  • Set-Item

Capability <Enumeration>

指定此统一资源标识符 (URI) 支持的操作。必须为 URI 支持的每种类型的操作创建一个条目。有效值如下：

-- Create：支持对 URI 的创建操作。如果 Create 操作支持 SupportFragment 属性这一概念，则使用该属性。SupportFiltering 属性无效，该属性应设置为 False。如果同时支持 Shell 操作，则此操作不适用于 URI。

-- Delete：支持对 URI 的删除操作。如果 Delete 操作支持 SupportFragment 属性这一概念，则使用该属性。SupportFiltering 属性无效，该属性应设置为 False。如果同时支持 Shell 操作，则此操作不适用于 URI。

-- Enumerate：支持对 URI 的枚举操作。Enumerate 操作不支持 SupportFragment 属性，该属性应设置为 False。SupportFiltering 属性有效，如果插件支持筛选，则此属性应设置为 True。如果同时支持 Shell 操作，则此操作不适用于 URI。

-- Get：支持对 URI 的 Get 操作。如果 Get 操作支持 SupportFragment 属性这一概念，则使用该属性。SupportFiltering 属性无效，该属性应设置为 False。如果同时支持 Shell 操作，则此操作不适用于 URI。

-- Invoke：支持对 URI 的调用操作。Invoke 操作不支持 SupportFragment 属性，该属性应设置为 False。SupportFiltering 属性无效，该属性应设置为 False。如果同时支持 Shell 操作，则此操作不适用于 URI。

-- Put：支持对 URI 的 Put 操作。如果 Put 操作支持 SupportFragment 属性这一概念，则使用该属性。SupportFiltering 属性无效，该属性应设置为 False。如果同时支持 Shell 操作，则此操作不适用于 URI。

-- Subscribe：支持对 URI 的订阅操作。Subscribe 操作不支持 SupportFragment 属性，该属性应设置为 False。SupportFiltering 属性无效，该属性应设置为 False。如果同时支持 Shell 操作，则此操作不适用于 URI。

-- Shell：支持对 URI 的 Shell 操作。Shell 操作不支持 SupportFragment 属性，该属性应设置为 False。SupportFiltering 属性无效，该属性应设置为 False。如果同时支持任何其他操作，则此操作不适用于 URI。如果为 URI 配置了 Shell 操作，则在 WS-Management (WinRM) 服务中对 Get、Put、Create、Delete、Invoke 和 Enumerate 操作进行内部处理，以管理 shell。因此，插件无法处理操作。

支持 Cmdlet

  • Get-Item

  • New-Item

  • Remove-Item

  • Set-Item

CbtHardeningLevel <String>

设置身份验证请求中的通道绑定令牌要求的策略。有效值如下：

-- Strict：除非存在通道绑定令牌，否则将拒绝任何请求。此设置使用通道绑定令牌，可保证所有连接都是安全的。

-- Relaxed：如果请求中存在通道绑定令牌，连接将是安全的。如果不存在通道绑定令牌，仍将接受连接。但是，连接将易于受到使用通道绑定令牌可阻止的攻击。

-- None：提供的任何通道绑定令牌都将被忽略。

此参数的值仅对 HTTPS 连接有效。

支持 Cmdlet

  • Get-Item

  • Set-Item

CertificateThumbprint <String>

指定服务证书的证书指纹。

此值表示证书的“证书指纹”字段中的两位十六进制值字符串。它指定有权执行此操作的用户帐户的数字公钥证书 (X509)。证书用于基于客户端证书的身份验证。证书只能映射到本地用户帐户，而不适用于域帐户。若要获取证书指纹，请在 Windows PowerShell Cert: 驱动器中使用 Get-Item 或 Get-ChildItem cmdlet。

支持 Cmdlet

  • Clear-Item

  • Get-Item

  • Set-Item

Certificate <Boolean>

允许客户端用于证书身份验证。WS-Management 客户端将尝试查找计算机存储中的证书。如果该客户端在计算机存储中找不到证书，将尝试在当前用户存储中查找。如果未找到任何匹配的证书，用户将收到一条错误消息。

支持 Cmdlet

  • Get-Item

  • Set-Item

CredSSP <Boolean>

允许客户端使用凭据安全服务提供程序 (CredSSP) 身份验证。

CredSSP 身份验证允许用户委派凭据。此选项用于这样的命令：在一台远程计算机上运行，但从其他远程计算机上收集数据或者在其他远程计算机上运行其他命令。

注意：CredSSP 身份验证将本地计算机中的用户凭据委派给远程计算机。此操作增加了远程操作的安全风险。如果远程计算机的安全受到威胁，则在向该计算机传递凭据时，可使用这些凭据来控制网络会话。

支持 Cmdlet

  • Get-Item

  • Set-Item

HTTP <Unsigned Short Integer>

指定在使用 HTTP 时客户端将使用的端口。默认情况下，HTTP 使用端口 80。您可以指定 1 到 65535 之间的任何值。

支持 Cmdlet

  • Get-Item

  • Set-Item

HTTPS <Unsigned Short Integer>

指定在使用 HTTPS 时客户端将使用的端口。默认情况下，HTTPS 使用端口 443。您可以指定 1 到 65535 之间的任何值。

支持 Cmdlet

  • Get-Item

  • Set-Item

Digest <Boolean>

允许客户端使用摘要式身份验证。摘要式身份验证是一种质询响应方案，该方案将服务器指定的数据字符串用于质询。只有客户端计算机可以发起摘要式身份验证请求。客户端计算机向服务器发送请求以进行身份验证并接收来自服务器的令牌字符串。然后，客户端计算机发送资源请求，包括用户名和与令牌字符串结合使用的加密哈希密码。HTTP 和 HTTPS 支持摘要式身份验证。WinRM Shell 客户端脚本和应用程序可以指定摘要式身份验证，但 WS-Management 服务不接受摘要式身份验证。

注意：通过 HTTP 的摘要式身份验证并不安全。

支持 Cmdlet

  • Get-Item

  • Set-Item

Enabled <Boolean>

指定是启用还是禁用侦听器。默认值为 True。

支持 Cmdlet

  • Get-Item

  • Set-Item

ExactMatch <Boolean>

指定如何使用 Sddl 参数中指定的安全设置。如果 ExactMatch 参数设置为 True，则 Sddl 中的安全设置仅用于授权严格按照 URI 指定的方式对 URI 进行访问尝试。如果 ExactMatch 设置为 False，则 Sddl 中的安全设置用于授权对 URI 进行访问尝试，这些 URI 以 URI 中指定的字符串开头。

支持 Cmdlet

  • Get-Item

  • Set-Item

FileName <String>

指定用于更新 ResourceURI 和 SelectorSet 指定的管理资源的输入文件。

支持 Cmdlet

  • Get-Item

  • Set-Item

FileName (Plugin) <String>

指定操作插件的文件名。收到请求后，将在用户上下文中展开此条目中的任何环境变量。由于每个用户可能具有不同版本的相同环境变量，因此每个用户可以具有不同的插件。此条目不能为空，必须指向有效插件。

支持 Cmdlet

  • Get-Item

  • Set-Item

HostName <String>

指定运行 WS-Management (WinRM) 服务的计算机的主机名。

其值必须为完全限定的域名、IPv4 或 IPv6 文本字符串，或者为通配符。

支持 Cmdlet

  • Clear-Item

  • Get-Item

  • Set-Item

IdleTimeOut <Unsigned Long Integer>

指定当远程 shell 中没有用户活动时，远程 shell 将保持打开状态的最长时间（以毫秒为单位）。在指定的时间过后，远程 shell 将被自动删除。您可以指定 0 到 2147483647 之间的任何值。值 0 表示无限超时。默认值是 900000（15 分钟）。

支持 Cmdlet

  • Get-Item

  • Set-Item

IPv4Filter <String>

指定侦听器可以使用的 IPv4 地址。有效值如下：

-- 如果保留参数为空，则不能使用 IPv4 地址。

-- 如果输入通配符 (*)，则可以使用任何 IPv4 地址。

-- 如果输入 IP 范围列表，则可以使用指定范围中的任何 IP 地址。用逗号 (,) 分隔范围，并将每个范围指定为点分十进制格式的 IPv4 地址对（以连字符 (-) 分隔）。确保较小的值先显示在地址对中。范围包含在内。

注意：IPv4 文本字符串由四个点分十进制数字组成，每个点分十进制数字都在 0 到 255 的范围内。例如：192.168.0.0。

支持 Cmdlet

  • Clear-Item

  • Get-Item

  • Set-Item

IPv6Filter <String>

指定侦听器可以使用的 IPv6 地址。有效值如下：

-- 如果保留参数为空，则不能使用 IPv6 地址。

-- 如果输入通配符 (*)，则可以使用任何 IPv6 地址。

-- 如果输入 IP 范围列表，则可以使用指定范围中的任何 IP 地址。用逗号 (,) 分隔范围，并将每个范围指定为冒号十六进制格式的 IPv6 地址对（以连字符 (-) 分隔）。确保较小的值先显示在地址对中。范围包含在内。

注意：IPv6 文本字符串括在括号中，且包含用冒号分隔的十六进制数字。例如：[::1] 或 [3ffe:ffff::6ECB:0101]。

支持 Cmdlet

  • Clear-Item

  • Get-Item

  • Set-Item

Issuer <String>

指定颁发证书的证书颁发机构的名称。

支持 Cmdlet

  • Get-Item

  • Set-Item

Kerberos <Boolean>

允许客户端使用 Kerberos 身份验证。Kerberos 身份验证是一种方案，在该方案中，客户端和服务器使用 Kerberos 证书相互进行身份验证。

支持 Cmdlet

  • Get-Item

  • Set-Item

ListeningOn <String>

指定 IP 地址或服务实际侦听的所有 IP 地址。这些地址派生自基于与侦听器关联的实际 IP 的“地址”元素。IP 地址的值必须为 IPv4 点分十进制表示法或 IPv6 冒号分隔十六进制表示法。存在多个 ListeningOn 条目，每个条目都以 ListeningOn_ 开头。例如：

ListeningOn_1201550598

ListeningOn_1973755898

ListeningOn_1508953035

ListeningOn_1560839940

支持 Cmdlet

  • Get-Item

MaxBatchItems <Unsigned Long Integer>

指定可以在 Pull 响应中使用的元素的最大数目。您可以指定 1 到 4294967295 之间的任何值。

支持 Cmdlet

  • Get-Item

  • Set-Item

MaxConcurrentUsers <Unsigned Long Integer>

指定可以在同一计算机上通过远程 shell 同时执行远程操作的最大用户数。如果用户数超过指定的限制，新 shell 连接将被拒绝。您可以指定 1 到 100 之间的任何值。

支持 Cmdlet

  • Get-Item

  • Set-Item

MaxEnvelopeSizekb <Unsigned Long Integer>

指定最大 SOAP 数据（以千字节为单位）。您可以指定 32 到 4294967295 之间的任何值。

支持 Cmdlet

  • Get-Item

  • Set-Item

MaxMemoryPerShellMB <Unsigned Long Integer>

指定活动远程 shell 及其所有子进程可以分配的最大内存总量。您可以指定 0 到 2147483647 之间的任何值。值 0 表示远程操作分配内存的能力仅受可用虚拟内存的限制。默认值为 0。

支持 Cmdlet

  • Get-Item

  • Set-Item

MaxProcessesPerShell <Unsigned Long Integer>

指定允许任何 shell 操作启动的最大进程数。您可以指定 0 到 2147483647 之间的任意数字。值 0 允许不限数目的进程。默认情况下，限制每个 shell 启动五个进程。

支持 Cmdlet

  • Get-Item

  • Set-Item

MaxProviderRequests <Unsigned Long Integer>

指定服务允许的并发请求的最大数目。您可以指定 1 到 4294967295 之间的任何值。限制应用于每个提供程序。

注意：此值已弃用，不应再使用。

支持 Cmdlet

  • Get-Item

MaxShellsPerUser <Unsigned Long Integer>

指定任何用户可以在同一系统上远程打开的并发 shell 的最大数目。如果启用此策略设置，则在计数超过指定限制时，用户将无法打开新远程 shell。默认情况下，如果禁用此策略设置或未对其配置，将设置限制每个用户打开两个远程 shell。您可以指定 0 到 2147483647 之间的任意数字。值 0 允许不限数目的 shell。

支持 Cmdlet

  • Get-Item

  • Set-Item

MaxTimeoutMs <Unsigned Long Integer>

指定可用于除 Pull 请求之外的任何请求的最大超时（以毫秒为单位）。您可以指定 500 到 4294967295 之间的任意数字。

支持 Cmdlet

  • Get-Item

  • Set-Item

Name <String>

指定 WS-Management 会话的显示名称。使用其他 cmdlet（例如 Get-PSSession 和 Enter-PSSession）时，可以使用该名称来引用会话。该名称对于计算机或当前会话来说不必是唯一的。

支持 Cmdlet

  • Get-Item

  • Set-Item

Name (Plugin) <String>

指定用于插件的显示名称。如果插件返回错误，则显示名称将位于返回到客户端应用程序的错误 XML 中。该名称不特定于区域设置。

支持 Cmdlet

  • Get-Item

  • Set-Item

Negotiate <Boolean>

允许客户端使用 Negotiate 身份验证。Negotiate 身份验证是一种方案，在该方案中，客户端将请求发送到服务器进行身份验证。服务器确定使用 Kerberos 协议还是使用 NTLM。对域帐户进行身份验证时选择 Kerberos 协议，对本地计算机帐户进行身份验证时选择 NTLM。必须以 domain\user_name 形式指定域用户的用户名。必须以 server_name\user_name 格式指定服务器计算机上的本地用户的用户名。

支持 Cmdlet

  • Get-Item

  • Set-Item

NetworkDelayMs <Unsigned Long Integer>

指定客户端计算机等待适应网络延迟时间的额外时间（以毫秒为单位）。您可以指定 500 到 4294967295 之间的任何值。

支持 Cmdlet

  • Get-Item

  • Set-Item

Password <String>

指定本地或域帐户的密码。不能为 NULL。

客户端计算机可以指定在计算机上创建 shell 时使用的凭据。必须以 domain\user_name 形式指定域用户的用户名。必须以 server_name\user_name 格式指定服务器计算机上的本地用户的用户名。

如果使用此结构，则应同时指定“用户名”和“密码”字段。该结构可以用于基本、摘要式、Negotiate 或 Kerberos 身份验证。使用基本或摘要式身份验证时，客户端必须明确指定凭据。

支持 Cmdlet

  • Get-Item

  • Set-Item

Plugin <>

WS-Management 插件是本机动态链接库 (DLL)，这些链接库插入 WS-Management 并扩展其功能。WSW-Management 插件 API 提供了可使用户通过对支持的资源 URI 和操作实现某些 API 来编写插件的功能。为 WS-Management (WinRM) 服务或 Internet 信息服务 (IIS) 配置插件后，插件将分别加载到 WS-Management 主机或 IIS 主机中。远程请求将路由到这些插件入口点以执行操作。

支持 Cmdlet

  • New-Item

  • Remove-Item

Port <Unsigned Short Integer>

指定对其创建了此侦听器的 TCP 端口。您可以指定 1 到 65535 之间的任何值。

支持 Cmdlet

  • Get-Item

  • Set-Item

Resource <String>

指定表示不同类型的管理操作或值的终结点。服务公开了一个或多个资源，某些资源可以具有多个实例。管理资源与 WMI 类或数据库表类似，而实例与类的实例或表中的行类似。例如，Win32_LogicalDisk 类表示一个资源。Win32_LogicalDisk="C:\" 是该资源的特定实例。

统一资源标识符 (URI) 包含前缀和资源的路径。例如：

http://schemas.microsoft.com/wbem/wsman/1/wmi/root/cimv2/Win32_LogicalDisk

http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2/CIM_NumericSensor

支持 Cmdlet

  • Get-Item

  • Set-Item

ResourceURI <String>

指定用于标识计算机上特定类型的资源（例如磁盘或进程）的统一资源标识符 (URI)。

URI 由前缀和资源的路径组成。例如：

http://schemas.microsoft.com/wbem/wsman/1/wmi/root/cimv2/Win32_LogicalDisk

http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2/CIM_NumericSensor

支持 Cmdlet

  • Get-Item

RootSDDL <String>

指定访问控制条目的安全描述符定义语言 (SDDL)。这标识用于授权对特定资源 URI 进行访问的安全设置。

支持 Cmdlet

  • Get-Item

  • Set-Item

SDKVersion <String>

指定 WS-Management 插件 SDK 的版本。唯一有效的值是 1。

支持 Cmdlet

  • Get-Item

  • Set-Item

Shell <String>

指定自定义 shell 的进程字符串。您可以指定环境变量。

支持 Cmdlet

  • Get-Item

  • Set-Item

ShellTimeout <Unsigned Long Integer>

指定 shell 由于处于不活动状态而超时之前的时间长度。指定超时值（以毫秒为单位）。

支持 Cmdlet

  • Get-Item

  • Set-Item

Subject <String>

指定证书识别的条目。

支持 Cmdlet

  • Get-Item

SupportsOptions <Boolean>

指定插件是否支持使用在请求消息的 wsman:OptionSet 头中传递的选项。

支持 Cmdlet

  • Get-Item

  • Set-Item

Transport <String>

指定用来发送和接收 WS-Management 协议请求和响应的传输协议。其值必须为 HTTP 或 HTTPS。

注意：创建侦听器时会设置 Transport 值。

支持 Cmdlet

  • Get-Item

TrustedHosts <String>

通过受信任的网络连接连接到本地计算机的远程计算机的列表。如果使用不允许客户端对服务进行身份验证的身份验证方案和传输（例如，通过 HTTP 的基本身份验证），则允许将请求发送到此列表中指定的计算机。

如果在 TrustedHosts 中指定了服务器，则客户端不验证服务器的身份，从而使服务器易于受到中间人攻击。如果网络连接非常安全而不会受到恶意用户的攻击（例如在域环境中），应仅指定主机名。

指定的主机名可以为域名系统 (DNS) 名称或 IP 地址。有效值如下：

-- 空白：不信任任何主机。

-- 星号“*”字符：信任所有主机。

由逗号 (,) 分隔的主机名称模式列表。必须按照下面所示设置主机名称模式的格式：

-- 以通配符 (*) 开头的字符串。字符串必须至少包含两个字符。共享该后缀的所有主机都得到信任。

-- 以通配符 (*) 结束的字符串。字符串必须至少包含两个字符。共享该前缀的所有主机都得到信任。

-- 信任所有 NetBIOS 名称（例如，不包含句点的字符串）。

-- 没有通配符 (*) 的字符串：信任由该字符串命名的主机。

注意：TrustedHosts 值是使用 Set-Item cmdlet 设置的，Set-Item cmdlet 支持附加参数 –Concatenate。以下示例将新值 (*.domain2.com) 追加到 TrustedHost 中存储的旧值：

Set-Item .\TrustedHosts *.domain2.com -Concatenate -Force

支持 Cmdlet

  • Clear-Item

  • Get-Item

  • Set-Item

URI <String>

标识基于 Sddl 参数的值授权对其访问的 URI。

支持 Cmdlet

  • Get-Item

URLPrefix <String>

接受 HTTP 或 HTTPS 请求的 URL 前缀。这是一个仅包含字符 a-z、A-Z、9-0、下划线 (_) 和正斜杠 (/) 的字符串。字符串不得以正斜杠 (/) 开头或结束。例如，如果计算机名称为 SampleComputer，WS-Management 客户端将在目标地址中指定 http://SampleMachine/URLPrefix。

支持 Cmdlet

  • Clear-Item

  • Get-Item

  • Set-Item

UserName <String>

指定本地帐户或域帐户的用户名。其值不能为 NULL。

客户端可以指定在计算机上创建 shell 时使用的凭据。必须以 domain\user_name 格式指定域帐户的用户名。必须以 server_name\user_name 格式指定服务器计算机上的本地帐户的用户名。

如果使用此结构，则必须同时指定“用户名”和“密码”字段。该结构可以用于基本、摘要式、Negotiate 或 Kerberos 身份验证。使用基本或摘要式身份验证时，客户端必须明确指定凭据。

支持 Cmdlet

  • Get-Item

  • Set-Item

Value <String>

指定初始化参数的值，该值是用于指定配置选项的特定于插件的值。

支持 Cmdlet

  • Get-Item

  • Set-Item

XMLRenderingType <String>

指定通过 WSMAN_DATA 对象将 XML 传递给插件的格式。有效值如下：

Text：传入 XML 数据包含在 WSMAN_DATA_TYPE_TEXT 结构中，该结构将 XML 表示为 PCWSTR 内存缓冲区。

XMLReader：传入 XML 数据包含在 WSMAN_DATA_TYPE_WS_XML_READER 结构中，该结构将 XML 表示为 XmlReader 对象（该对象在 WebServices.h 头文件中定义）。

支持 Cmdlet

  • Get-Item

  • Set-Item

xmlns <String>

一个用于指定唯一标识命名空间的统一资源名称 (URN) 的字符串。

支持 Cmdlet

  • Get-Item

  • Set-Item

lang <String>

一个用于指定语言或语言-区域（语言和区域用连字符分隔）的字符串。

支持 Cmdlet

  • Get-Item

  • Set-Item

HTTP <Unsigned Short Integer>

指定在使用 HTTP 时客户端将使用的端口。默认情况下，HTTP 使用端口 80。您可以指定 1 到 65535 之间的任何值。

支持 Cmdlet

  • Get-Item

  • Set-Item

HTTPS <Unsigned Short Integer>

指定在使用 HTTPS 时客户端将使用的端口。默认情况下，HTTPS 使用端口 443。您可以指定 1 到 65535 之间的任何值。

支持 Cmdlet

  • Get-Item

  • Set-Item

MaxShellRunTime <Unsigned Long Integer>

注意：此值已弃用，不再可以使用。

支持 Cmdlet

  • Get-Item

MaxShellRunTime <Unsigned Long Integer>

注意：此值已弃用，不再可以使用。

支持 Cmdlet

  • Get-Item


Windows PowerShell 集成脚本环境 (ISE) 帮助

Windows PowerShell 集成脚本环境 (ISE) 是一款主机应用程序，可使您在一个友好的环境中编写、运行和测试脚本与模块。其语法着色、Tab 补齐、可视调试、Unicode 遵从以及上下文相关帮助等主要功能可为您提供丰富的脚本编写体验。

Windows PowerShell ISE 中的功能包括：

  • 一个命令窗格，用于按照 Windows PowerShell 控制台中的方式运行交互式命令。您只需键入命令并按 Enter 即可。

  • 一个输出窗格，用于捕获命令的输出。

  • 一个脚本窗格，用于创建、编辑、调试和运行函数、脚本与模块。

  • 多个 PowerShell 选项卡，每个选项卡都有自己的命令窗格和脚本窗格，使您可以同时处理多项独立的任务。

  • 能够以复杂文种和从右到左书写语言编辑文本。

注意：

由于 Windows PowerShell ISE 需要用户界面，因此无法在 Windows Server 的核心安装上使用。它是服务器安装中的一个可选组件。Windows PowerShell ISE 基于 Windows Presentation Foundation (WPF) 构建而成。如果 Windows PowerShell ISE 的图形元素无法在系统上正确呈现，则通过在系统中添加或调整图形呈现设置可能会解决该问题。如果计算机视频驱动程序的版本较低，或者使用的是虚拟化软件，就可能需要这样做。有关详细信息，请参阅 MSDN Library 中的“图形呈现注册表设置”，网址为 http://go.microsoft.com/fwlink/?LinkId=144711。

以下几节提供了有助于 Windows PowerShell ISE 入门的信息。

  • 探究 Windows PowerShell ISE

  • 使用 Windows PowerShell ISE

  • Windows PowerShell ISE 中的辅助功能

以下几节介绍 Windows PowerShell ISE 对象模型，并说明如何在脚本编辑中运用此模型。

  • Windows PowerShell ISE 脚本对象模型

另请参阅

  • Windows PowerShell 入门指南
  • Windows PowerShell 帮助


探究 Windows PowerShell ISE

可以使用 Windows PowerShell 集成脚本环境 (ISE) 创建、运行和调试命令与脚本。Windows PowerShell ISE 包含下列元素：菜单栏、Windows PowerShell 选项卡、工具栏、脚本选项卡、脚本窗格、输出窗格、命令窗格、状态栏、文字大小滑块以及上下文相关帮助。

菜单栏

菜单栏包含“文件”、“编辑”、“视图”、“调试”和“帮助”菜单。菜单上的按钮可用于执行与在 Windows PowerShell ISE 中编写脚本以及运行脚本和命令相关的任务。此外，通过运行某些使用 Windows PowerShell ISE 脚本对象模型的脚本，还可以在菜单栏上增设“加载项”菜单。

Windows PowerShell 选项卡

每个 Windows PowerShell 选项卡都是一个 Windows PowerShell 运行环境。通过在 Windows PowerShell ISE 中打开新的 Windows PowerShell 选项卡，可在本地或远程计算机上创建单独的环境。最多可同时打开八个 PowerShell 选项卡。

工具栏

工具栏上设有以下按钮。

按钮 | 功能
新建 | 打开一个新脚本。
打开 | 打开一个现有的脚本或文件。
保存 | 保存脚本或文件。
剪切 | 剪切选定的文本并将其复制到剪贴板中。
复制 | 将选定的文本复制到剪贴板中。
粘贴 | 在光标位置粘贴剪贴板中的内容。
清除输出窗格 | 清除输出窗格中的所有内容。
撤消 | 撤消刚才执行的操作。
恢复 | 执行刚才撤消的操作。
运行脚本 | 运行脚本。
运行选择 | 运行脚本中的选定部分。
停止执行 | 停止正在运行的脚本。
新建远程 PowerShell 选项卡 | 创建一个在远程计算机上建立会话的新 PowerShell 选项卡。随即将出现一个对话框，并提示您输入建立远程连接所需的详细信息。
启动 PowerShell.exe | 打开 PowerShell 控制台。
在顶部显示脚本窗格 | 将脚本窗格移到屏幕顶部。
在右侧显示脚本窗格 | 将脚本窗格移到屏幕右侧。
最大化显示脚本窗格 | 使脚本窗格最大化。

脚本选项卡

显示正在编辑的脚本的名称。通过单击脚本选项卡可选择要编辑的脚本。

当指向脚本选项卡时，工具提示中将显示相应脚本文件的完全限定路径。

脚本窗格

用于创建和运行脚本。在脚本窗格中，可以打开、编辑和运行现有的脚本。

输出窗格

显示所运行的命令和脚本的结果。您还可以复制和清除输出窗格中的内容。

命令窗格

用于写入命令。在命令窗格中，既可以运行单行命令，也可以运行多行命令。输入多行命令时，按 Shift+Enter 可输入每一行的内容，在输入完最后一行后，按 Enter 可执行该多行命令。命令窗格顶部显示的提示会显示当前工作目录的路径。

状态栏

用于查看所运行的命令和脚本是否已经完成。状态栏位于屏幕最下方。在错误消息中选定的部分也会显示在状态栏上。

文字大小滑块

增大或减小屏幕上的文字大小。

上下文相关帮助

以经过编译的 HTML 帮助文件 (.chm) 格式提供带搜索功能的 Windows PowerShell ISE 文档。单击“帮助”菜单上的“Windows PowerShell 帮助”可打开帮助系统。在上述任一窗格中，只要存在与光标周围的文本相匹配的 cmdlet 主题，单击“帮助”后，帮助系统都会打开该特定的主题，具体情况则取决于单击该菜单命令时的光标位置。如果没有与上下文匹配的 cmdlet 主题，帮助系统将打开默认页面。

若要退出 Windows PowerShell ISE，请单击工具栏上的“关闭”，或者在“文件”菜单上单击“退出”。

另请参阅

  • Windows PowerShell 集成脚本环境 (ISE) 帮助
  • 使用 Windows PowerShell ISE


使用 Windows PowerShell ISE

本节内容

How to Use Tab Completion in the Script Pane and the Command Pane
提供在脚本窗格和命令窗格中执行 Tab 补齐功能的步骤。

如何在 Windows PowerShell ISE 中创建 PowerShell 选项卡
提供在 Windows PowerShell ISE 中创建 Windows PowerShell 选项卡的步骤。

How to Use the Command Pane
提供用于在命令窗格中编写和运行命令的步骤。

How to Manage Results in the Output Pane
提供用于在输出窗格中管理结果的步骤。

How to Write and Run Scripts in the Script Pane
提供用于在脚本窗格中编写和运行脚本的步骤。

如何在 Windows PowerShell ISE 中调试脚本
提供用于在 Windows PowerShell ISE 中调试脚本的步骤

How to Use Profiles in Windows PowerShell ISE
提供有关配置文件的信息以及在 Windows PowerShell ISE 中使用配置文件的步骤。

另请参阅

  • 探究 Windows PowerShell ISE
  • Windows PowerShell ISE 中的辅助功能
  • Windows PowerShell ISE 对象模型参考


如何在脚本窗格和命令窗格中使用 Tab 补齐功能

当您在脚本窗格或命令窗格中键入内容时，Tab 补齐功能可提供自动帮助。使用以下步骤可利用此功能：

自动完成命令输入

在命令窗格或脚本窗格中，键入某一命令的几个字符，然后按 Tab 选择所需的补齐文本。Tab 补齐功能可帮助键入 cmdlet 名称、参数名称、变量名称、对象属性名称或路径。

注意：

在脚本窗格中，仅当编辑 .ps1、.psd1 或 .psm1 文件时，按 Tab 才会自动完成命令。在命令窗格中键入内容时，Tab 补齐功能便会起作用。

自动完成 cmdlet 参数输入

在命令窗格或脚本窗格中，键入 cmdlet，后跟一个短划线，然后按 Tab。

例如，键入 get-process - 再按 Tab，以便从 cmdlet 的参数中进行选择。

另请参阅

  • 使用 Windows PowerShell ISE
  • 如何在命令窗格中输入和运行命令


如何在 Windows PowerShell ISE 中创建 PowerShell 选项卡

PowerShell 中的选项卡可使您在同一应用程序中同时创建和使用多个执行环境。每个 PowerShell 选项卡都与一个执行环境相对应。

注意：

在一个 PowerShell 选项卡中创建的变量、函数和别名不会传播到另一个选项卡中。

使用以下步骤可打开和关闭 PowerShell 选项卡。若要重命名 PowerShell 选项卡，请设置 PowerShell Tab 脚本对象的 DisplayName 属性。

创建和使用新的 PowerShell 选项卡

  1. 在“文件”菜单上，单击“新建 PowerShell 选项卡”。新的 PowerShell 选项卡始终作为活动窗口打开。PowerShell 选项卡按打开顺序以递增方式编号。每个 ISE 实例中最多可打开八个 PowerShell 选项卡。在打开八个 PowerShell 选项卡后，“文件”菜单上的“新建 PowerShell 选项卡”按钮将显示为灰色，只有关闭至少一个 PowerShell 选项卡后才能恢复使用。

  2. 若要让某一 PowerShell 选项卡变为活动状态，请单击该选项卡。若要从打开的所有 PowerShell 选项卡中进行选择，请在“视图”菜单上单击要使用的 PowerShell 选项卡。

创建和使用新的远程 PowerShell 选项卡

  • 在“文件”菜单上，单击“新建远程 PowerShell 选项卡”，以便在远程计算机上建立会话。随即将出现一个对话框，并提示您输入建立远程连接所需的详细信息。远程选项卡的功能与本地 PowerShell 选项卡的功能类似，只不过命令和脚本将在远程计算机上运行。

关闭 PowerShell 选项卡

  1. 单击要关闭的 PowerShell 选项卡。

  2. 在“文件”菜单上单击“关闭 PowerShell 选项卡”，或者单击活动 Powershell 选项卡中的“关闭”按钮，以关闭该选项卡。

  3. 关闭选项卡时，如果其中有打开的未保存文件，系统将提示您保存文件或放弃保存。

    有关如何保存脚本的详细信息，请参阅如何保存脚本。

另请参阅

  • 使用 Windows PowerShell ISE


如何使用命令窗格

使用下面的主题可在命令窗格中编写和运行命令。

本节内容

How to Enter and Run a Command in the Command Pane
提供用于在命令窗格中输入、运行和停止命令的过程。

How to Edit Text in the Command Pane
提供用于在命令窗格中编辑文本的步骤。

如何在“参数提示”对话框中添加必需参数
说明如何输入 Windows PowerShell cmdlet 必需的参数。

另请参阅

  • 使用 Windows PowerShell ISE


如何在命令窗格中输入和运行命令

使用以下步骤可在命令窗格中输入、运行或停止命令。

输入命令

在命令窗格中键入一个命令。若要输入多个要依次执行的命令，请在命令之间键入 Shift+Enter。有关键入命令的帮助，请参阅如何在脚本窗格和命令窗格中使用 Tab 补齐功能。

运行命令

输入命令后，请在命令窗格中按 Enter。

停止命令

在工具栏上单击“停止执行”，或者按 Ctrl+Break。当上下文明确时，使用 Ctrl+C 也可以停止命令。例如，如果已在当前窗格中选择了一些文本，则按 Ctrl+C 将映射到复制操作。

另请参阅

  • 如何使用命令窗格
  • 如何在脚本窗格和命令窗格中使用 Tab 补齐功能


如何在命令窗格中编辑文本

使用以下步骤可在命令窗格中编辑文本。您可对文本执行复制、剪切和粘贴操作。还可以撤消和恢复执行的上一操作。用于执行这些操作的键盘快捷方式与用于所有 Windows 应用程序的键盘快捷方式相同。

在命令窗格中复制文本

  1. 在命令窗格中，选中要复制的文本。

  2. 在工具栏上单击“复制”，或者在“编辑”菜单上单击“复制”。

在命令窗格中剪切文本

  1. 在命令窗格中，选中要剪切的文本。

  2. 在工具栏上单击“剪切”，或者在“编辑”菜单上单击“剪切”。

向命令窗格中粘贴文本

在“命令”工具栏上单击“粘贴”，或者在“编辑”菜单上单击“粘贴”。

在命令窗格中添加行

在命令窗格中，单击鼠标，将光标置于要添加新行的位置，然后按 Shift+Enter。

在命令窗格中撤消操作

在工具栏上单击“撤消”，或者在“编辑”菜单上单击“撤消”。

在命令窗格中恢复操作

在“命令”工具栏上单击“恢复”，或者在“编辑”菜单上单击“恢复”。

另请参阅

  • 如何使用命令窗格
  • 如何在脚本窗格和命令窗格中使用 Tab 补齐功能


如何在“参数提示”对话框中添加必需参数

参数提供了一种为 Windows PowerShell cmdlet 选择选项或提供输入的方法。有些参数是必需参数，其他参数是可选参数。如果输入 cmdlet 时未指定其必需参数，Windows PowerShell 将提示您输入每个必需参数。在 Windows PowerShell 控制台中，会在命令行进行提示。在 Windows PowerShell ISE 中，会显示“参数提示”对话框，该对话框可提供与 Windows PowerShell 控制台交互行为相当的功能。该对话框将按顺序逐一显示必需参数。

注意：

Windows PowerShell 控制台体验与 Windows PowerShell ISE 体验之间的一个重要区别在于输入必需数组参数的方式。“参数提示”对话框提供了一个功能与 Enter 键相同的“确定”按钮。在输入一个数组参数值之后，当您单击“确定”或按 Enter 时，会提示您输入下一个值。单击“确定”或按 Enter 时如果不输入值，则表示数组结束；同样，在 Windows PowerShell 控制台中按 Enter 键而不输入值也表示数组结束。请注意，“参数提示”对话框中的“取消”按钮取消的是整个命令，而不是数组中的最后一个输入值。从此意义上说，“取消”按钮与 Windows PowerShell 控制台中的 Ctrl+C 相对应。

使用“参数提示”对话框

  1. 在命令窗格中，键入 start-sleep 并按 Enter。随即将出现“参数提示”对话框。系统将提示您提供必需参数“Seconds”的值。

  2. 在文本框中键入一个数字，然后单击“确定”。start-sleep 命令将运行指定的秒数。

  3. 单击“取消”而非“确定”进行体验，可以看到将取消命令。

使用“参数提示”对话框输入必需的数组参数

  1. 在脚本窗格中，打开一个新脚本文件，并键入以下各行。

    $var1 = 1
$var2 = 2
$var3 = 3
clear-variable
    在工具栏上单击“运行脚本”。随即将出现“参数提示”对话框，并提示您为 clear-variable cmdlet 的必需参数“Name”提供值。但是，Name 是一个数组参数，因此将出现提示“Name[0]”。

  2. 在“参数”文本框中，键入“var1”并单击“确定”或按 Enter。系统会提示您输入后续数组值。用“Name[1]”进行提示时，请在“参数”文本框中键入“var2”并按 Enter。单击“确定”而不输入第三个值，以标志数组结束。

  3. 接下来，在命令窗格中键入以下各行，以查看三个变量的值。var1 和 var2 的值已被清除，但 var3 仍具有为其所赋的值。

    $var1
$var2
$var3
  4. 在“参数提示”对话框中单击“取消”而非“确定”进行体验，可以看到将取消命令。

另请参阅

  • about_Parameters
  • about_Command_Syntax
  • 如何使用命令窗格


如何管理输出窗格中的结果

输出窗格显示所键入的 cmdlet 和所运行的脚本的结果。它还会显示错误消息。

使用以下步骤可对输出窗格中的结果进行管理。

选择输出窗格中的部分或全部结果

  1. 单击输出窗格中的任意位置，或者单击“视图”菜单上的“转到输出窗格”，从而将光标移到输出窗格中。

  2. 在输出窗格中，选择要使用的结果。

从输出窗格中复制并粘贴结果

  1. 若要复制选定的文本，请单击工具栏上的“复制”。

  2. 若要在当前光标位置粘贴选定的文本，请单击工具栏上的“粘贴”。

清除输出窗格中的结果

在输出窗格中不能剪切选定的文本。但是，您可以清除输出窗格中的结果。若要清除结果，请执行下列操作之一：

  • 在工具栏上，单击“清除输出窗格”。

  • 在命令窗格中，键入“clear-host”，然后按 Enter。

  • 在命令窗格中，键入“cls”，然后按 Enter。

另请参阅

  • 使用 Windows PowerShell ISE


如何在脚本窗格中编写和运行脚本

使用下面的主题可在脚本窗格中创建、编辑、运行和保存脚本。

本节内容

如何创建和运行脚本
如何管理和关闭脚本选项卡
如何在脚本窗格中编辑文本
如何保存脚本

另请参阅

  • 使用 Windows PowerShell ISE


如何创建和运行脚本

使用以下步骤可在脚本窗格中创建和运行脚本。

在脚本窗格中，可以打开和编辑某一文件类型。Windows PowerShell 中有意义的特定文件类型包括脚本文件 (.ps1)、脚本数据文件 (.psd1) 和脚本模块文件 (.psm1)。这些文件类型在脚本窗格编辑器中进行语法着色。可在脚本窗格中打开的其他常见文件类型有配置文件 (.ps1xml)、XML 文件和文本文件。

注意：

Windows PowerShell 执行策略决定您是否可以运行脚本和加载 Windows PowerShell 配置文件。默认的执行策略“Restricted”禁止所有脚本运行，并禁止加载配置文件。若要更改执行策略以允许加载和使用配置文件，请参阅 about_Signing 和 Set-ExecutionPolicy

创建新脚本文件

在工具栏上单击“新建”，或者在“文件”菜单上单击“新建”。将在一个新选项卡中显示创建的文件。默认情况下，所创建文件的类型为脚本 (.ps1)，但可使用新的名称和扩展名对其进行保存。可在同一 PowerShell 选项卡中创建多个脚本文件。

打开现有脚本

在工具栏上单击“打开…”，或者在“文件”菜单上单击“打开”。在“打开”对话框中选择要打开的文件。将在一个新选项卡中显示打开的文件。

显示文件路径

在文件选项卡上，指向文件名。工具提示中将显示该脚本文件的完全限定路径。

运行脚本

在工具栏上单击“运行脚本”，或者在“文件”菜单上单击“运行”。

运行脚本的一部分

  1. 在脚本窗格中，选中脚本的一部分。

  2. 在“文件”菜单上单击“运行选择”，或者在工具栏上单击“运行选择”。

停止正在运行的脚本

在工具栏上单击“停止执行”，按 Ctrl+Break，或者在“文件”菜单上单击“停止执行”。按 Ctrl+C 也可起到相同作用，除非已选定某些文本，此时该操作将映射为对选定文本的复制功能。

另请参阅

  • 如何在脚本窗格中编写和运行脚本
  • 使用 Windows PowerShell ISE


如何在脚本窗格中编辑文本

使用以下步骤可在脚本窗格中编辑文本。您可对文本执行复制、剪切、粘贴、查找和替换操作。还可以撤消和恢复刚刚执行的上一操作。用于执行这些操作的键盘快捷方式与用于所有 Windows 应用程序的键盘快捷方式相同。

在脚本窗格中输入文本

  1. 通过在脚本窗格中单击任意位置或在“视图”菜单中单击“转到脚本窗格”将光标移至脚本窗格。

  2. 创建一个脚本。语法着色和 Tab 补齐功能使此过程成为 Windows PowerShell ISE 中更为丰富的体验。

  3. 有关使用 Tab 补齐功能帮助键入内容的详细信息，请参阅如何在脚本窗格和命令窗格中使用 Tab 补齐功能。

在脚本窗格中查找文本

  1. 若要在任意位置查找文本，请在“编辑”菜单上单击“在脚本中查找”。

  2. 若要在光标之后查找文本，请在“编辑”菜单上单击“在脚本中查找下一个”。

  3. 若要在光标之前查找文本，请在“编辑”菜单上单击“在脚本中查找上一个”。

在脚本窗格中转到特定的文本行

  1. 在脚本窗格中的“编辑”菜单上，单击“转到行”。

  2. 输入行号。

在脚本窗格中复制文本

  1. 在脚本窗格中，选中要复制的文本。

  2. 在工具栏上单击“复制”，或者在“编辑”菜单上单击“复制”。

    注意：

    选定文本后，可以使用快捷方式 Ctrl+C 来复制所选内容。未选定任何文本时，可以使用快捷方式 Ctrl+C 来禁止执行命令。

在脚本窗格中剪切文本

  1. 在脚本窗格中，选中要剪切的文本。

  2. 在工具栏上单击“剪切”，或者在“编辑”菜单上单击“剪切”。

向脚本窗格中粘贴文本

在工具栏上单击“粘贴”，或者在“编辑”菜单上单击“粘贴”。

在脚本窗格中撤消操作

在工具栏上单击“撤消”，或者在“编辑”菜单上单击“撤消”。

在脚本窗格中恢复操作

在工具栏上单击“恢复”，或者在“编辑”菜单上单击“恢复”。

在脚本窗格中替换文本

在“编辑”菜单上，单击“在脚本中替换”。

另请参阅

  • 如何创建和运行脚本
  • 如何保存脚本
  • 如何管理和关闭脚本选项卡
  • 如何在脚本窗格和命令窗格中使用 Tab 补齐功能
  • Windows PowerShell About 帮助主题
  • Windows PowerShell Cmdlet 帮助主题


如何保存脚本

使用以下步骤可保存和命名脚本。脚本名称旁边显示的星号用来标记自更改以来一直没有保存的文件。保存文件后，星号即消失。

注意：

Windows PowerShell 文件类型（即脚本文件 (.ps1)、脚本数据文件 (.psd1) 和脚本模块文件 (.psm1)）以 Unicode 格式保存。但是，有些文件类型必须以 ANSI (ASCII) 格式保存才能正常运行，如命令脚本 (.cmd)。如果使用 Windows PowerShell ISE 创建命令脚本，那么为了保存文件，请使用 $psISE.CurrentFile 对象的 SaveAs 方法。

保存脚本

在工具栏上单击“保存”，或者在“文件”菜单上单击“保存”。

保存并命名脚本

  1. 在“文件”菜单上，单击“另存为”。“另存为”对话框随即出现。

  2. 在“文件名”框中，输入文件的名称。

  3. 在“保存类型”框中，选择一种文件类型。例如，在“保存类型”框中，选择“PowerShell 脚本(* .ps1)”。

  4. 单击“保存”。

另请参阅

  • 如何创建和运行脚本
  • 如何在脚本窗格中编辑文本
  • 如何管理和关闭脚本选项卡


如何管理和关闭脚本选项卡

使用以下步骤可在脚本窗格中管理和关闭文件。

在脚本选项卡间移动

若要在脚本选项卡间移动，请执行下列操作之一：

  • 单击要移到的脚本选项卡。

  • 在“视图”菜单中，单击要移到的脚本的名称。

关闭脚本选项卡

  1. 单击要关闭的脚本的脚本选项卡。

  2. 然后执行下列操作之一：

    • 单击脚本选项卡上的“关闭”。

    • 在“文件”菜单上单击“关闭”。

    • 如果该文件自上次保存后已经过修改，则会提示您保存或放弃修改的内容。

      有关如何保存脚本的说明，请参阅How to Save a Script 。

另请参阅

  • 如何保存脚本
  • 如何在脚本窗格中编辑文本
  • 如何保存脚本


如何在 Windows PowerShell ISE 中调试脚本

本节中的主题介绍如何使用 Windows PowerShell ISE 的可视调试功能在本地计算机上调试脚本。

本节内容

如何设置、删除、禁用、启用和列出断点
如何启动、停止和继续调试
如何在调试时逐过程执行、单步执行和跳出

另请参阅

  • 使用 Windows PowerShell ISE


如何设置、删除、禁用、启用和列出断点

在 Windows PowerShell 调试环境中可以设置三种断点：变量断点、命令断点和行断点。在以上三种断点中，只有行断点在 Windows PowerShell ISE 调试环境中突出显示并可以使用菜单或键盘快捷方式加以设置。另外两种断点也能进行设置，但需使用 Set-PSBreakpoint cmdlet 从命令窗格进行设置。您可以删除、启用、禁用和列出所有断点。本节介绍如何使用可用菜单在 Windows PowerShell ISE 中执行调试任务，以及如何通过编写脚本从命令窗格中执行更多的命令。

管理断点

设置断点

在 Windows PowerShell 脚本或函数中设置行断点。只有保存脚本后才能在其中设置断点。

设置断点的方法有两种：一是右键单击要在其中设置断点的行，然后单击“切换断点”；二是单击要在其中设置断点的行，然后在“调试”菜单上单击“切换断点”。以下脚本示例演示如何使用 Set-PSBreakpoint cmdlet 从命令窗格中设置变量断点。

# This command sets a breakpoint on the Server variable in the Sample.ps1 script.
set-psbreakpoint -script sample.ps1 -variable Server

列出所有断点

显示当前会话中的所有断点。

在“调试”菜单上，单击“列出断点”。以下脚本示例演示如何使用 Get-PSBreakpoint cmdlet 从命令窗格中列出所有断点。

 # This command lists all breakpoints in the current session.
get-psbreakpoint

删除断点

删除特定的行断点。

删除断点的方法有两种：一是右键单击要在其中删除断点的行，然后单击“切换断点”；二是单击要在其中删除断点的行，然后在“调试”菜单上单击“切换断点”。以下脚本示例演示如何使用 Remove-PSBreakpoint cmdlet 从命令窗格中删除具有指定 ID 的断点。

# This command deletes the breakpoint with breakpoint ID 2.
remove-psbreakpoint -id 2

删除所有断点

删除当前会话中的所有断点。

在“调试”菜单上，单击“删除所有断点”。以下脚本示例演示如何使用 Remove-PSBreakpoint cmdlet 从命令窗格中删除所有断点。

# This command deletes all of the breakpoints in the current session.
get-breakpoint | remove-breakpoint

禁用断点

禁用特定的行断点。

禁用断点的方法有两种：一是右键单击要在其中禁用断点的行，然后单击“禁用断点”；二是单击要在其中禁用断点的行，然后在“调试”菜单上单击“禁用断点”。以下脚本示例演示如何使用 Disable-PSBreakpoint cmdlet 从命令窗格中删除具有指定 ID 的断点。

# This command disables the breakpoint with breakpoint ID 0.
disable-psbreakpoint -id 0

禁用所有断点

禁用当前会话中的所有断点。

在“调试”菜单上，单击“禁用所有断点”。以下脚本示例演示如何使用 Disable-PSBreakpoint cmdlet 从命令窗格中禁用所有断点。

# This command disables all breakpoints in the current console.
# You can abbreviate this command as: "gbp | dbp".

get-psbreakpoint | disable-psbreakpoint

启用断点

启用特定的行断点。

启用断点的方法有两种：一是右键单击要在其中启用断点的行，然后单击“启用断点”；二是单击要在其中启用断点的行，然后按 F8 或在“调试”菜单上单击“启用断点”。以下脚本示例演示如何使用 Enable-PSBreakpoint cmdlet 从命令窗格中启用特定的断点。

# This command enables breakpoints with breakpoint IDs 0, 1, and 5.
enable-psbreakpoint -id 0, 1, 5

启用所有断点

启用当前会话中的所有断点。

在“调试”菜单上，单击“启用所有断点”。以下脚本示例演示如何使用 Enable-PSBreakpoint cmdlet 从命令窗格中启用所有断点。

# This command enables all breakpoints in the current session.
# You can abbreviate the command as "gbp | ebp".

get-psbreakpoint | enable-psbreakpoint

另请参阅

  • about_Debuggers
  • Set-PSBreakpoint
  • Get-PSBreakpoint
  • Disable-PSBreakpoint
  • Enable-PSBreakpoint
  • Remove-PSBreakpoint
  • Get-PSCallStack


如何启动、停止和继续调试

启动调试之前，必须先设置一个或多个断点。而要设置断点，又必须先保存要调试的脚本。有关如何设置断点的说明，请参阅如何设置、删除、禁用、启用和列出断点或 Set-PSBreakpoint。启动调试后，必须先停止调试，然后才能对脚本进行编辑。设置了一个或多个断点的脚本在运行前会自动保存。

启动调试

在“脚本”标题栏上，单击“运行脚本”。启动调试后，将发生以下变化：

  • 命令提示符更改为“>>>”，并以“[DBG]”作为前缀，指示正在进行调试。

  • 突出显示第一个断点。

继续调试

  1. 在“调试”菜单上单击“运行/继续”，或者在命令窗格中键入 C 并按 Enter。

  2. 单击“运行/继续”会使脚本继续执行到下一个断点或脚本末尾。

查看调用堆栈

  1. 在“调试”菜单上单击“显示调用堆栈”，或者在命令窗格中键入 K 并按 Enter。

  2. 输出窗格将显示当前的调用堆栈。

停止调试

在“调试”菜单上单击“停止调试程序”，或者在命令窗格中键入 Q 并按 Enter。

另请参阅

  • 如何设置、删除、禁用、启用和列出断点
  • 如何保存脚本
  • Set-PSBreakpoint
  • about_Debuggers
  • 如何在 Windows PowerShell ISE 中调试脚本
  • Set-StrictMode


如何在调试时逐过程执行、单步执行和跳出

使用以下信息可逐句通过脚本以对脚本进行调试。

步进是一次运行一条语句的过程。您可以停止在某一行代码处，并检查变量值和系统状态。下表介绍常见的调试任务，例如逐过程执行、单步执行和跳出。

调试任务 | 说明 | 在 PowerShell ISE 中如何完成此任务
单步执行 | 执行当前语句，然后在下一条语句处停止。如果当前语句是函数或脚本调用，则调试程序将单步执行该函数或脚本，否则调试程序将在下一条语句处停止。 | 在命令窗格中键入 S 并按 Enter，或者在“调试”菜单上单击“单步执行”。
逐过程执行 | 执行当前语句，然后在下一条语句处停止。如果当前语句是函数或脚本调用，则调试程序将执行整个函数或脚本，并在函数调用之后的下一条语句处停止。 | 在命令窗格中键入 V 并按 Enter，或者在“调试”菜单上单击“逐过程执行”。
跳出 | 跳出当前函数，如果该函数是嵌套函数，则向上移动一级。如果位于主体中，则脚本执行到末尾或下一个断点。将执行被跳过的语句，但不逐句通过。 | 在命令窗格中键入 O 并按 Enter，或者在“调试”菜单上单击“跳出”。
继续 | 继续执行到末尾或下一个断点。将执行被跳过的函数和调用，但不逐句通过。 | 在命令窗格中键入 C 并按 Enter，或者在“调试”菜单上单击“运行/继续”。

调试脚本

  1. 在要检查的代码中设置断点。有关如何设置断点的信息，请参阅How to Set, Remove, Disable Enable, Disable, and List Breakpoints或 Set-PSBreakpoint。

  2. 在“调试”菜单上单击“运行/继续”，或者在工具栏上单击“运行脚本”。下面是可能出现的情况：

    • 调试开始。脚本运行，直到找到第一个断点，然后停止。该断点将突出显示。

    • 命令提示符更改，“命令窗格”栏中出现前缀 [DBG]。

    • 输出窗格中会显示有关所遇到的断点的消息。例如，“Hit Line breakpoint on ‘C:\Users\name\Desktop\test.script.ps1:13”。

    该消息中包含脚本名称以及有关行断点、变量断点或命令断点的详细信息。

  3. 在此处，您可以逐过程执行、单步执行、跳出或继续。继续将使调试程序执行到脚本末尾或下一个断点。

  4. 若要在调试时查找某一变量的值，可在脚本窗格中将光标悬停在该变量上，或者在命令窗格中键入该变量的名称，然后按 Enter。输出窗格将显示该变量的值。继续逐步通过脚本或执行其他调试任务。

另请参阅

  • about_Debuggers
  • 如何在 Windows PowerShell ISE 中调试脚本


如何在 Windows PowerShell ISE 中使用配置文件

使用以下主题可了解如何在 Windows PowerShell 集成脚本环境 (ISE) 中使用配置文件。

注意：

在执行本节中的任务之前，请参阅 about_Profiles，或者在命令窗格中键入“get-help about_profiles”并按 Enter。

可为 Windows PowerShell ISE 创建一个或多个 Windows PowerShell 配置文件，并使用这些配置文件来添加常用的变量、别名、命令和函数。配置文件会影响您启动的所有 Windows PowerShell ISE 会话。还可以使用配置文件来保存您在 Windows PowerShell ISE 环境中自定义的项，如颜色和字体首选项。

注意：

Windows PowerShell 执行策略决定您是否可以运行脚本和加载配置文件。默认的执行策略“Restricted”禁止所有脚本运行，包括配置文件。如果使用“Restricted”策略，则不会加载配置文件。有关执行策略的详细信息，请参阅 about_Execution_Policies。

选择要在 Windows PowerShell ISE 中使用的配置文件

Windows PowerShell ISE 支持 Windows PowerShell ISE 的当前用户及所有用户的配置文件。它还支持应用于所有主机的 Windows PowerShell 配置文件。

您所使用的配置文件由 Windows PowerShell 和 Windows PowerShell ISE 的使用方式决定。

  • 如果仅使用 Windows PowerShell ISE 运行 Windows PowerShell，则会将所有项都保存在一个特定于 ISE 的配置文件（例如用于 Windows PowerShell ISE 的 CurrentUserCurrentHost 配置文件或用于 Windows PowerShell ISE 的 AllUsersCurrentHost 配置文件）中。

  • 如果使用多个主机程序运行 Windows PowerShell，则会将函数、别名、变量和命令保存在一个影响所有主机程序的配置文件（例如 CurrentUserAllHosts 或 AllUsersAllHosts 配置文件）中，并将特定于 ISE 的功能（如颜色和字体自定义）保存在用于 Windows PowerShell ISE 的 CurrentUserCurrentHost 配置文件或用于 Windows PowerShell ISE 的 AllUsersCurrentHost 配置文件中。

下面是可在 Windows PowerShell ISE 中创建和使用的配置文件。每个配置文件都保存至各自特定的路径。

配置文件类型 | 配置文件路径
“Current user, PowerShell ISE” | $profile.CurrentUserCurrentHost, or $profile
“All users, PowerShell ISE” | $profile.AllUsersCurrentHost
“Current user, All hosts” | $profile.CurrentUserAllHosts
“All users, All hosts” | $profile.AllUsersAllHosts

本节内容

如何在 Windows PowerShell ISE 中创建配置文件
提供在 Windows PowerShell ISE 中创建、移动和保存配置文件的过程。

另请参阅

  • about_Profiles
  • 使用 Windows PowerShell ISE


如何在 Windows PowerShell ISE 中创建配置文件

创建配置文件之前，必须了解要创建的配置文件的类型。有关详细信息，请参阅 about_Profiles，或者在命令窗格中键入“get-help about_profiles”并按 Enter。

创建新配置文件

  1. 若要创建新的“Current user, Windows PowerShell ISE”配置文件，请键入：

    if (!(test-path $profile ))
{new-item -type file -path $profile -force}
  2. 若要创建新的“All users, Windows PowerShell ISE”配置文件，请键入：

    if (!(test-path $profile.AllUsersCurrentHost))
{new-item -type file -path $profile.AllUsersCurrentHost -force}
  3. 若要创建新的“Current user,All Hosts”配置文件，请键入：

    if (!(test-path $profile.CurrentUserAllHosts))
{new-item -type file -path $profile.CurrentUserAllHosts -force}
  4. 若要创建新的“All user,All Hosts”配置文件，请键入：

    if (!(test-path $profile.AllUsersAllHosts))
{new-item -type file -path $profile.AllUsersAllHosts-force}

编辑配置文件

  1. 打开配置文件。例如，若要打开“Current user, Windows PowerShell ISE”配置文件，请键入：psEdit $profile

  2. 向配置文件中添加一些项。以下是一些入门示例：

    • 若要将输出窗格的默认背景色更改为蓝色，请在配置文件中键入：$psISE.Options.OutputPaneBackground = 'blue' 。有关 $psISE 变量的详细信息，请参阅 Windows PowerShell ISE 脚本对象模型。

    • 若要将字体大小更改为 20，请在配置文件中键入：$psISE.Options.FontSize =20

  3. 保存您的配置文件。在“文件”菜单上单击“保存”。下次打开 Windows PowerShell ISE 时，将应用您的自定义项。

另请参阅

  • 如何在 Windows PowerShell ISE 中使用配置文件
  • Windows PowerShell ISE 脚本对象模型
  • about_Profiles
  • about_Signing
  • Set-ExecutionPolicy


Windows PowerShell ISE 中的辅助功能

Windows PowerShell ISE 一节中的“辅助功能信息”主题包含可能对使用 Windows PowerShell 集成脚本环境 (ISE) 有所帮助的辅助功能信息。

本节内容

辅助功能信息

如何更改命令窗格和脚本窗格的大小和位置

键盘快捷方式

另请参阅

  • Windows PowerShell 集成脚本环境 (ISE) 帮助


辅助功能信息

Microsoft 承诺要使其产品和服务便于所有人使用。以下主题介绍可使 Windows PowerShell ISE 更便于残障人士使用的功能、产品和服务。

  • Windows PowerShell ISE 的辅助功能

  • Windows PowerShell ISE 帮助的辅助功能

Windows PowerShell ISE 的辅助功能

Windows PowerShell ISE 支持高对比度模式。对于弱视用户，可通过用于管理断点的 cmdlet（如 Get-PSBreakpoint 和 Set-PSBreakpoint）来获取断点信息。有关详细信息，请参阅如何设置、删除、禁用、启用和列出断点。除了 Microsoft Windows 中的辅助功能和实用工具外，以下功能也可使 Windows PowerShell ISE 更便于残障人士使用。

  • 键盘快捷方式

  • 语法着色表及使用 $psISE.Options 脚本对象修改其他几种颜色设置的功能。

  • 文本大小更改

注意：

本节中的信息仅适用于在美国获得 Microsoft 产品许可证的用户。如果您在美国以外的国家/地区获得本产品，则可使用软件包随附的辅助信息卡或访问 Microsoft 辅助功能网站，以获取 Microsoft 支持服务的电话号码和地址列表。您可以与子公司联系，以确定您所在的区域内是否提供本节中介绍的产品和服务类型。有关辅助功能的信息还以其他语言提供，包括日语和法语。

Windows PowerShell ISE 帮助的辅助功能

Windows PowerShell ISE 帮助中包括的功能使其可供更广范围的用户使用，包括行动不便、视力低下或具有其他残障的人士。

使用“帮助”窗口的键盘快捷方式：

通过使用“帮助”中的下列键盘快捷方式，可以快速完成许多常见任务。

若要执行此操作 | 请使用此键盘快捷方式
显示“帮助”窗口。 | F1
在“帮助”主题窗格与导航窗格（“目录”、“搜索”和“索引”等选项卡）之间切换光标。 | F6
在导航窗格中时，在选项卡（例如，“目录”、“搜索”和“索引”）之间进行切换。 | Alt + 选项卡的带下划线的字母
选择下一个隐藏文本或超链接。 | Tab
选择上一个隐藏文本或超链接。 | Shift+Tab
对选定的隐藏文本或超链接执行“全部显示”、“全部隐藏”操作。 | Enter
显示“选项”菜单以访问任何“帮助”工具栏命令。 | Alt+O
隐藏或显示包含“目录”、“搜索”和“索引”选项卡的窗格。 | Alt+O，然后按 T
显示已查看的上一个主题。 | Alt+O，然后按 B
按照以前显示主题的顺序显示下一个主题。 | Alt+O，然后按 F
返回到指定的主页。 | Alt+O，然后按 H
禁止“帮助”窗口打开“帮助”主题（在要禁止网页下载时很有用）。 | Alt+O，然后按 S
打开 Microsoft Internet Explorer 的“Internet 选项”对话框，在此可以更改辅助功能设置。 | Alt+O，然后按 I
刷新主题（在已链接至网页时很有用）。 | Alt+O，然后按 R
打印某一本书中的所有主题或只打印选定主题。 | Alt+O，然后按 P
关闭“帮助”窗口。 | Alt+F4
更改帮助主题的外观

  1. 若要自定义“帮助”中使用的颜色、字体样式和字体大小，请打开“帮助”窗口。

  2. 单击“选项”，然后单击“Internet 选项”。

  3. 在“常规”选项卡上单击“辅助功能”。选中“不使用网页中指定的颜色”、“不使用网页中指定的字体样式”和“不使用网页中指定的字体大小”。还可以选择使用您自己的样式表中指定的设置。

  4. 若要更改“帮助”中使用的颜色，请参阅更改“帮助”中背景或文字的颜色。若要更改字体，请参阅更改“帮助”中的字体。

更改“帮助”中背景或文字的颜色

  1. 打开“帮助”窗口。

  2. 单击“选项”，然后单击“Internet 选项”。

  3. 在“常规”选项卡上单击“辅助功能”。然后选中“不使用网页中指定的颜色”。还可以选择使用您自己的样式表中指定的设置。

  4. 若要自定义“帮助”中使用的颜色，请在“常规”选项卡上单击“颜色”。清空“使用 Windows 颜色”复选框，然后选择要使用的字体和背景色。

    注意：

    如果在“帮助”窗口中更改帮助主题的背景色，该更改也将影响在浏览器中查看网页时的背景色。
更改“帮助”中的字体

  1. 打开“帮助”窗口。

  2. 单击“选项”，然后单击“Internet 选项”。

  3. 在“常规”选项卡上单击“辅助功能”。若要使用 Microsoft Internet Explorer 实例中所用的设置，请选中“不使用网页中指定的字体样式”和“不使用网页中指定的字体大小”。还可以选择使用您自己的样式表中指定的设置。

  4. 若要自定义“帮助”中使用的字体样式，请在“常规”选项卡上单击“字体”，然后单击所需的字体样式。

    注意：

    如果在“帮助”窗口中更改帮助主题的字体，该更改也将影响在浏览器中查看网页时的字体。

在 Windows PowerShell ISE 中增大或减小文字的大小

  • 通过使用 ISE 右下角的文字大小滑块，可以更改命令、脚本和输出窗格中显示的文字大小。也可以使用“选项”脚本对象来增大 FontSize。若要增大字体大小，请向右移动文字大小滑块，或在“视图”菜单中单击“放大”。若要减小字体大小，请向左移动文字大小滑块，或在“视图”菜单中单击“缩小”。

另请参阅

  • 键盘快捷方式
  • 如何更改命令窗格和脚本窗格的大小和位置


如何更改命令窗格和脚本窗格的大小和位置

可以使用以下步骤来更改命令窗格和脚本窗格的大小及位置。当再次打开 Windows PowerShell 集成脚本环境 (ISE) 时，您所做的大小和位置更改将保留。

调整命令窗格的大小

  1. 将指针暂停于命令窗格与输出窗格之间的分隔线上。

  2. 当鼠标指针变为双向箭头时，拖动边界即可更改窗格的大小。

移动命令窗格

  1. 若要将命令窗格移至输出窗格之上，请在“命令窗格”栏上单击“向上移动命令窗格”，或者在“视图”菜单中单击“命令窗格在上”。

  2. 若要将命令窗格移至输出窗格之下，请在“命令窗格”栏上单击“向下移动命令窗格”，或者在“视图”菜单中清除“命令窗格在上”。

  3. 默认情况下，命令窗格位于输出窗格之下。

调整脚本窗格的大小

  1. 将指针暂停于脚本窗格与其他窗格之间的分隔线上。

  2. 当鼠标指针变为双向箭头时，拖动该箭头即可更改窗格的大小。

移动脚本窗格

执行下列操作之一

  • 若要将脚本窗格移到命令和输出窗格的右边，请在工具栏中单击“在右侧显示脚本窗格”，或者在“视图”菜单中单击“在右侧显示脚本窗格”。

  • 若要将脚本窗格移到命令和输出窗格的上面，请在工具栏中单击“在顶部显示脚本窗格”，或者在“视图”菜单中单击“在顶部显示脚本窗格”。

隐藏脚本窗格

若要隐藏脚本窗格，请在“脚本窗格”栏上单击“隐藏脚本窗格”，或者在“视图”菜单中清除“显示脚本窗格”。

显示脚本窗格

若要显示脚本窗格，请在“脚本窗格”栏上单击“显示脚本窗格”，或者在“视图”菜单中单击“显示脚本窗格”。

使脚本窗格最大化

若要使脚本窗格最大化，请在“脚本窗格”栏上单击“最大化显示脚本窗格”，或者在“视图”菜单中单击“最大化显示脚本窗格”。

另请参阅

  • Windows PowerShell ISE 中的辅助功能


键盘快捷方式

使用下列键盘快捷方式可在 Windows PowerShell 集成脚本环境 (ISE) 中执行操作。

用于编辑文本的键盘快捷方式

编辑文本时，可以使用下列键盘快捷方式。

操作 | 键盘快捷方式 | 使用环境
复制 | Ctrl+C | 脚本窗格、命令窗格、输出窗格
剪切 | Ctrl+X | 脚本窗格、命令窗格
在脚本中查找 | Ctrl+F | 脚本窗格
在脚本中查找下一个 | F3 | 脚本窗格
在脚本中查找上一个 | Shift+F3 | 脚本窗格
粘贴 | Ctrl+V | 脚本窗格、命令窗格
恢复 | Ctrl+Y | 脚本窗格、命令窗格
在脚本中替换 | Ctrl+H | 脚本窗格
保存 | Ctrl+S | 脚本窗格
全选 | Ctrl+A | 脚本窗格、命令窗格、输出窗格
撤消 | Ctrl+Z | 脚本窗格、命令窗格

用于运行脚本的键盘快捷方式

在脚本窗格中运行脚本时，可以使用下列键盘快捷方式。

操作 键盘快捷方式

新建

Ctrl+N

打开

Ctrl+O

运行

F5

运行选择

F8

停止执行

Ctrl+Break。当上下文明确时（当未选定任何文本时），可以使用 Ctrl+C。

Tab（到下一个脚本）

Ctrl+Tab

注意：

仅当只打开一个 PowerShell 选项卡，或打开多个 PowerShell 选项卡但焦点在脚本窗格中时，通过 Tab 转到下一个脚本才会起作用。

Tab（到上一个脚本）

Ctrl+Shift+Tab

注意：

仅当只打开一个 PowerShell 选项卡，或打开多个 PowerShell 选项卡但焦点在脚本窗格中时，通过 Tab 转到上一个脚本才会起作用。

用于自定义视图的键盘快捷方式

可以使用以下键盘快捷方式在 Windows PowerShell ISE 中自定义视图。从该应用程序的所有窗格中均可访问这些键盘快捷方式。

操作 | 键盘快捷方式
转到命令窗格 | Ctrl+D
转到输出窗格 | Ctrl+Shift+O
转到脚本窗格 | Ctrl+I
显示脚本窗格 | Ctrl+R
隐藏脚本窗格 | Ctrl+R
向上移动脚本窗格 | Ctrl+1
向右移动脚本窗格 | Ctrl+2
使脚本窗格最大化 | Ctrl+3
放大 | Ctrl+加号
缩小 | Ctrl+减号

用于调试脚本的键盘快捷方式

调试脚本时，可以使用下列键盘快捷方式。

操作 | 键盘快捷方式 | 使用环境
运行/继续 | F5 | 脚本窗格，在调试脚本时
单步执行 | F11 | 脚本窗格，在调试脚本时
逐过程执行 | F10 | 脚本窗格，在调试脚本时
跳出 | Shift+F11 | 脚本窗格，在调试脚本时
显示调用堆栈 | Ctrl+Shift+D | 脚本窗格，在调试脚本时
列出断点 | Ctrl+Shift+L | 脚本窗格，在调试脚本时
切换断点 | F9 | 脚本窗格，在调试脚本时
删除所有断点 | Ctrl+Shift+F9 | 脚本窗格，在调试脚本时
停止调试程序 | Shift+F5 | 脚本窗格，在调试脚本时
注意：

在 Windows PowerShell ISE 中调试脚本时，也可以使用为 Windows PowerShell 控制台设计的键盘快捷方式。若要使用这些快捷方式，必须在命令窗格中键入快捷方式，然后按 Enter。

操作 | 键盘快捷方式 | 使用环境
继续 | C | 命令窗格，在调试脚本时
单步执行 | S | 命令窗格，在调试脚本时
逐过程执行 | V | 命令窗格，在调试脚本时
跳出 | O | 命令窗格，在调试脚本时
重复上一个命令（对于单步执行或逐过程执行） | Enter | 命令窗格，在调试脚本时
显示调用堆栈 | K | 命令窗格，在调试脚本时
停止调试 | Q | 命令窗格，在调试脚本时
列出脚本 | L | 命令窗格，在调试脚本时
显示控制台调试命令 | H 或 ? | 命令窗格，在调试脚本时

用于 Windows PowerShell 选项卡的键盘快捷方式

使用 Windows PowerShell 选项卡时，可以使用下列键盘快捷方式。

操作 | 键盘快捷方式
关闭 PowerShell 选项卡 | Ctrl+W
新建 PowerShell 选项卡 | Ctrl+T
上一个 PowerShell 选项卡 | Ctrl+Shift+Tab。仅当所有 PowerShell 选项卡中均未打开文件时，此快捷方式才适用。
下一个 Windows PowerShell 选项卡 | Ctrl+Tab。仅当所有 PowerShell 选项卡中均未打开文件时，此快捷方式才适用。

用于启动和退出的键盘快捷方式

可以使用以下键盘快捷方式来启动 Windows PowerShell 控制台 (PowerShell.exe) 或退出 Windows PowerShell ISE。

操作 | 键盘快捷方式
退出 | Alt+F4
启动 PowerShell.exe（Windows PowerShell 控制台） | Ctrl+Shift+P


Windows PowerShell ISE 脚本对象模型

Windows PowerShell 集成脚本环境 (ISE) 公开其基础脚本对象模型，以允许用户编写可对 Windows PowerShell ISE 的各个视觉和功能方面进行操作的 Windows PowerShell 脚本。专门为此用途定义了脚本对象、其属性及其方法。

本节内容

Windows PowerShell ISE 脚本对象模型的用途
ISE 对象的层次结构
其他有用的脚本对象
Windows PowerShell ISE 对象模型参考

另请参阅

  • Windows PowerShell 集成脚本环境 (ISE) 帮助


Windows PowerShell ISE 脚本对象模型的用途

每个对象都与 Windows PowerShell 集成脚本环境 (ISE) 的形式和功能存在关联。对象模型参考会提供有关这些对象所公开的成员属性和方法的详细信息。本文将举例说明如何使用脚本直接访问这些方法和属性。脚本对象模型可使下列任务变得更加简单。

自定义 ISE 的外观

可以使用对象模型修改应用程序设置和选项。例如，您可以进行如下修改：

  • 可以更改错误、警告、详细输出和调试输出的颜色。

  • 可以获取或设置“命令”窗格、“输出”窗格和“脚本”窗格的背景色。

  • 可以设置“输出”窗格的前景色。

  • 可以设置 Windows PowerShell ISE 的字体名称和字号。

  • 可以配置警告。这包括在多个 PowerShell 选项卡中打开同一个文件时发出的警告，或在保存文件前就运行文件中的脚本时发出的警告。

  • 可以在以下两种视图之间进行切换：一是脚本窗格和输出窗格并排放置的视图；二是脚本窗格位于输出窗格之上的视图。可以将命令窗格停靠在输出窗格之下，也可以将它停靠在输出窗格之上。

增强 ISE 的功能

可以使用对象模型来增强 Windows PowerShell ISE 的功能。例如，您可以：

  • 对 Windows PowerShell ISE 实例本身进行增添和修改。例如，可以通过添加新的菜单项并将其映射到脚本来更改菜单。

  • 通过创建脚本来执行某些可使用 Windows PowerShell ISE 中的菜单命令和按钮执行的任务。例如，您可以添加、删除或选择 PowerShell 选项卡。

  • 对可使用菜单命令和按钮执行的任务进行补充。例如，您可以重命名 PowerShell 选项卡。

  • 操作与某一文件关联的“命令”窗格、“输出”窗格和“脚本”窗格的文本缓冲区。例如，您可以：

    • 获取或设置所有文本。

    • 获取或设置所选文本。

    • 运行脚本或其中的选定部分。

    • 将行滚入视图。

    • 在插入符号所在的位置插入文本。

    • 选择文本块。

    • 获取最后一行的行号。

  • 执行文件操作。例如，您可以：

    • 打开文件、保存文件或使用不同的名称保存文件。

    • 确定文件自上次保存后是否发生了更改。

    • 获取文件名。

    • 选择文件。

自动处理任务

可以使用脚本对象模型为常见的操作创建键盘快捷方式。

另请参阅

  • ISE 对象的层次结构
  • Windows PowerShell ISE 对象模型参考
  • Windows PowerShell ISE 脚本对象模型


ISE 对象的层次结构

本主题说明了属于 Windows PowerShell 集成脚本环境 (ISE) 的对象的层次结构。单击对象后，您便会转到定义该对象的 Microsoft.PowerShell.Host.ISE 名称空间中相应类的参考文档。

$psISE Object

$psISE 对象是 Windows PowerShell 集成脚本环境 (ISE) 对象层次结构的根对象。该对象位于顶级，它公开以下四个对象：

$psISE.CurrentFile

$psISE.CurrentPowerShellTab

$psISE.Options

$psISE.PowerShellTabs

$psISE.CurrentFile

$psISE.CurrentFile 对象使以下对象可用于编写脚本：

  • $psISE.CurrentFile.DisplayName

  • $psISE.CurrentFile.Editor 而 $psISE.CurrentFile.Editor 对象又使以下对象可用于编写脚本：

    • $psISE.CurrentFile.Editor.CaretColumn

    • $psISE.CurrentFile.Editor.CaretLine

    • $psISE.CurrentFile.Editor.LineCount

    • $psISE.CurrentFile.Editor.SelectedText

    • $psISE.CurrentFile.Editor.Text

  • $psISE.CurrentFile.Encoding

  • $psISE.CurrentFile.FullPath

  • $psISE.CurrentFile.IsSaved

  • $psISE.CurrentFile.IsUntitled

$psISE.CurrentPowerShellTab

$psISE.CurrentPowerShellTab 对象使以下对象可用于编写脚本：

  • $psISE.CurrentPowerShellTab.AddOnsMenu $psISE.CurrentPowerShellTab.AddOnsMenu 对象使以下对象可用于编写脚本：

    • $psISE.CurrentPowerShellTab.AddOnsMenu.Action

    • $psISE.CurrentPowerShellTab.AddOnsMenu.DisplayName

    • $psISE.CurrentPowerShellTab.AddOnsMenu.Shortcut

    • $psISE.CurrentPowerShellTab.AddOnsMenu.Submenus

  • $psISE.CurrentPowerShellTab.CanInvoke

  • $psISE.CurrentPowerShellTab.CommandPane $psISE.CurrentPowerShellTab.CommandPane 对象使以下对象可用于编写脚本：

    • $psISE.CurrentPowerShellTab.CommandPane.CaretColumn

    • $psISE.CurrentPowerShellTab.CommandPane.CaretLine

    • $psISE.CurrentPowerShellTab.CommandPane.LineCount

    • $psISE.CurrentPowerShellTab.CommandPane.SelectedText

    • $psISE.CurrentPowerShellTab.CommandPane.Text

  • $psISE.CurrentPowerShellTab.DisplayName

  • $psISE.CurrentPowerShellTab.ExpandedScript

  • $psISE.CurrentPowerShellTab.Files

  • $psISE.CurrentPowerShellTab.Output $psISE.CurrentPowerShellTab.Output 对象使以下对象可用于编写脚本：

    • $psISE.CurrentPowerShellTab.Output.CaretColumn

    • $psISE.CurrentPowerShellTab.Output.CaretLine

    • $psISE.CurrentPowerShellTab.Output.LineCount

    • $psISE.CurrentPowerShellTab.Output.SelectedText

    • $psISE.CurrentPowerShellTab.Output.Text

  • $psISE.CurrentPowerShellTab.Prompt

  • $psISE.CurrentPowerShellTab.StatusText

$psISE.Options

$psISE.Options 对象使以下对象可用于编写脚本：

  • $psISE.Options.CommandPaneBackgroundColor

  • $psISE.Options.CommandPaneUp

  • $psISE.Options.DebugBackgroundColor

  • $psISE.Options.DebugForegroundColor

  • $psISE.Options.DefaultOptions

  • $psISE.Options.ErrorBackgroundColor

  • $psISE.Options.ErrorForegroundColor

  • $psISE.Options.FontName

  • $psISE.Options.Fontsize

  • $psISE.Options.OutputPaneBackgroundColor

  • $psISE.Options.OutputPaneTextForegroundColor

  • $psISE.Options.OutputPaneTextBackgroundColor

  • $psISE.Options.ScriptPaneBackgroundColor

  • $psISE.Options.ScriptPaneForegroundColor

  • $psISE.Options.SelectedScriptPaneState

  • $psISE.Options.ShowToolBar

  • $psISE.Options.ShowWarningBeforeSavingOnRun

  • $psISE.Options.ShowWarningForDuplicateFiles

  • $psISE.Options.TokenColors

  • $psISE.Options.UseLocalHelp

  • $psISE.Options.VerboseBackgroundColor

  • $psISE.Options.VerboseForegroundColor

  • $psISE.Options.WarningBackgroundColor

  • $psISE.Options.WarningForegroundColor

另请参阅

  • Windows PowerShell ISE 脚本对象模型
  • Windows PowerShell ISE 对象模型参考


其他有用的脚本对象

以下对象可在 Windows PowerShell ISE 中提供附加的脚本功能。这些对象不属于 $psISE 层次结构的一部分。

有用的脚本对象

$psUnsupportedConsoleApplications

关于 Windows PowerShell ISE 如何与控制台应用程序交互，存在一些限制。需要用户干预的命令或自动化脚本无法像其在 Windows PowerShell 控制台中那样工作。您可能要阻止这些命令或脚本在 Windows PowerShell ISE 命令窗格中运行。$psUnsupportedConsoleApplications 对象保存了此类命令的列表。如果尝试运行此列表中的命令，则会得到消息指出不支持这些命令。下面的脚本将向该列表中添加条目：

# List the unsupported commands
psUnsupportedConsoleApplications
# Add a command to this list
psUnsupportedConsoleApplications.Add(“Mycommand”)
#Show the augmented list of commands
psUnsupportedConsoleApplications

$psLocalHelp

这是一个字典对象，可在本地编译的 HTML 帮助文件中保留帮助主题与其关联的链接之间的上下文相关映射。该对象用于查找特定主题的本地帮助。您可以在此列表中添加或删除主题。下面是 $psLocalHelp 中包含的一些键值对示例：

# See the local help map
$psLocalHelp |Format-List

示例输出：

Key : Add-Computer | Value : WindowsPowerShellHelp.chm::/html/093f660c-b8d5-43cf-aa0c-54e5e54e76f9.htm
Key : Add-Content | Value : WindowsPowerShellHelp.chm::/html/0c836a1b-f389-4e9a-9325-0f415686d194.htm

下面的脚本将向该列表中添加条目：

$psLocalHelp.Add("get-myNoun","c:\MyFolder\MyHelpChm.chm::/html/0198854a-1298-57ae-aa0c-87b5e5a84712.htm")

$psOnlineHelp

这是一个字典对象，可保留帮助主题的主题标题与其关联的外部 URL 之间的上下文相关映射。该对象用于查找特定主题的 Web 帮助。您可以在此列表中添加或删除主题。

$psOnlineHelp |format-list

示例输出：

Key : Add-Computer | Value : http://go.microsoft.com/fwlink/?LinkID=135194
Key : Add-Content | Value : http://go.microsoft.com/fwlink/?LinkID=113278

下面的脚本将向该列表中添加条目：

$psOnlineHelp.Add("get-myNoun","http://www.mydomain.com/MyNoun.html")

另请参阅

  • Windows PowerShell ISE 脚本对象模型


Windows PowerShell ISE 对象模型参考

对象模型参考

本节提供有关用于在 ISE 中定义各种对象的基础类的参考信息。

ISEEditor 对象
例如：$psISE.CurrentFile.Editor、$psISE.CurrentPowerShellTab.Output、$psISE.CurrentPowerShellTab.CommandPane。

ISEFile 对象
例如：$psISE.CurrentFile、$psISE.PowerShellTabs.Files[0]。

ISEFileCollection 对象
例如：$psISE.PowerShellTabs.Files。

ISEMenuItem 对象
例如：$psISE.CurrentPowerShellTab.AddOnsMenu、$psISE.CurrentPowerShellTab.AddOnsMenu.Submenus[0]。

ISEMenuItemCollection 对象
例如：$psISE.CurrentPowerShellTab.AddOnsMenu.Submenus。

ObjectModelRoot 对象
例如：根 $psISE 对象。

ISEOptions 对象
例如：$psISE.Options、$psISE.Options.DefaultOptions。

PowerShellTab 对象
例如：$psISE.CurrentPowerShellTab、$psISE.PowerShellTabs[0]。

PowerShellTabCollection 对象
例如：$psISE.PowerShellTabs。

另请参阅

  • Windows PowerShell ISE 脚本对象模型
  • ISE 对象的层次结构


ISEEditor 对象

ISEEditor 对象是 Microsoft.PowerShell.Host.ISE.ISEEditor 类的一个实例。输出窗格和命令窗格编辑器便是 ISEEditor 对象。每个 ISEFile 对象都有一个与之关联的 ISEEditor 对象。以下各节列出了 ISEEditor 对象的方法和属性。

方法

Clear()

清除 editor.fre 中的文本

# Clears the text in the Output pane.
$psIse.CurrentPowerShellTab.Output.Clear()

EnsureVisible(int lineNumber)

滚动编辑器，以使与指定的 lineNumber 对应的行可见。如果指定的 lineNumber 超出定义有效行号范围的间隔 (1,last line number)，则将引发异常。

lineNumber
要可见的行的编号。

# Scrolls the text in the Script Pane so that the fifth line is in view.
$psIse.CurrentFile.Editor.EnsureVisible(5)

Focus()

将焦点设置在编辑器上。

# Sets focus to the Output pane.
$psISE.CurrentPowerShellTab.Output.Focus()

GetLineLength(int lineNumber)

获取 lineNumber 所指定行的整数行长度。

lineNumber
要获取其长度的行的编号。

Returns
位于 lineNumber 的行的行长度。

# Gets the length of the first line in the text of the Command pane.
$psIse.CurrentPowerShellTab.CommandPane.GetLineLength(1)

InsertText(string text)

用文本替换所选内容或在当前插入符号位置插入文本。

text
要插入的文本。

请参阅本主题后面的Scripting Example。

Select(int startLine, int startColumn, int endLine, int endColumn)

选择从 startLine、startColumn 到 endLine、endColumn 的文本。

startLine
所选内容的起始行。

startColumn
startLine 内所选内容的起始列。

endLine
所选内容的结束行。

endColumn
endLine 内所选内容的结束列。

请参阅本主题后面的Scripting Example。

SetCaretPosition(int lineNumber, int columnNumber)

在 lineNumber 和 columnNumber 所确定的位置处设置插入符号位置。如果 lineNumber 或 columnNumber 超出各自的有效范围，则将引发异常。

lineNumber
插入符号的行号。

columnNumber
插入符号的列号。

# Set the CaretPosition.
$firstfile=$psIse.CurrentFile
$firstFile.Editor.SetCaretPosition(5,1)

属性

CaretColumn

只读属性，用于获取与插入符号位置对应的列号。

# Get the CaretColumn.
$firstfile=$psIse.CurrentFile
$firstFile.Editor.CaretColumn

CaretLine

只读属性，用于获取包含插入符号的行的编号。

# Get the CaretLine.
$firstfile=$psIse.CurrentFile
$firstFile.Editor.CaretLine

LineCount

只读属性，用于获取编辑器的行计数。

# Get the LineCount.
$firstfile=$psIse.CurrentFile
$firstFile.Editor.LineCount

SelectedText

只读属性，用于从编辑器中获取选定文本。

请参阅本主题后面的Scripting Example。

Text

读/写属性，用于从编辑器中获取文本。

请参阅本主题后面的Scripting Example。

脚本示例

# This illustrates how you can use the length of a line to select the entire line and shows how you can make it lowercase.
$myfile=$psIse.CurrentFile
# Start with clearing the text in the current file editor.
$myfile.Editor.Clear()

# Make sure the file has at least two lines of text.
$myfile.Editor.InsertText("LINE1 `n")
$myfile.Editor.InsertText("LINE2 `n")
$myfile.Editor.InsertText("LINE3 `n")
$myfile.Editor.InsertText("LINE4 `n")
$myfile.Editor.InsertText("LINE5 `n")

# You can use the GetLineLength method to get the length of the third line.
$endColumn= $myfile.Editor.GetLineLength(3)
# Select the text in the first three lines.
$myfile.Editor.Select(1,1,3,$endColumn + 1)
$selection = $myfile.Editor.SelectedText
# Clear all the text in the editor.
$myfile.Editor.Clear()
# Add the selected text back, but in lower case.
$myFile.Editor.InsertText($selection.ToLower())

另请参阅

  • ISEFile 对象
  • PowerShellTab 对象
  • Windows PowerShell ISE 脚本对象模型
  • Windows PowerShell ISE 对象模型参考
  • ISE 对象的层次结构


ISEFile 对象

ISEFile 对象表示 Windows PowerShell 集成脚本环境 (ISE) 中的文件。它是 Microsoft.PowerShell.Host.ISE.ISEFile 类的一个实例。本主题列出了它的成员方法和成员属性。$psISE.CurrentFile 和 Powershell 选项卡中 Files 集合内的文件均为 Microsoft.PowerShell.Host.ISE.ISEFile 类的实例。

方法

Save(System.Text.Encoding saveEncoding)

将文件保存到磁盘。

saveEncoding
要用于已保存文件的编码。

Exceptions
  • System.IO.IOException：无法保存文件。

# Save the file as ASCII.
$myfile=$psIse.CurrentFile
$myfile.Save( [System.Text.Encoding]::ASCII)

# Gets the current encoding.
$myfile=$psIse.CurrentFile
$myfile.Encoding

Save()

保存文件。

Exceptions
  • System.IO.IOException：无法保存文件。

# Explicitly save the file.
$psIse.CurrentFile.save()

SaveAs(string fileName)

用指定的 fileName 保存文件。

fileName
要将文件保存为的名称。该方法的默认编码是 UTF-16。

Exceptions
  • System.ArgumentNullException：fileName 为 null。

  • System.ArgumentException：fileName 为空。

  • System.IO.IOException：无法保存文件。

# Explicitly save the file.
$fullpath = "c:\temp\newname.txt"
$myfile=$psIse.CurrentFile
$myfile.SaveAs($fullPath)

SaveAs(string fileName, System.Text.Encoding saveEncoding)

用指定的 filename 以指定的编码保存文件。

fileName：
要将文件保存为的名称。可以指定文件的完整路径名。

saveEncoding
要用于保存文件的编码。

Exceptions
  • System.ArgumentNullException：fileName 为 null。

  • System.ArgumentException：fileName 为空。

  • System.IO.IOException：无法保存文件。

# Explicitly save the file as UTF8.
$fullpath = "c:\temp\newname.txt"
$myfile=$psIse.CurrentFile
$myfile.SaveAs($fullPath, [System.Text.Encoding]::UTF8)
# Gets the current encoding.
$myfile=$psIse.CurrentFile
$myfile.Encoding

属性

DisplayName

只读属性，用于获取包含此文件的显示名称的字符串。

# Shows the display name of the file.
$psIse.CurrentFile.DisplayName

Editor

只读属性，可获取用于指定文件的编辑器。

# Gets the editor and the text.
$myfile=$psIse.CurrentFile
$myfile.Editor.Text

Encoding

只读属性，用于获取原始文件编码。该属性为 System.Text.Encoding 对象。

# Shows the encoding for the file.
$myfile=$psIse.CurrentFile
$myfile.Encoding

FullPath

只读属性，可获取用于指定已打开文件的完整路径的字符串。

# Shows the full path for the file.
$myfile=$psIse.CurrentFile
$myfile.FullPath

IsSaved

只读的布尔型属性，如果文件自上次修改后已经保存，此属性将返回 true。

# Determines whether the file has been saved since it was last modified.
$myfile=$psIse.CurrentFile
$myfile.IsSaved

IsUntitled

只读属性，如果文件从未获得标题，此属性为 true。

# Determines whether the file has never been given a title.
$psISE.CurrentFile.IsUntitled
$psISE.CurrentFile.SaveAs("temp.txt")
$psISE.CurrentFile.IsUntitled

另请参阅

  • ISEFileCollection 对象
  • Windows PowerShell ISE 脚本对象模型
  • Windows PowerShell ISE 对象模型参考
  • ISE 对象的层次结构


ISEFileCollection 对象

ISEFileCollection 对象是 ISEFile 对象的集合。与 PowerShellTab 对象关联的文件集合是此类的成员。例如 $psISE.CurrentPowerShellTab.Files 集合。

方法

Add()

创建并返回一个新的无标题文件并将其添加到集合中。新创建的这个文件的 IsUntitled 属性为 true。

# Adds a new file to the collection of files in the current PowerShell tab.
$newFile = $psISE.CurrentPowerShellTab.Files.Add()
# Add the date as the first line of text in the new file.
$newFile.Editor.Text = "#" + (Get-Date)

Add(string fullPath)

将 fullPath 参数指定的文件添加到文件集合中。新创建的这个文件的 IsUntitled 属性为 false。

注意：

如果使用相对路径或文件名，而不是完整路径，此方法将引发异常。

fullpath
文件的完整指定路径。

# Adds the file specified by its fullpath to the collection of files in the current PowerShell tab.
$psISE.CurrentPowerShellTab.Files.Add("$pshome\Examples\profile.ps1")

Remove(Microsoft.PowerShell.Host.ISE.ISEFile file)

从当前的 PowerShell 选项卡中删除指定文件。

file
要从集合中删除的 ISEFile。如果文件尚未保存，此方法将引发异常。使用下面的替代方法可以强制删除未保存的文件。

# Removes the first opened file from the file collection associated with the current PowerShell tab.
$firstfile = $psISE.CurrentPowerShellTab.Files[0]
$psISE.CurrentPowerShellTab.Files.Remove($firstfile)

Remove(Microsoft.PowerShell.Host.ISE.ISEFile file, bool force)

从当前的 PowerShell 选项卡中删除指定文件。

file
要从集合中删除的 ISEFile。

force
布尔型参数，用于授予删除文件（即使自上次使用后未保存也要删除）的权限。

# Removes the first opened file from the file collection associated with the current PowerShell tab.
$firstfile = $psISE.CurrentPowerShellTab.Files[0]
$psISE.CurrentPowerShellTab.Files.Remove($firstfile, $true)

SetSelectedFile(Microsoft.PowerShell.Host.ISE.ISEFile selectedFile)

选择 selectedFile 参数指定的文件。

selectedFile
要选择的 ISEFile。

# Selects the specified file.
$firstfile = $psISE.CurrentPowerShellTab.Files[0]
$psISE.CurrentPowerShellTab.Files.SetSelectedFile($firstfile)

另请参阅

  • ISEFile 对象
  • Windows PowerShell ISE 脚本对象模型
  • Windows PowerShell ISE 对象模型参考
  • ISE 对象的层次结构


ISEMenuItem 对象

ISEMenuItem 对象是 Microsoft.PowerShell.Host.ISE.ISEMenuItem 类的一个实例。“加载项”菜单上的所有菜单对象都是 Microsoft.PowerShell.Host.ISE.ISEMenuItem 类的成员。

属性

DisplayName

只读属性，用于获取菜单的名称。

# Get the display name of the Add-ons menu item
$psISE.CurrentPowerShellTab.AddOnsMenu.SubMenus.Clear()
$psISE.CurrentPowerShellTab.AddOnsMenu.SubMenus.Add("_Process",{get-process},"Alt+P")
$psISE.CurrentPowerShellTab.AddOnsMenu.DisplayName

Action

只读属性，用于获取要在单击菜单项时调用的脚本（块）。

# Get the action associated with the first submenu item.
$psISE.CurrentPowerShellTab.AddOnsMenu.SubMenus.Clear()
$psISE.CurrentPowerShellTab.AddOnsMenu.SubMenus.Add("_Process",{get-process},"Alt+P")
$psISE.CurrentPowerShellTab.AddOnsMenu.Submenus[0].Action
# Invoke the script associated with the first submenu item (Note the “.” At the beginning of the command).
# Invoke the action
$psISE.CurrentPowerShellTab.AddOnsMenu.Submenus[0].Action.Invoke()

Shortcut

只读属性，用于获取菜单项的 Windows 输入键笔势。

# Get the shortcut for the first submenu item.
$psISE.CurrentPowerShellTab.AddOnsMenu.SubMenus.Clear()
$psISE.CurrentPowerShellTab.AddOnsMenu.SubMenus.Add("_Process",{get-process},"Alt+P")
$psISE.CurrentPowerShellTab.AddOnsMenu.Submenus[0].Shortcut

Submenus

只读属性，用于获取菜单项的子菜单列表。

# List the submenus of the Add-ons menu
$psISE.CurrentPowerShellTab.AddOnsMenu.SubMenus.Clear()
$psISE.CurrentPowerShellTab.AddOnsMenu.SubMenus.Add("_Process",{get-process},"Alt+P")
$psISE.CurrentPowerShellTab.AddOnsMenu.Submenus

脚本示例

为了更好地了解“加载项”菜单及其可编写脚本的属性的用法，请通读以下脚本示例：

# This is a scripting example that shows the use of the Add-ons menu.
# Clear the Add-ons menu if one exists
$psISE.CurrentPowerShellTab.AddOnsMenu.SubMenus.Clear()
# Add an Add-ons menu with an accessor.
# Note the use of “_”  as opposed to the “&” for mapping to the fast key letter for the menu item.
$menuAdded = $psISE.CurrentPowerShellTab.AddOnsMenu.SubMenus.Add("_Process",{get-process},"Alt+P")
# Add a nested menu.
$parentAdded = $psISE.CurrentPowerShellTab.AddOnsMenu.SubMenus.Add("Parent",$null,$null)
$parentAdded.SubMenus.Add("_Dir",{dir},"Ctrl+Shift+D")

另请参阅

  • ISEMenuItemCollection 对象
  • Windows PowerShell ISE 脚本对象模型
  • Windows PowerShell ISE 对象模型参考
  • ISE 对象的层次结构


ISEMenuItemCollection 对象

ISEMenuItemCollection 是 ISEMenuItem 对象的集合。它是 Microsoft.PowerShell.Host.ISE.ISEMenuItemCollection 类的一个实例。例如用于在 Windows PowerShell 集成脚本环境 (ISE) 中自定义菜单的 $psISE.CurrentPowerShellTab.AddOnsMenu.Submenus 对象。

方法

Add(string displayName, System.Management.Automation.ScriptBlock action, System.Windows.Input.KeyGesture shortcut)

向集合中添加菜单项

displayname
要添加的菜单的显示名称。

action
System.Management.Automation.ScriptBlock，用于指定与此菜单项关联的操作。

shortcut
操作的快捷方式。它属于 System.Windows.Input.KeyGesture 类型。

Returns：
刚添加的 ISEMenuItem。

# Create an Add-ons menu with an accessor.
# Note the use of “_”  as opposed to the “&” for mapping to the accelerator for the menu item.
$menuAdded = $psISE.CurrentPowerShellTab.AddOnsMenu.SubMenus.Add("_Process",{get-process},"Alt+P")

另请参阅

  • ISEMenuItem 对象
  • Windows PowerShell ISE 脚本对象模型
  • Windows PowerShell ISE 对象模型参考
  • ISE 对象的层次结构


ISEOptions 对象

Options 对象表示 Windows PowerShell ISE 的多种设置。它是 Microsoft.PowerShell.Host.ISE.ISEOptions 类的一个实例。

方法

RestoreDefaultTokenColors()

还原标记颜色的默认值。

# Changes the color of the comments in the script to red and then restores it to its default value.
$psISE.Options.TokenColors["Comment"]="red"
$psISE.Options.RestoreDefaultTokenColors()

RestoreDefaults()

还原所有选项设置的默认值。此方法还可重置用于提供“不再显示此消息”标准复选框的各种警告消息的行为。

# Changes the background color in the Command Pane and then restores it to its default value.
$psISE.Options.CommandPaneBackground = "orange"
$psISE.Options.RestoreDefaults()

属性

CommandPaneBackgroundColor

读/写属性，用于获取或设置命令窗格编辑器的背景色。它是 System.Windows.Media.Color 类的一个实例。

# Changes the background color of the Command Pane to orange.
$psISE.Options.CommandPaneBackground = "orange"

CommandPaneUp

读/写属性，用于获取或设置指示命令窗格是否位于输出窗格上面的布尔值。

# Moves the Command Pane to the top of the screen.
$psISE.Options.CommandPaneUp  = $true

DebugBackgroundColor

读/写属性，用于获取或设置输出窗格中所显示的调试文本的背景色。它是 System.Windows.Media.Color 类的一个实例。

# Changes the background color for the debug text that appears in the Output Pane to blue.
$psISE.Options.DebugBackgroundColor ='#0000FF'

DebugForegroundColor

读/写属性，用于获取或设置输出窗格中所显示的调试文本的前景色。它是 System.Windows.Media.Color 类的一个实例。

# Changes the foreground color for the debug text that appears in the Output Pane to yellow.
$psISE.Options.DebugForegroundColor =”yellow”

DefaultOptions

只读属性，用于获取选项设置的默认值。

# Displays the name of the default options.
$psISE.Options.DefaultOptions
# Here is a typical listing of the default options:
SelectedScriptPaneState       : Right
ShowToolBar                   : True
TokenColors                   : {[Attribute, #FFADD8E6], [Command, #FF0000FF], [Com
                                mandArgument, #FF8A2BE2], [CommandParameter, #FF000
                                080]...}
DefaultOptions                : Microsoft.PowerShell.Host.ISE.ISEOptions
FontSize                      : 12
FontName                      : Lucida Console
ErrorForegroundColor          : #FF0000FF
ErrorBackgroundColor          : #00FFFFFF
WarningForegroundColor        : #FFFF8C00
WarningBackgroundColor        : #00FFFFFF
VerboseForegroundColor        : #FF0000FF
VerboseBackgroundColor        : #00FFFFFF
DebugForegroundColor          : #FF0000FF
DebugBackgroundColor          : #00FFFFFF
OutputPaneBackgroundColor     : #FFF0F8FF
OutputPaneTextBackgroundColor : #FFF0F8FF
OutputPaneForegroundColor     : #FF000000
CommandPaneBackgroundColor    : #FFFFFFFF
ScriptPaneBackgroundColor     : #FFFFFFFF
ShowWarningForDuplicateFiles  : True
ShowWarningBeforeSavingOnRun  : True
UseLocalHelp                  : True
CommandPaneUp                 : False

ErrorBackgroundColor

读/写属性，用于获取或设置输出窗格中所显示的错误文本的背景色。它是 System.Windows.Media.Color 类的一个实例。

# Changes the background color for the error text that appears in the Output Pane to black.
$psISE.Options.ErrorBackgroundColor="black"

ErrorForegroundColor

读/写属性，用于获取或设置输出窗格中所显示的错误文本的前景色。它是 System.Windows.Media.Color 类的一个实例。

# Changes the foreground color for the error text that appears in the Output Pane to green.
$psISE.Options.ErrorForegroundColor =”green”

FontName

读/写属性，用于获取或设置脚本窗格、命令窗格和输出窗格中当前使用的字体名称。

# Changes the font used in all the panes.
$psISE.Options.FontName = "courier new"

FontSize

读/写属性，用于获取或设置脚本窗格、命令窗格和输出窗格中使用的字体大小（整数）。值的有效范围是 (8, 32)。

# Changes the font size in all the panes.
$psISE.Options.FontSize = 20

OutputPaneBackgroundColor

读/写属性，用于获取或设置输出窗格本身的背景色。它是 System.Windows.Media.Color 类的一个实例。

# Changes the background color of the Output Pane to gold.
$psISE.Options.OutputPaneForegroundColor = "gold"

OutputPaneTextForegroundColor

读/写属性，用于更改输出窗格中文本的前景色。

# Changes the foreground color of the text in the Output Pane to blue.
$psISE.Options.OutputPaneTextForegroundColor  = "blue"

OutputPaneTextBackgroundColor

读/写属性，用于更改输出窗格中文本的背景色。

# Changes the background color of the Output Pane text to pink.
$psISE.Options.OutputPaneTextBackgroundColor = "pink"

ScriptPaneBackgroundColor

读/写属性，用于获取或设置文件的背景色。它是 System.Windows.Media.Color 类的一个实例。

# Sets the color of the script pane background to yellow.
$psISE.Options.ScriptPaneBackgroundColor = ”yellow”

ScriptPaneForegroundColor

读/写属性，用于获取或设置脚本窗格中非脚本文件的前景色。若要设置脚本文件的前景色，请使用 TokenColors 属性。

# Sets the foreground to color of non-script files in the script pane to green.
$psISE.Options.ScriptPaneBackgroundColor = ”green”

SelectedScriptPaneState

读/写属性，用于获取或设置脚本窗格在显示屏上的位置。可能的值包括“top”、“right”和“Maximized”。

# Moves the Script Pane to the top
$psISE.Options.SelectedScriptPaneState = "Top"
# Moves the Script Pane to the right.
$psISE.Options.SelectedScriptPaneState = "Right"
# Maximizes the Script Pane
$psISE.Options.SelectedScriptPaneState = "Maximized"

ShowToolBar

布尔型的读/写属性，用于确定工具栏是否可见。

# Show the tool bar.
$psISe.Options.ShowToolBar = $true

ShowWarningBeforeSavingOnRun

用于获取或设置布尔值的读/写属性，该布尔值确定在运行脚本之前自动保存脚本时是否显示警告消息。

# Sets the option to display a warning message
# when an attempt is made to save a script before running it.
$psISE.Options.ShowWarningBeforeSavingOnRun=$true

ShowWarningForDuplicateFiles

用于获取或设置布尔值的读/写属性，该布尔值使得在不同的 PowerShell 选项卡中打开相同文件时显示警告消息。

# Set the ShowWarningForDuplicateFiles property to true.
$psISE.Options.ShowWarningForDuplicateFiles = $true
# The following  message is displayed: “A copy of this file
# is open in another PowerShell Tab. Changes made to this
# file will affect all open copies.”

TokenColors

用于获取字典对象的属性，该对象包含命令窗格和脚本窗格的标记类型和颜色的名称/值对。

# Sets the color of commands to green.
$psISE.Options.TokenColors["Command"] = "green"
# Sets the color of keywords to magenta.
$psISE.Options.TokenColors["Keyword"] = "magenta"

UseLocalHelp

用于获取或设置布尔值的读/写属性，该布尔值可指示显示本地帮助还是联机帮助。

# Sets the option for the online help to be displayed.
$psISE.Options.LocalHelp=$false

VerboseBackgroundColor

读/写属性，用于获取或设置输出窗格中所显示的详细文本的背景色。该属性是 System.Windows.Media.Color 对象。

# Changes the background color for the verbose text that appears in the Output Pane to blue.
$psISE.Options.VerboseBackgroundColor ='#0000FF'

VerboseForegroundColor

读/写属性，用于获取或设置输出窗格中所显示的详细文本的前景色。该属性是 System.Windows.Media.Color 对象。

# Changes the foreground color for the verbose text that appears in the Output Pane to yellow.
$psISE.Options.VerboseForegroundColor =”yellow”

WarningBackgroundColor

读/写属性，用于获取或设置输出窗格中所显示的警告文本的背景色。该属性是 System.Windows.Media.Color 对象。

# Changes the background color for the warning text that appears in the Output Pane to blue.
$psISE.Options.WarningBackgroundColor ='#0000FF'

WarningForegroundColor

读/写属性，用于获取或设置输出窗格中所显示的警告文本的前景色。该属性是 System.Windows.Media.Color 对象。

# Changes the foreground color for the warning text that appears in the Output Pane to yellow.
$psISE.Options.WarningForegroundColor =”yellow”

另请参阅

  • Windows PowerShell ISE 脚本对象模型
  • Windows PowerShell ISE 对象模型参考
  • ISE 对象的层次结构


ObjectModelRoot 对象

本主题将介绍 ObjectModelRoot 对象。它是 Microsoft.PowerShell.Host.ISE.ObjectModelRoot 类的一个实例。在 Windows PowerShell 集成脚本环境 (ISE) 中为主体根对象的 $psISE 对象便属于此类。本主题将介绍 ObjectModelRoot 对象的属性。

属性

CurrentFile

只读属性，用于获取或设置与当前具有焦点的此主机对象关联的文件。

CurrentPowerShellTab

只读属性，用于获取具有焦点的 PowerShell 选项卡。

Options

只读属性，用于获取可用来更改 Windows PowerShell ISE 中的设置的各个选项。

PowerShellTabs

只读属性，用于获取在 Windows PowerShell ISE 中打开的 PowerShell 选项卡的集合。默认情况下，此对象包含一个 PowerShell 选项卡。但可通过使用脚本或使用 Windows PowerShell ISE 中的菜单来向此对象添加更多 PowerShell 选项卡。

另请参阅

  • Windows PowerShell ISE 脚本对象模型
  • Windows PowerShell ISE 对象模型参考
  • ISE 对象的层次结构


PowerShellTab 对象

PowerShell 选项卡对象体现了 Windows PowerShell 执行环境。例如 $psISE.CurrentPowerShellTab。

方法

下面是 PowerShell 选项卡对象的方法。

Invoke(System.Management.Automation.ScriptBlock script)

在 PowerShell 选项卡中执行给定的脚本。

注意：

此方法仅适用于其他 PowerShell 选项卡，不适用于运行该方法所在的 PowerShell 选项卡。

script：
要执行的脚本。

# Manually create a second PowerShell tab before running this script.
# Return to the first tab and type
$secondTab = $psise.PowerShellTabs[1]
$secondTab.Invoke({dir})

属性

AddOnsMenu

只读属性，用于获取 PowerShell 选项卡的“加载项”菜单。

# Clear the Add-ons menu if one exists.
$psISE.CurrentPowerShellTab.AddOnsMenu.SubMenus.Clear()
# Create an AddOns menu with an accessor.
# Note the use of “_”  as opposed to the “&” for mapping to the fast key letter for the menu item.
$menuAdded = $psISE.CurrentPowerShellTab.AddOnsMenu.SubMenus.Add("_Process",{get-process},"Alt+P")
# Add a nested menu.
$parentAdded = $psISE.CurrentPowerShellTab.AddOnsMenu.SubMenus.Add("Parent",$null,$null)
$parentAdded.SubMenus.Add("_Dir",{dir},"Alt+D")
# Show the Add-ons menu on the current PowerShell tab.
$psISE.CurrentPowerShellTab.AddOnsMenu

CanInvoke

只读的布尔型属性，如果可用 Invoke(System.Management.Automation.ScriptBlock script) 方法调用脚本，则该属性的值为 true。

# CanInvoke will be false if the PowerShell
# tab is running a script that takes a while, and you
# check its properties from another PowerShell tab. It is
# always false if checked on the current PowerShell tab.
# Manually create a second PowerShell tab before
# running this script.
# Return to the first tab and type
$secondTab = $psise.PowerShellTabs[1]
$secondTab.CanInvoke
$secondTab.Invoke({sleep 20})
$secondTab.CanInvoke

Commandpane

只读属性，用于获取命令窗格编辑器对象。

# Gets the Command Pane editor.
$psISE.CurrentPowerShellTab.CommandPane

DisplayName

读/写属性，用于获取或设置 PowerShell 选项卡的名称。

$newTab = $psise.PowerShellTabs.Add()
# Change the DisplayName of the new PowerShell tab.
$newTab.DisplayName="Brand New Tab"

ExpandedScript

布尔型的读/写属性，用于确定展开还是隐藏脚本窗格。

# Toggle the expanded script property to see its effect.
$PSise.CurrentPowerShellTab.ExpandedScript=!$PSise.CurrentPowerShellTab.ExpandedScript

Files

只读属性，用于获取在 PowerShell 选项卡中打开的脚本文件的集合。

$newFile = $psISE.CurrentPowerShellTab.Files.Add()
$newFile.Editor.Text = "a`r`nb"
# Gets the line count.
$newFile.Editor.LineCount

Output

只读属性，用于获取输出编辑器。

# Clears the text in the output.
$psise.CurrentPowerShellTab.output.clear()

Prompt

只读属性，用于获取当前的提示文本。

# Gets the current prompt text.
$psISE.CurrentPowerShellTab.Prompt

StatusText

只读属性，用于获取 PowerShellTab 状态文本。

# Gets the current status text,
$psISE.CurrentPowerShellTab.StatusText

另请参阅

  • PowerShellTabCollection 对象
  • Windows PowerShell ISE 脚本对象模型
  • Windows PowerShell ISE 对象模型参考
  • ISE 对象的层次结构


PowerShellTabCollection 对象

PowerShellTab 集合对象是 PowerShellTab 对象的集合。它是 Microsoft.PowerShell.Host.ISE.PowerShellTabs 类的一个实例。例如 $psISE.PowerShellTabs 对象。

方法

Add()

向集合中添加新的 PowerShell 选项卡。此方法将返回新添加的选项卡。

$psISE.PowerShellTabs.Add()

SetSelectedPowerShellTab(Microsoft.PowerShell.Host.ISE.PowerShellTab psTab)

选择 pstab 指定的 PowerShell 选项卡。

psTab
要选择的 PowerShell 选项卡。

$newTab = $psISE.PowerShellTabs.Add()
# Change the DisplayName of the new PowerShell tab.
$newTab.DisplayName="Brand New Tab"

Remove(Microsoft.PowerShell.Host.ISE.PowerShellTab psTab)

删除 pstab 指定的选项卡。

psTab
要删除的 PowerShell 选项卡。

$newTab = $psISE.PowerShellTabs.Add()
Change the DisplayName of the new PowerShell tab.
$newTab.DisplayName="This tab will go away in 5 seconds"
sleep 5
$psISE.PowerShellTabs.Remove($newTab)

另请参阅

  • PowerShellTab 对象
  • Windows PowerShell ISE 脚本对象模型
  • Windows PowerShell ISE 对象模型参考
  • ISE 对象的层次结构


PowerShell.exe 控制台帮助

从另一工具（如 Cmd.exe）的命令行启动 Windows PowerShell。

语法

PowerShell[.exe]
       [-PSConsoleFile <file> | -Version <version>]
       [-EncodedCommand <Base64EncodedCommand>]
       [-ExecutionPolicy <ExecutionPolicy>]
       [-File <filePath> <args>]
       [-InputFormat {Text | XML}]
       [-NoExit]
       [-NoLogo]
       [-NonInteractive]
       [-NoProfile]
       [-OutputFormat {Text | XML}]
       [-Sta]
       [-WindowStyle <style>]
       [-Command { - | <script-block> [-args <arg-array>]
                     | <string> [<CommandParameters>] } ]

PowerShell[.exe] -Help | -? | /?

参数

-EncodedCommand

接受命令的 Base 64 编码字符串版本。使用此参数可向 Windows PowerShell 提交需要复杂引号或大括号的命令。

-ExecutionPolicy

设置会话的默认执行策略。此参数不会更改在注册表中设置的 Windows PowerShell 执行策略。

-File

运行指定的脚本。请输入脚本文件路径和一些参数。

-InputFormat

描述发送至 Windows PowerShell 的数据格式。有效值为“Text”（文本字符串）或“XML”（序列化 CLIXML 格式）。

-NoExit

运行完启动命令后不退出。

-NoLogo

启动时隐藏版权标志。

-NonInteractive

不向用户显示交互式提示。

-NoProfile

不加载 Windows PowerShell 配置文件。

-OutputFormat

确定 Windows PowerShell 的输出格式。有效值为“Text”（文本字符串）或“XML”（序列化 CLIXML 格式）。

-PSConsoleFile

加载指定的 Windows PowerShell 控制台文件。若要创建控制台文件，请使用 Windows PowerShell 中的 Export-Console cmdlet。

-Sta

使用单线程单元启动 shell。

-Version

启动 Windows PowerShell 的指定版本。请随该参数输入一个版本号，例如“-version 1.0”。

-WindowStyle

将窗口样式设置为 Normal、Minimized、Maximized 或 Hidden。

-Command

按照执行在 Windows PowerShell 命令提示符下键入的命令那样，执行指定的命令和所有参数；如果未指定 NoExit，则执行完命令后将退出。Command 的值可以是“-”、字符串或脚本块。

如果 Command 的值为“-”，则从标准输入中读取命令文本。

脚本块必须括在大括号 ({}) 中。只有在 Windows PowerShell 中运行 PowerShell.exe 时才能指定脚本块。脚本的运行结果将作为反序列化 XML 对象（而非活动对象）返回父 shell。

如果 Command 的值为字符串，则 Command 必须是该命令的最后一个形式参数，因为其后键入的所有字符都会被解释为它的实际参数。

若要编写运行 Windows PowerShell 命令的字符串，请使用以下格式：

"& {<command>}"

其中，引号指示一个字符串，调用运算符 (&) 用于执行命令。

-Help, -?, /?

显示此消息。如果要在 Windows PowerShell 中键入 PowerShell.exe 命令，请将连字符 (-) 作为命令参数的前缀，而不要使用正斜杠 (/)。在 Cmd.exe 中，既可以使用连字符，也可以使用正斜杠。

示例

PowerShell -PSConsoleFile sqlsnapin.psc1

PowerShell -version 1.0 -NoLogo -InputFormat text -OutputFormat XML

PowerShell -Command {Get-EventLog -LogName security}

PowerShell -Command "& {Get-EventLog -LogName security}"

# To use the -EncodedCommand parameter:
$command = "dir 'c:\program files' "
$bytes = [System.Text.Encoding]::Unicode.GetBytes($command)
$encodedCommand = [Convert]::ToBase64String($bytes)
powershell.exe -encodedCommand $encodedCommand


版权声明

此程序已获得许可。

警告：本计算机程序受版权法和国际公约保护。未经授权，不得对本程序或其中的任何部分进行复制和分发，否则可能遭致严重的民事和刑事处罚，并将根据法律受到最大程度的起诉。

本文档中的信息（包括引用的 URL 和其他 Internet 网站）如有变动，恕不另行通知。除非另行说明，否则本文档示例中所提及的公司、组织、产品、域名、电子邮件地址、徽标、人物、地点和事件均属虚构。我们无意关联任何真实的公司、组织、产品、域名、电子邮件地址、徽标、人物、地点或事件，读者也不应进行这方面的推测。遵守所有适用的版权法是用户的责任。在不限制版权许可的权利的情况下，如果没有得到 Microsoft Corporation 明确书面许可，本文档的任何部分不得被复制、存储或引进检索系统，或者以任何形式、任何方式（电子、机械、影印、录音或其他）或为任何目的进行传播。

本文档可能涉及 Microsoft 的专利、正在申请的专利、商标、版权或其他知识产权。除非与 Microsoft 签订的任何书面许可协议中有明确规定，否则使用本文档并不意味着授予使用这些专利、商标、版权或其他知识产权的任何许可。

© 2009 Microsoft Corporation。保留所有权利。

Microsoft 以及 Microsoft Office Word、Microsoft Office Excel、Microsoft Visual Studio、Windows 7、Windows PowerShell、Windows Server 2008、Windows Server 2003、Windows XP、Windows Vista 和 MSDN 是 Microsoft 公司集团的商标。

所有其他商标均为其各自所有者的财产。