Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Krátký popis
Vysvětluje, jak odpojit a znovu připojit relaci PowerShell (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 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 k dokončení.
Nemůžete se odpojit od interaktivní relace, která byla spuštěna pomocí cmdletu Enter-PSSession.
Odpojené relace můžete použít ke správě PSSessions, které byly neúmyslně odpojeny v důsledku výpadku počítače nebo sítě.
Odpojené rutiny relace
Následující cmdlety podporují funkci Odpojené relace:
-
Connect-PSSession: Připojí se k odpojené PSSession. -
Disconnect-PSSession: Odpojí PSSession. -
Get-PSSession: Získá PSSessions na 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ých relací
Počínaje PowerShellem 3.0 jsou PSSessions nezávislé na relacích, ve kterých jsou vytvořeny. Aktivní psSessions jsou udržovány na vzdáleném počítači nebo straně serveru připojení, i když klientský počítač je vypnut nebo odpojen od sítě.
V PowerShellu 2.0 je PSSession odstraněn ze vzdáleného počítače, když je odpojena od původní relace nebo relace, ve které byl vytvořen.
Když odpojíte psSession, psSession zůstane aktivní a udržuje se ve vzdáleném počítači. Stav relace se změní z 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 na 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 neskončí nebo se výstupní vyrovnávací paměť nevyplní. Aby nedošlo k pozastavení příkazu kvůli plné vyrovnávací paměti výstupu, použijte parametr OutputBufferingMode u rutin Disconnect-PSSession, New-PSSessionOptionnebo New-PSTransportOption.
Odpojené relace jsou udržovány v odpojeném stavu na vzdáleném počítači. Můžete se znovu připojit, dokud neodstraníte psSession, například pomocí rutiny Remove-PSSession, nebo dokud nevyprší časový limit nečinnosti psSession. Časový limit nečinnosti PSSession můžete upravit pomocí parametrů IdleTimeoutSec nebo IdleTimeout u rutin Disconnect-PSSession, New-PSSessionOptionnebo New-PSTransportOption.
Jiný uživatel se může připojit k relacím PSSession, které jste vytvořili, ale jen pokud může poskytnout 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 získá rutina Get-PSSession 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.
Pro získání 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 Server01. Relace se nachází na počítači Server01.
New-PSSession -ComputerName Server01
Id Name ComputerName State ConfigurationName Availability
-- ---- ------------ ----- ----------------- ------------
2 Session2 Server01 Opened Microsoft.PowerShell Available
Pokud chcete získat relaci ze serveru Server01, použijte parametr ComputerName k určení cílového počítače Get-PSSession.
Get-PSSession -ComputerName Server01
Id Name ComputerName State ConfigurationName Availability
-- ---- ------------ ----- ----------------- ------------
2 Session2 Server01 Opened Microsoft.PowerShell Available
Pokud je hodnota parametru ComputerNameGet-PSSession localhost, Get-PSSession získává PSSessions, které se ukončují a jsou udržovány na místním počítači. Na počítači Server01 nelze získat PSSessions, i když byly spuštěny na místním počítači.
Get-PSSession -ComputerName localhost
Pokud chcete získat sezení vytvořená během aktuální relace, použijte rutinu Get-PSSession bez parametrů. V tomto příkladu Get-PSSession získá 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
K odpojení relace použijte cmdlet Disconnect-PSSession. K identifikaci PSSession použijte parametr Session nebo přepošlete objekt PSSession z New-PSSession nebo Get-PSSession rutin k Disconnect-PSSession.
Následující příkaz odpojí PSSession od počítače Server01. Všimněte si, že hodnota vlastnosti State je Odpojeno a dostupnost je Žádná.
Get-PSSession -ComputerName Server01 | Disconnect-PSSession
Id Name ComputerName State ConfigurationName Availability
-- ---- ------------ ----- ----------------- ------------
2 Session2 Server01 Disconnected Microsoft.PowerShell None
Pokud chcete vytvořit odpojenou relaci, použijte parametr InDisconnectedSession cmdletu Invoke-Command. Vytvoří relaci, spustí příkaz a okamžitě se odpojí, dříve než příkaz může vrátit jakýkoli výstup.
Následující příkaz spustí příkaz Get-WinEvent 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 Get-PSSession převést na Connect-PSSession.
Následující příklad načte relace na počítači Server02. Výstup obsahuje dvě nezávislé 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 Session2. 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.
Namísto používání rutiny Receive-PSSession můžete použít Connect-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 se k ní připojí a pak 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 však přijatý příkaz v aktuální relaci spustil jako úloha, ve výchozím nastavení se vrátí 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ů příkazu Get-WinEvent. Parametr OutTarget slouží k získání výsledků v úloze.
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 cmdlet 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
Stav a Dostupnost vlastnosti odpojené relace PSSession vám sdělí, zdali je relace k dispozici pro opětovné připojení.
Pokud je relace PSSession připojena k aktuální relaci, její stav je Otevřený a její dostupnost je k dispozici. Při odpojení od PSSession je stav PSSession Odpojeno a jeho dostupnost je Žádná.
Hodnota vlastnosti State je relativní k aktuální relaci. Hodnota Odpojeno znamená, že relace PSSession není připojená k aktuální relaci. Ale neznamená to, že PSSession je odpojený od všech relací. Může být připojeno k jiné relaci.
Chcete-li zjistit, zda se můžete připojit nebo znovu připojit k PSSession, použijte Dostupnost vlastnost. Hodnota None označuje, že se můžete připojit k relaci. Hodnota Busy označuje, že se nemůžete připojit k relaci 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 měnících se hodnot vlastností State a Availability v každé relaci při odpojení a opětovném připojení PSSession.
# 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 jsou udržovány ve vzdáleném počítači, dokud je neodstraníte, například, když je odstraníte pomocí rutiny Remove-PSSession, nebo vypršením jejich časového limitu. Vlastnost IdleTimeout u PSSession určuje, jak dlouho se odpojená relace udržuje, než je odstraněna.
Hodnoty časového limitu nečinnosti
PSSessions jsou nečinné, když vlákno srdečního tepu neobdrží žádnou odpověď. Odpojení relace učiní relaci neaktivní a spustí časovač IdleTimeout, i přestože 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 v konfiguraci relace určuje výchozí časový limit nečinnosti pro relace využívající tuto konfiguraci. Výchozí hodnotu můžete přepsat, ale tato hodnota nemůže překročit hodnotu MaxIdleTimeoutMs vlastnosti konfigurace relace.
Chcete-li získat hodnoty IdleTimeoutMs a MaxIdleTimeoutMs pro konfiguraci relace, použijte následující příkaz.
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 pro relace a možnosti konfigurace relací je uvedena v sekundách.
Časový limit nečinnosti psSession můžete nastavit při vytváření psSession (New-PSSession, Invoke-Command) a když se od něj odpojíte (Disconnect-PSSession). Nemůžete ale změnit hodnotu IdleTimeout při připojení k psSession (Connect-PSSession) nebo získat výsledky (Receive-PSSession).
Rutiny Connect-PSSession a Receive-PSSession mají parametr SessionOption, který přebírá objekt PSSessionOption, například objekt vrácený rutinou New-PSSessionOption.
Hodnota IdleTimeout v objektu SessionOption a hodnota IdleTimeout v zástupné proměnné $PSSessionOption nezmění hodnotu IdleTimeout v příkazu Connect-PSSession nebo Receive-PSSession.
Pokud chcete vytvořit psSession s konkrétní hodnotou časového limitu nečinnosti, vytvořte $PSSessionOption předvolbovou proměnnou. Nastavte hodnotu vlastnosti IdleTimeout na požadovanou hodnotu (v milisekundách).
Při vytváření PSSessions mají hodnoty v proměnné $PSSessionOption 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. Poté použijte hodnotu možnosti SessionOption pro parametr New-PSSession nebo Invoke-Command rutin.
Hodnoty nastavené při vytváření relace mají přednost před hodnotami nastavenými v proměnné předvoleb $PSSessionOption a konfiguraci relace.
Napří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.
Napří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 IdleTimeoutSec a Parametry MaxIdleTimeoutSec rutiny New-PSTransportOption. Potom použijte možnost přenosu v hodnotě TransportOption parametru Register-PSSessionConfiguration.
Napří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 IdleTimeoutSec a MaxIdleTimeoutSec parametry rutiny New-PSTransportOption. Potom použijte možnost přenosu v hodnotě TransportOption parametru Set-PSSessionConfiguration.
Napří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.Blockzachovává data, ale příkaz může přerušit. -
Drop– Když je vyrovnávací paměť výstupu plná, pokračuje provádění. Při generování nového výstupu se nejstarší výstup zahodí. Při použití hodnotyDroppřesměrujte výstup na soubor. 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.
K vyhledání hodnoty konfigurace relace OutputBufferingModemůž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 v rámci PSSession nastavit režim ukládání výstupu do vyrovnávací paměti při vytváření PSSession, při odpojení a při opětovném připojení.
Pokud jste členem skupiny Správců na vzdáleném počítači, můžete vytvářet a měnit výstupní režim vyrovnávací paměti konfigurací relací.
Chcete-li vytvořit PSSession s výstupním režimem vyrovnávací paměti Drop, vytvořte předvolbu proměnné $PSSessionOption, ve které je hodnota vlastnosti OutputBufferingMode nastavena na Drop.
Při vytváření PSSessions mají hodnoty v proměnné $PSSessionOption přednost před hodnotami v konfiguraci relace.
Například:
$PSSessionOption = New-PSSessionOption -OutputBufferingMode Drop
Pomocí parametru OutputBufferingMode rutiny New-PSSessionOption vytvořte možnost relace s hodnotou Drop. Potom použijte objekt PSSessionOption jako hodnotu parametru SessionOption rutin New-PSSession nebo Invoke-Command.
Hodnoty nastavené při vytváření relace mají přednost před hodnotami nastavenými v proměnné předvoleb $PSSessionOption a konfiguraci relace.
Například:
$o = New-PSSessionOption -OutputBufferingMode Drop
New-PSSession -SessionOption $o
Pokud chcete při odpojení změnit režim vyrovnávací paměti výstupu PSSession, použijte parametr OutputBufferingMode rutiny Disconnect-PSSession.
Například:
Disconnect-PSSession -OutputBufferingMode Drop
Při opětovném připojení ke PSSession pro změnu režimu ukládání výstupu do vyrovnávací paměti použijte parametr OutputBufferingMode rutiny New-PSSessionOption. Pak použijte volbu relace v hodnotě parametru SessionOption u parametru Connect-PSSession nebo Receive-PSSession.
Napří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 ukládání do vyrovnávací paměti Drop, použijte OutputBufferingMode parametr New-PSTransportOption rutiny k vytvoření objektu možnosti přenosu s hodnotou Drop. Potom použijte možnost přenosu v hodnotě TransportOption parametru Register-PSSessionConfiguration.
Napří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 v konfiguraci relace, použijte parametr OutputBufferingMode u rutiny New-PSTransportOption pro vytvoření možnosti přenosu s hodnotou Drop. Pak použijte možnost Transport v hodnotě parametru SessionOptionSet-PSSessionConfiguration.
Napří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 typu zpětné smyčky udržovány na počítači na vzdáleném konci připojení (místní počítač), abyste se mohli odpojit od relací typu zpětné smyčky a znovu se k nim připojit.
Ve výchozím nastavení se relace zpětné smyčky vytvářejí pomocí tokenu zabezpečení sítě, který neumožňuje, aby příkazy spuštěné v relaci měly přístup k jiným počítačům. Můžete se znovu připojit k loopback relacím, které mají síťový bezpečnostní token z jakékoli relace na místním počítači nebo na vzdáleném počítači.
Pokud ale použijete parametr EnableNetworkAccess v cmdletu New-PSSession, Enter-PSSessionnebo Invoke-Command, relace zpětné smyčky se vytvoří s interaktivním tokenem zabezpečení. Interaktivní token umožňuje příkazům spuštěným ve zpětnosmyčkové relaci získávat data z jiných počítačů.
Relace smyčky zpětné vazby můžete odpojit pomocí interaktivních tokenů a poté se k nim znovu připojit ze stejné nebo jiné relace na stejném počítači. Pokud ale chcete zabránit škodlivému přístupu, se lze k smyčkovým relacím znovu připojit 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 čeká na dokončení úlohy a pak se vrátí do příkazového řádku nebo dalšího příkazu. Ve výchozím nastavení se Wait-Job vrátí, pokud je odpojena relace, ve které je úloha spuštěna. Pokud chcete nasměrovat rutinu Wait-Job tak, aby čekala, až se relace znovu připojí, použijte ve stavu Otevřený parametr Force. Další informace najdete 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é PSSession může být Přerušený nebo Uzavřený, ale může být také Odpojený. Pokud je hodnota StateOdpojeno, můžete ke správě PSSession použít stejné techniky, jako kdybyste relaci záměrně odpojili. Pomocí rutiny Connect-PSSession se můžete například 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, zatímco jsou příkazy spuštěny v relaci PSSession, PowerShell udržuje relaci PSSession ve stavu Odpojeno 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é
- about_Jobs
- about_Remote
- about_Remote_Variables
- o_PSSessions
- about_Session_Configurations
- Invoke-Command
- Connect-PSSession
- Odpojit-PSSession
- Get-PSSession
- příjmu