about_Remote_Disconnected_Sessions
Krátký popis
Vysvětluje, jak se odpojit a znovu připojit k relaci PowerShellu (PSSession).
Dlouhý popis
Počínaje PowerShellem 3.0 se můžete odpojit od psSession a znovu se připojit k psSession ze stejného počítače nebo jiného počítače. Stav relace se udržuje a příkazy v psSession se budou dál spouštět, když je relace odpojená.
Funkce Odpojené relace umožňuje zavřít relaci, ve které byla vytvořena relace PSSession, a vypnout počítač bez přerušení příkazů spuštěných ve vzdálené psSession. Odpojené relace jsou užitečné pro spouštění příkazů, které trvá delší dobu, než se dokončí.
Nemůžete se odpojit od interaktivní relace, která začala používat tuto rutinu Enter-PSSession
.
Odpojené relace můžete použít ke správě instancí psSession, které byly neúmyslně odpojeny v důsledku výpadku počítače nebo sítě.
Odpojené rutiny relace
Následující rutiny podporují funkci Odpojené relace:
-
Connect-PSSession
: Připojí se k odpojené psSession. -
Disconnect-PSSession
: Odpojí psSession. -
Get-PSSession
: Získá PSSessions v místním počítači nebo na vzdálených počítačích. -
Receive-PSSession
: Získá výsledky příkazů spuštěných v odpojených relacích. -
Invoke-Command
: Parametr InDisconnectedSession vytvoří psSession a okamžitě se odpojí.
Jak funguje funkce Odpojené relace
Počínaje PowerShellem 3.0 jsou relace, ve kterých se vytvářejí, nezávislé na relacích, ve kterých se vytvářejí. Aktivní relace PSSession jsou udržovány na vzdáleném počítači nebo na straně serveru připojení, i když je počítač na straně klienta vypnutý nebo odpojený od sítě.
V PowerShellu 2.0 se psSession odstraní ze vzdáleného počítače, když je odpojený od původní relace nebo relace, ve které byla vytvořena.
Když odpojíte psSession, psSession zůstane aktivní a udržuje se ve vzdáleném počítači. Stav relace se změní ze Spuštěno na Odpojeno. Můžete se znovu připojit k odpojené PSSession z:
- Aktuální relace ve stejném počítači
- Jiná relace ve stejném počítači
- Z relace na jiném počítači
Vzdálený počítač, který udržuje relaci, musí být spuštěný a připojený k síti.
Příkazy v odpojené psSession nadále běží bez přerušení na vzdáleném počítači, dokud příkaz nekončí nebo výstupní vyrovnávací paměť vyplní. Pokud chcete zabránit pozastavení příkazu v úplné vyrovnávací paměti výstupu, použijte outputBufferingMode parametr , Disconnect-PSSession
New-PSSessionOption
nebo New-PSTransportOption
rutiny.
Odpojené relace jsou udržovány ve stavu odpojení na vzdáleném počítači. Jsou dostupné k opětovnému připojení, dokud neodstraníte psSession, například pomocí Remove-PSSession
rutiny, nebo dokud nevyprší časový limit nečinnosti psSession. Časový limit nečinnosti psSession můžete upravit pomocí parametrů IdleTimeoutSec nebo IdleTimeout parametru Disconnect-PSSession
, New-PSSessionOption
nebo New-PSTransportOption
rutin.
Jiný uživatel se může připojit k vytvořeným instancím PSSession, ale jenom v případě, že může zadat přihlašovací údaje, které byly použity k vytvoření relace, nebo použít RunAs
přihlašovací údaje konfigurace relace.
Jak získat psSessions
Počínaje PowerShellem 3.0 rutina Get-PSSession
získá psSessions na místním počítači a vzdálených počítačích. Může také získat psSessions, které byly vytvořeny v aktuální relaci.
Pokud chcete získat psSessions na místním počítači nebo vzdálených počítačích, použijte parametry ComputerName nebo ConnectionUri . Bez parametrů Get-PSSession
získá psSession, které byly vytvořeny v místní relaci bez ohledu na to, kde jsou ukončeny.
Následující příklad ukazuje, jak používat Get-PSSession
.
New-PSSession
vytvoří relaci k počítači se serverem Server01. Relace se nachází v počítači se serverem Server01.
New-PSSession -ComputerName Server01
Id Name ComputerName State ConfigurationName Availability
-- ---- ------------ ----- ----------------- ------------
2 Session2 Server01 Opened Microsoft.PowerShell Available
Chcete-li získat relaci ze serveru Server01, použijte parametr ComputerName k určení cíle Get-PSSession
.
Get-PSSession -ComputerName Server01
Id Name ComputerName State ConfigurationName Availability
-- ---- ------------ ----- ----------------- ------------
2 Session2 Server01 Opened Microsoft.PowerShell Available
Pokud je hodnota parametru ComputerName localhost Get-PSSession
, Get-PSSession
získá PSSessions, které končí a jsou udržovány v místním počítači. Na počítači se serverem Server01 se nezobrazí psSessions, i když byly spuštěny na místním počítači.
Get-PSSession -ComputerName localhost
Pokud chcete získat relace vytvořené v aktuální relaci, použijte rutinu Get-PSSession
bez parametrů. V tomto příkladu získá PSSession, Get-PSSession
která byla vytvořena v aktuální relaci a připojí se k počítači Server01.
Get-PSSession
Id Name ComputerName State ConfigurationName Availability
-- ---- ------------ ----- ----------------- ------------
2 Session2 Server01 Opened Microsoft.PowerShell Available
Jak odpojit relace
Disconnect-PSSession
K odpojení relace použijte rutinu. K identifikaci PSSession použijte parametr Session nebo předáte objekt PSSession z New-PSSession
rutin nebo Get-PSSession
rutiny do Disconnect-PSSession
.
Následující příkaz odpojí psSession k počítači Server01. Všimněte si, že hodnota state vlastnost je odpojena a dostupnost je None.
Get-PSSession -ComputerName Server01 | Disconnect-PSSession
Id Name ComputerName State ConfigurationName Availability
-- ---- ------------ ----- ----------------- ------------
2 Session2 Server01 Disconnected Microsoft.PowerShell None
K vytvoření odpojené relace použijte parametr InDisconnectedSession rutiny Invoke-Command
. Vytvoří relaci, spustí příkaz a okamžitě se odpojí, aby příkaz mohl vrátit jakýkoli výstup.
Následující příkaz spustí Get-WinEvent
příkaz v odpojené relaci na vzdáleném počítači Server02.
Invoke-Command -ComputerName Server02 -InDisconnectedSession -ScriptBlock {
Get-WinEvent -LogName "*PowerShell*" }
Id Name ComputerName State ConfigurationName Availability
-- ---- ------------ ----- ----------------- ------------
4 Session3 Server02 Disconnected Microsoft.PowerShell None
Jak se připojit k odpojeným relacím
Pokud chcete připojit odpojenou relaci, použijte rutinu Connect-PSSession
s parametry ComputerName nebo ConnectionUri . Případně můžete výstup převést Get-PSSession
na Connect-PSSession
.
Následující příklad získá relace na počítači Server02. Výstup obsahuje dvě odpojené relace.
Get-PSSession -ComputerName Server02
Id Name ComputerName State ConfigurationName Availability
-- ---- ------------ ----- ----------------- ------------
2 Session2 juneb-srv8320 Disconnected Microsoft.PowerShell None
4 Session3 juneb-srv8320 Disconnected Microsoft.PowerShell None
Následující příkaz se připojí k relaci 2. PsSession je teď otevřená a dostupná.
Connect-PSSession -ComputerName Server02 -Name Session2
Id Name ComputerName State ConfigurationName Availability
-- ---- ------------ ----- ----------------- ------------
2 Session2 juneb-srv8320 Opened Microsoft.PowerShell Available
Jak získat výsledky
Pokud chcete získat výsledky příkazů spuštěných v odpojené psSession, použijte rutinu Receive-PSSession
.
Místo použití rutiny Receive-PSSession
můžete použítConnect-PSSession
. Pokud je relace již znovu připojena, Receive-PSSession
získá výsledky příkazů, které se spustily při odpojení relace. Pokud je relace PSSession stále odpojená, Receive-PSSession
připojte se k ní a poté získá výsledky příkazů, které se spustily během odpojení.
Receive-PSSession
může vrátit výsledky úlohy (asynchronně) nebo hostitelskému programu (synchronně). Pomocí parametru OutTarget vyberte Job nebo Host. Výchozí hodnota je Host. Pokud se ale přijatý příkaz spustil v aktuální relaci jako úloha, vrátí se ve výchozím nastavení jako úloha .
Následující příklad používá rutinu Receive-PSSession
k opětovnému připojení k relaci na serveru Server02 a získání výsledků Get-WinEvent
příkazu. K získání výsledků v úloze se používá parametr OutTarget.
Receive-PSSession -ComputerName Server02 -Name Session3 -OutTarget Job
Id Name PSJobTypeName State HasMoreData Location
-- ---- ------------- ----- ----------- --------
3 Job3 RemoteJob Running True Server02
Pokud chcete získat výsledky úlohy, použijte rutinu Receive-Job
.
Get-Job | Receive-Job -Keep
ProviderName: PowerShell
TimeCreated Id LevelDisplayName Message PSComputerName
----------- -- ---------------- ------- --------------
5/14/2012 7:26:04 PM 400 Information Engine stat Server02
5/14/2012 7:26:03 PM 600 Information Provider "W Server02
5/14/2012 7:26:03 PM 600 Information Provider "C Server02
5/14/2012 7:26:03 PM 600 Information Provider "V Server02
Vlastnosti stavu a dostupnosti
Vlastnosti Stav a dostupnost odpojené relace PSSession vám sdělí, jestli je relace k dispozici, abyste se k ní mohli znovu připojit.
Pokud je relace PSSession připojena k aktuální relaci, její stav je otevřen a jeho dostupnost je k dispozici. Když se odpojíte od psSession, stav PSSession je odpojen a jeho dostupnost je None.
Hodnota vlastnosti State je relativní vzhledem k aktuální relaci. Hodnota Odpojeno znamená, že psSession není připojen k aktuální relaci. Ale neznamená to, že psSession je odpojený od všech relací. Může se připojit k jiné relaci.
Chcete-li zjistit, zda se můžete připojit nebo znovu připojit k PSSession, použijte vlastnost Availability . Hodnota None označuje, že se můžete připojit k relaci. Hodnota Zaneprázdněn označuje, že se nemůžete připojit k psSession, protože je připojen k jiné relaci.
Následující příklad se spustí ve dvou relacích PowerShellu na stejném počítači. Všimněte si změny hodnot vlastností stavu a dostupnosti v každé relaci, protože psSession je odpojena a znovu připojena.
# Session 1
New-PSSession -ComputerName Server30 -Name Test
Id Name ComputerName State ConfigurationName Availability
-- ---- ------------ ----- ----------------- ------------
1 Test Server30 Opened Microsoft.PowerShell Available
# Session 2
Get-PSSession -ComputerName Server30 -Name Test
Id Name ComputerName State ConfigurationName Availability
-- ---- ------------ ----- ----------------- ------------
1 Test Server30 Disconnected Microsoft.PowerShell Busy
# Session 1
Get-PSSession -ComputerName Server30 -Name Test | Disconnect-PSSession
Id Name ComputerName State ConfigurationName Availability
-- ---- ------------ ----- ----------------- ------------
1 Test Server30 Disconnected Microsoft.PowerShell None
# Session 2
Get-PSSession -ComputerName Server30
Id Name ComputerName State ConfigurationName Availability
-- ---- ------------ ----- ----------------- ------------
1 Test Server30 Disconnected Microsoft.PowerShell None
# Session 2
Connect-PSSession -ComputerName Server30 -Name Test
Id Name ComputerName State ConfigurationName Availability
-- ---- ------------ ----- ----------------- ------------
3 Test Server30 Opened Microsoft.PowerShell Available
# Session 1
Get-PSSession -ComputerName Server30
Id Name ComputerName State ConfigurationName Availability
-- ---- ------------ ----- ----------------- ------------
1 Test Server30 Disconnected Microsoft.PowerShell Busy
Odpojené relace se udržují ve vzdáleném počítači, dokud je neodstraníte, například pomocí rutiny Remove-PSSession
, nebo vyprší jejich časový limit. Vlastnost IdleTimeout psSession určuje, jak dlouho se odpojená relace udržuje před odstraněním.
Hodnoty časového limitu nečinnosti
PsSessions jsou nečinné, když vlákno prezenčních signálů neobdrží žádnou odpověď. Odpojení relace způsobí nečinnost a spuštění hodin nečinnosti , i když příkazy stále běží v odpojené relaci. PowerShell považuje odpojené relace za aktivní, ale nečinné.
Při vytváření a odpojování relací ověřte, že časový limit nečinnosti v relaci PSSession je dostatečně dlouhý, aby se zachovala relace pro vaše potřeby, ale ne tak dlouho, že spotřebovává nepotřebné prostředky na vzdáleném počítači.
Vlastnost IdleTimeoutMs konfigurace relace určuje výchozí časový limit nečinnosti relací, které používají konfiguraci relace. Výchozí hodnotu můžete přepsat, ale tato hodnota nesmí překročit vlastnost MaxIdleTimeoutMs konfigurace relace.
Pomocí následujícího příkazu získáte hodnoty IdleTimeoutMs a MaxIdleTimeoutMs pro konfiguraci relace.
Get-PSSessionConfiguration |
Format-Table Name, IdleTimeoutMs, MaxIdleTimeoutMs
Pokud jste členem skupiny Administrators na vzdáleném počítači, můžete tyto hodnoty nastavit při vytváření konfigurace relace. Hodnoty můžete také změnit při odpojení.
Hodnota časového limitu nečinnosti konfigurace relace a možností relace je v milisekundách. Hodnota časového limitu nečinnosti relací a možností konfigurace relace je v sekundách.
Časový limit nečinnosti psSession můžete nastavit při vytváření psSession (New-PSSession
, Invoke-Command
) a při odpojení od něj (Disconnect-PSSession
). Hodnotu IdleTimeout ale nemůžete změnit při připojení k psSession (Connect-PSSession
) nebo získání výsledků (Receive-PSSession
).
Rutiny mají parametr SessionOption, který přebírá Connect-PSSession
, například objekt vrácený rutinouReceive-PSSession
.New-PSSessionOption
Hodnota IdleTimeout v SessionOption objektu a hodnota IdleTimeout v $PSSessionOption
proměnné předvolby nezmění hodnotu IdleTimeout v Connect-PSSession
příkazu nebo Receive-PSSession
příkaz.
Pokud chcete vytvořit psSession s konkrétní hodnotou časového limitu nečinnosti, vytvořte proměnnou $PSSessionOption
předvoleb. Nastavte hodnotu vlastnosti IdleTimeout na požadovanou hodnotu (v milisekundách).
Při vytváření psSessions mají hodnoty v $PSSessionOption
proměnné přednost před hodnotami v konfiguraci relace.
Například následující příkaz nastaví časový limit nečinnosti 48 hodin:
$PSSessionOption = New-PSSessionOption -IdleTimeoutMSec 172800000
Pokud chcete vytvořit psSession s konkrétní hodnotou časového limitu nečinnosti, použijte parametr IdleTimeoutMSec rutiny New-PSSessionOption
. Pak použijte možnost relace v hodnotě Parametr SessionOption rutiny New-PSSession
Invoke-Command
.
Hodnoty nastavené při vytváření relace mají přednost před hodnotami nastavenými v $PSSessionOption
proměnné předvoleb a konfigurací relace.
Příklad:
$o = New-PSSessionOption -IdleTimeoutMSec 172800000
New-PSSession -SessionOption $o
Pokud chcete při odpojení změnit časový limit nečinnosti psSession, použijte parametr IdleTimeoutSec rutiny Disconnect-PSSession
.
Příklad:
Disconnect-PSSession -IdleTimeoutSec 172800
Pokud chcete vytvořit konfiguraci relace s určitým časovým limitem nečinnosti a maximálním časovým limitem nečinnosti, použijte parametry IdleTimeoutSec a MaxIdleTimeoutSec rutiny New-PSTransportOption
. Pak použijte možnost přenosu v hodnotě TransportOption parametru Register-PSSessionConfiguration
.
Příklad:
$o = New-PSTransportOption -IdleTimeoutSec 172800 -MaxIdleTimeoutSec 259200
Register-PSSessionConfiguration -Name Test -TransportOption $o
Pokud chcete změnit výchozí časový limit nečinnosti a maximální časový limit nečinnosti konfigurace relace, použijte parametry IdleTimeoutSec a MaxIdleTimeoutSec rutiny New-PSTransportOption
. Pak použijte možnost přenosu v hodnotě TransportOption parametru Set-PSSessionConfiguration
.
Příklad:
$o = New-PSTransportOption -IdleTimeoutSec 172800 -MaxIdleTimeoutSec 259200
Set-PSSessionConfiguration -Name Test -TransportOption $o
Režim ukládání výstupu do vyrovnávací paměti
Režim ukládání výstupu do vyrovnávací paměti psSession určuje, jak se výstup příkazu spravuje, když je výstupní vyrovnávací paměť PSSession plná.
V odpojené relaci režim ukládání výstupu do vyrovnávací paměti efektivně určuje, jestli se příkaz bude dál spouštět během odpojení relace.
Platné hodnoty jsou následující:
-
Block
(výchozí) – Pokud je výstupní vyrovnávací paměť plná, spuštění se pozastaví, dokud se vyrovnávací paměť nesmaže.Block
zachová data, ale může příkaz přerušit. -
Drop
– Pokud je výstupní vyrovnávací paměť plná, bude provádění pokračovat. Při generování nového výstupu se nejstarší výstup zahodí. Při použitíDrop
hodnoty přesměrujte výstup do souboru. Tato hodnota se doporučuje pro odpojené relace.
Vlastnost OutputBufferingMode konfigurace relace určuje výchozí režim ukládání do vyrovnávací paměti relací, které používají konfiguraci relace.
Pokud chcete najít hodnotu konfigurace relace OutputBufferingMode, můžete použít některý z následujících formátů příkazů:
(Get-PSSessionConfiguration <ConfigurationName>).OutputBufferingMode
Get-PSSessionConfiguration | Format-Table Name, OutputBufferingMode
Výchozí hodnotu v konfiguraci relace můžete přepsat a nastavit režim ukládání výstupu do vyrovnávací paměti psSession při vytváření psSession, při odpojení a při opětovném připojení.
Pokud jste členem skupiny Administrators na vzdáleném počítači, můžete vytvořit a změnit režim ukládání výstupu do vyrovnávací paměti konfigurace relací.
Chcete-li vytvořit PSSession s výstupní vyrovnávací režim Drop
, vytvořte předvolbu $PSSessionOption
proměnné, ve které je hodnota OutputBufferingMode vlastnost Drop
.
Při vytváření psSessions mají hodnoty v $PSSessionOption
proměnné přednost před hodnotami v konfiguraci relace.
Příklad:
$PSSessionOption = New-PSSessionOption -OutputBufferingMode Drop
Pomocí parametru rutiny vytvořte možnost relace s hodnotou New-PSSessionOption
. Pak jako hodnotu parametru SessionOption rutiny použijte
Hodnoty nastavené při vytváření relace mají přednost před hodnotami nastavenými v $PSSessionOption
proměnné předvoleb a konfigurací relace.
Příklad:
$o = New-PSSessionOption -OutputBufferingMode Drop
New-PSSession -SessionOption $o
Pokud chcete při odpojení změnit režim ukládání výstupu do vyrovnávací paměti psSession, použijte parametr OutputBufferingMode rutiny Disconnect-PSSession
.
Příklad:
Disconnect-PSSession -OutputBufferingMode Drop
Pokud chcete při opětovném připojení změnit režim ukládání výstupu do vyrovnávací paměti psSession, použijte parametr OutputBufferingMode rutiny New-PSSessionOption
. Pak použijte možnost relace v hodnotě SessionOption parametru Connect-PSSession
nebo Receive-PSSession
.
Příklad:
$o = New-PSSessionOption -OutputBufferingMode Drop
Connect-PSSession -ComputerName Server01 -Name Test -SessionOption $o
Chcete-li vytvořit konfiguraci relace s výchozím režimem vyrovnávací paměti výstupu Drop
, použijte outputBufferingMode parametr New-PSTransportOption
rutiny k vytvoření objektu možnosti přenosu s hodnotou Drop
. Pak použijte možnost přenosu v hodnotě TransportOption parametru Register-PSSessionConfiguration
.
Příklad:
$o = New-PSTransportOption -OutputBufferingMode Drop
Register-PSSessionConfiguration -Name Test -TransportOption $o
Chcete-li změnit výchozí režim ukládání výstupu do vyrovnávací paměti konfigurace relace, použijte outputBufferingMode parametr New-PSTransportOption
rutiny vytvořit možnost přenosu s hodnotou Drop
. Pak použijte možnost Transport v hodnotě SessionOption parametru Set-PSSessionConfiguration
.
Příklad:
$o = New-PSTransportOption -OutputBufferingMode Drop
Set-PSSessionConfiguration -Name Test -TransportOption $o
Odpojení relací zpětné smyčky
Relace zpětné smyčky nebo místní relace jsou relace PSSession, které pocházejí a ukončují na stejném počítači. Stejně jako ostatní relace PSSession jsou aktivní relace zpětné smyčky udržovány na počítači na vzdáleném konci připojení (místní počítač), takže se můžete odpojit a znovu připojit k relacím zpětné smyčky.
Ve výchozím nastavení se relace zpětné smyčky vytvářejí pomocí tokenu zabezpečení sítě, který neumožňuje spuštění příkazů v relaci pro přístup k jiným počítačům. Můžete se znovu připojit k relacím zpětné smyčky, které mají token zabezpečení sítě z jakékoli relace na místním počítači nebo ve vzdáleném počítači.
Pokud však použijete rutiny , New-PSSession
nebo Enter-PSSession
rutiny, relace zpětné smyčky se vytvoří s interaktivním tokenem zabezpečení. Interaktivní token umožňuje příkazy spuštěné v relaci zpětné smyčky získat data z jiných počítačů.
Relace zpětné smyčky můžete odpojit pomocí interaktivních tokenů a pak se k nim znovu připojit ze stejné relace nebo jiné relace na stejném počítači. Pokud ale chcete zabránit škodlivému přístupu, můžete se znovu připojit k relacím zpětné smyčky s interaktivními tokeny pouze z počítače, na kterém byly vytvořeny.
Čekání na úlohy v odpojených relacích
Rutina Wait-Job
počká, až se úloha dokončí, a pak se vrátí do příkazového řádku nebo dalšího příkazu. Ve výchozím nastavení se vrátí, pokud je relace, Wait-Job
ve které je spuštěná úloha odpojena. Pokud chcete rutinu Wait-Job
nasměrovat tak, aby čekala, dokud se relace znovu nepřipojí, použijte v otevřeném stavu parametr Force. Další informace naleznete v tématu Wait-Job.
Robustní relace a neúmyslné odpojení
Relace PSSession může být neúmyslně odpojená kvůli selhání počítače nebo výpadku sítě. PowerShell se pokusí obnovit psSession, ale jeho úspěch závisí na závažnosti a době trvání příčiny.
Stav neúmyslně odpojené relace PSSession může být Přerušeno nebo Uzavřeno, ale může být také Odpojeno. Pokud je hodnota State odpojena, můžete ke správě psSession použít stejné techniky, jako kdyby byla relace záměrně odpojena. Pomocí rutiny Connect-PSSession
se například můžete znovu připojit k relaci a rutině Receive-PSSession
získat výsledky příkazů, které se spustily v době odpojení relace.
Pokud zavřete (ukončíte) relaci, ve které byla vytvořena relace PSSession, když jsou příkazy spuštěny v psSession, PowerShell udržuje psSession v odpojeném stavu na vzdáleném počítači. Pokud relaci, ve které byla vytvořena relace PSSession, zavřete (ukončete), ale v příkazu PSSession nejsou spuštěné žádné příkazy, PowerShell se nepokouší zachovat relaci PSSession.