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
     [[-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-PSSessionConnect-PSSessionReceive-PSSession cmdlet 断开连接或重新连接到交互式会话。

若要结束交互式会话并从远程计算机断开连接,请使用 Exit-PSSession cmdlet 或键入 exit

示例

示例 1:启动交互式会话

PS C:\> Enter-PSSession
[localhost]: PS C:\>

此命令将在本地计算机上启动交互式会话。 命令提示符将发生更改,以指示你现在正在不同的会话中运行命令。

你输入的命令将在该新会话中运行,而结果将以文本形式返回到默认会话中。

示例 2:使用交互式会话

第一个命令使用 Enter-PSSession cmdlet 启动与 Server01(远程计算机)的交互式会话。 会话启动时,命令提示符将更改为包含该计算机名称。

第二个命令获取 PowerShell 进程,并将输出重定向到 Process.txt 文件。 该命令将提交到远程计算机,并且该文件将保存在远程计算机上。

第三个命令使用 Exit 关键字来结束交互式会话并关闭连接。 第四个命令确认 Process.txt 文件是否位于远程计算机上。 本地计算机上的 Get-ChildItem(“dir”)命令无法找到该文件。

PS C:\> Enter-PSSession -ComputerName Server01
[Server01]: PS C:\>
[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-PSSessionSession 参数在现有 PowerShell 会话 (PSSession) 中运行交互式会话。

示例 4:启动交互式会话并指定 Port 和 Credential 参数

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-PSSessionExit 具有相同的效果。

参数

-AllowRedirection

允许将此连接重定向到备用统一资源标识符 (URI)。 默认情况下,不允许重定向。

使用 ConnectionURI 参数时,远程目标将返回一个指令,以重定向到不同的 URI。 默认情况下,PowerShell 不会重定向连接,但你可以使用此参数允许它重定向连接。

也可以通过更改 MaximumConnectionRedirectionCount 会话选项值,限制重定向连接的次数。 使用 New-PSSessionOption cmdlet 的 MaximumRedirection 参数或设置 $PSSessionOption 首选项变量的 MaximumConnectionRedirectionCount 属性。 默认值为 5。

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

-ApplicationName

指定连接 URI 的应用程序名称段。 当命令中未使用 ConnectionURI 参数时,请使用此参数指定应用程序名称。

默认值为本地计算机上的 $PSSessionApplicationName 首选项变量的值。 如果未定义此首选项变量,则默认值为 WSMAN。 该值适用于大多数使用情况。 有关详细信息,请参阅 about_Preference_Variables

WinRM 服务使用应用程序名称来选择为连接请求提供服务的侦听器。 此参数的值应与远程计算机上的侦听器的 URLPrefix 属性值相匹配。

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

-Authentication

指定用于对用户的凭据进行身份验证的机制。 此参数的可接受值为:

  • 默认值
  • 基本
  • Credssp
  • 摘要
  • Kerberos
  • Negotiate
  • NegotiateWithImplicitCredential

默认值为 Default。

CredSSP 身份验证仅在 Windows Vista、Windows Server 2008 和更高版本的 Windows 操作系统中可用。

有关此参数的值的详细信息,请参阅 AuthenticationMechanism 枚举

注意

在凭据安全支持提供程序 (CredSSP) 身份验证中,用户凭据传递到远程计算机中进行验证,这种验证用于要求对多个资源进行验证的命令(例如访问远程网络共享时使用的命令)。 此机制增加了远程操作的安全风险。 如果远程计算机的安全受到威胁,则传递给该计算机的凭据可用于控制网络会话。

Type:AuthenticationMechanism
Accepted values:Default, Basic, Negotiate, NegotiateWithImplicitCredential, Credssp, Digest, Kerberos
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-CertificateThumbprint

指定有权执行此操作的用户帐户的数字公钥证书 (X509)。 输入证书的证书指纹。

在基于客户端证书的身份验证中使用证书。 证书只能映射到本地用户帐户,而不适用于域帐户。

若要获取证书,请在 PowerShell Cert: 驱动器中使用 Get-ItemGet-ChildItem 命令。

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

-ComputerName

指定计算机名称。 此 cmdlet 将启动与指定远程计算机的交互式会话。 仅输入一个计算机名称。 默认为本地计算机。

键入计算机的 NetBIOS 名称、IP 地址或完全限定的域名。 还可以通过管道将计算机名称传递给 Enter-PSSession

若要在 ComputerName 参数的值中使用 IP 地址,该命令必须包括 Credential 参数。 此外,必须为计算机配置 HTTPS 传输,或者必须在本地计算机上的 WinRM TrustedHosts 列表中包含远程计算机的 IP 地址。 有关将计算机名称添加到 TrustedHosts 列表的说明,请参阅 about_Remote_Troubleshooting 中的“如何将计算机添加到受信任主机列表中”。

注意

在 Windows 操作系统上,要将本地计算机包含在 ComputerName 参数的值中,必须使用“以管理员身份运行”选项启动 PowerShell。

Type:String
Aliases:Cn
Position:0
Default value:None
Required:True
Accept pipeline input:True
Accept wildcard characters:False

-ConfigurationName

指定用于交互式会话的会话配置。

输入会话配置的配置名称或完全限定的资源 URI。 如果只指定配置名称,则将在其前面预置以下架构 URI:http://schemas.microsoft.com/powershell

会话的会话配置位于远程计算机上。 如果远程计算机上不存在指定的会话配置,则该命令会失败。

默认值为本地计算机上的 $PSSessionConfigurationName 首选项变量的值。 如果未设置此首选项变量,则默认值为 Microsoft.PowerShell。 有关详细信息,请参阅 about_Preference_Variables

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

-ConnectionUri

指定定义会话的连接终结点的 URI。 URI 必须完全限定。 此字符串的格式如下:

<Transport>://<ComputerName>:<Port>/<ApplicationName>

默认值如下:

http://localhost:5985/WSMAN

如果未指定 ConnectionURI,则可以使用 UseSSLComputerNamePortApplicationName 参数来指定 ConnectionURI 值。

URI 的 Transport 段的有效值为 HTTP 和 HTTPS。 如果使用 Transport 段指定连接 URI,但不指定端口,将使用以下标准端口来创建会话:80 用于 HTTP,443 用于 HTTPS。 若要使用 PowerShell 远程处理的默认端口,请指定 HTTP 端口 5985 或 HTTPS 端口 5986。

如果目标计算机将连接重定向到另一个 URI,PowerShell 将阻止重定向,除非在命令中使用 AllowRedirection 参数。

Type:Uri
Aliases:URI, CU
Position:1
Default value:None
Required:False
Accept pipeline input:True
Accept wildcard characters:False

-ContainerId

指定容器 ID。

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

-Credential

指定有权执行此操作的用户帐户。 默认为当前用户。

键入用户名,如 User01Domain01\User01;或输入 Get-Credential cmdlet 生成的 PSCredential 对象。 如果键入用户名,系统会提示输入密码。

凭据存储在 PSCredential 对象中,密码存储为 SecureString

注意

有关 SecureString 数据保护的详细信息,请参阅 SecureString 的安全性如何?

Type:PSCredential
Position:1
Default value:Current user
Required:False
Accept pipeline input:True
Accept wildcard characters:False

-EnableNetworkAccess

指示此 cmdlet 将交互式安全令牌添加到环回会话。 通过交互式令牌,你可以在环回会话中运行用于获取其他计算机中的数据的命令。 例如,你可以在该会话中运行用于将 XML 文件从远程计算机复制到本地计算机的命令。

环回会话是在同一计算机上开始并终止的 PSSession。 若要创建环回会话,请省略 ComputerName 参数,或将其值设置为 . (点)、localhost 或本地计算机的名称。

默认情况下,使用网络令牌创建环回会话,该令牌提供的权限可能不足以对远程计算机进行身份验证。

EnableNetworkAccess 参数仅在环回会话中有效。 如果在远程计算机上创建会话时使用 EnableNetworkAccess,该命令将成功,但会忽略此参数。

通过用于将会话凭据委派给其他计算机的 Authentication 参数的 CredSSP 值,还可以在环回会话中进行远程访问。

已在 Windows PowerShell 3.0 中引入了此参数。

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

-Id

指定现有会话的 ID。 Enter-PSSession 使用指定会话进行交互式会话。

若要查找某个会话的 ID,请使用 Get-PSSession cmdlet。

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

-InstanceId

指定现有会话的实例 ID。 Enter-PSSession 使用指定会话进行交互式会话。

实例 ID 是一个 GUID。 若要查找某个会话的 ID,请使用 Get-PSSession cmdlet。 也可以使用 SessionNameID 参数来指定现有会话。 或者,可以使用 ComputerName 参数来启动临时会话。

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

-Name

指定现有会话的友好名称。 Enter-PSSession 使用指定会话进行交互式会话。

如果你指定的名称与多个会话相匹配,则该命令会失败。 也可以使用 SessionInstanceIDID 参数来指定现有会话。 或者,可以使用 ComputerName 参数来启动临时会话。

若要为会话建立友好名称,请使用 New-PSSessionName 参数。

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

-Port

指定远程计算机上用于此命令的网络端口。 若要连接到一台远程计算机,则必须在该连接所用的端口上侦听远程计算机。 默认端口为 5985(HTTP 的 WinRM 端口)和 5986(HTTPS 的 WinRM 端口)。

使用备用端口之前,你必须在远程计算机上配置 WinRM 侦听器,才能在该端口上进行侦听。 使用以下命令配置侦听器:

  1. winrm delete winrm/config/listener?Address=*+Transport=HTTP
  2. winrm create winrm/config/listener?Address=*+Transport=HTTP @{Port="\<port-number\>"}

除非必要,否则不要使用 Port 参数。 命令中的端口设置适用于运行该命令的所有计算机或会话。 备用端口设置可能会阻止在所有计算机上运行该命令。

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

-RunAsAdministrator

指示 PSSession 以管理员身份运行。

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

-Session

指定要用于交互式会话的 Windows PowerShell 会话 (PSSession)。 此参数获取一个会话对象。 还可以使用 NameInstanceIDID 参数来指定 PSSession

输入包含会话对象的变量或者用来创建或获取会话对象的命令,如 New-PSSessionGet-PSSession 命令。 也可以将会话对象通过管道传递给 Enter-PSSession。 使用此参数只能提交一个 PSSession。 如果输入一个包含多个 PSSession 的变量,则该命令将失败。

使用 Exit-PSSessionEXIT 关键字时,交互式会话将结束,但是你创建的 PSSession 将保持打开状态且可供使用。

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

-SessionOption

为该会话设置高级选项。 输入 SessionOption 对象(例如使用 New-PSSessionOption cmdlet 创建的对象),或输入哈希表,其中的键是会话选项名称,而值是会话选项值。

这些选项的默认值由 $PSSessionOption 首选项变量的值(如果已设置)确定。 否则,通过在会话配置中设置的选项创建默认值。

会话选项值优先于在 $PSSessionOption 首选项变量和会话配置中设置的会话的默认值。 但是,它们不优先于在会话配置中设置的最大值、配额或限制。

有关会话选项(包括默认值)的说明,请参阅 New-PSSessionOption。 有关 $PSSessionOption 首选项变量的信息,请参阅 about_Preference_Variables。 有关会话配置的详细信息,请参阅 about_Session_Configurations

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

-UseSSL

指示此 cmdlet 使用安全套接字层 (SSL) 协议来建立与远程计算机的连接。 默认情况下,不使用 SSL。

WS-Management 对通过网络传输的所有 Windows PowerShell 内容进行加密。 UseSSL 参数是一种额外的保护措施,它通过 HTTPS 连接而不是 HTTP 连接来发送数据。

如果使用此参数,但 SSL 在用于命令的端口上不可用,则命令将失败。

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

-VMId

指定虚拟机的 ID。

Type:Guid
Aliases:VMGuid
Position:0
Default value:None
Required:True
Accept pipeline input:True
Accept wildcard characters:False

-VMName

指定虚拟机的名称。

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

输入

String

可以将计算机名称作为字符串传递给此 cmdlet。

PSSession

可以将会话对象通过管道传递给此 cmdlet。

输出

None

此 cmdlet 不返回任何输出。

备注

Windows PowerShell 包含 Enter-PSSession 的以下别名:

  • etsn

若要连接到远程计算机,你必须是该远程计算机上 Administrators 组的成员。 若要在本地计算机上启动交互式会话,你必须使用“以管理员身份运行”选项启动 PowerShell。

当你使用 Enter-PSSession 时,会将远程计算机上的用户配置文件用于交互式会话。 远程用户配置文件中的命令(包括用于添加 PowerShell 模块和更改命令提示符的命令)将在显示远程提示之前运行。

Enter-PSSession 会将本地计算机上的 UI 区域性设置用于交互式会话。 若要查找本地 UI 区域性,请使用 $UICulture 自动变量。

Enter-PSSession 需要 Get-CommandOut-DefaultExit-PSSession cmdlet。 如果远程计算机上的会话配置中不包括这些 cmdlet,则 Enter-PSSession 命令将失败。

Invoke-Command(在将命令发送到远程计算机前会对其进行分析和解释)不同,Enter-PSSession 不会对命令进行解释,而是直接将其发送到远程计算机。

如果你希望输入的会话正忙于处理命令,则在 PowerShell 响应 Enter-PSSession 命令之前可能有一段延迟。 一旦会话可用,你就会立即连接。 若要取消 Enter-PSSession 命令,请按 CTRL+C