Export-PSSession

从另一个会话导出命令并将其保存在 PowerShell 模块中。

语法

Export-PSSession
      [-Session] <PSSession>
      [-OutputModule] <string>
      [[-CommandName] <string[]>]
      [[-FormatTypeName] <string[]>]
      [-Force]
      [-Encoding <string>]
      [-AllowClobber]
      [-ArgumentList <Object[]>]
      [-CommandType <CommandTypes>]
      [-Module <string[]>]
      [-FullyQualifiedModule <ModuleSpecification[]>]
      [-Certificate <X509Certificate2>]
      [<CommonParameters>]

说明

cmdlet Export-PSSession 从本地或远程计算机上的另一个 PowerShell 会话 (PSSession) 获取 cmdlet、函数、别名和其他命令类型,并将其保存在 PowerShell 模块中。 若要将模块中的命令添加到当前会话,请使用 Import-Module cmdlet。

与 将命令从另一个 PSSession 导入当前会话不同 Import-PSSessionExport-PSSession 将命令保存在模块中。 这些命令不会被导入到当前会话中。

若要导出命令,请使用 New-PSSession cmdlet 创建具有要导出的命令的 PSSession。 Export-PSSession然后使用 cmdlet 导出命令。

为防止命令名称冲突,默认值 Export-PSSession 是导出除当前会话中存在的命令之外的所有命令。 可以使用 CommandName 参数指定要导出的命令。

cmdlet Export-PSSession 使用 PowerShell 的隐式远程处理功能。 将命令导入当前会话时,它们在原始会话或原始计算机上的类似会话中隐式运行。

示例

示例 1:从 PSSession 导出命令

此示例创建从本地计算机到 Server01 计算机的新 PSSession。 除当前会话中存在的命令外,所有命令都导出到本地计算机上名为 Server01 的模块。 导出包括命令的格式设置数据。

$S = New-PSSession -ComputerName Server01
Export-PSSession -Session $S -OutputModule Server01

命令 New-PSSession 在 Server01 计算机上创建 PSSession。 PSSession 存储在 变量中 $S 。 命令 Export-PSSession$S 变量的命令和格式化数据导出到 Server01 模块中。

示例 2:导出 Get 和 Set 命令

此示例从服务器导出所有 GetSet 命令。

$S = New-PSSession -ConnectionUri http://exchange.microsoft.com/mailbox -Credential exchangeadmin01@hotmail.com -Authentication Negotiate
Export-PSSession -Session $R -Module exch* -CommandName Get-*, Set-* -FormatTypeName * -OutputModule $pshome\Modules\Exchange -Encoding ASCII

这些命令将 和 Set 命令从远程计算机上的Microsoft Exchange Server管理单元导出Get到本地计算机上的 \Modules 目录中的 Exchange 模块$pshome。 将模块置于 $pshome\Modules 目录中,使计算机的所有用户都可以访问该模块。

示例 3:从远程计算机导出命令

此示例从远程计算机上的 PSSession 导出 cmdlet,并将其保存在本地计算机上的模块中。 模块中的 cmdlet 将添加到当前会话中,以便可以使用它们。

$S = New-PSSession -ComputerName Server01 -Credential Server01\User01
Export-PSSession -Session $S -OutputModule TestCmdlets -Type Cmdlet -CommandName *test* -FormatTypeName *
Remove-PSSession $S
Import-Module TestCmdlets
Get-Help Test*
Test-Files

命令 New-PSSession 在 Server01 计算机上创建 PSSession 并将其保存在 变量中 $S 。 命令 Export-PSSession 将名称以 Test 开头的 cmdlet 从 中的 PSSession $S 导出到本地计算机上的 TestCmdlets 模块。

cmdlet Remove-PSSession 从当前会话中删除中的 $S PSSession。 此命令显示 PSSession 无需处于活动状态,就可以使用从会话导入的命令。 cmdlet Import-Module 将 TestCmdlets 模块中的 cmdlet 添加到当前会话。 命令可以随时在任何会话中运行。

cmdlet Get-Help 获取其名称以 Test 开头的 cmdlet 的帮助。 将模块中的命令添加到当前会话后,可以使用 Get-HelpGet-Command cmdlet 了解导入的命令。 cmdlet Test-Files 已从 Server01 计算机导出并添加到会话。 cmdlet Test-Files 在从中导入命令的计算机的远程会话中运行。 PowerShell 根据存储在 TestCmdlets 模块中的信息创建会话。

示例 4:导出当前会话中的 clobber 命令

此示例将存储在变量中的命令导出到当前会话中。

Export-PSSession -Session $S -AllowClobber -OutputModule AllCommands

此命令 Export-PSSession 将所有命令和所有格式数据从变量中的 $S PSSession 导出到当前会话中。 AllowClobber 参数包括与当前会话中的命令同名的命令。

示例 5:从关闭的 PSSession 导出命令

此示例演示如何在创建导出命令的 PSSession 关闭时使用特殊选项运行导出的命令。

如果在导入模块时关闭原始远程会话,该模块将使用连接到原始计算机的任何打开的远程会话。 如果原始计算机没有当前会话,则模块将重新建立会话。

若要在远程会话中使用特殊选项运行导出的命令,必须在导入模块之前使用这些选项创建远程会话。 将 New-PSSession cmdlet 与 SessionOption 参数一起使用

$Options = New-PSSessionOption -NoMachineProfile
$S = New-PSSession -ComputerName Server01 -SessionOption $Options
Export-PSSession -Session $S -OutputModule Server01
Remove-PSSession $S
New-PSSession -ComputerName Server01 -SessionOption $Options
Import-Module Server01

cmdlet New-PSSessionOption 创建 PSSessionOption 对象,并将对象保存在 变量中 $Options 。 命令 New-PSSession 在 Server01 计算机上创建 PSSession。 SessionOption 参数使用 中$Options存储的对象。 会话存储在 变量中 $S

cmdlet Export-PSSession 将命令从 PSSession 导出 $S 到 Server01 模块。 cmdlet Remove-PSSession 删除变量中的 $S PSSession。

New-PSSession cmdlet 创建连接到 Server01 计算机的新 PSSession。 SessionOption 参数使用 中$Options存储的对象。 cmdlet Import-Module 从 Server01 模块导入命令。 模块中的命令在 Server01 计算机上的 PSSession 中运行。

参数

-AllowClobber

导出指定命令,即使它们与当前会话中的命令同名。

如果导出与当前会话中的命令同名的命令,则导出的命令将隐藏或替换原始命令。 有关详细信息,请参阅 about_Command_Precedence

Type:SwitchParameter
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-ArgumentList

将使用指定的参数(参数值)所得到的命令的变体导出。

例如,若要在 的 PSSession 中导出证书 (Cert:) 驱动器中$S导出命令的变体Get-Item,请键入 export-pssession -session $S -command get-item -argumentlist cert:

Type:Object[]
Aliases:Args
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Certificate

指定用于对格式化文件进行签名 (*的客户端证书。Format.ps1xml) 或脚本模块文件 (.psm1) 在创建的模块 Export-PSSession 中。 输入一个包含证书的变量,或可获取该证书的命令或表达式。

若要查找证书,请使用 Get-PfxCertificate cmdlet 或使用 Get-ChildItem 证书 (Cert:) 驱动器中的 cmdlet。 如果证书无效或不具有足够的权限,则该命令将失败。

Type:X509Certificate2
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-CommandName

仅将具有指定名称或名称模式的命令导出。 允许使用通配符。 使用 CommandName 或其别名 “名称”。

默认情况下, Export-PSSession 从 PSSession 导出所有命令,但与当前会话中的命令同名的命令除外。 这可以防止命令隐藏或替换为当前会话中的命令。 若要导出所有命令,即使是隐藏或替换其他命令的命令,请使用 AllowClobber 参数。

如果使用 CommandName 参数,则不会导出命令的格式设置文件,除非使用 FormatTypeName 参数。 同样,如果使用 FormatTypeName 参数,则不会导出任何命令,除非使用 CommandName 参数。

Type:String[]
Aliases:Name
Position:2
Default value:All commands in the session.
Required:False
Accept pipeline input:False
Accept wildcard characters:True

-CommandType

仅导出指定类型的命令对象。 使用 CommandType 或其别名 Type

此参数的可接受值如下所示:

  • 别名。 当前会话中的所有 PowerShell 别名。
  • 全部。 所有命令类型。 它等效于 Get-Command -Name *
  • 应用程序。 路径环境变量中列出的路径中除 PowerShell 文件以外的所有文件 ($env:path) ,包括 .txt、.exe 和 .dll 文件。
  • Cmdlet。 当前会话中的 cmdlet。 Cmdlet 为默认值。
  • 配置。 PowerShell 配置。 有关详细信息,请参阅 about_Session_Configurations
  • ExternalScript。 Path 环境变量中列出的路径中的所有 .ps1 文件 ($env:path) 。
  • 筛选器和函数。 所有 PowerShell 函数。
  • 脚本。 当前会话中的脚本块。
  • 工作流。 PowerShell 工作流。 有关详细信息,请参阅 about_Workflows
Type:CommandTypes
Aliases:Type
Accepted values:Alias, All, Application, Cmdlet, Configuration, ExternalScript, Filter, Function, Script, Workflow
Position:Named
Default value:All commands in the session.
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Encoding

指定目标文件的编码类型。 默认值是 UTF8

此参数的可接受值如下所示:

  • Ascii 使用 ASCII (7 位) 字符集。
  • BigEndianUnicode 将 UTF-16 与 big-endian 字节顺序一起使用。
  • 默认 使用与系统的活动代码页对应的编码。
  • Oem 使用对应于系统的当前 OEM 代码页的编码。
  • Unicode 将 UTF-16 与 little-endian 字节顺序一起使用。
  • UTF7 使用 UTF-7。
  • UTF8 使用 UTF-8。
  • UTF32 将 UTF-32 与 little-endian 字节顺序一起使用。
Type:String
Accepted values:ASCII, BigEndianUnicode, Default, OEM, Unicode, UTF7, UTF8, UTF32
Position:Named
Default value:UTF8
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Force

即使该文件具有只读属性,也会覆盖一个或多个现有输出文件。

Type:SwitchParameter
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-FormatTypeName

仅导出指定 Microsoft .NET Framework 类型的格式指令。 输入类型名称。 默认情况下,Export-PSSession导出所有不在 System.Management.Automation 命名空间中的.NET Framework类型的格式设置说明。

此参数的值必须是从中导入命令的会话中的命令返回 Get-FormatData 的类型的名称。 若要获取远程会话中的所有格式设置数据,请键入 *

如果使用 FormatTypeName 参数,则不会导出任何命令,除非使用 CommandName 参数。

如果使用 CommandName 参数,则不会导出命令的格式设置文件,除非使用 FormatTypeName 参数。

Type:String[]
Position:3
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-FullyQualifiedModule

指定名称为 ModuleSpecification 对象形式的模块。 请参阅 ModuleSpecification 构造函数的“备注”部分, (哈希表)

例如, FullyQualifiedModule 参数接受以下任一格式指定的模块名称:

@{ModuleName = "modulename"; ModuleVersion = "version_number"}

@{ModuleName = "modulename"; ModuleVersion = "version_number"; Guid = "GUID"}

ModuleNameModuleVersion 是必需的,但 Guid 是可选的。 不能在与 Module 参数相同的命令中指定 FullyQualifiedModule 参数;这两个参数是互斥的。

Type:ModuleSpecification[]
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Module

仅导出指定的 PowerShell 管理单元和模块中的命令。 输入管理单元和模块的名称。 不允许使用通配符。

有关详细信息,请参阅 Import-Moduleabout_PSSnapins

Type:String[]
Aliases:PSSnapin
Position:Named
Default value:All commands in the session.
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-OutputModule

指定由 Export-PSSession创建的模块的可选路径和名称。 默认路径为 $home\Documents\WindowsPowerShell\Modules。 此参数是必需的。

如果模块子目录或创建的任何文件 Export-PSSession 已存在,则命令将失败。 若要覆盖现有文件,请使用 Force 参数。

Type:String
Aliases:PSPath, ModuleName
Position:1
Default value:$home\Documents\WindowsPowerShell\Modules
Required:True
Accept pipeline input:False
Accept wildcard characters:False

-Session

指定要从中导出命令的 PSSession。 输入包含会话对象的变量或获取会话对象的命令,例如 Get-PSSession 命令。 此参数是必需的。

Type:PSSession
Position:0
Default value:None
Required:True
Accept pipeline input:False
Accept wildcard characters:False

输入

None

不能通过管道将对象传递给 Export-PSSession

输出

FileInfo

Export-PSSession 返回包含其创建的模块的文件列表。

备注

Export-PSSession 依赖于 PowerShell 远程处理基础结构。 若要使用此 cmdlet,必须对计算机进行相应配置以进行远程处理。 有关详细信息,请参阅 about_Remote_Requirements

不能使用 Export-PSSession 导出 PowerShell 提供程序。

导出的命令在从中导出这些命令的 PSSession 中隐式运行。 远程运行命令的详细信息完全由 PowerShell 处理。 可以像运行本地命令那样运行导出的命令。

Export-ModuleMember 捕获并保存有关 PSSession 的信息,并保存在它导出的模块中。 如果在导入模块时关闭了从中导出命令的 PSSession,并且同一台计算机中没有活动的 PSSession,则模块中的命令会尝试重新创建 PSSession。 如果重新创建 PSSession 的尝试失败,则导出的命令将不会运行。

在模块中捕获和保存的Export-ModuleMember会话信息不包括会话选项,例如在首选项变量或使用 $PSSessionOptionEnter-PSSessionInvoke-Command cmdlet 的 New-PSSessionSessionOption 参数指定的会话选项。 如果在导入模块时原始 PSSession 已关闭,则该模块将使用同一台计算机上的另一个 PSSession(如果存在)。 若要启用导入的命令以在正确配置的会话中运行,请在导入模块之前使用所需选项来创建 PSSession。

若要查找要导出的命令, Export-PSSession 请使用 Invoke-Command cmdlet 在 PSSession 中运行 Get-Command 命令。 若要获取并保存命令的格式设置数据,它使用 Get-FormatDataExport-FormatData cmdlet。 运行命令时,可能会看到来自 Invoke-CommandGet-CommandGet-FormatDataExport-FormatDataExport-PSSession 错误消息。 此外,Export-PSSession无法从不包含 Get-Command、、 Get-FormatDataSelect-ObjectGet-Help cmdlet 的会话中导出命令。

Export-PSSessionWrite-Progress使用 cmdlet 显示命令的进度。 该命令正在运行时,你可能会看到进度条。

导出的命令与其他远程命令具有相同的限制(包括无法启动具有用户界面的程序,如记事本)。

由于 PowerShell 配置文件不在 PSSession 中运行,因此配置文件添加到会话的命令不适用于 Export-PSSession。 若要从配置文件中导出命令,请在导出命令之前,使用 Invoke-Command 命令在 PSSession 中手动运行配置文件。

即使 命令不导入格式设置数据,创建的模块 Export-PSSession 也可能包含格式设置文件。 如果该命令不导入格式数据,则创建的任何格式设置文件都不包含格式数据。