Dela via


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

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 PSSessionen 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 trasiga eller stängda PSSessioner eller interaktiva PSSessioner som startas med hjälp av cmdleten Enter-PSSession , och det kan inte koppla från PSSessioner som är anslutna till andra sessioner.

Om du vill återansluta till en frånkopplad PSSession använder du Connect-PSSession cmdletarna 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 UpdateSession PSSession på Server01-datorn från den aktuella sessionen. Kommandot använder parametern Namn 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ängligheten ä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 ITTask PSSession på Server12-datorn från den aktuella sessionen. Sessionen ITTask 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 ange utdataläget till 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 cmdleten Disconnect-PSSession 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 ITTask för att skapa 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 ITTask för att hämta sessionen på Srv1-datorn och cmdleten Disconnect-PSSession för att koppla från den. Det här kommandot påverkar inte sessionerna ITTask på de andra datorerna.

Det tredje kommandot använder cmdleten Get-PSSession för att hämta sessionerna ITTask . Utdata visar att sessionerna ITTask 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 ITTask för att hämta 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 MkDir funktionen för att skapa katalogen och startar sedan om skriptet Get-PatchStatus.ps1 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 skriptet Get-PatchStatus.ps1 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 ITTask för att skapa 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-kvoten 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 upprättar det högsta tillåtna IdleTimeout-värdet för sessioner som använder sessionskonfigurationen, är 43200000 millisekunder (12 timmar).

Det femte kommandot hämtar sessionsalternativvärdena för sessionen i variabeln $s . Värdena för många sessionsalternativ är egenskaper för egenskapen ConnectionInfo för runspace-egenskapen för sessionen. Utdata visar att värdet för egenskapen IdleTimeout för sessionen är 172800000 millisekunder (48 timmar), vilket strider mot MaxIdleTimeoutMs-kvoten 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. Ange ett eller flera ID:t (avgränsade med kommatecken) eller använd intervalloperatorn (..) för att ange ett intervall med ID:er.

Använd cmdleten för att hämta ID:t för Get-PSSession en session. Instans-ID:t lagras i ID-egenskapen för sessionen.

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

-IdleTimeoutSec

Ändrar timeout-värdet för inaktivt läge för den frånkopplade PSSessionen. 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 PSSessionen 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 egenskapen IdleTimeoutMs 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 timeout för inaktivitet i sessionskonfigurationen. Det här värdet får dock inte överskrida värdet för egenskapen MaxIdleTimeoutMs 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.

Använd cmdleten för att hämta instans-ID:t för Get-PSSession en session. 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.

Använd cmdleten Get-PSSession för att hämta det egna namnet på en session. Det egna namnet lagras i egenskapen Namn 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. Värdet Drop tillåter att kommandot slutförs, ä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 de angivna PSSessionerna. Ange PSSession-objekt , till exempel de som cmdleten New-PSSession 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 skicka andra PSSessioner till Disconnect-PSSessionmisslyckas Disconnect-PSSession 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 Disconnect-PSSession kommandot.

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 ett värde för 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ördes. 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 den här cmdleten.

Utdata

PSSession

Den här cmdleten returnerar ett objekt som representerar den session som den kopplade från.

Kommentarer

Windows PowerShell innehåller följande alias för Disconnect-PSSession:

  • dnsn

  • 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 den 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 Disconnected sessionstillståndet och tillgängligheten är Ingen.

    Värdet för egenskapen State är relativt till den aktuella sessionen. Därför innebär värdet Disconnected för 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änglighetsvärde None för 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 Tillgänglighet för sessioner finns i RunspaceAvailability Enumeration.