Disconnect-PSSession

Kopplar från en session.

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

Den här cmdleten är endast tillgänglig på Windows-plattformen.

Cmdleten Disconnect-PSSession kopplar från en PowerShell-session (PSSession), till exempel en som startades med hjälp av cmdleten New-PSSession, från den aktuella sessionen. Därför är PSSession- i ett frånkopplat tillstånd. Du kan ansluta till den frånkopplade PSSession från den aktuella sessionen eller från en annan session på den lokala datorn eller en annan dator.

Cmdleten Disconnect-PSSession kopplar endast från öppna PSSessioner som är anslutna till den aktuella sessionen. Disconnect-PSSession kan inte koppla från brutna eller stängda PSSessionereller interaktiva PSSessioner startas med hjälp av cmdleten Enter-PSSession och kan inte koppla från PSSessioner som är anslutna till andra sessioner.

Om du vill återansluta till en frånkopplad PSSession-använder du cmdletarna Connect-PSSession eller Receive-PSSession.

När en PSSession- är frånkopplad fortsätter kommandona i PSSession att köras tills de har slutförts, såvida inte PSSession överskrider tidsgränsen eller kommandona i PSSession- blockeras av en fullständig utdatabuffert. Om du vill ändra tidsgränsen för inaktivitet använder du parametern IdleTimeoutSec. Om du vill ändra utdatabuffertningsläget använder du parametern OutputBufferingMode Du kan också använda parametern InDisconnectedSession för cmdleten Invoke-Command för att köra ett kommando i en frånkopplad session.

Mer information om funktionen Frånkopplade sessioner finns i about_Remote_Disconnected_Sessions.

Den här cmdleten introduceras i Windows PowerShell 3.0.

Exempel

Exempel 1 – Koppla från en session efter namn

Det här kommandot kopplar från UpdateSessionPSSession- på Server01-datorn från den aktuella sessionen. Kommandot använder parametern Name för att identifiera PSSession-.

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

Utdata visar att försöket att koppla från lyckades. Sessionstillståndet är Disconnected och Tillgänglighet är None, vilket indikerar att sessionen inte är upptagen och kan återanslutas.

Exempel 2 – Koppla från en session från en specifik dator

Det här kommandot kopplar från ITTaskPSSession- på Server12-datorn från den aktuella sessionen. Den ITTask sessionen skapades i den aktuella sessionen och ansluter till Server12-datorn. Kommandot använder cmdleten Get-PSSession för att hämta sessionen och cmdleten Disconnect-PSSession för att koppla från den.

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

Kommandot Disconnect-PSSession använder parametern OutputBufferingMode för att ställa in utdataläget på Drop. Den här inställningen säkerställer att skriptet som körs i sessionen kan fortsätta att köras även om sessionsutdatabufferten är full. Eftersom skriptet skriver utdata till en rapport på en filresurs kan andra utdata gå förlorade utan konsekvens.

Kommandot använder också parametern IdleTimeoutSec för att utöka tidsgränsen för inaktivitet för sessionen till 24 timmar. Med den här inställningen kan administratören eller andra administratörer återansluta till sessionen för att kontrollera att skriptet kördes och felsökas om det behövs.

Exempel 3 – Använda flera PSSessioner på flera datorer

Den här serien med kommandon visar hur den Disconnect-PSSession cmdleten kan användas i ett företagsscenario. I det här fallet startar en ny tekniker ett skript i en session på en fjärrdator och stöter på ett problem. Teknikern kopplar från sessionen så att en mer erfaren chef kan ansluta till sessionen och lösa problemet.

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

Teknikern börjar med att skapa sessioner på flera fjärrdatorer och köra ett skript i varje session. Det första kommandot använder cmdleten New-PSSession för att skapa den ITTask sessionen på tre fjärrdatorer. Kommandot sparar sessionerna i variabeln $s. Det andra kommandot använder parametern FilePath för cmdleten Invoke-Command för att köra ett skript i sessionerna i variabeln $s.

Skriptet som körs på Srv1-datorn genererar oväntade fel. Teknikern kontaktar sin chef och ber om hjälp. Chefen instruerar teknikern att koppla från sessionen så att han kan undersöka saken. Det andra kommandot använder cmdleten Get-PSSession för att hämta ITTask-sessionen på Srv1-datorn och cmdleten Disconnect-PSSession för att koppla från den. Det här kommandot påverkar inte ITTask sessioner på de andra datorerna.

Det tredje kommandot använder cmdleten Get-PSSession för att hämta ITTask sessioner. Utdata visar att de ITTask sessionerna på datorerna Srv2 och Srv30 inte påverkades av kommandot för att koppla från.

Chefen loggar in på sin hemdator, ansluter till sitt företagsnätverk, startar PowerShell och använder cmdleten Get-PSSession för att hämta ITTask-sessionen på Srv1-datorn. Han använder teknikerns autentiseringsuppgifter för att komma åt sessionen.

Därefter använder chefen cmdleten Connect-PSSession för att ansluta till ITTask-sessionen på Srv1-datorn. Kommandot sparar sessionen i variabeln $s.

Chefen använder cmdleten Invoke-Command för att köra några diagnostikkommandon i sessionen i variabeln $s. Han inser att skriptet misslyckades eftersom det inte hittade någon nödvändig katalog. Chefen använder funktionen MkDir för att skapa katalogen och startar sedan om Get-PatchStatus.ps1 skriptet och kopplar från sessionen. Chefen rapporterar sina resultat till teknikern, föreslår att han återansluter till sessionen för att slutföra uppgifterna och ber honom att lägga till ett kommando i Get-PatchStatus.ps1 skriptet som skapar den nödvändiga katalogen om den inte finns.

Exempel 4 – Ändra tidsgränsvärdet för en PSSession

Det här exemplet visar hur du korrigerar värdet för egenskapen IdleTimeout för en session så att den kan kopplas från.

Den inaktiva timeout-egenskapen för en session är viktig för frånkopplade sessioner, eftersom den avgör hur länge en frånkopplad session underhålls innan den tas bort. Du kan ange timeout-alternativet för inaktivitet när du skapar en session och när du kopplar från den. Standardvärdena för tidsgränsen för inaktivitet för en session anges i $PSSessionOption inställningsvariabeln på den lokala datorn och i sessionskonfigurationen på fjärrdatorn. Värden som anges för sessionen har företräde framför värden som anges i sessionskonfigurationen, men sessionsvärden får inte överskrida kvoter som angetts i sessionskonfigurationen, till exempel värdet 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

Det första kommandot använder cmdleten New-PSSessionOption för att skapa ett sessionsalternativobjekt. Den använder parametern IdleTimeout för att ange en tidsgräns för inaktivitet på 48 timmar (172800000 millisekunder). Kommandot sparar sessionsalternativobjektet i variabeln $Timeout.

Det andra kommandot använder cmdleten New-PSSession för att skapa ITTask-sessionen på Server01-datorn. Kommandot sparar sessionen i variabeln $s. Värdet för parametern SessionOption är tidsgränsen på 48 timmar för inaktivitet i variabeln $Timeout.

Det tredje kommandot kopplar från ITTask-sessionen i variabeln $s. Kommandot misslyckas eftersom tidsgränsvärdet för inaktivitet för sessionen överskrider MaxIdleTimeoutMs kvot i sessionskonfigurationen. Eftersom tidsgränsen för inaktivitet inte används förrän sessionen är frånkopplad kan den här överträdelsen inte identifieras när sessionen används.

Det fjärde kommandot använder cmdleten Invoke-Command för att köra ett Get-PSSessionConfiguration kommando för Microsoft.PowerShell-sessionskonfigurationen på Server01-datorn. Kommandot använder cmdleten Format-List för att visa alla egenskaper för sessionskonfigurationen i en lista. Utdata visar att egenskapen MaxIdleTimeoutMS, som anger det högsta tillåtna värdet IdleTimeout för sessioner som använder sessionskonfigurationen, är 43200000 millisekunder (12 timmar).

Det femte kommandot hämtar sessionens sessionsalternativvärden i variabeln $s. Värdena för många sessionsalternativ är egenskaper för egenskapen ConnectionInfo för egenskapen Runspace för sessionen. Utdata visar att värdet för IdleTimeout-egenskapen för sessionen är 172800000 millisekunder (48 timmar), vilket strider mot MaxIdleTimeoutMs kvot på 12 timmar i sessionskonfigurationen. För att lösa den här konflikten kan du använda parametern ConfigurationName för att välja en annan sessionskonfiguration eller använda parametern IdleTimeout för att minska tidsgränsen för inaktivitet för sessionen.

Det sjätte kommandot kopplar från sessionen. Den använder parametern IdleTimeoutSec för att ange tidsgränsen för inaktivitet till maximalt 12 timmar.

Det sjunde kommandot hämtar värdet för egenskapen IdleTimeout för den frånkopplade sessionen, som mäts i millisekunder. Utdata bekräftar att kommandot lyckades.

Parametrar

-Confirm

Uppmanar dig att bekräfta innan du kör cmdleten.

Typ:SwitchParameter
Alias:cf
Position:Named
Standardvärde:False
Obligatorisk:False
Godkänn pipeline-indata:False
Godkänn jokertecken:False

-Id

Kopplar från sessioner med det angivna sessions-ID:t. Skriv ett eller flera ID:t (avgränsade med kommatecken) eller använd intervalloperatorn (..) för att ange ett intervall med ID:er.

Om du vill hämta ID:t för en session använder du cmdleten Get-PSSession. Instans-ID:t lagras i egenskapen ID för sessionen.

Typ:Int32[]
Position:1
Standardvärde:None
Obligatorisk:True
Godkänn pipeline-indata:True
Godkänn jokertecken:False

-IdleTimeoutSec

Ändrar timeoutvärdet för inaktivitet för den frånkopplade PSSession. Ange ett värde i sekunder. Minimivärdet är 60 (1 minut).

Tidsgränsen för inaktivitet avgör hur länge den frånkopplade PSSession- underhålls på fjärrdatorn. När tidsgränsen upphör att gälla tas PSSession bort.

Frånkopplade PSSessioner anses vara inaktiva från det ögonblick då de kopplas från, även om kommandon körs i den frånkopplade sessionen.

Standardvärdet för tidsgränsen för inaktivitet för en session anges av värdet för IdleTimeoutMs egenskapen för sessionskonfigurationen. Standardvärdet är 7200000 millisekunder (2 timmar).

Värdet för den här parametern har företräde framför värdet för egenskapen IdleTimeout för $PSSessionOption-inställningsvariabeln och standardvärdet för inaktiv timeout i sessionskonfigurationen. Det här värdet får dock inte överskrida värdet för MaxIdleTimeoutMs egenskap för sessionskonfigurationen. Standardvärdet för MaxIdleTimeoutMs är 12 timmar (43200000 millisekunder).

Typ:Int32
Position:Named
Standardvärde:60
Obligatorisk:False
Godkänn pipeline-indata:False
Godkänn jokertecken:False

-InstanceId

Kopplar från sessioner med angivna instans-ID:n.

Instans-ID:t är ett GUID som unikt identifierar en session på en lokal eller fjärransluten dator. Instans-ID:t är unikt, även över flera sessioner på flera datorer.

Om du vill hämta instans-ID:t för en session använder du cmdleten Get-PSSession. Instans-ID:t lagras i egenskapen InstanceID för sessionen.

Typ:Guid[]
Position:Named
Standardvärde:None
Obligatorisk:True
Godkänn pipeline-indata:True
Godkänn jokertecken:False

-Name

Kopplar från sessioner med de angivna egna namnen. Jokertecken tillåts.

Om du vill hämta det egna namnet på en session använder du cmdleten Get-PSSession. Det egna namnet lagras i egenskapen Name för sessionen.

Typ:String[]
Position:Named
Standardvärde:None
Obligatorisk:True
Godkänn pipeline-indata:True
Godkänn jokertecken:True

-OutputBufferingMode

Avgör hur kommandoutdata hanteras i den frånkopplade sessionen när utdatabufferten är full. Standardvärdet är Block.

Om kommandot i den frånkopplade sessionen returnerar utdata och utdatabufferten fylls avgör värdet för den här parametern effektivt om kommandot fortsätter att köras medan sessionen är frånkopplad. Värdet Block pausar kommandot tills sessionen återansluts. Med värdet Drop kan kommandot slutföras, även om data kan gå förlorade. När du använder värdet Drop omdirigerar du kommandoutdata till en fil på disken.

Giltiga värden är:

  • Block: När utdatabufferten är full pausas körningen tills bufferten är klar.
  • Drop: När utdatabufferten är full fortsätter körningen. När nya utdata sparas ignoreras de äldsta utdata.
  • None: Inget utdatabuffertningsläge har angetts. Värdet för egenskapen OutputBufferingMode för sessionskonfigurationen används för den frånkopplade sessionen.
Typ:OutputBufferingMode
Position:Named
Standardvärde:Block
Obligatorisk:False
Godkänn pipeline-indata:False
Godkänn jokertecken:False

-Session

Kopplar från den angivna PSSessions. Ange PSSession- objekt, till exempel de som New-PSSession cmdleten returnerar. Du kan också skicka ett PSSession- objekt till Disconnect-PSSession.

Cmdleten Get-PSSession kan hämta alla PSSessioner som avslutas på en fjärrdator, inklusive PSSessioner som är frånkopplade och PSSessioner som är anslutna till andra sessioner på andra datorer. Disconnect-PSSession kopplar endast från PSSession- som är anslutna till den aktuella sessionen. Om du andra PSSessioner till misslyckas kommandot .

Typ:PSSession[]
Position:1
Standardvärde:None
Obligatorisk:True
Godkänn pipeline-indata:True
Godkänn jokertecken:False

-ThrottleLimit

Anger begränsningsgränsen för kommandot Disconnect-PSSession.

Begränsningsgränsen är det maximala antalet samtidiga anslutningar som kan upprättas för att köra det här kommandot. Om du utelämnar den här parametern eller anger värdet 0används standardvärdet 32.

Begränsningsgränsen gäller endast för det aktuella kommandot, inte för sessionen eller på datorn.

Typ:Int32
Position:Named
Standardvärde:32
Obligatorisk:False
Godkänn pipeline-indata:False
Godkänn jokertecken:False

-WhatIf

Visar vad som skulle hända om cmdleten körs. Cmdleten körs inte.

Typ:SwitchParameter
Alias:wi
Position:Named
Standardvärde:False
Obligatorisk:False
Godkänn pipeline-indata:False
Godkänn jokertecken:False

Indata

PSSession

Du kan skicka en session till Disconnect-PSSession.

Utdata

PSSession

Disconnect-PSSession returnerar ett objekt som representerar den session som den kopplade från.

Kommentarer

Den här cmdleten är endast tillgänglig på Windows-plattformar.

  • Cmdleten Disconnect-PSSession fungerar bara när de lokala datorerna och fjärrdatorerna kör PowerShell 3.0 eller senare.

  • Om du använder cmdleten Disconnect-PSSession i en frånkopplad session har kommandot ingen effekt på sessionen och det genererar inga fel.

  • Frånkopplade loopback-sessioner med interaktiva säkerhetstoken (de som skapats med parametern EnableNetworkAccess) kan endast återanslutas från den dator där sessionen skapades. Den här begränsningen skyddar datorn från skadlig åtkomst.

  • När du kopplar från en PSSession-är sessionstillståndet Disconnected och tillgängligheten är Ingen.

    Värdet för egenskapen State är relativ till den aktuella sessionen. Därför innebär värdet Disconnected att PSSession- inte är ansluten till den aktuella sessionen. Det innebär dock inte att PSSession- är frånkopplad från alla sessioner. Den kan vara ansluten till en annan session. Om du vill avgöra om du kan ansluta eller återansluta till sessionen använder du egenskapen Tillgänglighet.

    Ett Tillgänglighet värdet för None anger att du kan ansluta till sessionen. Värdet Busy anger att du inte kan ansluta till PSSession- eftersom den är ansluten till en annan session.

    Mer information om värdena för egenskapen State för sessioner finns i RunspaceState Enumeration.

    Mer information om värdena för egenskapen Availability för sessioner finns i RunspaceAvailability Enumeration.