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řipojení na odpojenou verzi 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-PSSessionNew-PSSessionOptionnebo 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-PSSessionOptionnebo 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 Připojení ionUri. 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-PSSessions parametry ComputerName nebo Připojení ionUri. 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 Connect-PSSession můžete použítReceive-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 Správa istrators ve 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á objekt PSSessionOption, například objekt vrácený rutinouNew-PSSessionOption.Connect-PSSessionReceive-PSSession

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-PSSessionInvoke-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 Správa istrators ve 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 New-PSSessionOption OutputBufferingMode rutiny vytvořte možnost relace s hodnotou Drop. Pak jako hodnotu parametru SessionOption rutiny použijte Invoke-Command objekt PSSessionOption.New-PSSession

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 parametr New-PSSessionEnableNetworkAccess rutiny , Enter-PSSessionnebo Invoke-Command 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.

Viz také