共用方式為


New-PSSession

建立連到本機或遠端電腦的持續連線。

Syntax

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

Description

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

此命令會在 Server01 計算機上建立新的 PSSession ,以連線到伺服器埠 8081 並使用 SSL 通訊協定。 新的 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
  • Digest
  • Kerberos
  • 交涉
  • 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 必須是完整的 URI。 這個字串的格式如下所示:

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

預設值如下:

https://localhost:5985/WSMAN

如果您未指定 ConnectionURI,可以使用 UseSSLComputerNamePortApplicationName 參數來指定 ConnectionURI 值。

URI 的 Transport 區段有效值為 HTTP 與 HTTPS。 若指定含傳輸區段的連線 URI,但未指定連接埠,將會以標準連接埠 80 (適用於 HTTP) 和 443 (適用於 HTTPS) 建立工作階段。 若要使用預設連接埠於 Windows PowerShell 遠端功能,請為 HTTP 指定連接埠 5985,或是為 HTTPS 指定連接埠 5986。

若目的地電腦將連線重新導向至不同 URI,除非您在命令中使用 AllowRedirection 參數,否則 Windows PowerShell 會禁止重新導向。

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 ,命令會成功,但會忽略 參數。

您也可以使用 Authentication 參數的 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 時,您可以使用名稱來參考 PSSession ,例如 Get-PSSession 和 Enter-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) 值做為原始專案,但它們有不同的顯示名稱、標識符和實例標識符 (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 並釋放其資源。