Sdílet prostřednictvím


Disconnect-PSSession

Odpojí se od relace.

Syntaxe

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>]

Description

Tato rutina je dostupná jenom na platformě Windows.

Rutina Disconnect-PSSession odpojí relaci PowerShellu (PSSession), například rutinu New-PSSession od aktuální relace. Výsledkem je, že PSSession je v odpojeném stavu. Můžete se připojit k odpojené PSSession z aktuální relace nebo z jiné relace na místním počítači nebo jiném počítači.

Rutina Disconnect-PSSession odpojí jenom otevřené psSessions, které jsou připojené k aktuální relaci. Disconnect-PSSession nelze odpojit přerušené nebo uzavřené psSessions nebo interaktivní psSessions spuštěny pomocí rutiny Enter-PSSession a nemůže odpojit psSessions, které jsou připojené k jiným relacím.

K opětovnému připojení k odpojené PSSession použijte rutiny Connect-PSSession nebo Receive-PSSession.

Po odpojení PSSession příkazy v PSSession budou dál spuštěny, dokud psSession časový limit nebo příkazy v PSSession jsou blokované úplnou vyrovnávací pamětí výstupu. Pokud chcete změnit časový limit nečinnosti, použijte parametr IdleTimeoutSec. Pokud chcete změnit režim ukládání výstupu do vyrovnávací paměti, použijte parametr OutputBufferingMode Můžete také použít parametr InDisconnectedSession parametr rutiny Invoke-Command ke spuštění příkazu v odpojené relaci.

Další informace o funkci Odpojené relace naleznete v tématu about_Remote_Disconnected_Sessions.

Tato rutina je zavedena ve Windows PowerShellu 3.0.

Příklady

Příklad 1 – Odpojení relace podle názvu

Tento příkaz odpojí UpdateSessionpsSession na počítači Server01 od aktuální relace. Příkaz používá parametr Name k identifikaci psSession.

PS> Disconnect-PSSession -Name UpdateSession
Id Name            ComputerName    State         ConfigurationName     Availability
-- ----            ------------    -----         -----------------     ------------
1  UpdateSession   Server01        Disconnected  Microsoft.PowerShell          None

Výstup ukazuje, že pokus o odpojení byl úspěšný. Stav relace je Disconnected a dostupnosti je None, což značí, že relace není zaneprázdněná a lze ji znovu připojit.

Příklad 2 – Odpojení relace od konkrétního počítače

Tento příkaz odpojí ITTaskpsSession na počítači Server12 od aktuální relace. Relace ITTask byla vytvořena v aktuální relaci a připojuje se k počítači Se serverem 12. Příkaz pomocí rutiny Get-PSSession získá relaci a rutinu Disconnect-PSSession k odpojení.

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

Příkaz Disconnect-PSSession používá parametr OutputBufferingMode k nastavení výstupního režimu na Drop. Toto nastavení zajišťuje, že skript spuštěný v relaci může i nadále běžet i v případě, že je výstupní vyrovnávací paměť relace plná. Vzhledem k tomu, že skript zapíše výstup do sestavy sdílené složky, může dojít ke ztrátě jiného výstupu bez důsledku.

Příkaz také používá parametr IdleTimeoutSec k rozšíření časového limitu nečinnosti relace na 24 hodin. Toto nastavení umožňuje, aby se tento správce nebo jiní správci znovu připojili k relaci a ověřili, že skript běžel a v případě potřeby odstraňoval potíže.

Příklad 3 – Použití více instancí PSSession na více počítačích

Tato série příkazů ukazuje, jak se může rutina Disconnect-PSSession použít v podnikovém scénáři. V tomto případě nový technik spustí skript v relaci na vzdáleném počítači a narazí na problém. Technik se odpojí od relace, aby se zkušený manažer mohl připojit k relaci a vyřešit problém.

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 začíná vytvořením relací na několika vzdálených počítačích a spuštěním skriptu v každé relaci. První příkaz pomocí rutiny New-PSSession vytvoří relaci ITTask na třech vzdálených počítačích. Příkaz uloží relace do proměnné $s. Druhý příkaz používá parametr FilePath rutiny Invoke-Command ke spuštění skriptu v relacích v proměnné $s.

Skript spuštěný na počítači Srv1 generuje neočekávané chyby. Technik kontaktuje svého nadřízený a požádá o pomoc. Vedoucí nasměruje technika, aby se odpojil od relace, aby mohl prozkoumat. Druhý příkaz používá rutinu Get-PSSession k získání relace ITTask na počítači Srv1 a rutiny Disconnect-PSSession k odpojení. Tento příkaz nemá vliv na relace ITTask na jiných počítačích.

Třetí příkaz používá rutinu Get-PSSession k získání relací ITTask. Výstup ukazuje, že ITTask relace na počítačích Srv2 a Srv30 nebyly příkazem k odpojení ovlivněny.

Správce se přihlásí ke svému domovskému počítači, připojí se ke své podnikové síti, spustí PowerShell a použije rutinu Get-PSSession k získání relace ITTask na počítači Srv1. Pro přístup k relaci používá přihlašovací údaje technika.

Dále správce použije rutinu Connect-PSSession pro připojení k relaci ITTask na počítači Srv1. Příkaz uloží relaci do proměnné $s.

Správce používá rutinu Invoke-Command ke spuštění některých diagnostických příkazů v relaci v proměnné $s. Rozpozná, že skript selhal, protože nenalezl požadovaný adresář. Správce pomocí funkce MkDir vytvoří adresář a pak restartuje Get-PatchStatus.ps1 skript a odpojí se od relace. Vedoucí hlásí své zjištění technikovi, navrhne, že se znovu připojí k relaci, aby dokončil úkoly, a požádá ho, aby přidal příkaz do Get-PatchStatus.ps1 skriptu, který vytvoří požadovaný adresář, pokud neexistuje.

Příklad 4 – Změna hodnoty časového limitu pro psSession

Tento příklad ukazuje, jak opravit hodnotu IdleTimeout vlastnost relace tak, aby bylo možné ji odpojit.

Vlastnost časového limitu nečinnosti relace je důležitá pro odpojené relace, protože určuje, jak dlouho se odpojená relace udržuje před odstraněním relace. Možnost časového limitu nečinnosti můžete nastavit při vytváření relace a při odpojení. Výchozí hodnoty časového limitu nečinnosti relace jsou nastaveny v proměnné předvoleb $PSSessionOption v místním počítači a v konfiguraci relace na vzdáleném počítači. Hodnoty nastavené pro relaci mají přednost před hodnotami nastavenými v konfiguraci relace, ale hodnoty relace nesmí překročit kvóty nastavené v konfiguraci relace, například MaxIdleTimeoutMs hodnotu.

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

První příkaz použije rutinu New-PSSessionOption k vytvoření objektu možnosti relace. Používá parametr IdleTimeout k nastavení časového limitu nečinnosti 48 hodin (172800000 milisekund). Příkaz uloží objekt možnosti relace do proměnné $Timeout.

Druhý příkaz používá rutinu New-PSSession k vytvoření relace ITTask na počítači Se server01. Příkaz uloží relaci do proměnné $s. Hodnota parametru SessionOption je 48hodinový časový limit nečinnosti v proměnné $Timeout.

Třetí příkaz odpojí relaci ITTask v proměnné $s. Příkaz selže, protože hodnota časového limitu nečinnosti relace překračuje MaxIdleTimeoutMs kvóta v konfiguraci relace. Vzhledem k tomu, že časový limit nečinnosti se nepoužívá, dokud se relace neodpojí, může dojít k nedetekci tohoto porušení, když je relace používána.

Čtvrtý příkaz používá rutinu Invoke-Command ke spuštění příkazu Get-PSSessionConfiguration pro konfiguraci relace Microsoft.PowerShell na počítači Se server01. Příkaz používá rutinu Format-List k zobrazení všech vlastností konfigurace relace v seznamu. Výstup ukazuje, že vlastnost MaxIdleTimeoutMS, která určuje maximální povolenou hodnotu IdleTimeout pro relace, které používají konfiguraci relace, je 43200000 milisekund (12 hodin).

Pátý příkaz získá hodnoty možností relace relace v $s proměnné. Hodnoty mnoha možností relace jsou vlastnosti ConnectionInfo vlastnosti Runspace vlastnosti relace. Výstup ukazuje, že hodnota IdleTimeout vlastnost relace je 172800000 milisekund (48 hodin), což porušuje MaxIdleTimeoutMs kvóta 12 hodin v konfiguraci relace. Pokud chcete tento konflikt vyřešit, můžete pomocí parametru ConfigurationName vybrat jinou konfiguraci relace nebo pomocí parametru IdleTimeout snížit časový limit nečinnosti relace.

Šestý příkaz relaci odpojí. Používá parametr IdleTimeoutSec k nastavení časového limitu nečinnosti na 12hodinový limit.

Sedmý příkaz získá hodnotu IdleTimeout vlastnost odpojené relace, která se měří v milisekundách. Výstup potvrdí, že příkaz byl úspěšný.

Parametry

-Confirm

Před spuštěním rutiny vás vyzve k potvrzení.

Typ:SwitchParameter
Aliasy:cf
Position:Named
Default value:False
Vyžadováno:False
Přijmout vstup kanálu:False
Přijmout zástupné znaky:False

-Id

Odpojí se od relací pomocí zadaného ID relace. Zadejte jedno nebo více ID (oddělené čárkami) nebo pomocí operátoru rozsahu (..) zadejte rozsah ID.

K získání ID relace použijte rutinu Get-PSSession. ID instance je uloženo v ID vlastnosti relace.

Typ:Int32[]
Position:1
Default value:None
Vyžadováno:True
Přijmout vstup kanálu:True
Přijmout zástupné znaky:False

-IdleTimeoutSec

Změní hodnotu časového limitu nečinnosti odpojeného psSession. Zadejte hodnotu v sekundách. Minimální hodnota je 60 (1 minuta).

Časový limit nečinnosti určuje, jak dlouho se na vzdáleném počítači udržuje odpojená PSSession. Po vypršení časového limitu se odstraní PSSession.

Odpojené psSessions se považují za nečinné od okamžiku, kdy jsou odpojené, i když jsou příkazy spuštěné v odpojené relaci.

Výchozí hodnota časového limitu nečinnosti relace je nastavena hodnotou IdleTimeoutMs vlastnost konfigurace relace. Výchozí hodnota je 7200000 milisekund (2 hodiny).

Hodnota tohoto parametru má přednost před hodnotou vlastnosti IdleTimeout proměnné předvolby $PSSessionOption a výchozí hodnotou časového limitu nečinnosti v konfiguraci relace. Tato hodnota však nemůže překročit hodnotu MaxIdleTimeoutMs vlastnosti konfigurace relace. Výchozí hodnota MaxIdleTimeoutMs je 12 hodin (43200000 milisekund).

Typ:Int32
Position:Named
Default value:60
Vyžadováno:False
Přijmout vstup kanálu:False
Přijmout zástupné znaky:False

-InstanceId

Odpojí se od relací se zadanými ID instancí.

ID instance je identifikátor GUID, který jednoznačně identifikuje relaci na místním nebo vzdáleném počítači. ID instance je jedinečné, a to i napříč několika relacemi na více počítačích.

K získání ID instance relace použijte rutinu Get-PSSession. ID instance je uloženo v InstanceID vlastnost relace.

Typ:Guid[]
Position:Named
Default value:None
Vyžadováno:True
Přijmout vstup kanálu:True
Přijmout zástupné znaky:False

-Name

Odpojí se od relací pomocí zadaných popisných názvů. Jsou povoleny zástupné cardy.

Pokud chcete získat popisný název relace, použijte rutinu Get-PSSession. Popisný název je uložen ve vlastnosti Název relace.

Typ:String[]
Position:Named
Default value:None
Vyžadováno:True
Přijmout vstup kanálu:True
Přijmout zástupné znaky:True

-OutputBufferingMode

Určuje, jak se výstup příkazu spravuje v odpojené relaci, když je výstupní vyrovnávací paměť plná. Výchozí hodnota je Block.

Pokud příkaz v odpojené relaci vrací výstup a výstupní vyrovnávací paměť vyplní, hodnota tohoto parametru efektivně určuje, jestli se příkaz bude dál spouštět během odpojení relace. Hodnota Block pozastaví příkaz, dokud se relace znovu nepřipojí. Hodnota Drop umožňuje dokončení příkazu, i když můžou být data ztracena. Při použití hodnoty Drop přesměrujte výstup příkazu na soubor na disku.

Platné hodnoty jsou:

  • Block: Pokud je výstupní vyrovnávací paměť plná, spuštění se pozastaví, dokud se vyrovnávací paměť nesmaže.
  • Drop: Pokud je výstupní vyrovnávací paměť plná, bude provádění pokračovat. Při ukládání nového výstupu se nejstarší výstup zahodí.
  • None: Není zadán žádný režim ukládání výstupu do vyrovnávací paměti. Hodnota OutputBufferingMode vlastnosti konfigurace relace se používá pro odpojenou relaci.
Typ:OutputBufferingMode
Position:Named
Default value:Block
Vyžadováno:False
Přijmout vstup kanálu:False
Přijmout zástupné znaky:False

-Session

Odpojí se od zadaných psSessions. Zadejte psSession objekty, například objekty, které New-PSSession rutina vrátí. Můžete také PSSession objekt Disconnect-PSSession.

Rutina Get-PSSession může získat všechny psSessions, které se ukončí na vzdáleném počítači, včetně psSessions, které jsou odpojené a psSessions, které jsou připojené k jiným relacím na jiných počítačích. Disconnect-PSSession odpojí jenom psSession, které jsou připojené k aktuální relaci. Pokud předáte jiné psSessions do Disconnect-PSSession, příkaz Disconnect-PSSession selže.

Typ:PSSession[]
Position:1
Default value:None
Vyžadováno:True
Přijmout vstup kanálu:True
Přijmout zástupné znaky:False

-ThrottleLimit

Nastaví limit omezení pro příkaz Disconnect-PSSession.

Limit omezení je maximální počet souběžných připojení, která lze navázat pro spuštění tohoto příkazu. Pokud tento parametr vynecháte nebo zadáte hodnotu 0, použije se výchozí hodnota 32.

Omezení se vztahuje pouze na aktuální příkaz, ne na relaci nebo na počítač.

Typ:Int32
Position:Named
Default value:32
Vyžadováno:False
Přijmout vstup kanálu:False
Přijmout zástupné znaky:False

-WhatIf

Ukazuje, co se stane, když se rutina spustí. Rutina se nespustí.

Typ:SwitchParameter
Aliasy:wi
Position:Named
Default value:False
Vyžadováno:False
Přijmout vstup kanálu:False
Přijmout zástupné znaky:False

Vstupy

PSSession

Relaci můžete připojit k této rutině.

Výstupy

PSSession

Tato rutina vrátí objekt představující relaci, kterou odpojil.

Poznámky

PowerShell obsahuje následující aliasy pro Disconnect-PSSession:

  • Windows:
    • dnsn

Tato rutina je dostupná jenom na platformách Windows.

  • Rutina Disconnect-PSSession funguje jenom v případech, kdy místní a vzdálené počítače používají PowerShell 3.0 nebo novější.

  • Pokud použijete rutinu Disconnect-PSSession v odpojené relaci, příkaz nemá na relaci žádný vliv a negeneruje chyby.

  • Odpojené relace zpětné smyčky s interaktivními tokeny zabezpečení (ty vytvořené pomocí parametru EnableNetworkAccess) je možné znovu připojit pouze z počítače, na kterém byla relace vytvořena. Toto omezení chrání počítač před škodlivým přístupem.

  • Když odpojíte PSSession , stav relace se Disconnected a dostupnost je Žádné.

    Hodnota vlastnosti State je relativní vzhledem k aktuální relaci. Proto hodnota Disconnected znamená, že PSSession není připojen k aktuální relaci. Neznamená však, že PSSession je odpojen od všech relací. Může se připojit k jiné relaci. Pokud chcete zjistit, jestli se k relaci můžete připojit nebo znovu připojit, použijte vlastnost Availability.

    Hodnota DostupnostNone označuje, že se můžete připojit k relaci. Hodnota Busy označuje, že se nemůžete připojit k PSSession, protože je připojen k jiné relaci.

    Další informace o hodnotách State vlastnost relace naleznete v tématu RunspaceState Výčtu.

    Další informace o hodnotách vlastnosti Availability relací naleznete v tématu Výčtu RunspaceAvailability.