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>]

说明

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

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

可以在远程计算机上运行命令,而无需使用 或 Invoke-CommandEnter-PSSessionComputerName 参数创建 PSSession。 使用 ComputerName 参数时,PowerShell 会创建一个临时连接,该连接将用于命令,然后关闭。

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

注意

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

示例

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

$s = New-PSSession

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

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

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

$Server01 = New-PSSession -ComputerName Server01

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

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

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

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

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

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

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

示例 4:Create具有指定端口的会话

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

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

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

示例 5:基于现有会话Create会话

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

此命令使用与现有 PSSession 相同的属性创建 PSSession。 当现有 PSSession 的资源用完并且需要新的 PSSession 来卸载某些需求时,可以使用此命令格式。

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

示例 6:Create不同域中具有全局范围的会话

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

此示例演示如何在不同的域中的计算机上创建具有全局范围的 PSSession

默认情况下,在命令行创建的 PSSession 对象使用本地范围创建,在脚本中创建的 PSSession 对象具有脚本范围。

若要创建具有全局范围的 PSSession ,请创建新的 PSSession ,然后将 PSSession 存储在强制转换为全局范围的变量中。 在本例中,变量 $s 将强制转换为全局范围。

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

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

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

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

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

示例 8:使用 URI Create会话

$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

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

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

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

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

此命令创建一个 PSSession 对象,该对象连接到由 URI 而不是计算机名称指定的计算机。

示例 11:Create会话选项

$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 参数的值是 变量中的 $soSessionOption 对象。

示例 12:使用 SSH Create会话

New-PSSession -HostName UserA@LinuxServer01

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

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

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

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

示例 14:使用 SSH Create多个会话

$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 选项Create新会话

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

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

参数

-AllowRedirection

指示此 cmdlet 允许将此连接重定向到备用统一资源标识符 (URI) 。

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

你也可以通过更改 MaximumConnectionRedirectionCount 会话选项值,限制重定向连接的次数。 使用 cmdlet 的 New-PSSessionOptionMaximumRedirection 参数或设置$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)。 输入证书的证书指纹。

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

若要获取证书,请在 Get-Item PowerShell Cert: 驱动器中使用 或 Get-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 远程处理,请为 HTTP 或 5986 HTTPS 指定端口5985

如果目标计算机将连接重定向到其他 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),或输入 cmdlet Get-Credential 生成的 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 ,则命令会成功,但参数将被忽略。

还可以通过使用 CredSSPAuthentication 参数的值在环回会话中启用远程访问,该参数将会话凭据委托给其他计算机。

为了防止计算机受到恶意访问,只能从创建会话的计算机重新连接具有交互式令牌的断开连接环回会话(即使用 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

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

输入包含 PSSession 对象的变量或用于创建或获取 PSSession 对象的命令,例如 New-PSSessionGet-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) 连接所需的一个或多个连接参数, (HostNamePortUserNameKeyFilePath) 。

哈希表连接参数与为 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 开始,包括 HostNameSSHConnection 参数集。 添加它们以基于安全外壳 (SSH) 提供 PowerShell 远程处理。 SSH 和 PowerShell 在多个平台上都受支持, (Windows、Linux、macOS) 和 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)