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

默认值

会话中的所有命令。

是否接受管道输入?

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

默认值

会话中的所有命令。

是否接受管道输入?

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

默认值

会话中的所有命令。

是否接受管道输入?

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 所返回对象的类型。

输入

不能通过管道将对象传递给 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-FormatDataExport-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