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-PSSession
cmdletarna , New-PSSessionOption
eller 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-PSSession
cmdletarna , New-PSSessionOption
eller 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-PSSession
fö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ärdetDrop
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 Drop
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.
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 Drop
fö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-PSSession
eller 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
Feedback
https://aka.ms/ContentUserFeedback.
Kommer snart: Under hela 2024 kommer vi att fasa ut GitHub-problem som feedbackmekanism för innehåll och ersätta det med ett nytt feedbacksystem. Mer information finns i:Skicka och visa feedback för