Dela via


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 upprätthå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 cmdleten Enter-PSSession .

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

Frånkopplade sessions-cmdletar

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

  • Connect-PSSession: Ansluter 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 kopplar 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 PSSessionen bort från fjärrdatorn när den är frånkopplad från den ursprungliga sessionen eller den session där den skapades slutar.

När du kopplar från en PSSession förblir PSSessionen 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 PSSessionen, 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 Disconnect-PSSessionIdleTimeoutSec eller IdleTimeout för cmdletarna , 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 PSSessioner

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 ConnectionUri . 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 på 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-PSSessionComputerName 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 har skapats 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

Så här kopplar du från sessioner

Använd cmdleten Disconnect-PSSession för att koppla från en session. Du kan identifiera PSSession genom att använda parametern Session eller skicka 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 kopplar från omedelbart innan kommandot kan returnera några 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 Connect-PSSession med parametrarna ComputerName eller ConnectionUri . 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

Om du vill hämta resultatet av kommandon som kördes i en frånkopplad PSSession använder du cmdleten Receive-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 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 resultaten 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 resultaten 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

Tillstånds - och tillgänglighetsegenskaperna 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 PSSessionen ä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 ta reda på 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 PSSessionen 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 upprätthå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 upprätthålla sessionen efter dina behov, men inte så länge att den förbrukar onödiga resurser på fjärrdatorn.

Egenskapen IdleTimeoutMs för sessionskonfigurationen avgör standardtidsgränsen för inaktivitet för 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.

Tidsgränsvärdet för inaktivitet för sessionskonfigurationer och sessionsalternativ är i millisekunder. Tidsgränsvärdet för inaktivitet 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).

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

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.

Om du vill skapa en PSSession med ett visst timeout-värde för inaktivitet skapar du en $PSSessionOption inställningsvariabel. 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 SessionOption för New-PSSession cmdletarna eller Invoke-Command .

De värden som anges när du skapar sessionen har företräde framför de värden som anges i $PSSessionOption inställningsvariabeln och sessionskonfigurationen.

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 .

Exempel:

Disconnect-PSSession -IdleTimeoutSec 172800

Om du vill skapa en sessionskonfiguration med en viss tidsgräns för inaktivitet och maximal timeout 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.

Exempel:

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

Om du vill ändra standardtimeout för inaktivitet och maximal timeout för inaktivitet i 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.

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 tas de äldsta utdata bort. 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 standardbuffringslä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 Dropskapar du 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.

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 SessionOption för New-PSSession cmdletarna eller Invoke-Command .

De värden som anges när du skapar sessionen har företräde framför de värden som anges i $PSSessionOption inställningsvariabeln och sessionskonfigurationen.

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 .

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.

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.

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.

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 på 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 å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 endast 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 att cmdleten Wait-Job ska vänta tills sessionen återansluts använder du parametern Force i tillståndet Öppnad. 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