2013-07-24 43 views
11

tôi có thể bắt đầu 5 phiên PS mới trên một máy chủ từ xa và xem chúng tất cả bằng cách chạy Get-PSSessionBắt tất cả mở PS phiên trên một máy chủ từ xa (từ cửa sổ giao diện điều khiển mới)

PS C:\> New-PSSession -ComputerName MyServerName 

    Id Name   ComputerName State   ConfigurationName  Availability 
    -- ----   ------------ -----   -----------------  ------------ 
     1 Session1  MyServerName Opened  Microsoft.PowerShell  Available 

    [repeat 4 more times] 

Đúng như dự đoán, khi tôi cố gắng để mở một phiên họp thứ 6, tôi nhận được lỗi nói rằng đó là một no-no (do PoswerShells giới hạn mặc định của 5 PSSessions đồng thời từ xa). Nhưng chạy Get-phiên cho thấy tất cả 5 phiên vì vậy tất cả đang làm việc như nó phải được cho đến nay:

PS C:\> New-PSSession -ComputerName MyServerName 
    New-PSSession : [......maximum number of 5 concurrent shells] 

PS C:\> Get-PSSession 

    Id Name   ComputerName State   ConfigurationName  Availability 
    -- ----   ------------ -----   -----------------  ------------ 
     1 Session1  MyServerName Opened  Microsoft.PowerShell  Available 
     2 Session2  MyServerName Opened  Microsoft.PowerShell  Available 
     3 Session3  MyServerName Opened  Microsoft.PowerShell  Available 
     4 Session4  MyServerName Opened  Microsoft.PowerShell  Available 
     5 Session5  MyServerName Opened  Microsoft.PowerShell  Available 

Tuy nhiên, khi tôi đóng console và mở một hình mới, chạy Get-PSSession (có hoặc không có ' -ComputerName 'tham số được xác định) cho thấy không có phiên mở nào cả.

PS C:\> Get-PSSession 
PS C:\> 

Tôi biết những phiên vẫn còn mở vì khi tôi cố gắng để mở một cái mới trong giao diện điều khiển mới của tôi tôi nhận được lỗi tương tự liên quan đến hơn 5 phiên đồng thời:

PS C:\> New-PSSession -ComputerName MyServerName 
    New-PSSession : [......maximum number of 5 concurrent shells] 

Theo 'Get -Pessession Get-PSSession -ComputerName MyServerName sẽ nhận được tất cả phiên PS từ xa trên một máy chủ cụ thể bất kể phiên hoặc máy tính nào được bắt đầu từ (ít nhất theo cách tôi hiểu):

"Lệnh trả về tất cả các phiên trên [máy chủ từ xa], thậm chí nếu chúng được tạo trong các phiên khác nhau hoặc trên các máy tính khác nhau."

Vì vậy, là có một cách để tìm và/hoặc loại bỏ bất kỳ phiên PS mở trên một máy chủ từ xa - mà không cần phải làm điều đó tất cả từ một phiên console?

+0

Bạn đang sử dụng phiên bản hệ điều hành và PowerShell nào trên các hộp địa phương và từ xa? Tôi thấy hành vi khác nhau (không gặp sự cố khi mở gần 20 phiên) trên Windows 8/PS3.0, Windows 8.1/PS4.0Preview –

+0

Cả hệ thống cục bộ lẫn từ xa đều là Windows 2008 R2 SP1 sử dụng PowerShell 3.0 –

+0

Ah, tôi đã viết quá sớm. Tôi có vẻ như vậy, mặc dù bị _assured_ rằng các máy chủ từ xa là PowerShell 3.0, nhưng trên thực tế chúng chỉ chạy PowerShell 2.0. Đó có thể là vấn đề. Nhiều lệnh được Keith đề cập (ví dụ: các lệnh liên quan đến 'phiên bị ngắt kết nối') chỉ có sẵn trong v3.0. –

Trả lời

12

Từ những gì tôi có thể nói ...

Các PSSessions bạn đã tạo trực tiếp trên "MyServerName" và, trong suốt thời gian của kỳ họp thứ nhất bạn tạo ra chúng, cũng sẽ được trả về bởi Get-PSSession (không có đối số , trong cửa sổ PowerShell trên hộp bạn đang từ xa FROM). Khi bạn đóng phiên mà chúng được tạo, các phiên không còn trên máy tính của bạn nữa. Đây là lý do tại sao Get-PSSession không trả lại bất cứ điều gì khi bạn đóng và mở một cửa sổ PowerShell mới. Họ không bao giờ "sống" trên máy tính của bạn, họ là phiên từ xa, tuy nhiên, họ là trong phạm vi trong cửa sổ PowerShell ban đầu của bạn vì đó là phạm vi địa phương bạn đã tạo chúng.

Nếu phiên của bạn vẫn còn trên MyServerName, vì nó có vẻ như họ là do lỗi bạn đề cập về các phiên max, sau đó gõ lệnh sau đây nên liệt kê chúng:

Get-PSSession -ComputerName MyServerName 

Nếu bạn muốn kết nối lại tất cả trong hiện tại phiên/cửa sổ của bạn, bạn có thể làm:

Get-PSSession -ComputerName MyServerName | Connect-PSSession 

Để loại bỏ tất cả, cho phép bạn tạo PSSessions mới để MyServerName

Get-PSSession -ComputerName MyServerName | Remove-PSSession 

Nhìn một chút hơn nữa trong các tài liệu, tất cả các phiên không sống vô thời hạn khi bạn đóng cửa sổ PowerShell bạn.Xem:

Get-Help about_Remote_Disconnected_Sessions -ShowWindow

trích một phần (với tôi nhấn mạnh):

Nếu bạn đóng (thoát) phiên trong đó một PSSession đã được tạo ra trong khi lệnh đang chạy trong PSSession, Windows PowerShell duy trì PSSession trong trạng thái Ngắt kết nối trên máy tính từ xa. Nếu bạn đóng (thoát) phiên mà PSSession đã được tạo, nhưng không có lệnh đang chạy trong PSSession, Windows PowerShell không cố gắng duy trì PSSession.

Từ những gì tôi có thể thấy, phiên không bị ngắt kết nối hoặc b) bận khi chạy lệnh, sẽ bị hủy khi bạn đóng cửa sổ PowerShell bạn đã bắt đầu PSSessions. Ngoài ra, các tài liệu dường như đề cập đến cũng có timeouts (mà có thể phụ thuộc vào PSSessionConfigurations trên máy chủ, nhưng tôi không biết bất cứ điều gì về những bản thân mình (khác hơn là chúng tồn tại)

Đây là một lý do tốt cho tôi sàng lọc qua một số tài liệu PowerShell Remoting, cũng xem xét:.

Get-Help *PSSession* 
Get-Help *remote* 
+0

Có, tôi đồng ý rằng tôi _should_ có thể sử dụng tính năng này để nhận các phiên mở trên máy tính từ xa (từ bảng điều khiển mới): Get-PSSession -ComputerName MyServerName. –

+0

Thực tế là bạn không thể khiến tôi rất nghi ngờ 2.0 ... vui vì chúng tôi đã trả lời phần đó –

0

Từ thí nghiệm của tôi, nếu các phiên họp được không làm gì sau đó họ nhận được đóng cửa vào cuối từ xa để ngăn chặn điều đó, hoặc là có họ làm điều gì đó, ví dụ:

Invoke-Command -Session $s { ... } -AsJob 
Invoke-Command server01 { ... } -Disconnected 

Hoặc tùy chọn khác là ngắt kết nối phiên của bạn:

Disconnect-PSSession -Id (1..5) 

Cả hai cách tiếp cận sẽ dẫn đến các phiên từ xa vẫn hoạt động.

0

Có cùng một vấn đề này hôm nay tôi đã xem qua bộ chức năng đẹp này từ jrich. Tôi thậm chí chỉ đơn giản là dán các chức năng vào cửa sổ PS của tôi và chạy

"<computername>" | Get-RemotePSSession | Remove-RemotePSSession

thì đấy! không còn phiên mở trên máy tính được cho biết.

Đây là liên kết trực tiếp tới blog của anh ấy. https://jrich523.wordpress.com/2012/01/19/managing-remote-wsman-sessions-with-powershell/#comment-1079