Import-PSSession
将命令从另一个会话导入到当前会话中。
语法
Default (默认值)
Import-PSSession
[-Prefix <String>]
[-DisableNameChecking]
[[-CommandName] <String[]>]
[-AllowClobber]
[-ArgumentList <Object[]>]
[-CommandType <CommandTypes>]
[-Module <String[]>]
[-FullyQualifiedModule <ModuleSpecification[]>]
[[-FormatTypeName] <String[]>]
[-Certificate <X509Certificate2>]
[-Session] <PSSession>
[<CommonParameters>]
说明
Import-PSSession cmdlet 将命令(如 cmdlet、函数和别名)从本地或远程计算机上的 PSSession 导入到当前会话中。 可以导入 Get-Command cmdlet 可在 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 的隐式远程处理功能。 将命令导入当前会话时,它们会在原始会话或原始计算机上的类似会话中隐式运行。
从 Windows PowerShell 3.0 开始,可以使用 Import-Module cmdlet 将模块从远程会话导入当前会话。 此功能使用隐式远程处理。 它等效于使用 Import-PSSession 将所选模块从远程会话导入当前会话。
示例
示例 1:从 PSSession 导入所有命令
PS C:\> $S = New-PSSession -ComputerName Server01
PS C:\> Import-PSSession -Session $S
此命令将 Server01 计算机上的 PSSession 中的所有命令导入到当前会话中,但与当前会话中的命令具有相同名称的命令除外。
由于此命令不使用 CommandName 参数,因此它还导入导入的命令所需的所有格式数据。
示例 2:导入以特定字符串结尾的命令
PS C:\> $S = New-PSSession https://ps.testlabs.com/powershell
PS C:\> Import-PSSession -Session $S -CommandName *-test -FormatTypeName *
PS C:\> New-Test -Name Test1
PS C:\> Get-Test test1 | Run-Test
这些命令将名称以“-test”结尾的命令从 PSSession 导入本地会话,然后显示如何使用导入的 cmdlet。
第一个命令使用 New-PSSession cmdlet 创建 PSSession。 它将 PSSession 保存在 $S 变量中。
第二个命令使用 Import-PSSession cmdlet 将 PSSession 中的命令导入当前会话$S。 它使用 CommandName 参数指定具有 Test 名词和 FormatTypeName 参数的命令,以导入 Test 命令的格式设置数据。
第三个和第四个命令使用当前会话中的导入命令。 由于导入的命令实际上已添加到当前会话中,因此使用本地语法来运行它们。 无需使用 Invoke-Command cmdlet 来运行导入的命令。
示例 3:从 PSSession 导入 cmdlet
PS C:\> $S1 = New-PSSession -ComputerName s1
PS C:\> $S2 = New-PSSession -ComputerName s2
PS C:\> Import-PSSession -Session s1 -Type cmdlet -Name New-Test, Get-Test -FormatTypeName *
PS C:\> Import-PSSession -Session s2 -Type Cmdlet -Name Set-Test -FormatTypeName *
PS C:\> 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:将导入的命令作为后台作业运行
PS C:\> $S = New-PSSession -ComputerName Server01
PS C:\> Import-PSSession -Session $S -CommandName *-test* -FormatTypeName *
PS C:\> $batch = New-Test -Name Batch -AsJob
PS C:\> 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:从 Windows PowerShell 模块导入 cmdlet 和函数
PS C:\> $S = New-PSSession -ComputerName Server01
PS C:\> Invoke-Command -Session $S {Import-Module TestManagement}
PS C:\> Import-PSSession -Session $S -Module TestManagement
此示例演示如何将 cmdlet 和函数从远程计算机上的 Windows PowerShell 模块导入到当前会话中。
第一个命令在 Server01 计算机上创建 PSSession,并将其保存在 $S 变量中。
第二个命令使用 Invoke-Command cmdlet 在 $S 的 PSSession 中运行 Import-Module 命令。
通常,模块将由 Windows PowerShell 配置文件中的 Import-Module 命令添加到所有会话,但配置文件不在 PSSessions 中运行。
第三个命令使用 Import-PSSession 的 Module 参数将模块中的 cmdlet 和函数导入到当前会话中。
示例 6:在临时文件中创建模块
PS C:\> 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:运行由导入的命令隐藏的命令
PS C:\> Import-PSSession $S -CommandName Get-Date -FormatTypeName * -AllowClobber
PS C:\> Get-Command Get-Date -All
CommandType Name Definition
----------- ---- ----------
Function Get-Date ...
Cmdlet Get-Date Get-Date [[-Date] <DateTime>] [-Year <Int32>] [-Month <Int32>]
PS C:\> Get-Date
09074
PS C:\> (Get-Command -Type Cmdlet -Name Get-Date).PSSnapin.Name
Microsoft.PowerShell.Utility
PS C:\> 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 的 All 参数来获取当前会话中的所有 Get-Date 命令。 输出显示会话包括原始 Get-Date cmdlet 和 Get-Date 函数。 Get-Date 函数在 $S 的 PSSession 中运行导入的 Get-Date cmdlet。
第三个命令运行 Get-Date 命令。 由于函数优先于 cmdlet,因此 Windows PowerShell 运行导入的 Get-Date 函数,该函数返回 Julian 日期。
第四个和第五个命令演示如何使用限定名称运行由导入的命令隐藏的命令。
第四个命令获取将原始 Get-Date cmdlet 添加到当前会话的 Windows PowerShell 管理单元的名称。
第五个命令使用 Get-Date cmdlet 的管理单元限定名称来运行 Get-Date 命令。
有关命令优先级和隐藏命令的详细信息,请参阅about_Command_Precedence。
示例 8:导入名称中包含特定字符串的命令
PS C:\> Import-PSSession -Session $S -CommandName *Item* -AllowClobber
此命令从 $S 的 PSSession 中导入名称中包含“Item”的命令。 由于该命令包含 CommandName 参数,但不包括 FormatTypeData 参数,因此仅导入命令。
使用 Import-PSSession 在远程计算机上运行命令并且当前会话中已有命令的格式设置数据时,请使用此命令。
示例 9:使用 Module 参数发现哪些命令已导入会话
PS C:\> $M = Import-PSSession -Session $S -CommandName *bits* -FormatTypeName *bits*
PS C:\> 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 的“位”的命令。 Import-PSSession 命令返回临时模块,该命令将模块保存在$m变量中。
第二个命令使用 Get-Command cmdlet 获取模块在 $M 变量中导出的命令。
Module 参数采用一个字符串值,该值专为模块名称而设计。 但是,当你提交模块对象时,Windows PowerShell 在模块对象上使用 ToString 方法,该方法返回模块名称。
Get-Command 命令等效于“Get-Command $M.Name”。
参数
-AllowClobber
指示此 cmdlet 导入指定的命令,即使它们与当前会话中的命令具有相同的名称。
如果在当前会话中导入与命令同名的命令,则导入的命令将隐藏或替换原始命令。 有关详细信息,请参阅about_Command_Precedence。
默认情况下,Import-PSSession 不会导入与当前会话中的命令同名的命令。
参数属性
| 类型: | SwitchParameter |
| 默认值: | None |
| 支持通配符: | False |
| 不显示: | False |
参数集
(All)
| Position: | Named |
| 必需: | False |
| 来自管道的值: | False |
| 来自管道的值(按属性名称): | False |
| 来自剩余参数的值: | False |
-ArgumentList
指定使用指定参数(参数值)产生的命令数组。
例如,要在 $S 的 PSSession 的证书 (Cert:) 驱动器中导入 Get-Item 命令的变体,请键入 Import-PSSession -Session $S -Command Get-Item -ArgumentList cert:。
参数属性
| 类型: | Object[] |
| 默认值: | None |
| 支持通配符: | False |
| 不显示: | False |
| 别名: | 参数 |
参数集
(All)
| Position: | Named |
| 必需: | False |
| 来自管道的值: | False |
| 来自管道的值(按属性名称): | False |
| 来自剩余参数的值: | False |
-Certificate
指定用于对格式化文件进行签名的客户端证书(*)。Import-PSSession 创建的临时模块中的 Format.ps1xml) 或脚本模块文件 (.psm1)。
输入包含证书的变量或获取证书的命令或表达式。
若要查找证书,请使用 Get-PfxCertificate cmdlet 或使用 Certificate (Cert:) 驱动器中的 Get-ChildItem cmdlet。 如果证书无效或没有足够的颁发机构,命令将失败。
参数属性
| 类型: | X509Certificate2 |
| 默认值: | None |
| 支持通配符: | False |
| 不显示: | False |
参数集
(All)
| Position: | Named |
| 必需: | False |
| 来自管道的值: | False |
| 来自管道的值(按属性名称): | False |
| 来自剩余参数的值: | False |
-CommandName
指定具有指定名称或名称模式的命令。 允许使用通配符。 使用 CommandName 或其别名,Name。
默认情况下,Import-PSSession 从会话导入所有命令,但与当前会话中的命令具有相同名称的命令除外。 这可以防止导入的命令隐藏或替换会话中的命令。 若要导入所有命令(即使是隐藏或替换其他命令的命令),请使用 AllowClobber 参数。
如果使用 CommandName 参数,则除非使用 FormatTypeName 参数,否则不会导入命令的格式设置文件。 同样,如果使用 FormatTypeName 参数,则除非使用 CommandName 参数,否则不会导入任何命令。
参数属性
| 类型: | String[] |
| 默认值: | None |
| 支持通配符: | False |
| 不显示: | False |
| 别名: | 名称 |
参数集
(All)
| Position: | 2 |
| 必需: | False |
| 来自管道的值: | False |
| 来自管道的值(按属性名称): | False |
| 来自剩余参数的值: | False |
-CommandType
指定命令对象的类型。 默认值为 Cmdlet。 使用 CommandType 或其别名,类型。 此参数的可接受值为:
- 别名。 远程会话中的 Windows PowerShell 别名。
- 全部。 远程会话中的 cmdlet 和函数。
- 应用程序。 远程会话中 Path 环境变量 ($env:path) 中列出的路径中除 Windows-PowerShell 文件以外的所有文件,包括 .txt、 .exe和 .dll 文件。
- Cmdlet。 远程会话中的 cmdlet。 “Cmdlet”是默认值。
- ExternalScript。 .ps1 远程会话中 Path 环境变量 ($env:path) 中列出的路径中的文件。
- 筛选器和函数。 Windows PowerShell 在远程会话中运行。
- 脚本。 脚本块在远程会话中。
参数属性
| 类型: | CommandTypes |
| 默认值: | None |
| 接受的值: | Alias, Function, Filter, Cmdlet, ExternalScript, Application, Script, Workflow, Configuration, All |
| 支持通配符: | False |
| 不显示: | False |
| 别名: | 类型 |
参数集
(All)
| Position: | Named |
| 必需: | False |
| 来自管道的值: | False |
| 来自管道的值(按属性名称): | False |
| 来自剩余参数的值: | False |
-DisableNameChecking
指示此 cmdlet 禁止在导入名称包括未经批准的谓词或禁止字符的 cmdlet 或函数时发出警告的消息。
默认情况下,当导入导出 cmdlet 或具有未批准的谓词的函数名称中的模块时,Windows PowerShell 会显示以下警告消息:
“警告:一些导入的命令名称包括未经批准的谓词,这可能会使它们更易于发现。 使用 Verbose 参数获取更多详细信息或类型 Get-Verb 以查看已批准的谓词列表。
此消息只是警告。 仍导入完整的模块,包括不符合的命令。 尽管消息显示给模块用户,但模块作者应修复命名问题。
参数属性
| 类型: | SwitchParameter |
| 默认值: | None |
| 支持通配符: | False |
| 不显示: | False |
参数集
(All)
| Position: | Named |
| 必需: | False |
| 来自管道的值: | False |
| 来自管道的值(按属性名称): | False |
| 来自剩余参数的值: | False |
-FormatTypeName
指定指定Microsoft .NET Framework 类型的格式设置说明。 输入类型名称。 允许使用通配符。
此参数的值必须是从中导入命令的会话中 Get-FormatData 命令返回的类型的名称。 若要获取远程会话中的所有格式设置数据,请键入 *。
如果命令不包含 CommandName 或 FormatTypeName 参数, 则 Import-PSSession 将导入远程会话中 Get-FormatData 命令返回的所有 .NET Framework 类型的格式设置说明。
如果使用 FormatTypeName 参数,则除非使用 CommandName 参数,否则不会导入任何命令。
同样,如果使用 CommandName 参数,则除非使用 FormatTypeName 参数,否则不会导入命令的格式设置文件。
参数属性
| 类型: | String[] |
| 默认值: | None |
| 支持通配符: | False |
| 不显示: | False |
参数集
(All)
| Position: | 3 |
| 必需: | False |
| 来自管道的值: | False |
| 来自管道的值(按属性名称): | False |
| 来自剩余参数的值: | False |
-FullyQualifiedModule
指定具有以 ModuleSpecification 对象形式指定的名称的模块(在 MSDN 库中 ModuleSpecification 构造函数 (Hashtable) 的“备注”部分中介绍)。 例如,FullyQualifiedModule 参数接受以 @{ModuleName = “modulename”格式指定的模块名称;ModuleVersion = “version_number”} 或 @{ModuleName = “modulename”;ModuleVersion = “version_number”;Guid = “GUID”}。 ModuleName 和 ModuleVersion 是必需的,但 Guid 是可选的。
不能在与 Module 参数相同的命令中指定 FullyQualifiedModule 参数;这两个参数是互斥的。
参数属性
| 类型: | ModuleSpecification[] |
| 默认值: | None |
| 支持通配符: | False |
| 不显示: | False |
参数集
(All)
| Position: | Named |
| 必需: | False |
| 来自管道的值: | False |
| 来自管道的值(按属性名称): | False |
| 来自剩余参数的值: | False |
-Module
指定和数组 Windows PowerShell 管理单元和模块中的命令。 输入管理单元和模块名称。 不允许使用通配符。
Import-PSSession 无法从管理单元导入提供程序。
有关详细信息,请参阅about_PSSnapins和 about_Modules。
参数属性
| 类型: | String[] |
| 默认值: | None |
| 支持通配符: | False |
| 不显示: | False |
| 别名: | PSSnapin |
参数集
(All)
| Position: | Named |
| 必需: | False |
| 来自管道的值: | False |
| 来自管道的值(按属性名称): | False |
| 来自剩余参数的值: | False |
-Prefix
指定导入命令名称中名词的前缀。
使用此参数可避免会话中不同命令具有相同名称时可能发生的名称冲突。
例如,如果指定前缀 Remote,然后导入 Get-Date cmdlet,则该 cmdlet 在会话中称为 Get-RemoteDate,并且不会与原始 Get-Date cmdlet 混淆。
参数属性
| 类型: | String |
| 默认值: | None |
| 支持通配符: | False |
| 不显示: | False |
参数集
(All)
| Position: | Named |
| 必需: | False |
| 来自管道的值: | False |
| 来自管道的值(按属性名称): | False |
| 来自剩余参数的值: | False |
-Session
指定从中导入 cmdlet 的 PSSession。 输入包含会话对象的变量或获取会话对象的命令,例如 New-PSSession 或 Get-PSSession 命令。 只能指定一个会话。 此参数是必需的。
参数属性
| 类型: | PSSession |
| 默认值: | None |
| 支持通配符: | False |
| 不显示: | False |
参数集
(All)
| Position: | 0 |
| 必需: | True |
| 来自管道的值: | False |
| 来自管道的值(按属性名称): | False |
| 来自剩余参数的值: | False |
CommonParameters
此 cmdlet 支持通用参数:-Debug、-ErrorAction、-ErrorVariable、-InformationAction、-InformationVariable、-OutBuffer、-OutVariable、-PipelineVariable、-ProgressAction、-Verbose、-WarningAction 和 -WarningVariable。 有关详细信息,请参阅 about_CommonParameters。
输入
None
不能通过管道将对象传递给此 cmdlet。
输出
PSModuleInfo
Import-PSSession 返回 New-Module 和 Get-Module cmdlet 返回的模块对象。 但是,导入的模块是临时的,仅在当前会话中存在。 若要在磁盘上创建永久模块,请使用 Export-PSSession cmdlet。
备注
- Import-PSSession 依赖于 Windows PowerShell 远程处理基础结构。 若要使用此 cmdlet,必须将计算机配置为 WS-Management 远程处理。 有关详细信息,请参阅about_Remote和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 命令时,您可能会看到来自这些 cmdlet 的错误消息。 此外,Import-PSSession 无法从不包含 Get-Command、Get-FormatData、Select-Object 和 Get-Help cmdlet 的 PSSession 导入命令。
- 导入的命令与其他远程命令具有相同的限制,包括无法使用用户界面(如记事本)启动程序。
- 由于 Windows PowerShell 配置文件未在 PSSession 中运行,因此配置文件添加到会话的命令不适用于 Import-PSSession。 若要从配置文件导入命令,请使用 Invoke-Command 命令在导入命令之前手动在 PSSession 中运行配置文件。
- Import-PSSession 创建的临时模块可能包含格式化文件,即使命令不导入格式数据也是如此。 如果命令不导入格式数据,则创建的任何格式化文件都不会包含格式数据。
- 若要使用 Import-PSSession,当前会话中的执行策略不能受限或全部签名,因为 Import-PSSession 创建的临时模块包含这些策略禁止的未签名脚本文件。 若要在不更改本地计算机的执行策略的情况下使用 Import-PSSession,请使用 Set-ExecutionPolicy Scope 参数为单个进程设置限制较少的执行策略。
- 在 Windows PowerShell 2.0 中,从另一个会话导入的命令的帮助主题不包括使用 Prefix 参数分配的前缀。 若要获取有关 Windows PowerShell 2.0 中导入命令的帮助,请使用原始(非前缀)命令名称。