Disconnect-PSSession

Odpojí se od relace.

Syntax

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 relaci spuštěnou pomocí rutiny New-PSSession , od aktuální relace. V důsledku toho je psSession v odpojeném stavu. Můžete se připojit k odpojené psSession z aktuální relace nebo z jiné relace v místním počítači nebo jiném počítači.

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

Pokud se chcete znovu připojit k odpojené psSession, použijte rutinyConnect-PSSession.Receive-PSSession

Při odpojení psSession příkazy v PSSession budou dál spouštět, dokud se nespustí časový limit psSession nebo příkazy v PSSession jsou blokovány úplnou výstupní vyrovnávací pamětí. 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. K spuštění příkazu v odpojené relaci můžete použít také parametr Invoke-Command InDisconnectedSession rutiny.

Další informace o funkci Odpojené relace najdete 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 k identifikaci psSession používá parametr Name.

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 dostupnost znamenáNone, ž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 Serveru12 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á OutputBufferingMode parametr 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 rutina Disconnect-PSSession může používat 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ří ITTask relaci na třech vzdálených počítačích. Příkaz uloží relace do $s proměnné. Druhý příkaz používá parametr Invoke-Command FilePath rutiny ke spuštění skriptu v relacích v $s proměnné.

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 pomocí rutiny Get-PSSession získá ITTask relaci na počítači Srv1 a rutinu Disconnect-PSSession k odpojení. Tento příkaz nemá vliv na ITTask relace na ostatních počítačích.

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

Vedoucí 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-PSSessionITTask k získání relace 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 ITTask relaci na počítači Srv1. Příkaz uloží relaci do $s proměnné.

Správce používá rutinu Invoke-Command ke spuštění některých diagnostických příkazů v relaci v $s proměnné. Rozpozná, že skript selhal, protože nenalezl požadovaný adresář. Správce pomocí MkDir funkce vytvoří adresář a pak skript restartuje Get-PatchStatus.ps1 a odpojí se od relace. Vedoucí hlásí své zjištění technikovi, navrhuje, aby se znovu připojil k relaci, aby dokončil úkoly, a požádá ho, aby do skriptu přidal příkaz Get-PatchStatus.ps1 , 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, 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 pro časový limit nečinnosti relace jsou nastaveny v $PSSessionOption proměnné předvoleb 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 hodnota MaxIdleTimeoutMs .

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 pomocí rutiny New-PSSessionOption vytvoří objekt 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 $Timeout proměnné.

Druhý příkaz pomocí rutiny New-PSSession vytvoří ITTask relaci na počítači Serveru01. Příkaz uloží relaci do $s proměnné. Hodnota parametru SessionOption je 48hodinový časový limit nečinnosti v $Timeout proměnné.

Třetí příkaz odpojí ITTask relaci v $s proměnné. Příkaz selže, protože hodnota časového limitu nečinnosti relace překračuje kvótu MaxIdleTimeoutMs 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-CommandGet-PSSessionConfiguration ke spuštění příkazu pro Microsoft.PowerShell konfiguraci relace na počítači 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 milisekundy (12 hodin).

Pátý příkaz získá hodnoty možností relace relace v $s proměnné. Hodnoty mnoha možností relace jsou vlastnosti Připojení ionInfo vlastnosti Runspace relace. Výstup ukazuje, že hodnota vlastnosti IdleTimeout relace je 172800000 milisekund (48 hodin), která porušuje kvótu MaxIdleTimeoutMs 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ý maximum.

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 zobrazí výzvu k potvrzení.

Type:SwitchParameter
Aliases:cf
Position:Named
Default value:False
Required:False
Accept pipeline input:False
Accept wildcard characters: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 ve vlastnosti ID relace.

Type:Int32[]
Position:1
Default value:None
Required:True
Accept pipeline input:True
Accept wildcard characters:False

-IdleTimeoutSec

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

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

Odpojené relace PSSession 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 vlastnosti konfigurace relace. Výchozí hodnota je 7200000 milisekundy (2 hodiny).

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

Type:Int32
Position:Named
Default value:60
Required:False
Accept pipeline input:False
Accept wildcard characters: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 ve vlastnosti InstanceID relace.

Type:Guid[]
Position:Named
Default value:None
Required:True
Accept pipeline input:True
Accept wildcard characters: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 tuto rutinu Get-PSSession . Popisný název je uložen ve vlastnosti Název relace.

Type:String[]
Position:Named
Default value:None
Required:True
Accept pipeline input:True
Accept wildcard characters: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 ztracena data. Při použití Drop hodnoty 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ěť nevymaže.
  • Drop: Pokud je výstupní vyrovnávací paměť úplná, provádění pokračuje. Při ukládání nového výstupu se nejstarší výstup zahodí.
  • None: Není zadán žádný režim ukládání do vyrovnávací paměti. Hodnota OutputBufferingMode vlastnosti konfigurace relace se používá pro odpojenou relaci.
Type:OutputBufferingMode
Position:Named
Default value:Block
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Session

Odpojí se od zadaných instancí PSSession. Zadejte objekty PSSession , například objekty, které rutina New-PSSession vrátí. Objekt PSSession můžete také převést na Disconnect-PSSession.

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

Type:PSSession[]
Position:1
Default value:None
Required:True
Accept pipeline input:True
Accept wildcard characters:False

-ThrottleLimit

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

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č.

Type:Int32
Position:Named
Default value:32
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-WhatIf

Zobrazuje, co by se stalo při spuštění rutiny. Rutina není spuštěna.

Type:SwitchParameter
Aliases:wi
Position:Named
Default value:False
Required:False
Accept pipeline input:False
Accept wildcard characters: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í (vytvořené s parametrem 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 relaci PSSession, stav relace je Disconnected a jeho dostupnost je Žádná.

    Hodnota vlastnosti State je relativní vzhledem k aktuální relaci. Hodnota znamená, Disconnected že psSession není připojen k aktuální relaci. Neznamená ale, ž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 relaci, použijte vlastnost Dostupnost .

    Hodnota None dostupnosti označuje, že se můžete připojit k relaci. Hodnota Busy značí, že se nemůžete připojit k psSession , protože je připojena k jiné relaci.

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

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