将来自其他会话的命令导入到当前会话中。
语法
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”等效。
另请参阅