about_Remote_Disconnected_Sessions

Kort beskrivning

Förklarar hur du kopplar från och återansluter till en PowerShell-session (PSSession).

Lång beskrivning

Från och med PowerShell 3.0 kan du koppla från en PSSession och återansluta till PSSession från samma dator eller en annan dator. Sessionstillståndet underhålls och kommandona i PSSession fortsätter att köras medan sessionen är frånkopplad.

Med funktionen Frånkopplade sessioner kan du stänga sessionen där en PSSession skapades och stänga av datorn utan att störa kommandon som körs i den fjärranslutna PSSessionen. Frånkopplade sessioner är användbara för att köra kommandon som tar längre tid att slutföra.

Du kan inte koppla från en interaktiv session som har startats med hjälp av cmdleten Enter-PSSession .

Du kan använda frånkopplade sessioner för att hantera PSSessioner som oavsiktligt kopplades från på grund av ett dator- eller nätverksavbrott.

Cmdletar för frånkopplad session

Följande cmdletar stöder funktionen Frånkopplade sessioner:

  • Connect-PSSession: Anslut till en frånkopplad PSSession.
  • Disconnect-PSSession: Kopplar från en PSSession.
  • Get-PSSession: Hämtar PSSessioner på den lokala datorn eller på fjärrdatorer.
  • Receive-PSSession: Hämtar resultatet av kommandon som kördes i frånkopplade sessioner.
  • Invoke-Command: Parametern InDisconnectedSession skapar en PSSession och kopplas från omedelbart.

Så här fungerar funktionen Frånkopplade sessioner

Från och med PowerShell 3.0 är PSSessioner oberoende av de sessioner där de skapas. Aktiva PSSessioner underhålls på fjärrdatorn eller serversidan av anslutningen, även om datorn på klientsidan stängs av eller kopplas från nätverket.

I PowerShell 2.0 tas PSSession bort från fjärrdatorn när den kopplas från den ursprungliga sessionen eller sessionen där den skapades slutar.

När du kopplar från en PSSession förblir PSSession aktiv och underhålls på fjärrdatorn. Sessionstillståndet ändras från Körs till Frånkopplad. Du kan återansluta till en frånkopplad PSSession från

  • Den aktuella sessionen på samma dator
  • En annan session på samma dator
  • Från en session på en annan dator

Fjärrdatorn som underhåller sessionen måste köras och vara ansluten till nätverket.

Kommandon i en frånkopplad PSSession fortsätter att köras oavbrutet på fjärrdatorn tills kommandot har slutförts eller utdatabufferten fylls. Om du vill förhindra att en fullständig utdatabuffert pausar ett kommando använder du parametern OutputBufferingMode för Disconnect-PSSessioncmdletarna , New-PSSessionOptioneller New-PSTransportOption .

Frånkopplade sessioner underhålls i frånkopplat tillstånd på fjärrdatorn. De är tillgängliga för dig att återansluta tills du tar bort PSSession, till exempel genom att använda cmdleten Remove-PSSession , eller tills tidsgränsen för inaktivitet för PSSession upphör att gälla. Du kan justera tidsgränsen för inaktivitet för en PSSession med hjälp av parametrarna IdleTimeoutSec eller IdleTimeout för Disconnect-PSSessioncmdletarna , New-PSSessionOptioneller New-PSTransportOption .

En annan användare kan ansluta till PSSessioner som du har skapat, men bara om de kan ange de autentiseringsuppgifter som användes för att skapa sessionen eller använda autentiseringsuppgifterna RunAs för sessionskonfigurationen.

Så här hämtar du PSSessions

Från och med PowerShell 3.0 hämtar cmdleten Get-PSSession PSSessioner på den lokala datorn och fjärrdatorerna. Det kan också hämta PSSessioner som skapades i den aktuella sessionen.

Om du vill hämta PSSessioner på den lokala datorn eller fjärrdatorerna använder du parametrarna ComputerName eller Anslut ionUri. Utan parametrar Get-PSSession hämtar PSSession som skapades i den lokala sessionen, oavsett var de avslutas.

I följande exempel visas hur du använder Get-PSSession.

New-PSSession skapar en session till Server01-datorn. Sessionen finns på Server01-datorn.

New-PSSession -ComputerName Server01
Id Name      ComputerName  State    ConfigurationName     Availability
-- ----      ------------  -----    -----------------     ------------
 2 Session2  Server01      Opened   Microsoft.PowerShell     Available

Om du vill hämta sessionen från Server01 använder du parametern ComputerName för att ange målet Get-PSSessionför .

Get-PSSession -ComputerName Server01
Id Name      ComputerName  State    ConfigurationName     Availability
-- ----      ------------  -----    -----------------     ------------
 2 Session2  Server01      Opened   Microsoft.PowerShell     Available

Om värdet för parametern Get-PSSession ComputerName för är localhost Get-PSSession hämtar psSessioner som avslutas vid och underhålls på den lokala datorn. Det får inte PSSessions på Server01-datorn, även om de startades på den lokala datorn.

Get-PSSession -ComputerName localhost

Om du vill hämta sessioner som skapades i den aktuella sessionen använder du cmdleten Get-PSSession utan parametrar. I det här exemplet Get-PSSession hämtar pssessionen som skapades i den aktuella sessionen och ansluter till Server01-datorn.

Get-PSSession
Id Name      ComputerName  State    ConfigurationName     Availability
-- ----      ------------  -----    -----------------     ------------
 2 Session2  Server01      Opened   Microsoft.PowerShell     Available

Koppla från sessioner

Använd cmdleten Disconnect-PSSession för att koppla från en session. Om du vill identifiera PSSession använder du parametern Session eller dirigerar ett PSSession-objekt från New-PSSession cmdletarna eller Get-PSSession till Disconnect-PSSession.

Följande kommando kopplar från PSSession till Server01-datorn. Observera att värdet för egenskapen State är Frånkopplad och att tillgängligheten är Ingen.

Get-PSSession -ComputerName Server01 | Disconnect-PSSession
Id Name      ComputerName  State         ConfigurationName     Availability
-- ----      ------------  -----         -----------------     ------------
 2 Session2  Server01      Disconnected  Microsoft.PowerShell          None

Om du vill skapa en frånkopplad session använder du parametern InDisconnectedSession för cmdleten Invoke-Command . Den skapar en session, startar kommandot och kopplas från omedelbart innan kommandot kan returnera utdata.

Följande kommando kör ett Get-WinEvent kommando i en frånkopplad session på fjärrdatorn Server02.

Invoke-Command -ComputerName Server02 -InDisconnectedSession -ScriptBlock {
   Get-WinEvent -LogName "*PowerShell*" }
Id Name      ComputerName  State         ConfigurationName     Availability
-- ----      ------------  -----         -----------------     ------------
 4 Session3  Server02      Disconnected  Microsoft.PowerShell          None

Ansluta till frånkopplade sessioner

Om du vill ansluta en frånkopplad session använder du cmdleten med parametrarna ComputerName eller Anslut ionUri.Connect-PSSession Du kan också skicka utdata Get-PSSession från till Connect-PSSession.

I följande exempel hämtas sessionerna på Server02-datorn. Utdata innehåller två frånkopplade sessioner.

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

Följande kommando ansluter till Session2. PSSession är nu öppen och tillgänglig.

Connect-PSSession -ComputerName Server02 -Name Session2
Id Name      ComputerName    State    ConfigurationName     Availability
-- ----      ------------    -----    -----------------     ------------
 2 Session2  juneb-srv8320   Opened   Microsoft.PowerShell     Available

Så här hämtar du resultaten

Använd cmdleten Receive-PSSession för att hämta resultatet av kommandon som kördes i en frånkopplad PSSession.

Du kan använda Receive-PSSession i stället för att använda cmdleten Connect-PSSession . Om sessionen redan är återansluten Receive-PSSession hämtar du resultatet av kommandon som kördes när sessionen kopplades från. Om PSSession fortfarande är frånkopplad Receive-PSSession ansluter du till den och hämtar sedan resultatet av kommandon som kördes när den kopplades från.

Receive-PSSession kan returnera resultatet i ett jobb (asynkront) eller till värdprogrammet (synkront). Använd parametern OutTarget för att välja Jobb eller Värd. Standardvärdet är Värd. Men om kommandot som tas emot startades i den aktuella sessionen som ett jobb returneras det som ett jobb som standard.

I följande exempel används cmdleten Receive-PSSession för att återansluta till sessionen på Server02 och hämta resultatet av Get-WinEvent kommandot. Parametern OutTarget används för att hämta resultatet i ett jobb.

Receive-PSSession -ComputerName Server02 -Name Session3 -OutTarget Job
Id   Name   PSJobTypeName   State         HasMoreData     Location
--   ----   -------------   -----         -----------     --------
 3   Job3   RemoteJob       Running       True            Server02

Använd cmdleten Receive-Job för att hämta jobbets resultat.

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

Egenskaper för tillstånd och tillgänglighet

Egenskaperna Tillstånd och tillgänglighet för en frånkopplad PSSession anger om sessionen är tillgänglig för dig att återansluta till den.

När en PSSession är ansluten till den aktuella sessionen är dess tillstånd Öppet och dess tillgänglighet är Tillgänglig. När du kopplar från PSSession är PSSession-tillståndet frånkopplat och dess tillgänglighet är Ingen.

Värdet för egenskapen State är relativt till den aktuella sessionen. Värdet Frånkopplad innebär att PSSession inte är ansluten till den aktuella sessionen. Men det betyder 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 PSSession använder du egenskapen Tillgänglighet . Värdet Ingen anger att du kan ansluta till sessionen. Värdet Upptagen anger att du inte kan ansluta till PSSession eftersom den är ansluten till en annan session.

Följande exempel körs i två PowerShell-sessioner på samma dator. Observera de ändrade värdena för egenskaperna Tillstånd och Tillgänglighet i varje session när PSSession kopplas från och återansluts.

# 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

Frånkopplade sessioner underhålls på fjärrdatorn tills du tar bort dem, till exempel genom att använda cmdleten, eller så överskrider de tidsgränsen Remove-PSSession . Egenskapen IdleTimeout för en PSSession avgör hur länge en frånkopplad session underhålls innan den tas bort.

Tidsgränsvärden för inaktivitet

PSSessioner är inaktiva när pulsslagstråden inte tar emot något svar. Om du kopplar från en session blir den inaktiv och klockan IdleTimeout startas, även om kommandon fortfarande körs i den frånkopplade sessionen. PowerShell anser att frånkopplade sessioner är aktiva, men inaktiva.

När du skapar och kopplar från sessioner kontrollerar du att tidsgränsen för inaktivitet i PSSession är tillräckligt lång för att underhålla sessionen för dina behov, men inte så länge att den förbrukar onödiga resurser på fjärrdatorn.

Egenskapen IdleTimeoutMs för sessionskonfigurationen avgör den standardmässiga tidsgränsen för inaktiva sessioner som använder sessionskonfigurationen. Du kan åsidosätta standardvärdet, men det värdet får inte överskrida egenskapen MaxIdleTimeoutMs för sessionskonfigurationen.

Använd följande kommando för att hämta värdena för IdleTimeoutMs och MaxIdleTimeoutMs för en sessionskonfiguration.

Get-PSSessionConfiguration |
  Format-Table Name, IdleTimeoutMs, MaxIdleTimeoutMs

Om du är medlem i gruppen Administratörer på fjärrdatorn kan du ange dessa värden när du skapar en sessionskonfiguration. Du kan också ändra värdena när du kopplar från.

Timeoutvärdet för inaktivitet för sessionskonfigurationer och sessionsalternativ är i millisekunder. Timeout-värdet för sessioner och konfigurationsalternativ för sessioner är i sekunder.

Du kan ange tidsgränsen för inaktivitet för en PSSession när du skapar PSSession (New-PSSession, Invoke-Command) och när du kopplar från den (Disconnect-PSSession). Du kan dock inte ändra värdet IdleTimeout när du ansluter till PSSession (Connect-PSSession) eller får resultat (Receive-PSSession).

Cmdletarna och Receive-PSSession har en SessionOption-parameter som tar ett PSSessionOption-objekt, till exempel ett som returneras av cmdletenNew-PSSessionOption.Connect-PSSession

Värdet IdleTimeout i SessionOption-objektet och värdet IdleTimeout i $PSSessionOption inställningsvariabeln ändrar inte värdet för IdleTimeout i ett Connect-PSSession eller Receive-PSSession -kommando.

Skapa en inställningsvariabel om du vill skapa en PSSession med ett visst timeout-värde $PSSessionOption för inaktivitet. Ange värdet för egenskapen IdleTimeout till önskat värde (i millisekunder).

När du skapar PSSessions har värdena i $PSSessionOption variabeln företräde framför värdena i sessionskonfigurationen.

Följande kommando anger till exempel en tidsgräns för inaktivitet på 48 timmar:

$PSSessionOption = New-PSSessionOption -IdleTimeoutMSec 172800000

Om du vill skapa en PSSession med ett visst timeout-värde för inaktivitet använder du parametern IdleTimeoutMSec för cmdleten New-PSSessionOption . Använd sedan sessionsalternativet i värdet för parametern New-PSSession SessionOption för cmdletarna eller Invoke-Command .

Värdena som anges när sessionen skapas har företräde framför de värden som anges i $PSSessionOption inställningsvariabeln och sessionskonfigurationen.

Till exempel:

$o = New-PSSessionOption -IdleTimeoutMSec 172800000
New-PSSession -SessionOption $o

Om du vill ändra tidsgränsen för inaktivitet för en PSSession vid frånkoppling använder du parametern IdleTimeoutSec för cmdleten Disconnect-PSSession .

Till exempel:

Disconnect-PSSession -IdleTimeoutSec 172800

Om du vill skapa en sessionskonfiguration med en viss tidsgräns för inaktivitet och maximal tidsgräns för inaktivitet använder du parametrarna IdleTimeoutSec och MaxIdleTimeoutSec för cmdleten New-PSTransportOption. Använd sedan transportalternativet i värdet för parametern TransportOption för Register-PSSessionConfiguration.

Till exempel:

$o = New-PSTransportOption -IdleTimeoutSec 172800 -MaxIdleTimeoutSec 259200
Register-PSSessionConfiguration -Name Test -TransportOption $o

Om du vill ändra standardtimeout för inaktivitet och maximal tidsgräns för inaktivitet för en sessionskonfiguration använder du parametrarna IdleTimeoutSec och MaxIdleTimeoutSec för cmdleten New-PSTransportOption. Använd sedan transportalternativet i värdet för parametern TransportOption för Set-PSSessionConfiguration.

Till exempel:

$o = New-PSTransportOption -IdleTimeoutSec 172800 -MaxIdleTimeoutSec 259200
Set-PSSessionConfiguration -Name Test -TransportOption $o

Utdatabuffertningsläge

Utdatabuffertningsläget för en PSSession avgör hur kommandoutdata hanteras när utdatabufferten för PSSession är full.

I en frånkopplad session avgör utdatabuffertningsläget effektivt om kommandot fortsätter att köras medan sessionen är frånkopplad.

Giltiga värden enligt följande:

  • Block (standard) – När utdatabufferten är full pausas körningen tills bufferten är klar. Block bevarar data, men kan avbryta kommandot.
  • Drop – När utdatabufferten är full fortsätter körningen. När nya utdata genereras ignoreras de äldsta utdata. När du använder värdet Drop omdirigerar du utdata till en fil. Det här värdet rekommenderas för frånkopplade sessioner.

Egenskapen OutputBufferingMode för sessionskonfigurationen avgör standardbuffertningsläget för sessioner som använder sessionskonfigurationen.

Om du vill hitta sessionskonfigurationens värde för OutputBufferingMode kan du använda något av följande kommandoformat:

(Get-PSSessionConfiguration <ConfigurationName>).OutputBufferingMode
Get-PSSessionConfiguration | Format-Table Name, OutputBufferingMode

Du kan åsidosätta standardvärdet i sessionskonfigurationen och ange utdatabuffertningsläget för en PSSession när du skapar en PSSession, när du kopplar från och när du återansluter.

Om du är medlem i gruppen Administratörer på fjärrdatorn kan du skapa och ändra utdatabuffertningsläget för sessionskonfigurationer.

Om du vill skapa en PSSession med utdatabuffertningsläget skapar Dropdu en $PSSessionOption inställningsvariabel där värdet för egenskapen OutputBufferingMode är Drop.

När du skapar PSSessions har värdena i $PSSessionOption variabeln företräde framför värdena i sessionskonfigurationen.

Till exempel:

$PSSessionOption = New-PSSessionOption -OutputBufferingMode Drop

Använd parametern OutputBufferingMode för cmdleten New-PSSessionOption för att skapa ett sessionsalternativ med värdet Drop. Använd sedan PSSessionOption-objektet som värde för parametern New-PSSession SessionOption för cmdletarna eller Invoke-Command .

Värdena som anges när sessionen skapas har företräde framför de värden som anges i $PSSessionOption inställningsvariabeln och sessionskonfigurationen.

Till exempel:

$o = New-PSSessionOption -OutputBufferingMode Drop
New-PSSession -SessionOption $o

Om du vill ändra utdatabuffertningsläget för en PSSession vid frånkoppling använder du parametern OutputBufferingMode för cmdleten Disconnect-PSSession .

Till exempel:

Disconnect-PSSession -OutputBufferingMode Drop

Om du vill ändra utdatabuffertningsläget för en PSSession vid återanslutning använder du parametern OutputBufferingMode för cmdleten New-PSSessionOption . Använd sedan sessionsalternativet i värdet för parametern SessionOption för Connect-PSSession eller Receive-PSSession.

Till exempel:

$o = New-PSSessionOption -OutputBufferingMode Drop
Connect-PSSession -ComputerName Server01 -Name Test -SessionOption $o

Om du vill skapa en sessionskonfiguration med standardläget Dropför utdatabuffertning använder du parametern OutputBufferingMode för cmdleten New-PSTransportOption för att skapa ett transportalternativobjekt med värdet Drop. Använd sedan transportalternativet i värdet för parametern TransportOption för Register-PSSessionConfiguration.

Till exempel:

$o = New-PSTransportOption -OutputBufferingMode Drop
Register-PSSessionConfiguration -Name Test -TransportOption $o

Om du vill ändra standardläget för utdatabuffertning i en sessionskonfiguration använder du parametern OutputBufferingMode för cmdleten New-PSTransportOption för att skapa ett transportalternativ med värdet Drop. Använd sedan alternativet Transport i värdet för parametern SessionOption för Set-PSSessionConfiguration.

Till exempel:

$o = New-PSTransportOption -OutputBufferingMode Drop
Set-PSSessionConfiguration -Name Test -TransportOption $o

Koppla från loopback-sessioner

Loopback-sessioner, eller lokala sessioner, är PSSessioner som kommer från och avslutas på samma dator. Precis som andra PSSessioner underhålls aktiva loopback-sessioner på datorn i fjärrslutet av anslutningen (den lokala datorn), så att du kan koppla från och återansluta till loopback-sessioner.

Som standard skapas loopback-sessioner med en nätverkssäkerhetstoken som inte tillåter att kommandon körs i sessionen för att få åtkomst till andra datorer. Du kan återansluta till loopback-sessioner som har en nätverkssäkerhetstoken från valfri session på den lokala datorn eller en fjärrdator.

Men om du använder parametern EnableNetworkAccess för cmdleten New-PSSession, Enter-PSSessioneller Invoke-Command , skapas loopback-sessionen med en interaktiv säkerhetstoken. Med den interaktiva token kan kommandon som körs i loopback-sessionen hämta data från andra datorer.

Du kan koppla från loopback-sessioner med interaktiva token och sedan återansluta till dem från samma session eller en annan session på samma dator. Men för att förhindra skadlig åtkomst kan du återansluta till loopback-sessioner med interaktiva token från den dator där de skapades.

Väntar på jobb i frånkopplade sessioner

Cmdleten Wait-Job väntar tills ett jobb har slutförts och återgår sedan till kommandotolken eller nästa kommando. Som standard Wait-Job returneras om sessionen där ett jobb körs är frånkopplad. Om du vill styra cmdleten Wait-Job att vänta tills sessionen återansluts använder du parametern Force i tillståndet Öppnat. Mer information finns i Vänta-jobb.

Robusta sessioner och oavsiktlig frånkoppling

En PSSession kan oavsiktligt kopplas från på grund av ett datorfel eller nätverksavbrott. PowerShell försöker återställa PSSession, men dess framgång beror på orsakens allvarlighetsgrad och varaktighet.

Tillståndet för en oavsiktligt frånkopplad PSSession kan vara Bruten eller Stängd, men den kan också vara frånkopplad. Om värdet för Tillstånd är Frånkopplat kan du använda samma tekniker för att hantera PSSession som om sessionen var avsiktligt frånkopplad. Du kan till exempel använda cmdleten Connect-PSSession för att återansluta till sessionen och cmdleten Receive-PSSession för att få resultat av kommandon som kördes när sessionen kopplades från.

Om du stänger (avslutar) sessionen där en PSSession skapades medan kommandon körs i PSSession, behåller PowerShell PSSession i frånkopplat tillstånd på fjärrdatorn. Om du stänger (avslutar) sessionen där en PSSession skapades, men inga kommandon körs i PSSession, försöker PowerShell inte underhålla PSSession.

Se även