New-PSSession
创建与本地或远程计算机的持久连接。
语法
ComputerName (默认值)
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>]
Uri
New-PSSession
[-ConnectionUri] <Uri[]>
[-Credential <PSCredential>]
[-Name <String[]>]
[-EnableNetworkAccess]
[-ConfigurationName <String>]
[-ThrottleLimit <Int32>]
[-AllowRedirection]
[-SessionOption <PSSessionOption>]
[-Authentication <AuthenticationMechanism>]
[-CertificateThumbprint <String>]
[<CommonParameters>]
Session
New-PSSession
[[-Session] <PSSession[]>]
[-Name <String[]>]
[-EnableNetworkAccess]
[-ThrottleLimit <Int32>]
[<CommonParameters>]
说明
New-PSSession cmdlet 在本地或远程计算机上创建 Windows PowerShell 会话 (PSSession)。 创建 PSSession 时,Windows PowerShell 会建立与远程计算机的持久连接。
使用 PSSession 运行多个共享数据的命令,例如函数或变量的值。 要在 PSSession 中运行命令,请使用 Invoke-Command cmdlet。 若要使用 PSSession 直接与远程计算机交互,请使用 Enter-PSSession cmdlet。 有关详细信息,请参阅about_PSSessions (https://go.microsoft.com/fwlink/?LinkID=135181)。
您可以使用 Enter-PSSession 或 Invoke-Command 的 ComputerName 参数在远程计算机上运行命令,而无需创建 PSSession。 使用 ComputerName 参数时,Windows PowerShell 将创建用于命令的临时连接,然后关闭。
示例
示例 1:在本地计算机上创建会话
PS C:\> $s = New-PSSession
此命令在本地计算机上创建新的 PSSession ,并将 PSSession 保存在 $s 变量中。
现在可以使用此 PSSession 在本地计算机上运行命令。
示例 2:在远程计算机上创建会话
PS C:\> $Server01 = New-PSSession -ComputerName Server01
此命令在 Server01 计算机上创建新的 PSSession ,并将其保存在 $Server 01 变量中。
创建多个 PSSession 对象时,请将其分配给具有有用名称的变量。 这有助于在后续命令中管理 PSSession 对象。
示例 3:在多台计算机上创建会话
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:创建具有指定端口的会话
PS C:\> New-PSSession -ComputerName Server01 -Port 8081 -UseSSL -ConfigurationName E12
此命令在 Server01 计算机上创建一个新的 PSSession ,该计算机连接到服务器端口 8081 并使用 SSL 协议。 新的 PSSession 使用名为 E12 的备用会话配置。
在设置端口之前,必须在远程计算机上配置 WinRM 侦听器以侦听端口 8081。 有关详细信息,请参阅 端口 参数的说明。
示例 5:基于现有会话创建会话
PS C:\> New-PSSession -Session $s -Credential Domain01\User01
此命令创建一个 PSSession,其属性与现有 PSSession相同。 当现有 PSSession 的资源耗尽并且需要新的 PSSession 来卸载某些需求时,可以使用此命令格式。
该命令使用 New-PSSession 的 Session 参数来指定保存在 $s 变量中的 PSSession。 它使用 Domain1\Admin01 用户的凭据来完成命令。
示例 6:在不同的域中创建具有全局范围的会话
PS C:\> $global:s = New-PSSession -ComputerName Server1.Domain44.Corpnet.Fabrikam.com -Credential Domain01\Admin01
此示例演示如何创建具有不同域中计算机全局范围的 PSSession。
默认情况下,命令行中创建的 PSSession 对象具有本地作用域,在脚本中创建的 PSSession 对象具有脚本范围。
若要创建具有全局范围的 PSSession,请创建新的 PSSession,然后将 PSSession 存储在强制转换为全局范围的变量中。 在这种情况下,$s变量将强制转换为全局范围。
该命令使用 ComputerName 参数指定远程计算机。 由于计算机与用户帐户位于不同的域中,因此该计算机的全名与用户的凭据一起指定。
示例 7:为许多计算机创建会话
PS C:\> $rs = Get-Content C:\Test\Servers.txt | New-PSSession -ThrottleLimit 50
此命令在 Servers.txt 文件中列出的 200 台计算机中的每台计算机上创建一个 PSSession ,并将生成的 PSSession 存储在 $rs 变量中。 PSSession 对象的限制限制为 50。
当计算机的名称存储在数据库、电子表格、文本文件或其他可转换文本格式中时,可以使用此命令格式。
示例 8:使用 URI 创建会话
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 创建 PSSession。 ComputerName 参数的值是一个命令,它使用 Get-Content cmdlet 获取 Servers.txt 文件的计算机名称列表。
该命令使用 Credential 参数创建具有域管理员权限的 PSSession 对象,并使用 ThrottleLimit 参数将命令限制为 16 个并发连接。 该命令将 PSSession 对象保存在 $s 变量中。
第二个命令使用 Invoke-Command cmdlet 的 AsJob 参数启动后台作业,该作业在 $s 中的每个 Get-Process PowerShell 对象中运行命令。
有关 Windows PowerShell 后台作业的详细信息,请参阅 about_Jobs 和 about_Remote_Jobs。
示例 10:使用计算机 URI 为计算机创建会话
PS C:\> New-PSSession -ConnectionURI https://management.exchangelabs.com/Management
此命令创建一个 PSSession 对象,这些对象连接到由 URI 而不是计算机名称指定的计算机。
示例 11:创建会话选项
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。
参数属性
| 类型: | SwitchParameter |
| 默认值: | None |
| 支持通配符: | False |
| 不显示: | False |
参数集
Uri
| Position: | Named |
| 必需: | False |
| 来自管道的值: | False |
| 来自管道的值(按属性名称): | False |
| 来自剩余参数的值: | False |
-ApplicationName
指定连接 URI 的应用程序名称段。 如果不在命令中使用 ConnectionURI 参数,请使用此参数指定应用程序名称。
默认值是本地计算机上的$PSSessionApplicationName首选项变量的值。 如果未定义此首选项变量,则默认值为 WSMAN。 此值适用于大多数用途。 有关详细信息,请参阅 about_Preference_Variables。
WinRM 服务使用应用程序名称来选择侦听器来为连接请求提供服务。 此参数的值应与远程计算机上的侦听器的 URLPrefix 属性的值匹配。
参数属性
| 类型: | String |
| 默认值: | None |
| 支持通配符: | False |
| 不显示: | False |
参数集
ComputerName
| Position: | Named |
| 必需: | False |
| 来自管道的值: | False |
| 来自管道的值(按属性名称): | True |
| 来自剩余参数的值: | False |
-Authentication
指定用于对用户凭据进行身份验证的机制。 此参数的可接受值为:
- 违约
- 基本
- Credssp
- 摘要
- Kerberos
- 谈判
- NegotiateWithImplicitCredential
默认值为 Default。
有关此参数的值的详细信息,请参阅 MSDN 库中 AuthenticationMechanism 枚举。
注意:凭证安全支持提供程序 (CredSSP) 身份验证(其中用户凭证被传递到远程计算机以进行身份验证)适用于需要对多个资源进行身份验证的命令,例如访问远程网络共享。 此机制会增加远程操作的安全风险。 如果远程计算机遭到入侵,则传递给它的凭据可用于控制网络会话。
参数属性
| 类型: | AuthenticationMechanism |
| 默认值: | None |
| 接受的值: | Default, Basic, Negotiate, NegotiateWithImplicitCredential, Credssp, Digest, Kerberos |
| 支持通配符: | False |
| 不显示: | False |
参数集
ComputerName
| Position: | Named |
| 必需: | False |
| 来自管道的值: | False |
| 来自管道的值(按属性名称): | False |
| 来自剩余参数的值: | False |
Uri
| Position: | Named |
| 必需: | False |
| 来自管道的值: | False |
| 来自管道的值(按属性名称): | False |
| 来自剩余参数的值: | False |
-CertificateThumbprint
指定有权执行此操作的用户帐户的数字公钥证书(X509)。 输入证书的证书指纹。
证书用于基于客户端证书的身份验证。 它们只能映射到本地用户帐户;它们不适用于域帐户。
若要获取证书,请使用 Windows PowerShell 证书:驱动器中的 Get-Item 或 Get-ChildItem 命令。
参数属性
| 类型: | String |
| 默认值: | None |
| 支持通配符: | False |
| 不显示: | False |
参数集
ComputerName
| Position: | Named |
| 必需: | False |
| 来自管道的值: | False |
| 来自管道的值(按属性名称): | False |
| 来自剩余参数的值: | False |
Uri
| Position: | Named |
| 必需: | False |
| 来自管道的值: | False |
| 来自管道的值(按属性名称): | False |
| 来自剩余参数的值: | False |
-ComputerName
指定一个包含计算机名称的数组。 此 cmdlet 创建到指定计算机的持久性连接(PSSession)。 如果输入多个计算机名称, 则 New-PSSession 将创建多个 PSSession 对象,每台计算机一个对象。 默认值为本地计算机。
键入一台或多台远程计算机的 NetBIOS 名称、IP 地址或完全限定的域名。 若要指定本地计算机,请键入计算机名称、localhost 或点(.)。 当计算机位于与用户不同的域中时,需要完全限定的域名。 您还可以将计算机名称(用引号括起来)通过 pipes 传递到 New-PSSession。
若要在 ComputerName 参数的值中使用 IP 地址,该命令必须包含 Credential 参数。 此外,必须为计算机配置 HTTPS 传输,或者远程计算机的 IP 地址必须包含在本地计算机上的 WinRM TrustedHosts 列表中。 有关将计算机名称添加到 TrustedHosts 列表的说明,请参阅about_Remote_Troubleshooting ()https://go.microsoft.com/fwlink/?LinkID=135188 中的“如何将计算机添加到受信任的主机列表”。
若要将本地计算机包含在 ComputerName 参数的值中,请使用“以管理员身份运行”选项启动 Windows PowerShell。
参数属性
| 类型: | String[] |
| 默认值: | None |
| 支持通配符: | False |
| 不显示: | False |
| 别名: | Cn |
参数集
ComputerName
| Position: | 0 |
| 必需: | False |
| 来自管道的值: | True |
| 来自管道的值(按属性名称): | True |
| 来自剩余参数的值: | False |
-ConfigurationName
指定用于新 PSSession的会话配置。
输入会话配置的配置名称或完全限定的资源 URI。
如果仅指定配置名称,则前面有以下架构 URI:https://schemas.microsoft.com/PowerShell。
会话的会话配置位于远程计算机上。 如果远程计算机上不存在指定的会话配置,命令将失败。
默认值是本地计算机上的$PSSessionConfigurationName首选项变量的值。 如果未设置此首选项变量,则默认值为 Microsoft.PowerShell。 有关详细信息,请参阅 about_Preference_Variables。
参数属性
| 类型: | String |
| 默认值: | None |
| 支持通配符: | False |
| 不显示: | False |
参数集
ComputerName
| Position: | Named |
| 必需: | False |
| 来自管道的值: | False |
| 来自管道的值(按属性名称): | True |
| 来自剩余参数的值: | False |
Uri
| Position: | Named |
| 必需: | False |
| 来自管道的值: | False |
| 来自管道的值(按属性名称): | True |
| 来自剩余参数的值: | False |
-ConnectionUri
指定一个 URI,用于定义会话的连接终结点。 URI 必须完全限定。 此字符串的格式如下所示:
<传输>://<ComputerName>:<端口>/<ApplicationName>
默认值如下所示:
https://localhost:5985/WSMAN
如果未指定 ConnectionURI,则可以使用 UseSSL、ComputerName、端口和 ApplicationName 参数来指定 ConnectionURI 值。
URI 的传输段的有效值为 HTTP 和 HTTPS。 如果使用传输段指定连接 URI,但不指定端口,则会使用标准端口创建会话:80 用于 HTTP,对于 HTTPS 为 443。 若要使用 Windows PowerShell 远程处理的默认端口,请为 HTTP 指定端口 5985,或为 HTTPS 指定端口 5986。
如果目标计算机将连接重定向到其他 URI,则除非在命令中使用 AllowRedirection 参数,否则 Windows PowerShell 将阻止重定向。
参数属性
| 类型: | Uri[] |
| 默认值: | None |
| 支持通配符: | False |
| 不显示: | False |
| 别名: | URI, CU |
参数集
Uri
| Position: | 0 |
| 必需: | True |
| 来自管道的值: | False |
| 来自管道的值(按属性名称): | True |
| 来自剩余参数的值: | False |
-Credential
指定有权执行此作的用户帐户。 默认值为当前用户。
键入用户名(如 User01、Domain01\User01 或 User@Domain.com),或输入 PSCredential 对象(如 Get-Credential cmdlet 返回的对象)。
键入用户名时,此 cmdlet 会提示输入密码。
参数属性
| 类型: | PSCredential |
| 默认值: | None |
| 支持通配符: | False |
| 不显示: | False |
参数集
ComputerName
| Position: | Named |
| 必需: | False |
| 来自管道的值: | False |
| 来自管道的值(按属性名称): | True |
| 来自剩余参数的值: | False |
Uri
| Position: | Named |
| 必需: | False |
| 来自管道的值: | False |
| 来自管道的值(按属性名称): | True |
| 来自剩余参数的值: | False |
-EnableNetworkAccess
指示此 cmdlet 向环回会话添加交互式安全令牌。 交互式令牌允许在环回会话中运行命令,以便从其他计算机获取数据。 例如,可以在会话中运行将 XML 文件从远程计算机复制到本地计算机的命令。
环回会话是在同一台计算机上发起和结束的 PSSession。 若要创建环回会话,请省略 ComputerName 参数或将其值设置为点 (.)、localhost 或本地计算机的名称。
默认情况下,此 cmdlet 使用网络令牌创建环回会话,该令牌可能无法提供对远程计算机进行身份验证的足够权限。
EnableNetworkAccess 参数仅在环回会话中有效。 如果在远程计算机上创建会话时使用 EnableNetworkAccess,则命令会成功,但参数将被忽略。
您还可以使用 Authentication 参数的 CredSSP 值在环回会话中启用远程访问,该参数将会话凭证委托给其他计算机。
为了防止计算机受到恶意访问,具有交互式令牌的断开连接环回会话(即使用 EnableNetworkAccess 参数创建的会话)只能从创建会话的计算机重新连接。 可以使用 CredSSP 身份验证的断开连接会话可以从其他计算机重新连接。 有关详细信息,请参阅 Disconnect-PSSession。
此参数是在 Windows PowerShell 3.0 中引入的。
参数属性
| 类型: | SwitchParameter |
| 默认值: | None |
| 支持通配符: | False |
| 不显示: | False |
参数集
(All)
| Position: | Named |
| 必需: | False |
| 来自管道的值: | False |
| 来自管道的值(按属性名称): | False |
| 来自剩余参数的值: | False |
-Name
指定 PSSession的友好名称。
当您使用其他 cmdlet(如 Get-PSSession 和 Enter-PSSession)时,可以使用该名称来引用 PSSession 。 该名称不需要对计算机或当前会话是唯一的。
参数属性
| 类型: | String[] |
| 默认值: | None |
| 支持通配符: | False |
| 不显示: | False |
参数集
(All)
| Position: | Named |
| 必需: | False |
| 来自管道的值: | False |
| 来自管道的值(按属性名称): | False |
| 来自剩余参数的值: | 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 参数。 命令中的端口设置适用于运行命令的所有计算机或会话。 备用端口设置可能会阻止命令在所有计算机上运行。
参数属性
| 类型: | Int32 |
| 默认值: | None |
| 支持通配符: | False |
| 不显示: | False |
参数集
ComputerName
| Position: | Named |
| 必需: | False |
| 来自管道的值: | False |
| 来自管道的值(按属性名称): | False |
| 来自剩余参数的值: | False |
-Session
指定此 cmdlet 用作新 PSSession模型 PSSession 对象的数组。 此参数创建与指定 PSSession 对象具有相同属性的新 PSSession 对象。
输入包含 PSSession 对象的变量或创建或获取 PSSession 对象的命令,例如 New-PSSession 或 Get-PSSession 命令。
生成的 PSSession 对象具有相同的计算机名称、应用程序名称、连接 URI、端口、配置名称、限制和安全套接字层 (SSL) 值,但它们具有不同的显示名称、ID 和实例 ID(GUID)。
参数属性
| 类型: | PSSession[] |
| 默认值: | None |
| 支持通配符: | False |
| 不显示: | False |
参数集
Session
| Position: | 0 |
| 必需: | False |
| 来自管道的值: | True |
| 来自管道的值(按属性名称): | True |
| 来自剩余参数的值: | False |
-SessionOption
指定会话的高级选项。 输入 SessionOption 对象,例如使用 New-PSSessionOption cmdlet 创建的会话选项,或键是会话选项名称的哈希表,值是会话选项值。
选项的默认值由$PSSessionOption首选项变量的值(如果已设置)确定。 否则,默认值由会话配置中设置的选项建立。
会话选项值优先于在$PSSessionOption首选项变量和会话配置中设置的会话的默认值。 但是,它们不优先于会话配置中设置的最大值、配额或限制。
有关包含默认值的会话选项的说明,请参阅 New-PSSessionOption。 有关$PSSessionOption首选项变量的信息,请参阅 about_Preference_Variables。 有关会话配置的详细信息,请参阅 about_Session_Configurations。
参数属性
| 类型: | PSSessionOption |
| 默认值: | None |
| 支持通配符: | False |
| 不显示: | False |
参数集
ComputerName
| Position: | Named |
| 必需: | False |
| 来自管道的值: | False |
| 来自管道的值(按属性名称): | False |
| 来自剩余参数的值: | False |
Uri
| Position: | Named |
| 必需: | False |
| 来自管道的值: | False |
| 来自管道的值(按属性名称): | False |
| 来自剩余参数的值: | False |
-ThrottleLimit
指定可建立以运行此命令的最大并发连接数。 如果省略此参数或输入值 0(零),则使用默认值 32。
限制限制仅适用于当前命令,不适用于会话或计算机。
参数属性
| 类型: | Int32 |
| 默认值: | None |
| 支持通配符: | False |
| 不显示: | False |
参数集
(All)
| Position: | Named |
| 必需: | False |
| 来自管道的值: | False |
| 来自管道的值(按属性名称): | False |
| 来自剩余参数的值: | False |
-UseSSL
指示此 cmdlet 使用 SSL 协议建立与远程计算机的连接。 默认情况下,不使用 SSL。
WS-Management 加密通过网络传输的所有 Windows PowerShell 内容。 UseSSL 参数提供了额外的保护,用于跨 HTTPS 连接而不是 HTTP 连接发送数据。
如果使用此参数,但 SSL 在用于命令的端口上不可用,命令将失败。
参数属性
| 类型: | SwitchParameter |
| 默认值: | None |
| 支持通配符: | False |
| 不显示: | False |
参数集
ComputerName
| Position: | Named |
| 必需: | False |
| 来自管道的值: | False |
| 来自管道的值(按属性名称): | False |
| 来自剩余参数的值: | False |
CommonParameters
此 cmdlet 支持通用参数:-Debug、-ErrorAction、-ErrorVariable、-InformationAction、-InformationVariable、-OutBuffer、-OutVariable、-PipelineVariable、-ProgressAction、-Verbose、-WarningAction 和 -WarningVariable。 有关详细信息,请参阅 about_CommonParameters。
输入
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 并释放其资源。