Disconnect-PSSession
Rozłącza się z sesją.
Składnia
Disconnect-PSSession
[-Session] <PSSession[]>
[-IdleTimeoutSec <Int32>]
[-OutputBufferingMode <OutputBufferingMode>]
[-ThrottleLimit <Int32>]
[-WhatIf]
[-Confirm]
[<CommonParameters>]
Disconnect-PSSession
[-IdleTimeoutSec <Int32>]
[-OutputBufferingMode <OutputBufferingMode>]
[-ThrottleLimit <Int32>]
-Name <String[]>
[-WhatIf]
[-Confirm]
[<CommonParameters>]
Disconnect-PSSession
[-IdleTimeoutSec <Int32>]
[-OutputBufferingMode <OutputBufferingMode>]
[-ThrottleLimit <Int32>]
-InstanceId <Guid[]>
[-WhatIf]
[-Confirm]
[<CommonParameters>]
Disconnect-PSSession
[-IdleTimeoutSec <Int32>]
[-OutputBufferingMode <OutputBufferingMode>]
[-ThrottleLimit <Int32>]
[-Id] <Int32[]>
[-WhatIf]
[-Confirm]
[<CommonParameters>]
Opis
To polecenie cmdlet jest dostępne tylko na platformie Windows.
Polecenie cmdlet Disconnect-PSSession
rozłącza sesję programu PowerShell (PSSession), na przykład polecenie cmdlet New-PSSession
, z bieżącej sesji. W związku z tym pssession jest w stanie rozłączenia. Możesz nawiązać połączenie z odłączonym PSSession z bieżącej sesji lub z innej sesji na komputerze lokalnym lub innym komputerze.
Polecenie cmdlet Disconnect-PSSession
rozłącza tylko otwarte psSessions, które są połączone z bieżącą sesją.
Disconnect-PSSession
nie można odłączyć uszkodzonych lub zamkniętych psSessionslub interaktywnych pssessions uruchomionych przy użyciu polecenia cmdlet Enter-PSSession
i nie może odłączyć psSessions, które są połączone z innymi sesjami.
Aby ponownie nawiązać połączenie z odłączonym PSSession, użyj poleceń cmdlet Connect-PSSession
lub Receive-PSSession
.
Po rozłączeniu Invoke-Command
, aby uruchomić polecenie w rozłączonej sesji.
Aby uzyskać więcej informacji na temat funkcji Rozłączone sesje, zobacz about_Remote_Disconnected_Sessions.
To polecenie cmdlet zostało wprowadzone w programie Windows PowerShell 3.0.
Przykłady
Przykład 1 — rozłączanie sesji według nazwy
To polecenie rozłącza UpdateSession
pssession na komputerze Server01 z bieżącej sesji. Polecenie używa parametru Name
PS> Disconnect-PSSession -Name UpdateSession
Id Name ComputerName State ConfigurationName Availability
-- ---- ------------ ----- ----------------- ------------
1 UpdateSession Server01 Disconnected Microsoft.PowerShell None
Dane wyjściowe pokazują, że próba rozłączenia zakończyła się pomyślnie. Stan sesji jest
Przykład 2 — odłączanie sesji od określonego komputera
To polecenie rozłącza ITTask
pssession na komputerze Server12 z bieżącej sesji. Sesja ITTask
została utworzona w bieżącej sesji i nawiązuje połączenie z komputerem Server12. Polecenie używa polecenia cmdlet Get-PSSession
, aby pobrać sesję i polecenie cmdlet Disconnect-PSSession
, aby je rozłączyć.
PS> Get-PSSession -ComputerName Server12 -Name ITTask |
Disconnect-PSSession -OutputBufferingMode Drop -IdleTimeoutSec 86400
Id Name ComputerName State ConfigurationName Availability
-- ---- ------------ ----- ----------------- ------------
1 ITTask Server12 Disconnected ITTasks None
Polecenie Disconnect-PSSession
używa parametru OutputBufferingMode, aby ustawić tryb wyjściowy na Drop
. To ustawienie zapewnia, że skrypt uruchomiony w sesji może nadal działać, nawet jeśli bufor wyjściowy sesji jest pełny. Ponieważ skrypt zapisuje swoje dane wyjściowe w raporcie w udziale plików, inne dane wyjściowe mogą zostać utracone bez konsekwencji.
Polecenie używa również parametru IdleTimeoutSec, aby przedłużyć limit czasu bezczynności sesji do 24 godzin. To ustawienie umożliwia administratorowi lub innym administratorom ponowne nawiązanie połączenia z sesją w celu sprawdzenia, czy skrypt został uruchomiony i w razie potrzeby rozwiąż problemy.
Przykład 3 — używanie wielu psSessions na wielu komputerach
W tej serii poleceń pokazano, jak polecenie cmdlet Disconnect-PSSession
może być używane w scenariuszu przedsiębiorstwa. W takim przypadku nowy technik uruchamia skrypt w sesji na komputerze zdalnym i występuje problem. Technik rozłącza się z sesją, aby bardziej doświadczony menedżer mógł nawiązać połączenie z sesją i rozwiązać problem.
PS> $s = New-PSSession -ComputerName Srv1, Srv2, Srv30 -Name ITTask
PS> Invoke-Command $s -FilePath \\Server01\Scripts\Get-PatchStatus.ps1
PS> Get-PSSession -Name ITTask -ComputerName Srv1 | Disconnect-PSSession
Id Name ComputerName State ConfigurationName Availability
-- ---- ------------ ----- ----------------- ------------
1 ITTask Srv1 Disconnected Microsoft.PowerShell None
PS> Get-PSSession -ComputerName Srv1, Srv2, Srv30 -Name ITTask
Id Name ComputerName State ConfigurationName Availability
-- ---- ------------ ----- ----------------- ------------
1 ITTask Srv1 Disconnected Microsoft.PowerShell None
2 ITTask Srv2 Opened Microsoft.PowerShell Available
3 ITTask Srv30 Opened Microsoft.PowerShell Available
PS> Get-PSSession -ComputerName Srv1 -Name ITTask -Credential Domain01\User01
Id Name ComputerName State ConfigurationName Availability
-- ---- ------------ ----- ----------------- ------------
1 ITTask Srv1 Disconnected Microsoft.PowerShell None
PS> $s = Connect-PSSession -ComputerName Srv1 -Name ITTask -Credential Domain01\User01
PS> Invoke-Command -Session $s {dir $HOME\Scripts\PatchStatusOutput.ps1}
PS> Invoke-Command -Session $s {mkdir $HOME\Scripts\PatchStatusOutput}
PS> Invoke-Command -Session $s -FilePath \\Server01\Scripts\Get-PatchStatus.ps1
PS> Disconnect-PSSession -Session $s
Technik rozpoczyna się od utworzenia sesji na kilku komputerach zdalnych i uruchomienia skryptu w każdej sesji. Pierwsze polecenie używa polecenia cmdlet New-PSSession
do utworzenia sesji ITTask
na trzech komputerach zdalnych. Polecenie zapisuje sesje w zmiennej $s
. Drugie polecenie używa parametru FilePath polecenia cmdlet Invoke-Command
, aby uruchomić skrypt w sesjach w zmiennej $s
.
Skrypt uruchomiony na komputerze Srv1 generuje nieoczekiwane błędy. Technik kontaktuje się ze swoim menedżerem i prosi o pomoc. Menedżer kieruje technika do odłączenia się od sesji, aby mógł zbadać. Drugie polecenie używa polecenia cmdlet Get-PSSession
, aby pobrać sesję ITTask
na komputerze Srv1 i polecenie cmdlet Disconnect-PSSession
, aby je rozłączyć. To polecenie nie ma wpływu na sesje ITTask
na innych komputerach.
Trzecie polecenie używa polecenia cmdlet Get-PSSession
w celu pobrania sesji ITTask
. Dane wyjściowe pokazują, że sesje ITTask
na komputerach Srv2 i Srv30 nie miały wpływu na polecenie rozłączenia.
Menedżer loguje się na swoim komputerze macierzysty, łączy się z siecią firmową, uruchamia program PowerShell i używa polecenia cmdlet Get-PSSession
, aby uzyskać sesję ITTask
na komputerze Srv1. Używa poświadczeń technika do uzyskania dostępu do sesji.
Następnie menedżer używa polecenia cmdlet Connect-PSSession
do nawiązania połączenia z sesją ITTask
na komputerze Srv1. Polecenie zapisuje sesję w zmiennej $s
.
Menedżer używa polecenia cmdlet Invoke-Command
do uruchamiania niektórych poleceń diagnostycznych w sesji w zmiennej $s
. Rozpoznaje, że skrypt nie powiódł się, ponieważ nie znalazł wymaganego katalogu.
Menedżer używa funkcji MkDir
do utworzenia katalogu, a następnie uruchamia ponownie skrypt Get-PatchStatus.ps1
i rozłącza się z sesją. Menedżer zgłasza swoje ustalenia technikowi, sugeruje, że ponownie łączy się z sesją w celu ukończenia zadań i prosi go o dodanie polecenia do skryptu Get-PatchStatus.ps1
, który tworzy wymagany katalog, jeśli nie istnieje.
Przykład 4 — zmiana wartości limitu czasu dla usługi PSSession
W tym przykładzie pokazano, jak poprawić wartość właściwości IdleTimeout sesji, aby można było ją odłączyć.
Właściwość limitu czasu bezczynności sesji ma kluczowe znaczenie dla rozłączonych sesji, ponieważ określa, jak długo jest utrzymywana rozłączona sesja przed usunięciem. Możesz ustawić opcję limitu czasu bezczynności podczas tworzenia sesji i po jej rozłączeniu. Wartości domyślne limitu czasu bezczynności sesji są ustawiane w zmiennej preferencji $PSSessionOption
na komputerze lokalnym i w konfiguracji sesji na komputerze zdalnym. Wartości ustawione dla sesji mają pierwszeństwo przed wartościami ustawionymi w konfiguracji sesji, ale wartości sesji nie mogą przekraczać limitów przydziału ustawionych w konfiguracji sesji, takich jak MaxIdleTimeoutMs wartość.
PS> $Timeout = New-PSSessionOption -IdleTimeout 172800000
PS> $s = New-PSSession -Computer Server01 -Name ITTask -SessionOption $Timeout
PS> Disconnect-PSSession -Session $s
Disconnect-PSSession : The session ITTask cannot be disconnected because the specified
idle timeout value 172800(seconds) is either greater than the server maximum allowed
43200 (seconds) or less that the minimum allowed60(seconds). Choose an idle time out
value that is within the allowed range and try again.
PS> Invoke-Command -ComputerName Server01 {Get-PSSessionConfiguration Microsoft.PowerShell} |
Format-List -Property *
Architecture : 64
Filename : %windir%\system32\pwrshplugin.dll
ResourceUri : http://schemas.microsoft.com/powershell/microsoft.powershell
MaxConcurrentCommandsPerShell : 1000
UseSharedProcess : false
ProcessIdleTimeoutSec : 0
xmlns : http://schemas.microsoft.com/wbem/wsman/1/config/PluginConfiguration
MaxConcurrentUsers : 5
lang : en-US
SupportsOptions : true
ExactMatch : true
RunAsUser :
IdleTimeoutms : 7200000
PSVersion : 3.0
OutputBufferingMode : Block
AutoRestart : false
SecurityDescriptorSddl : O:NSG:BAD:P(A;;GA;;;BA)S:P(AU;FA;GA;;;WD)(AU;SA;GXGW;;;WD)
MaxMemoryPerShellMB : 1024
MaxIdleTimeoutms : 2147483647
Uri : http://schemas.microsoft.com/powershell/microsoft.powershell
SDKVersion : 2
Name : microsoft.powershell
XmlRenderingType : text
Capability : {Shell}
RunAsPassword :
MaxProcessesPerShell : 15
ParentResourceUri : http://schemas.microsoft.com/powershell/microsoft.powershell
Enabled : true
MaxShells : 25
MaxShellsPerUser : 25
Permission : BUILTIN\Administrators AccessAllowed
PSComputerName : localhost
RunspaceId : aea84310-6dbf-4c21-90ac-13980039925a
PSShowComputerName : True
PS> $s.Runspace.ConnectionInfo
ConnectionUri : http://Server01/wsman
ComputerName : Server01
Scheme : http
Port : 80
AppName : /wsman
Credential :
ShellUri : http://schemas.microsoft.com/powershell/Microsoft.PowerShell
AuthenticationMechanism : Default
CertificateThumbprint :
MaximumConnectionRedirectionCount : 5
MaximumReceivedDataSizePerCommand :
MaximumReceivedObjectSize : 209715200
UseCompression : True
NoMachineProfile : False
ProxyAccessType : None
ProxyAuthentication : Negotiate
ProxyCredential :
SkipCACheck : False
SkipCNCheck : False
SkipRevocationCheck : False
NoEncryption : False
UseUTF16 : False
OutputBufferingMode : Drop
IncludePortInSPN : False
Culture : en-US
UICulture : en-US
OpenTimeout : 180000
CancelTimeout : 60000
OperationTimeout : 180000
IdleTimeout : 172800000
PS> Disconnect-PSSession $s -IdleTimeoutSec 43200
Id Name ComputerName State ConfigurationName Availability
-- ---- ------------ ----- ----------------- ------------
4 ITTask Server01 Disconnected Microsoft.PowerShell None
PS> $s.Runspace.ConnectionInfo.IdleTimeout
43200000
Pierwsze polecenie używa polecenia cmdlet New-PSSessionOption
do utworzenia obiektu opcji sesji. Używa parametru IdleTimeout, aby ustawić limit czasu bezczynności 48 godzin (172800000
milisekund). Polecenie zapisuje obiekt opcji sesji w zmiennej $Timeout
.
Drugie polecenie używa polecenia cmdlet New-PSSession
do utworzenia sesji ITTask
na komputerze Server01. Polecenie zapisz sesję w zmiennej $s
. Wartość parametru SessionOption to 48-godzinny limit czasu bezczynności w zmiennej $Timeout
.
Trzecie polecenie rozłącza sesję ITTask
w zmiennej $s
. Polecenie kończy się niepowodzeniem, ponieważ wartość limitu czasu bezczynności sesji przekracza limit przydziału MaxIdleTimeoutMs w konfiguracji sesji. Ponieważ limit czasu bezczynności nie jest używany do momentu rozłączenia sesji, to naruszenie może nie być wykrywane podczas używania sesji.
Czwarte polecenie używa polecenia cmdlet Invoke-Command
do uruchomienia polecenia Get-PSSessionConfiguration
dla konfiguracji sesji Microsoft.PowerShell
na komputerze Server01. Polecenie używa polecenia cmdlet Format-List
do wyświetlania wszystkich właściwości konfiguracji sesji na liście. Dane wyjściowe pokazują, że właściwość MaxIdleTimeoutMS, która ustanawia maksymalną dozwoloną wartość IdleTimeout dla sesji korzystających z konfiguracji sesji, jest 43200000
milisekund (12 godzin).
Piąte polecenie pobiera wartości opcji sesji sesji w zmiennej $s
. Wartości wielu opcji sesji to właściwości właściwości ConnectionInfo właściwości Runspace sesji. Dane wyjściowe pokazują, że wartość właściwości IdleTimeout sesji jest 172800000
milisekund (48 godzin), która narusza MaxIdleTimeoutMs limit przydziału 12 godzin w konfiguracji sesji. Aby rozwiązać ten konflikt, możesz użyć parametru ConfigurationName, aby wybrać inną konfigurację sesji lub użyć parametru IdleTimeout, aby zmniejszyć limit czasu bezczynności sesji.
Szóste polecenie rozłącza sesję. Używa parametru IdleTimeoutSec, aby ustawić limit czasu bezczynności na maksymalną 12-godzinną.
Siódme polecenie pobiera wartość właściwości IdleTimeout rozłączonej sesji, która jest mierzona w milisekundach. Dane wyjściowe potwierdzają, że polecenie zakończyło się pomyślnie.
Parametry
-Confirm
Monituje o potwierdzenie przed uruchomieniem polecenia cmdlet.
Typ: | SwitchParameter |
Aliasy: | cf |
Position: | Named |
Domyślna wartość: | False |
Wymagane: | False |
Akceptowanie danych wejściowych potoku: | False |
Akceptowanie symboli wieloznacznych: | False |
-Id
Rozłącza się z sesjami przy użyciu określonego identyfikatora sesji. Wpisz co najmniej jeden identyfikator (oddzielony przecinkami) lub użyj operatora zakresu (..
), aby określić zakres identyfikatorów.
Aby uzyskać identyfikator sesji, użyj polecenia cmdlet Get-PSSession
. Identyfikator wystąpienia jest przechowywany we właściwości identyfikatora
Typ: | Int32[] |
Position: | 1 |
Domyślna wartość: | None |
Wymagane: | True |
Akceptowanie danych wejściowych potoku: | True |
Akceptowanie symboli wieloznacznych: | False |
-IdleTimeoutSec
Zmienia wartość limitu czasu bezczynności rozłączonego pssession. Wprowadź wartość w sekundach. Minimalna wartość to 60
(1 minuta).
Limit czasu bezczynności określa, jak długo odłączony PSSession jest utrzymywany na komputerze zdalnym. Po wygaśnięciu limitu czasu PSSession zostanie usunięty.
Odłączone pssessions są uważane za bezczynne od momentu ich rozłączenia, nawet jeśli polecenia są uruchomione w rozłączonej sesji.
Wartość domyślna limitu czasu bezczynności sesji jest ustawiana przez wartość IdleTimeoutMs właściwości konfiguracji sesji. Wartość domyślna to 7200000
milisekund (2 godziny).
Wartość tego parametru ma pierwszeństwo przed wartością właściwości IdleTimeout zmiennej preferencji $PSSessionOption
oraz domyślną wartością limitu czasu bezczynności w konfiguracji sesji. Jednak ta wartość nie może przekroczyć wartości MaxIdleTimeoutMs właściwości konfiguracji sesji. Wartość domyślna MaxIdleTimeoutMs wynosi 12 godzin (43200000
milisekund).
Typ: | Int32 |
Position: | Named |
Domyślna wartość: | 60 |
Wymagane: | False |
Akceptowanie danych wejściowych potoku: | False |
Akceptowanie symboli wieloznacznych: | False |
-InstanceId
Rozłącza się z sesjami z określonymi identyfikatorami wystąpień.
Identyfikator wystąpienia to identyfikator GUID, który jednoznacznie identyfikuje sesję na komputerze lokalnym lub zdalnym. Identyfikator wystąpienia jest unikatowy, nawet w wielu sesjach na wielu komputerach.
Aby uzyskać identyfikator wystąpienia sesji, użyj polecenia cmdlet Get-PSSession
. Identyfikator wystąpienia jest przechowywany we właściwości InstanceID sesji.
Typ: | Guid[] |
Position: | Named |
Domyślna wartość: | None |
Wymagane: | True |
Akceptowanie danych wejściowych potoku: | True |
Akceptowanie symboli wieloznacznych: | False |
-Name
Rozłącza się z sesjami z określonymi przyjaznymi nazwami. Dozwolone są symbole wieloznaczne.
Aby uzyskać przyjazną nazwę sesji, użyj polecenia cmdlet Get-PSSession
. Przyjazna nazwa jest przechowywana we właściwości Name sesji.
Typ: | String[] |
Position: | Named |
Domyślna wartość: | None |
Wymagane: | True |
Akceptowanie danych wejściowych potoku: | True |
Akceptowanie symboli wieloznacznych: | True |
-OutputBufferingMode
Określa sposób zarządzania danymi wyjściowymi poleceń w rozłączonej sesji, gdy bufor wyjściowy jest pełny. Wartość domyślna to Block
.
Jeśli polecenie w rozłączonej sesji zwraca dane wyjściowe, a bufor wyjściowy wypełnia, wartość tego parametru skutecznie określa, czy polecenie będzie nadal uruchamiane podczas rozłączania sesji. Wartość Block
zawiesza polecenie do momentu ponownego nawiązania połączenia sesji. Wartość Drop
umożliwia ukończenie polecenia, chociaż dane mogą zostać utracone. W przypadku używania wartości Drop
przekierowuj dane wyjściowe polecenia do pliku na dysku.
Prawidłowe wartości to:
-
Block
: gdy bufor wyjściowy jest pełny, wykonanie jest zawieszone do momentu wyczyszczenia buforu. -
Drop
: gdy bufor wyjściowy jest pełny, wykonywanie będzie kontynuowane. W miarę zapisywania nowych danych wyjściowych najstarsze dane wyjściowe są odrzucane. -
None
: nie określono trybu buforowania danych wyjściowych. Wartość właściwości OutputBufferingMode konfiguracji sesji jest używana dla rozłączonej sesji.
Typ: | OutputBufferingMode |
Position: | Named |
Domyślna wartość: | Block |
Wymagane: | False |
Akceptowanie danych wejściowych potoku: | False |
Akceptowanie symboli wieloznacznych: | False |
-Session
Rozłącza się z określonymi PSSessions. Wprowadź obiekty PSSession, takie jak te zwracane przez polecenie cmdlet New-PSSession
. Można również potokować obiekt PSSession, aby Disconnect-PSSession
.
Polecenie cmdlet Get-PSSession
może pobrać wszystkie pssessions, które kończą się na komputerze zdalnym, w tym psSessions, które są rozłączone i psSessions, które są połączone z innymi sesjami na innych komputerach.
Disconnect-PSSession
rozłącza tylko pssession, które są połączone z bieżącą sesją. Jeśli potokujesz inne psSessions do Disconnect-PSSession
, polecenie Disconnect-PSSession
zakończy się niepowodzeniem.
Typ: | PSSession[] |
Position: | 1 |
Domyślna wartość: | None |
Wymagane: | True |
Akceptowanie danych wejściowych potoku: | True |
Akceptowanie symboli wieloznacznych: | False |
-ThrottleLimit
Ustawia limit ograniczania dla polecenia Disconnect-PSSession
.
Limit ograniczania jest maksymalną liczbą współbieżnych połączeń, które można ustanowić w celu uruchomienia tego polecenia. Jeśli pominiesz ten parametr lub wprowadź wartość 0
, zostanie użyta wartość domyślna 32
.
Limit ograniczania ma zastosowanie tylko do bieżącego polecenia, a nie do sesji ani do komputera.
Typ: | Int32 |
Position: | Named |
Domyślna wartość: | 32 |
Wymagane: | False |
Akceptowanie danych wejściowych potoku: | False |
Akceptowanie symboli wieloznacznych: | False |
-WhatIf
Pokazuje, co się stanie, jeśli polecenie cmdlet zostanie uruchomione. Polecenie cmdlet nie jest uruchamiane.
Typ: | SwitchParameter |
Aliasy: | wi |
Position: | Named |
Domyślna wartość: | False |
Wymagane: | False |
Akceptowanie danych wejściowych potoku: | False |
Akceptowanie symboli wieloznacznych: | False |
Dane wejściowe
Możesz przekazać sesję do tego polecenia cmdlet.
Dane wyjściowe
To polecenie cmdlet zwraca obiekt reprezentujący sesję, która została rozłączona.
Uwagi
Program PowerShell zawiera następujące aliasy dla Disconnect-PSSession
:
- Windows:
dnsn
To polecenie cmdlet jest dostępne tylko na platformach windows.
Polecenie cmdlet
Disconnect-PSSession
działa tylko wtedy, gdy na komputerach lokalnych i zdalnych jest uruchomiony program PowerShell 3.0 lub nowszy.Jeśli używasz polecenia cmdlet
Disconnect-PSSession
w rozłączonej sesji, polecenie nie ma wpływu na sesję i nie generuje błędów.Rozłączone sesje sprzężenia zwrotnego z interaktywnymi tokenami zabezpieczającymi (utworzone przy użyciu parametru EnableNetworkAccess) można ponownie połączyć tylko z komputera, na którym została utworzona sesja. To ograniczenie chroni komputer przed złośliwym dostępem.
Po rozłączeniu pssession stan sesji jest
Disconnected
, a dostępność jest Brak.Wartość właściwości State jest względna względem bieżącej sesji. W związku z tym wartość
Disconnected
oznacza, że PSSession nie jest połączona z bieżącą sesją. Nie oznacza to jednak, że PSSession jest odłączony od wszystkich sesji. Może być połączony z inną sesją. Aby określić, czy można nawiązać połączenie z sesją, czy ponownie nawiązać połączenie, użyj właściwości Availability.Wartość Availability
None
wskazuje, że można nawiązać połączenie z sesją. WartośćBusy
wskazuje, że nie można nawiązać połączenia z PSSession, ponieważ jest on połączony z inną sesją.Aby uzyskać więcej informacji na temat wartości właściwości stanu
sesji, zobacz RunspaceState, wyliczenie .Aby uzyskać więcej informacji na temat wartości właściwości dostępności
sesji, zobacz RunspaceAvailability Enumeration .