Enter-PSSession
使用远程计算机启动交互式会话。
语法
Enter-PSSession
[-ComputerName] <String>
[-EnableNetworkAccess]
[[-Credential] <PSCredential>]
[-ConfigurationName <String>]
[-Port <Int32>]
[-UseSSL]
[-ApplicationName <String>]
[-SessionOption <PSSessionOption>]
[-Authentication <AuthenticationMechanism>]
[-CertificateThumbprint <String>]
[<CommonParameters>]
Enter-PSSession
[-HostName] <String>
[-Port <Int32>]
[-UserName <String>]
[-KeyFilePath <String>]
[-SSHTransport]
[<CommonParameters>]
Enter-PSSession
[[-Session] <PSSession>]
[<CommonParameters>]
Enter-PSSession
[[-ConnectionUri] <Uri>]
[-EnableNetworkAccess]
[[-Credential] <PSCredential>]
[-ConfigurationName <String>]
[-AllowRedirection]
[-SessionOption <PSSessionOption>]
[-Authentication <AuthenticationMechanism>]
[-CertificateThumbprint <String>]
[<CommonParameters>]
Enter-PSSession
[-InstanceId <Guid>]
[<CommonParameters>]
Enter-PSSession
[[-Id] <Int32>]
[<CommonParameters>]
Enter-PSSession
[-Name <String>]
[<CommonParameters>]
Enter-PSSession
[-VMId] <Guid>
[-Credential] <PSCredential>
[-ConfigurationName <String>]
[<CommonParameters>]
Enter-PSSession
[-VMName] <String>
[-Credential] <PSCredential>
[-ConfigurationName <String>]
[<CommonParameters>]
Enter-PSSession
[-ContainerId] <String>
[-ConfigurationName <String>]
[-RunAsAdministrator]
[<CommonParameters>]
说明
Enter-PSSession
cmdlet 使用单个远程计算机启动交互式会话。
在会话期间,键入的命令在远程计算机上运行,就像直接在远程计算机上键入一样。 一次只能有一个交互式会话。
通常,使用 ComputerName 参数指定远程计算机的名称。
但是,还可以使用为交互式会话使用 New-PSSession
cmdlet 创建的会话。 但是,不能使用 Disconnect-PSSession
、Connect-PSSession
或 Receive-PSSession
cmdlet 断开连接或重新连接到交互式会话。
从 PowerShell 6.0 开始,可以使用安全外壳(SSH)与远程计算机建立连接,前提是本地计算机上提供了 SSH,并且远程计算机配置了 PowerShell SSH 终结点。 基于 SSH 的 PowerShell 远程会话的好处是,它适用于多个平台(Windows、Linux、macOS)。 对于基于 SSH 的远程处理,请使用 HostName 参数集来指定远程计算机和相关连接信息。 有关如何设置 PowerShell SSH 远程处理的详细信息,请参阅 PowerShell 远程处理 Over SSH。
若要结束交互式会话并从远程计算机断开连接,请使用 Exit-PSSession
cmdlet,或键入 exit
。
示例
示例 1:启动交互式会话
PS> Enter-PSSession
[localhost]: PS>
此命令在本地计算机上启动交互式会话。 命令提示符会更改,以指示你现在在不同的会话中运行命令。
输入的命令在新会话中运行,结果以文本的形式返回到默认会话。
示例 2:使用交互式会话
第一个命令使用 Enter-PSSession
cmdlet 启动与 Server01(远程计算机)的交互式会话。 会话启动时,命令提示符将更改为包含计算机名称。
第二个命令获取 PowerShell 进程并将输出重定向到 Process.txt 文件。 该命令将提交到远程计算机,文件保存在远程计算机上。
第三个命令使用 Exit 关键字结束交互式会话并关闭连接。
第四个命令确认 Process.txt 文件位于远程计算机上。 本地计算机上的 Get-ChildItem
(“dir”)命令找不到该文件。
PS C:\> Enter-PSSession -ComputerName Server01
[Server01]: PS>
[Server01]: PS C:\> Get-Process PowerShell > C:\ps-test\Process.txt
[Server01]: PS C:\> exit
PS C:\>
PS C:\> 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
此命令演示如何在与远程计算机的交互式会话中工作。
示例 3:使用 Session 参数
PS> $s = New-PSSession -ComputerName Server01
PS> Enter-PSSession -Session $s
[Server01]: PS>
这些命令使用 Enter-PSSession
的 Session 参数在现有 PowerShell 会话中运行交互式会话(PSSession)。
示例 4:启动交互式会话并指定端口和凭据参数
PS> Enter-PSSession -ComputerName Server01 -Port 90 -Credential Domain01\User01
[Server01]: PS>
此命令使用 Server01 计算机启动交互式会话。 它使用 Port 参数指定端口和 Credential 参数来指定有权连接到远程计算机的用户的帐户。
示例 5:停止交互式会话
PS> Enter-PSSession -ComputerName Server01
[Server01]: PS> Exit-PSSession
PS>
此示例演示如何启动和停止交互式会话。 第一个命令使用 Enter-PSSession
cmdlet 启动与 Server01 计算机的交互式会话。
第二个命令使用 Exit-PSSession
cmdlet 结束会话。 还可以使用 Exit 关键字结束交互式会话。
Exit-PSSession
和 退出 具有相同的效果。
示例 6:使用 SSH 启动交互式会话
PS> Enter-PSSession -HostName UserA@LinuxServer01
此示例演示如何使用安全外壳(SSH)启动交互式会话。 如果在远程计算机上配置 SSH 以提示输入密码,则会收到密码提示。 否则,必须使用基于 SSH 密钥的用户身份验证。
示例 7:使用 SSH 启动交互式会话,并指定端口和用户身份验证密钥
PS> Enter-PSSession -HostName UserA@LinuxServer02:22 -KeyFilePath c:\<path>\userAKey_rsa
此示例演示如何使用 SSH 启动交互式会话。 它使用 端口 参数来指定要使用的端口,并使用 KeyFilePath 参数来指定用于对远程计算机上的用户进行身份验证的 RSA 密钥。
参数
-AllowRedirection
允许将此连接重定向到备用统一资源标识符(URI)。 默认情况下,不允许重定向。
使用 ConnectionURI 参数时,远程目标可以返回重定向到其他 URI 的说明。 默认情况下,PowerShell 不会重定向连接,但可以使用此参数来允许它重定向连接。
还可以通过更改 MaximumConnectionRedirectionCount 会话选项值来限制连接重定向的次数。 使用 New-PSSessionOption
cmdlet 的 MaximumRedirection 参数,或设置 $PSSessionOption
首选项变量的 MaximumConnectionRedirectionCount 属性。 默认值为 5。
类型: | SwitchParameter |
Position: | Named |
默认值: | None |
必需: | False |
接受管道输入: | False |
接受通配符: | False |
-ApplicationName
指定连接 URI 的应用程序名称段。 如果不在命令中使用 ConnectionURI 参数,请使用此参数指定应用程序名称。
默认值是本地计算机上的 $PSSessionApplicationName
首选项变量的值。 如果未定义此首选项变量,则默认值为 WSMAN。 此值适用于大多数用途。 有关详细信息,请参阅 about_Preference_Variables。
WinRM 服务使用应用程序名称来选择侦听器来为连接请求提供服务。 此参数的值应与远程计算机上的侦听器的 URLPrefix 属性的值匹配。
类型: | String |
Position: | Named |
默认值: | None |
必需: | False |
接受管道输入: | True |
接受通配符: | False |
-Authentication
指定用于对用户凭据进行身份验证的机制。 此参数的可接受值为:
- 违约
- 基本
- Credssp
- 消化
- Kerberos
- 谈判
- NegotiateWithImplicitCredential
默认值为 Default。
CredSSP 身份验证仅适用于 Windows Vista、Windows Server 2008 和更高版本的 Windows 操作系统。
有关此参数的值的详细信息,请参阅 AuthenticationMechanism Enum。
警告:凭据安全支持提供程序(CredSSP)身份验证(其中用户凭据传递到要进行身份验证的远程计算机)旨在用于需要对多个资源进行身份验证的命令,例如访问远程网络共享。 此机制会增加远程操作的安全风险。 如果远程计算机遭到入侵,则传递给它的凭据可用于控制网络会话。
类型: | AuthenticationMechanism |
接受的值: | Default, Basic, Negotiate, NegotiateWithImplicitCredential, Credssp, Digest, Kerberos |
Position: | Named |
默认值: | None |
必需: | False |
接受管道输入: | False |
接受通配符: | False |
-CertificateThumbprint
指定有权执行此操作的用户帐户的数字公钥证书(X509)。 输入证书的证书指纹。
证书用于基于客户端证书的身份验证。 它们只能映射到本地用户帐户;它们不适用于域帐户。
若要获取证书,请使用 PowerShell 证书: 驱动器中的 Get-Item
或 Get-ChildItem
命令。
类型: | String |
Position: | Named |
默认值: | None |
必需: | False |
接受管道输入: | False |
接受通配符: | False |
-ComputerName
指定计算机名称。 此 cmdlet 使用指定的远程计算机启动交互式会话。 仅输入一个计算机名称。 默认值为本地计算机。
键入 NetBIOS 名称、IP 地址或计算机的完全限定域名。 还可以通过管道将计算机名称传递给 Enter-PSSession
。
若要在 ComputerName 参数的值中使用 IP 地址,该命令必须包含 Credential 参数。 此外,必须为计算机配置 HTTPS 传输,或者远程计算机的 IP 地址必须包含在本地计算机上的 WinRM TrustedHosts 列表中。 有关将计算机名称添加到 TrustedHosts 列表的说明,请参阅 about_Remote_Troubleshooting中的“如何将计算机添加到受信任的主机列表”。
注意:在 Windows Vista 及更高版本的 Windows 操作系统中,若要将本地计算机包含在 ComputerName 参数的值中,必须使用“以管理员身份运行”选项启动 PowerShell。
类型: | String |
别名: | Cn |
Position: | 0 |
默认值: | None |
必需: | True |
接受管道输入: | True |
接受通配符: | False |
-ConfigurationName
指定用于交互式会话的会话配置。
输入会话配置的配置名称或完全限定的资源 URI。 如果仅指定配置名称,则前面有以下架构 URI:http://schemas.microsoft.com/powershell
。
与 SSH 一起使用时,这会指定要在目标上使用的子系统,如sshd_config中定义。 SSH 的默认值为 powershell
子系统。
会话的会话配置位于远程计算机上。 如果远程计算机上不存在指定的会话配置,命令将失败。
默认值是本地计算机上的 $PSSessionConfigurationName
首选项变量的值。 如果未设置此首选项变量,则默认值为 Microsoft.PowerShell。 有关详细信息,请参阅 about_Preference_Variables。
类型: | String |
Position: | Named |
默认值: | None |
必需: | False |
接受管道输入: | True |
接受通配符: | False |
-ConnectionUri
指定一个 URI,用于定义会话的连接终结点。 URI 必须完全限定。 此字符串的格式如下所示:
<Transport>://<ComputerName>:<Port>/<ApplicationName>
默认值如下所示:
http://localhost:5985/WSMAN
如果未指定 ConnectionURI,则可以使用 UseSSL、ComputerName、端口和 ApplicationName 参数来指定 ConnectionURI 值。
URI 的传输段的有效值为 HTTP 和 HTTPS。 如果使用传输段指定连接 URI,但不指定端口,则会话是使用标准端口创建的:80 表示 HTTP,对于 HTTPS 为 443。 若要使用 PowerShell 远程处理的默认端口,请为 HTTP 指定端口 5985,或为 HTTPS 指定端口 5986。
如果目标计算机将连接重定向到其他 URI,则 PowerShell 会阻止重定向,除非在命令中使用 AllowRedirection 参数。
类型: | Uri |
别名: | URI, CU |
Position: | 1 |
默认值: | None |
必需: | False |
接受管道输入: | True |
接受通配符: | False |
-ContainerId
指定容器的 ID。
类型: | String |
Position: | 0 |
默认值: | None |
必需: | True |
接受管道输入: | True |
接受通配符: | False |
-Credential
指定有权执行此操作的用户帐户。 默认值为当前用户。
键入用户名(如 User01 或 Domain01\User01),或输入由 Get-Credential
cmdlet 生成的 PSCredential 对象。 如果键入用户名,系统会提示输入密码。
凭据存储在 PSCredential 对象中,密码存储为 SecureString。
注意
有关 SecureString 数据保护的详细信息,请参阅 SecureString 的安全性如何?。
类型: | PSCredential |
Position: | 1 |
默认值: | Current user |
必需: | False |
接受管道输入: | True |
接受通配符: | False |
-EnableNetworkAccess
指示此 cmdlet 向环回会话添加交互式安全令牌。 交互式令牌允许在环回会话中运行命令,以便从其他计算机获取数据。 例如,可以在会话中运行将 XML 文件从远程计算机复制到本地计算机的命令。
环回会话是在同一台计算机上发起和结束的 PSSession。 若要创建环回会话,请省略 ComputerName 参数或将其值设置为 。 (dot)、localhost 或本地计算机的名称。
默认情况下,环回会话是使用网络令牌创建的,该令牌可能无法提供对远程计算机进行身份验证的足够权限。
EnableNetworkAccess 参数仅在环回会话中有效。 如果在远程计算机上创建会话时使用 EnableNetworkAccess,则命令会成功,但参数将被忽略。
还可以使用 Authentication 参数的 CredSSP 值(将会话凭据委托给其他计算机)在环回会话中允许远程访问。
此参数是在 Windows PowerShell 3.0 中引入的。
类型: | SwitchParameter |
Position: | Named |
默认值: | None |
必需: | False |
接受管道输入: | False |
接受通配符: | False |
-HostName
为基于安全外壳(SSH)的连接指定计算机名称。 这类似于 ComputerName 参数,但与远程计算机的连接是使用 SSH 而不是 Windows WinRM 进行的。 此参数支持使用表单 user@hostname:port
将用户名和/或端口指定为主机名参数值的一部分。 指定为主机名的一部分的用户名和/或端口优先于 -UserName
和 -Port
参数(如果指定)。 这允许将多个计算机名称传递给此参数,其中一些人具有特定的用户名和/或端口,而另一些则使用 -UserName
和/或端口中的用户名和/或端口,并 -Port
参数。
此参数是在 PowerShell 6.0 中引入的。
类型: | String |
Position: | 0 |
默认值: | None |
必需: | True |
接受管道输入: | True |
接受通配符: | False |
-Id
指定现有会话的 ID。
Enter-PSSession
对交互式会话使用指定的会话。
若要查找会话的 ID,请使用 Get-PSSession
cmdlet。
类型: | Int32 |
Position: | 0 |
默认值: | None |
必需: | False |
接受管道输入: | True |
接受通配符: | False |
-InstanceId
指定现有会话的实例 ID。
Enter-PSSession
对交互式会话使用指定的会话。
实例 ID 是 GUID。 若要查找会话的实例 ID,请使用 Get-PSSession
cmdlet。 还可以使用 会话、名称或 ID 参数来指定现有会话。 或者,可以使用 ComputerName 参数启动临时会话。
类型: | Guid |
Position: | Named |
默认值: | None |
必需: | False |
接受管道输入: | True |
接受通配符: | False |
-KeyFilePath
指定安全外壳(SSH)用于对远程计算机上的用户进行身份验证的密钥文件路径。
SSH 允许通过私钥/公钥执行用户身份验证,作为基本密码身份验证的替代方法。 如果远程计算机配置为进行密钥身份验证,则可以使用此参数提供标识用户的密钥。
此参数是在 PowerShell 6.0 中引入的。
类型: | String |
别名: | IdentityFilePath |
Position: | Named |
默认值: | None |
必需: | False |
接受管道输入: | False |
接受通配符: | False |
-Name
指定现有会话的友好名称。
Enter-PSSession
对交互式会话使用指定的会话。
如果指定的名称与多个会话匹配,该命令将失败。 还可以使用 Session、InstanceID或 ID 参数来指定现有会话。 或者,可以使用 ComputerName 参数启动临时会话。
若要为会话建立友好名称,请使用 New-PSSession
cmdlet 的 Name 参数。
类型: | String |
Position: | Named |
默认值: | None |
必需: | False |
接受管道输入: | True |
接受通配符: | False |
-Port
指定用于此命令的远程计算机上的网络端口。
在 PowerShell 6.0 中,此参数在支持安全外壳(SSH)连接的 HostName 参数集中被忽略。
WinRM (ComputerName 参数集)
若要连接到远程计算机,远程计算机必须侦听连接使用的端口。 默认端口为 5985,即 HTTP 的 WinRM 端口,5986 是 HTTPS 的 WinRM 端口。
在使用备用端口之前,必须在远程计算机上配置 WinRM 侦听器以侦听该端口。 使用以下命令配置侦听器:
winrm delete winrm/config/listener?Address=*+Transport=HTTP
winrm create winrm/config/listener?Address=*+Transport=HTTP @{Port="\<port-number\>"}
除非必须,否则不要使用 Port 参数。 命令中的端口设置适用于运行命令的所有计算机或会话。 备用端口设置可能会阻止命令在所有计算机上运行。
SSH (HostName 参数集)
若要连接到远程计算机,必须将远程计算机配置为 SSH 服务(SSHD),并且必须侦听连接使用的端口。 SSH 的默认端口为 22。
类型: | Int32 |
Position: | Named |
默认值: | None |
必需: | False |
接受管道输入: | False |
接受通配符: | False |
-RunAsAdministrator
指示 PSSession 以管理员身份运行。
类型: | SwitchParameter |
Position: | Named |
默认值: | None |
必需: | False |
接受管道输入: | False |
接受通配符: | False |
-Session
指定要用于交互式会话的 PowerShell 会话(PSSession)。 此参数采用会话对象。 还可以使用 名称、InstanceID或 ID 参数来指定 PSSession。
输入包含会话对象的变量或创建或获取会话对象的命令,例如 New-PSSession
或 Get-PSSession
命令。 还可以通过管道将会话对象传递给 Enter-PSSession
。 只能使用此参数提交一个 PSSession。 如果输入包含多个 PSSession的变量,该命令将失败。
使用 Exit-PSSession
或 EXIT 关键字时,交互式会话将结束,但创建的 PSSession 保持打开状态,可供使用。
类型: | PSSession |
Position: | 0 |
默认值: | None |
必需: | False |
接受管道输入: | True |
接受通配符: | False |
-SessionOption
设置会话的高级选项。 输入 SessionOption 对象,例如使用 New-PSSessionOption
cmdlet 创建的会话选项,或键是会话选项名称的哈希表,值是会话选项值。
选项的默认值由 $PSSessionOption
首选项变量的值(如果已设置)确定。 否则,默认值由会话配置中设置的选项建立。
会话选项值优先于在 $PSSessionOption
首选项变量和会话配置中设置的会话的默认值。 但是,它们不优先于会话配置中设置的最大值、配额或限制。
有关会话选项的说明(包括默认值)请参阅 New-PSSessionOption
。
有关 $PSSessionOption
首选项变量的信息,请参阅 about_Preference_Variables。 有关会话配置的详细信息,请参阅 about_Session_Configurations。
类型: | PSSessionOption |
Position: | Named |
默认值: | None |
必需: | False |
接受管道输入: | False |
接受通配符: | False |
-SSHTransport
指示使用安全外壳(SSH)建立远程连接。
默认情况下,PowerShell 使用 Windows WinRM 连接到远程计算机。 此开关强制 PowerShell 使用 HostName 参数集建立基于 SSH 的远程连接。
此参数是在 PowerShell 6.0 中引入的。
类型: | SwitchParameter |
接受的值: | true |
Position: | Named |
默认值: | None |
必需: | False |
接受管道输入: | False |
接受通配符: | False |
-Subsystem
指定用于新 PSSession的 SSH 子系统。
这指定在目标上使用的子系统,如sshd_config中定义。 子系统使用预定义的参数启动特定版本的 PowerShell。 如果远程计算机上不存在指定的子系统,该命令将失败。
如果未使用此参数,则默认值为“powershell”子系统。
类型: | String |
Position: | Named |
默认值: | powershell |
必需: | False |
接受管道输入: | True |
接受通配符: | False |
-UserName
指定用于在远程计算机上创建会话的帐户的用户名。 用户身份验证方法将取决于在远程计算机上配置安全外壳(SSH)的方式。
如果 SSH 配置为基本密码身份验证,系统会提示输入用户密码。
如果为基于密钥的用户身份验证配置 SSH,则可以通过 KeyFilePath 参数提供密钥文件路径,并且不会发生密码提示。 请注意,如果客户端用户密钥文件位于 SSH 已知位置,则基于密钥的身份验证不需要 KeyFilePath 参数,并且用户身份验证将根据用户名自动进行。 有关详细信息,请参阅有关基于密钥的用户身份验证的 SSH 文档。
这不是必需的参数。 如果未指定 UserName 参数,则当前登录用户名用于连接。
此参数是在 PowerShell 6.0 中引入的。
类型: | String |
Position: | Named |
默认值: | None |
必需: | False |
接受管道输入: | False |
接受通配符: | False |
-UseSSL
指示此 cmdlet 使用安全套接字层 (SSL) 协议建立与远程计算机的连接。 默认情况下,不使用 SSL。
WS-Management 加密通过网络传输的所有 PowerShell 内容。 UseSSL 参数是一种额外的保护,用于跨 HTTPS 连接而不是 HTTP 连接发送数据。
如果使用此参数,但 SSL 在用于命令的端口上不可用,命令将失败。
类型: | SwitchParameter |
Position: | Named |
默认值: | None |
必需: | False |
接受管道输入: | False |
接受通配符: | False |
-VMId
指定虚拟机的 ID。
类型: | Guid |
别名: | VMGuid |
Position: | 0 |
默认值: | None |
必需: | True |
接受管道输入: | True |
接受通配符: | False |
-VMName
指定虚拟机的名称。
类型: | String |
Position: | 0 |
默认值: | None |
必需: | True |
接受管道输入: | True |
接受通配符: | False |
输入
System.String, System.Management.Automation.Runspaces.PSSession
可以将计算机名称作为字符串或会话对象通过管道传递给此 cmdlet。
输出
None
该 cmdlet 不返回任何输出。
备注
若要连接到远程计算机,你必须是远程计算机上的 Administrators 组的成员。 若要在本地计算机上启动交互式会话,必须使用 以管理员身份运行 选项启动 PowerShell。
使用 Enter-PSSession
时,远程计算机上的用户配置文件将用于交互式会话。 远程用户配置文件中的命令,包括用于添加 PowerShell 模块和更改命令提示符的命令,在显示远程提示之前运行。
Enter-PSSession
在本地计算机上将 UI 区域性设置用于交互式会话。 若要查找本地 UI 区域性,请使用 $UICulture
自动变量。
Enter-PSSession
需要 Get-Command
、Out-Default
和 Exit-PSSession
cmdlet。 如果远程计算机上的会话配置中不包含这些 cmdlet,Enter-PSSession
命令将失败。
与 Invoke-Command
不同,该命令在将命令发送到远程计算机之前对其进行分析和解释,Enter-PSSession
直接将命令发送到远程计算机,而无需解释。
如果要输入的会话正忙于处理命令,则 PowerShell 响应 Enter-PSSession
命令之前可能会有延迟。 会话可用后,即已连接。 若要取消
从 PowerShell 6.0 开始,包含 HostName 参数集。 添加了它以基于安全外壳(SSH)提供 PowerShell 远程处理。 多个平台(Windows、Linux、macOS)和 PowerShell 远程处理都支持 SSH 和 PowerShell 远程处理,这些平台将安装并配置 PowerShell 和 SSH。 这与以前的 Windows 仅基于 WinRM 的远程处理不同,许多特定于 WinRM 的功能和限制不适用。 例如,目前不支持基于 WinRM 的配额、会话选项、自定义终结点配置和断开连接/重新连接功能。 有关如何设置 PowerShell SSH 远程处理的详细信息,请参阅 PowerShell 远程处理 Over SSH。
在 PowerShell 7.1 之前,通过 SSH 进行远程处理不支持第二跃点远程会话。 此功能仅限于使用 WinRM 的会话。 PowerShell 7.1 允许 Enter-PSSession
和 Enter-PSHostProcess
在任何交互式远程会话中工作。