New-PSSession

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

语法

New-PSSession
   [[-ComputerName] <String[]>]
   [-Credential <PSCredential>]
   [-Name <String[]>]
   [-EnableNetworkAccess]
   [-Port <Int32>]
   [-UseSSL]
   [-ConfigurationName <String>]
   [-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
   [[-Session] <PSSession[]>]
   [-Name <String[]>]
   [-EnableNetworkAccess]
   [-ThrottleLimit <Int32>]
   [<CommonParameters>]

说明

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

使用 PSSession 运行多个共享数据的命令,例如函数或变量的值。 若要在 PSSession 中运行命令,请使用 Invoke-Command cmdlet。 若要使用 PSSession 直接与远程计算机交互,请使用 Enter-PSSession cmdlet。 有关详细信息,请参阅 about_PSSessions (https://go.microsoft.com/fwlink/?LinkID=135181) 。

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

示例

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

PS C:\> $s = New-PSSession

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

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

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

PS C:\> $Server01 = New-PSSession -ComputerName Server01

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

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

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

PS C:\> $s1, $s2, $s3 = New-PSSession -ComputerName Server01,Server02,Server03

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

命令使用赋值运算符 (=) 将新的 PSSession 对象分配给变量:$s 1、$s 2、$s 3。 它将 Server01 PSSession 分配给 $s 1,将 Server02 PSSession 分配给 $s 2,将 Server03 PSSession 分配给 $s 3。

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

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

PS C:\> New-PSSession -ComputerName Server01 -Port 8081 -UseSSL -ConfigurationName E12

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

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

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

PS C:\> New-PSSession -Session $s -Credential Domain01\User01

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

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

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

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

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

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

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

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

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

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

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

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

示例 8:使用 URI Create会话

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

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

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

PS C:\> $s = New-PSSession -ComputerName (Get-Content Servers.txt) -Credential Domain01\Admin01 -ThrottleLimit 16
PS C:\> 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命令。

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

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

PS C:\> New-PSSession -ConnectionURI https://management.exchangelabs.com/Management

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

示例 11:Create会话选项

PS C:\> $so = New-PSSessionOption -SkipCACheck
PS C:\> 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 对象。

参数

-AllowRedirection

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

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

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

Type:SwitchParameter
Position:Named
Default value:None
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
  • 基本
  • Credssp
  • 摘要
  • Kerberos
  • Negotiate
  • NegotiateWithImplicitCredential

默认值为 Default。

有关此参数的值的详细信息,请参阅 MSDN 库中的 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)。 输入证书的证书指纹。

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

若要获取证书,请在 Windows PowerShell Cert: 驱动器中使用 Get-Item 或 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 () https://go.microsoft.com/fwlink/?LinkID=135188 中的“如何将计算机添加到受信任的主机列表”。

若要在 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: https://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>

默认值如下:

https://localhost:5985/WSMAN

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

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

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

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

-Credential

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

键入用户名(如 User01、Domain01\User01 或 User@Domain.com),或输入 PSCredential 对象,例如 Get-Credential cmdlet 返回的对象。

键入用户名时,此 cmdlet 会提示输入密码。

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

-EnableNetworkAccess

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

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

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

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

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

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

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

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

-Name

指定 PSSession 的友好名称。

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

Type:String[]
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

-Session

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

输入包含 PSSession 对象的变量或用于创建或获取 PSSession 对象的命令,例如 New-PSSession 或 Get-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

-ThrottleLimit

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

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

Type:Int32
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:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

输入

System.String, System.URI, System.Management.Automation.Runspaces.PSSession

可以通过管道将字符串、URI 或会话对象传递给此 cmdlet。

输出

PSSession

备注

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

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

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