New-PSSession

创建与本地或远程计算机的持续性连接。

语法

New-PSSession
   [[-ComputerName] <String[]>]
   [-Credential <PSCredential>]
   [-Name <String[]>]
   [-EnableNetworkAccess]
   [-ConfigurationName <String>]
   [-Port <Int32>]
   [-UseSSL]
   [-ApplicationName <String>]
   [-ThrottleLimit <Int32>]
   [-SessionOption <PSSessionOption>]
   [-Authentication <AuthenticationMechanism>]
   [-CertificateThumbprint <String>]
   [<CommonParameters>]
New-PSSession
   [-Credential <PSCredential>]
   [-Name <String[]>]
   [-EnableNetworkAccess]
   [-ConfigurationName <String>]
   [-ThrottleLimit <Int32>]
   [-ConnectionUri] <Uri[]>
   [-AllowRedirection]
   [-SessionOption <PSSessionOption>]
   [-Authentication <AuthenticationMechanism>]
   [-CertificateThumbprint <String>]
   [<CommonParameters>]
New-PSSession
   -Credential <PSCredential>
   [-Name <String[]>]
   [-ConfigurationName <String>]
   [-VMId] <Guid[]>
   [-ThrottleLimit <Int32>]
   [<CommonParameters>]
New-PSSession
   -Credential <PSCredential>
   [-Name <String[]>]
   [-ConfigurationName <String>]
   -VMName <String[]>
   [-ThrottleLimit <Int32>]
   [<CommonParameters>]
New-PSSession
   [[-Session] <PSSession[]>]
   [-Name <String[]>]
   [-EnableNetworkAccess]
   [-ThrottleLimit <Int32>]
   [<CommonParameters>]
New-PSSession
   [-Name <String[]>]
   [-ConfigurationName <String>]
   -ContainerId <String[]>
   [-RunAsAdministrator]
   [-ThrottleLimit <Int32>]
   [<CommonParameters>]
New-PSSession
   [-Name <String[]>]
   [-UseWindowsPowerShell]
   [<CommonParameters>]
New-PSSession
   [-Name <String[]>]
   [-Port <Int32>]
   [-HostName] <String[]>
   [-UserName <String>]
   [-KeyFilePath <String>]
   [-Subsystem <String>]
   [-ConnectingTimeout <Int32>]
   [-SSHTransport]
   [-Options <Hashtable>]
   [<CommonParameters>]
New-PSSession
   [-Name <String[]>]
   -SSHConnection <Hashtable[]>
   [<CommonParameters>]

说明

New-PSSession cmdlet 在本地或远程计算机上创建 PowerShell 会话 (PSSession)。 创建 PSSession 时,PowerShell 将建立与远程计算机的持久连接。

使用 PSSession 运行共享数据的多个命令,例如函数或变量的值。 若要在 PSSession 从中运行命令,请使用 Invoke-Command cmdlet。 若要使用 PSSession 与远程计算机直接交互,请使用 Enter-PSSession cmdlet。 有关详细信息,请参阅 about_PSSessions

可以在远程计算机上运行命令,而无需使用 Enter-PSSessionInvoke-Command 的 ComputerName 参数创建 PSSession。 当你使用 ComputerName 参数时,PowerShell 将创建一个用于该命令的临时连接,然后该连接将关闭

从 PowerShell 6.0 开始,如果 SSH 在本地计算机上可用并且远程计算机配置了 PowerShell SSH 终结点,则可以使用安全外壳 (SSH) 建立与远程计算机的连接并在其上创建会话。 基于 SSH 的 PowerShell 远程会话的好处是它可以跨多个平台(Windows、Linux、macOS)运行。 对于基于 SSH 的会话,请使用 HostName 或 SSHConnection 参数集来指定远程计算机和相关连接信息。 有关如何设置 PowerShell SSH 远程处理的详细信息,请参阅基于 SSH 的 PowerShell 远程处理

注意

从带有 HTTPS 终结点(其中的服务器证书不受信任,例如自签名证书)的 Linux 或 macOS 客户端使用 WSMan 远程处理时, 必须提供 PSSessionOption(其中包含设置为 $true 的 SkipCACheck 和 SkipCNCheck 值)才能成功建立连接。 仅当你处于可以确定服务器证书以及与目标系统的网络连接的环境中时才执行此操作。

示例

示例 1:在本地计算机上创建会话

$s = New-PSSession

此命令在本地计算机上创建新的 PSSession,并将 PSSession 保存在 $s 变量中

你现在可以使用此 PSSession 在本地计算机上运行命令。

示例 2:在远程计算机上创建会话

$Server01 = New-PSSession -ComputerName Server01

此命令在 Server01 计算机上创建新的 PSSession,并将其保存在 $Server01 变量中。

在创建多个 PSSession 对象时,将它们分配给具有有用名称的变量。 这将帮助你在后续命令中管理 PSSession 对象。

示例 3:在多台计算机上创建会话

$s1, $s2, $s3 = New-PSSession -ComputerName Server01,Server02,Server03

此命令在 ComputerName 参数指定的每台计算机上创建一个 PSSession 对象(共三个)。

该命令使用赋值运算符 (=) 将新的 PSSession 对象分配给变量:$s1$s2$s3。 它将 Server01 PSSession 分配给 $s1、将 Server02 PSSession 分配给 $s2、将 Server03 PSSession 分配给 $s3

当你将多个对象分配给一系列变量时,PowerShell 会分别将每个对象分配给系列中的一个变量。 如果对象多于变量,则所有剩余对象都将分配给最后一个变量。 如果变量多于对象,则剩余变量为空 ($null)。

示例 4:使用指定的端口创建会话

New-PSSession -ComputerName Server01 -Port 8081 -UseSSL -ConfigurationName E12

此命令在 Server01 计算机上创建一个连接到服务器端口 8081 并使用 SSL 协议的新 PSSession。 新的 PSSession 使用名为 E12 的备用会话配置。

在设置端口前,你必须将远程计算机上的 WinRM 侦听器配置为侦听端口 8081。 有关详细信息,请参阅 Port 参数的说明。

示例 5:基于现有会话创建会话

New-PSSession -Session $s -Credential Domain01\User01

此命令创建与现有 PSSession 具有相同属性的 PSSession。 当现有 PSSession 的资源耗尽,需要新的 PSSession 来分担一些需求时,你可以使用此命令格式。

该命令使用 New-PSSessionSession 参数指定在 $s 变量中保存的 PSSession。 它使用 Domain1\Admin01 用户的凭据来完成命令。

示例 6:在不同的域中创建具有全局作用域的会话

$global:s = New-PSSession -ComputerName Server1.Domain44.Corpnet.Fabrikam.com -Credential Domain01\Admin01

此示例显示了如何创建一个在位于不同域中的计算机上具有全局作用域的 PSSession

默认情况下,在命令行创建的 PSSession 对象是使用全局作用域创建的,而在脚本中创建的 PSSession 对象具有脚本作用域。

若要创建具有全局作用域的 PSSession,请创建一个新的 PSSession,然后将该 PSSession 存储在强制转换为全局作用域的变量中。 在此示例下,$s 变量将强制转换为全局作用域。

该命令使用 ComputerName 参数指定远程计算机。 由于计算机与用户帐户处于不同的域中,因此需指定计算机的全名以及用户的凭据。

示例 7:为许多计算机创建会话

$rs = Get-Content C:\Test\Servers.txt | New-PSSession -ThrottleLimit 50

此命令在 Servers.txt 文件中列出的每台计算机(共 200 台)上创建 PSSession,并将生成的 PSSession 保存在 $rs 变量中。 PSSession 对象的限制为 50

当计算机名称存储在数据库、电子表格、文件文件中或以其他可转换为文本的格式存储时,可以使用此命令格式。

示例 8:使用 URI 创建会话

$s = New-PSSession -URI http://Server01:91/NewSession -Credential Domain01\User01

此命令在 Server01 计算机上创建 PSSession,并将其存储在 $s 变量中。 它使用 URI 参数指定传输协议、远程计算机、端口和备用会话配置。 它还使用 Credential 参数指定有权在远程计算机上创建会话的用户帐户。

示例 9:在一组会话中运行后台作业

$s = New-PSSession -ComputerName (Get-Content Servers.txt) -Credential Domain01\Admin01 -ThrottleLimit 16
Invoke-Command -Session $s -ScriptBlock {Get-Process PowerShell} -AsJob

这些命令可创建一组 PSSession 对象,然后在每个 PSSession 对象中运行后台作业。

第一个命令在 Servers.txt 文件中列出的每台计算机上创建一个新的 PSSession。 它使用 New-PSSession cmdlet 创建 PSSessionComputerName 参数的值是一个命令,该命令使用 Get-Content cmdlet 获取 Servers.txt 文件的计算机名列表。

该命令使用 Credential 参数创建带有域管理员权限的 PSSession 对象,并且使用 ThrottleLimit 参数将该命令限制到 16 个并发连接。 该命令将 PSSession 对象保存在 $s 变量中。

第二个命令使用 Invoke-Command cmdlet 的 AsJob 参数来启动在 $s 的每个 PSSession 对象中运行 Get-Process PowerShell 命令的后台作业。

有关 PowerShell 后台作业的详细信息,请参阅 about_Jobsabout_Remote_Jobs

示例 10:使用计算机的 URI 为计算机创建会话

New-PSSession -ConnectionURI https://management.exchangelabs.com/Management

此命令创建连接到由 URI(而不是计算机名)指定的计算机的 PSSession 对象。

示例 11:创建会话选项

$so = New-PSSessionOption -SkipCACheck
New-PSSession -ConnectionUri https://management.exchangelabs.com/Management -SessionOption $so -Credential Server01\Admin01

此示例显示了如何创建会话选项对象,并使用 SessionOption 参数。

第一个命令使用 New-PSSessionOption cmdlet 创建会话选项。 它将生成的 SessionOption 对象保存在 $so 变量中。

第二个命令在新会话中使用该选项。 该命令使用 New-PSSession cmdlet 创建新会话。 SessionOption 参数的值为 $so 变量中的 SessionOption 对象。

示例 12:使用 SSH 创建会话

New-PSSession -HostName UserA@LinuxServer01

此示例演示如何使用安全外壳 (SSH) 创建新的 PSSession。 如果在远程计算机上配置 SSH 以提示输入密码,则会收到密码提示。 否则,必须使用基于 SSH 密钥的用户身份验证。

示例 13:使用 SSH 创建会话并指定端口和用户身份验证密钥

New-PSSession -HostName UserA@LinuxServer01:22 -KeyFilePath c:\<path>\userAKey_rsa

此示例演示如何使用安全外壳 (SSH) 创建 PSSession。 它使用 Port 参数指定要使用的端口,并使用 KeyFilePath 参数指定用于识别和验证远程计算机上的用户的 RSA 密钥

示例 14:使用 SSH 创建多个会话

$sshConnections = @(
    @{
          HostName    = 'WinServer1'
          UserName    = 'domain\userA'
          KeyFilePath = 'c:\users\UserA\id_rsa'
    }
    @{
        HostName    = 'UserB@LinuxServer5'
        KeyFilePath = 'c:\UserB\<path>\id_rsa'
    }
)
New-PSSession -SSHConnection $sshConnections

此示例演示如何使用安全外壳 (SSH) 和 SSHConnection 参数集创建多个会话。 SSHConnection 参数采用包含每个会话连接信息的哈希表数组。 请注意,此示例要求目标远程计算机配置 SSH 以支持基于密钥的用户身份验证。

示例 15:使用 SSH 选项创建新会话

$options = @{
    Port=22
    User = 'UserB'
    Host = 'LinuxServer5'
}
New-PSSession -KeyFilePath '/Users/UserB/id_rsa' -Options $options

此示例演示如何使用 SSH 选项在基于 Linux 的远程计算机上创建新的基于 SSH 的会话。 Options 参数采用值的哈希表,这些值作为选项传递到与远程系统建立连接的基础 ssh 命令。

参数

-AllowRedirection

指示此 cmdlet 允许将此连接重定向到备用统一资源标识符 (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

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

  • Default
  • Basic
  • Credssp
  • Digest
  • Kerberos
  • Negotiate
  • NegotiateWithImplicitCredential

默认值为 Default

有关此参数的值的详细信息,请参阅 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 创建与指定计算机的持续性连接 (PSSession)。 如果输入多个计算机名称,New-PSSession 将创建多个 PSSession 对象,每台计算机一个。 默认为本地计算机。

键入一台或多台远程计算机的 NetBIOS 名称、IP 地址或完全限定的域名。 若要指定本地计算机,请键入计算机名称 localhost 或点 (.)。 当计算机与用户处于不同的域中时,必须使用完全限定的域名。 还可以通过管道将计算机名(括在引号中)传递给 New-PSSession

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

若要在 ComputerName 参数的值中包括本地计算机,则使用“以管理员身份运行”选项启动 Windows PowerShell。

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

-ConfigurationName

指定用于新 PSSession 的会话配置。

输入会话配置的配置名称或完全限定的资源 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

-ConnectingTimeout

指定初始 SSH 连接完成所允许的时间(以毫秒为单位)。 如果连接未在指定时间内完成,则会返回错误。

此参数是在 PowerShell 7.2 中引入的

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

-ConnectionUri

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

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

默认值如下:

http://localhost:5985/WSMAN

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

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

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

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

-ContainerId

指定容器的 ID 数组。 此 cmdlet 启动与每个指定容器的交互式会话。 使用 docker ps 命令获取容器 ID 的列表。 有关详细信息,请参阅 docker ps 命令的帮助。

Type:String[]
Position:Named
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:Named
Default value:Current user
Required:False
Accept pipeline input:True
Accept wildcard characters:False

-EnableNetworkAccess

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

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

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

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

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

若要保护计算机免受恶意访问,断开连接的具有交互式令牌(使用 EnableNetworkAccess 参数创建)的环回会话只能通过创建该会话的计算机重新连接。 断开连接的使用 CredSSP 身份验证的会话可通过其他计算机重新连接。 有关详细信息,请参阅 Disconnect-PSSession

此参数是在 PowerShell 3.0 中引入的。

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

-HostName

为基于安全外壳 (SSH) 的连接指定计算机名称数组。 这与 ComputerName 参数类似,只不过与远程计算机的连接是使用 SSH 而不是 Windows WinRM 建立的。

此参数是在 PowerShell 6.0 中引入的。

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

-KeyFilePath

指定安全外壳 (SSH) 用于对远程计算机上的用户进行身份验证的密钥文件路径。

SSH 允许通过私钥/公钥执行用户身份验证,作为基本密码身份验证的替代方案。 如果远程计算机配置为密钥身份验证,则此参数可用于提供标识用户的密钥。

此参数是在 PowerShell 6.0 中引入的。

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

-Name

指定 PSSession 的友好名称

使用其他 cmdlet(例如 Get-PSSessionEnter-PSSession)时,你可以使用该名称引用 PSSession。 对于计算机或当前会话,该名称无需是唯一的。

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

-Options

指定连接到基于 SSH 的远程会话时使用的 SSH 选项的哈希表。 可能的选项是基于 Unix 版本的 ssh 命令支持的任何值。

由参数显式传递的任何值都优先于在 Options 哈希表中传递的值。 例如,使用 Port 参数会覆盖在 Options 哈希表中传递的任何 Port 键值对

Type:Hashtable
Position:Named
Default value:None
Required:False
Accept pipeline input:False
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

指定 PSSession 对象的数组,此 cmdlet 会将其用作新 PSSession 的模型。 此参数创建与指定的 PSSession 对象具有相同属性的新 PSSession 对象。

输入一个变量,其中包含 PSSession 对象或创建或获取 PSSession 的命令,例如 New-PSSessionGet-PSSession 命令。

生成的 PSSession 对象与原有 PSSession 具有相同的计算机名称、应用程序名称、连接 URI、端口、配置名称、中止值和安全套接字层 (SSL) 值,但具有不同显示名称、ID 和实例 ID (GUID)。

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

-SSHConnection

此参数采用哈希表数组,其中每个哈希表包含建立安全外壳 (SSH) 连接所需的一个或多个连接参数(HostName、Port、UserName、KeyFilePath)

哈希表连接参数与为 SSHHost 参数集定义的参数相同

SSHConnection 参数可用于创建多个会话,其中每个会话需要不同的连接信息。

此参数是在 PowerShell 6.0 中引入的。

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

-SSHTransport

指示使用安全外壳 (SSH) 建立远程连接。

默认情况下,PowerShell 使用 Windows WinRM 连接到远程计算机。 此开关强制 PowerShell 使用 HostName 参数集建立基于 SSH 的远程连接。

此参数是在 PowerShell 6.0 中引入的。

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

-Subsystem

指定用于新 PSSession 的 SSH 子系统。

这会指定要在 sshd_config 中定义的目标上使用的子系统。 该子系统使用预定义的参数启动特定版本的 PowerShell。 如果远程计算机上不存在指定的子系统,则该命令会失败。

如果未使用此参数,则默认值为 powershell 子系统。

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

-ThrottleLimit

指定为运行此命令可建立的并发连接的最大数目。 如果省略此参数或输入 0(零)值,则使用默认值 32

节流限制仅适用于当前命令,而不适用于会话或计算机。

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

-UserName

指定用于在远程计算机上创建会话的帐户的用户名。 用户身份验证方法取决于远程计算机上安全外壳 (SSH) 的配置方式。

如果 SSH 配置为基本密码身份验证,则系统会提示输入用户密码。

如果将 SSH 配置为基于密钥的用户身份验证,则可以通过 KeyFilePath 参数提供密钥文件路径,并且不会出现密码提示。 请注意,如果客户端用户密钥文件位于 SSH 已知位置,则基于密钥的身份验证不需要 KeyFilePath 参数,并且用户身份验证会自动基于用户名进行。 有关详细信息,请参阅有关基于密钥的用户身份验证的 SSH 文档。

这是必需的参数。 如果未指定 UserName 参数,则将使用当前登录用户名进行连接。

此参数是在 PowerShell 6.0 中引入的。

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

-UseSSL

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

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

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

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

-UseWindowsPowerShell

在本地系统上创建与新 Windows PowerShell 运行空间的远程连接。

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

-VMId

指定虚拟机 ID 的数组。 此 cmdlet 启动与每个指定虚拟机的 PowerShell Direct 交互式会话。 有关详细信息,请参阅使用 PowerShell 自动化和管理虚拟机

使用 Get-VM 查看 Hyper-V 主机上可用的虚拟机。

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

-VMName

指定一个虚拟机的名称数组。 此 cmdlet 启动与每个指定虚拟机的 PowerShell Direct 交互式会话。 有关详细信息,请参阅使用 PowerShell 自动化和管理虚拟机

使用 Get-VM 查看 Hyper-V 主机上可用的虚拟机。

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

输入

String

可以通过管道将字符串传递给此 cmdlet。

System.URI

可以通过管道将 URI 传递给此 cmdlet。

PSSession

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

输出

PSSession

备注

PowerShell 包含以下 New-PSSession 别名:

  • 所有平台:

    • nsn
  • 此 cmdlet 使用 PowerShell 远程处理基础结构。 若要使用此 cmdlet,必须为本地计算机和任何远程计算机配置 PowerShell 远程处理。 有关详细信息,请参阅 about_Remote_Requirements

  • 若要在本地计算机上创建 PSSession,请使用“以管理员身份运行”选项启动 PowerShell。

  • 处理完 PSSession 后,使用 Remove-PSSession cmdlet 删除 PSSession 并释放其资源。

  • 从 PowerShell 6.0 开始,包括 HostName 和 SSHConnection 参数集。 添加它们是为了提供基于安全外壳 (SSH) 的 PowerShell 远程处理。 多个平台(Windows、Linux、macOS)均支持 SSH 和 PowerShell,并且 PowerShell 远程处理可在安装和配置 PowerShell 和 SSH 的这些平台上运行。 这与之前基于 WinRM 的仅 Windows 远程处理不同,并且许多 WinRM 特定功能和限制不适用。 例如,不支持基于 WinRM 的配额、会话选项、自定义端点配置和断开/重新连接功能。 有关如何设置 PowerShell SSH 远程处理的详细信息,请参阅基于 SSH 的 PowerShell 远程处理

ssh 可执行文件按以下顺序从以下源获取配置数据:

  1. 命令行选项
  2. 用户的配置文件 (~/.ssh/config)
  3. 系统范围的配置文件 (/etc/ssh/ssh_config)

以下 cmdlet 参数映射到 ssh 参数和选项:

Cmdlet 参数 ssh 参数 等效 ssh -o 选项
-KeyFilePath -i <KeyFilePath> -o IdentityFile=<KeyFilePath>
-UserName -l <UserName> -o User=<UserName>
-Port -p <Port> -o Port=<Port>
-ComputerName -Subsystem -s <ComputerName> <Subsystem> -o Host=<ComputerName>

由参数显式传递的任何值都优先于在 Options 哈希表中传递的值。 有关 ssh_config 文件的详细信息,请参阅 ssh_config(5)