about_PSSession_Details

Kort beskrivning

Innehåller detaljerad information om PowerShell-sessioner och vilken roll de spelar i fjärrkommandon.

Lång beskrivning

En session är en miljö där PowerShell körs. En session skapas åt dig när du startar PowerShell. Du kan skapa ytterligare sessioner som kallas "PowerShell-sessioner" eller "PSSessioner" på datorn eller en annan dator.

Till skillnad från de sessioner som PowerShell skapar åt dig kontrollerar och hanterar du de PSSessioner som du skapar.

PSSessioner spelar en viktig roll inom fjärrbaserad databehandling. När du skapar en PSSession som är ansluten till en fjärrdator upprättar PowerShell en beständig anslutning till fjärrdatorn för att stödja PSSession. Du kan använda PSSession för att köra en serie kommandon, funktioner och skript som delar data.

Det här avsnittet innehåller detaljerad information om sessioner och PSSessioner i PowerShell. Grundläggande information om de uppgifter som du kan utföra med sessioner finns i about_PSSessions.

Om sessioner

Tekniskt sett är en session en körningsmiljö där PowerShell körs. Varje session innehåller en instans av System.Management.Automation-motorn och ett värdprogram där PowerShell körs. Värden kan vara den välbekanta PowerShell-konsolen eller ett annat program som kör kommandon, till exempel Cmd.exe, eller ett program som skapats för att vara värd för PowerShell, till exempel Windows PowerShell Integrated Scripting Environment (ISE). Från ett Windows-perspektiv är en session en Windows-process på måldatorn.

Varje session konfigureras separat. Den innehåller sina egna egenskaper, sin egen körningsprincip och sina egna profiler. Miljön som finns när sessionen skapas bevaras under dess livslängd även om du ändrar miljön på datorn. Alla sessioner skapas i ett globalt omfång, även sessioner som du skapar i ett skript.

Du kan bara köra ett kommando (eller en kommandopipeline) i en session i taget. Ett andra kommando körs synkront (ett i taget) väntar upp till fyra minuter på att det första kommandot ska slutföras. Ett andra kommando körs asynkront (samtidigt) misslyckas.

Om PSSessions

En session skapas varje gång du startar PowerShell. Och PowerShell skapar tillfälliga sessioner för att köra enskilda kommandon. Men du kan också skapa sessioner (kallas "PowerShell-sessioner" eller "PSSessioner") som du styr och hanterar.

PSSessioner är viktiga för fjärrkommandon. Om du använder parametern ComputerName för Invoke-Command cmdletarna eller Enter-PSSession upprättar PowerShell en tillfällig session för att köra kommandot och stänger sedan sessionen så snart kommandot eller den interaktiva sessionen har slutförts.

Men om du använder cmdleten New-PSSession för att skapa en PSSession upprättar PowerShell en beständig session på fjärrdatorn där du kan köra flera kommandon eller interaktiva sessioner. De PSSessioner som du skapar förblir öppna och tillgängliga för användning tills du tar bort dem eller tills du stänger sessionen där de skapades.

När du skapar en PSSession på en fjärrdator skapar systemet en PowerShell-process på fjärrdatorn och upprättar en anslutning från den lokala datorn till processen på fjärrdatorn. När du skapar en PSSession på den lokala datorn skapas både den nya processen och anslutningarna på den lokala datorn.

När behöver jag en PSSession?

Invoke-Command Cmdletarna och Enter-PSSession har parametrarna ComputerName och Session. Du kan använda antingen för att köra ett fjärrkommando.

Använd parametern ComputerName för att köra ett enda kommando eller en serie orelaterade kommandon på en eller flera datorer.

Om du vill köra kommandon som delar data behöver du en beständig anslutning till fjärrdatorn. I så fall skapar du en PSSession och använder sedan sessionsparametern för att köra kommandon i PSSession.

Många andra cmdletar som hämtar data från fjärrdatorer, till exempel Get-Process, Get-Service, Get-EventLogoch Get-WmiObject som bara har en ComputerName-parameter . De använder andra tekniker än PowerShell-fjärrkommunikation för att samla in data via fjärranslutning. Dessa cmdletar har ingen sessionsparameter , men du kan använda cmdleten Invoke-Command för att köra dessa kommandon i en PSSession.

Hur skapar jag en PSSession?

Om du vill skapa en PSSession använder du cmdleten New-PSSession . Du kan använda New-PSSession för att skapa en PSSession på en lokal eller fjärransluten dator.

Kan jag skapa en PSSession på valfri dator?

Om du vill skapa en PSSession som är ansluten till en fjärrdator måste datorn konfigureras för fjärrkommunikation i PowerShell. Den aktuella användaren måste vara medlem i gruppen Administratörer på fjärrdatorn, eller så måste den aktuella användaren kunna ange autentiseringsuppgifterna för en medlem i gruppen Administratörer. Mer information finns i about_Remote_Requirements.

Kan jag se mina PSSessioner i andra sessioner?

Från och med Windows PowerShell 3.0 hämtar parametern ComputerName för cmdleten Get-PSSession PSSessions som du skapade på de angivna fjärrdatorerna.

Aktiva PSSessioner underhålls på fjärrdatorn ("serversidan" för en anslutning) och du kan hämta dem från valfri session på valfri dator.

Om du till exempel skapar en PSSession från Server01-datorn till Server02-datorn och sedan växlar till Server03-datorn kan du använda ett kommando som följande för att hämta sessionen.

Get-PSSession -ComputerName Server02

Även om du kopplar från sessionen underhålls sessionen på fjärrdatorn tills du tar bort den eller tidsgränsen uppnås.

I Windows PowerShell 2.0 kan du bara hämta de PSSessioner som du har skapat i den aktuella sessionen. Du kan inte hämta PSSessioner som du skapade i andra sessioner.

Mer information finns i Get-PSSession.

Kan jag se PSSessions som andra har skapat på min dator?

Du kan bara hämta och hantera de PSSessioner som andra bara har skapat om du kan ange autentiseringsuppgifterna för den användare som skapade PSSession eller sessionskonfigurationen som PSSession använder innehåller RunAs-autentiseringsuppgifter. Annars kan du bara hämta, ansluta till, använda och hantera de PSSessioner som du skapade.

Kan jag Anslut till en PSSession från en annan dator?

Från och med Windows PowerShell 3.0 är PSSessioner på Windows-datorer oberoende av de sessioner där de skapades. Aktiva PSSessioner underhålls på datorn på fjärr- eller serversidan för en anslutning.

På en Windows-dator kan du använda cmdleten Disconnect-PSSession för att koppla från en PSSession. PSSession är frånkopplad från den lokala sessionen, men underhålls på fjärrdatorn. Kommandon fortsätter att köras i den frånkopplade PSSessionen. Du kan stänga PowerShell och stänga av den ursprungliga datorn utan att avbryta PSSession.

Sedan, även timmar senare, kan du använda cmdleten Get-PSSession för att hämta PSSession och cmdleten Connect-PSSession för att ansluta till PSSession från en ny session på en annan Windows-dator.

Mer information finns i about_Remote_Disconnected_Sessions.

Vad händer med min PSSession om datorn stoppas?

Frånkopplade PSSessioner är oberoende av de sessioner där de skapades. Om du kopplar från en PSSession och sedan stänger den ursprungliga datorn underhålls PSSession på fjärrdatorn.

Dessutom försöker PowerShell återställa aktiva PSSessioner som kopplas från oavsiktligt, till exempel av en omstart av datorn, ett tillfälligt strömavbrott eller nätverksavbrott. PowerShell försöker underhålla eller återställa PSSession till ett öppet tillstånd, om den ursprungliga sessionen fortfarande är tillgänglig eller till ett frånkopplat tillstånd om den inte är det.

En "aktiv" PSSession är en som kör kommandon. Om en PSSession är ansluten (inte frånkopplad) och kommandon körs i PSSession när den anslutna sessionen stängs försöker PowerShell underhålla PSSession på fjärrdatorn. Men om inga kommandon körs i PSSession stänger PowerShell PSSession när den anslutna sessionen stängs.

Mer information finns i about_Remote_Disconnected_Sessions.

Kan jag köra ett bakgrundsjobb i en PSSession?

Ja. Ett bakgrundsjobb är ett kommando som körs asynkront i bakgrunden utan att interagera med den aktuella sessionen. När du skickar ett kommando för att starta ett jobb returnerar kommandot ett jobbobjekt, men jobbet fortsätter att köras i bakgrunden tills det är klart.

Om du vill starta ett bakgrundsjobb på en lokal dator använder du Start-Job kommandot . Du kan köra bakgrundsjobbet i en tillfällig anslutning (med hjälp av parametern ComputerName ) eller i en PSSession (med hjälp av parametern Session ).

Om du vill starta ett bakgrundsjobb på en fjärrdator använder du cmdleten Invoke-Command med dess AsJob-parameter eller använder cmdleten Invoke-Command för att köra ett Start-Job kommando på en fjärrdator. När du använder parametern AsJob kan du använda parametrarna ComputerName eller Session .

När du använder Invoke-Command för att köra ett Start-Job kommando måste du köra kommandot i en PSSession. Om du använder parametern ComputerName avslutar PowerShell anslutningen när jobbobjektet returneras och jobbet avbryts.

Mer information finns i artikeln om jobb.

Kan jag köra en interaktiv session?

Ja. Om du vill starta en interaktiv session med en fjärrdator använder du cmdleten Enter-PSSession . I en interaktiv session körs de kommandon som du skriver på fjärrdatorn, precis som om du skrev dem direkt på fjärrdatorn.

Du kan köra en interaktiv session i en tillfällig session (med hjälp av parametern ComputerName ) eller i en PSSession (med hjälp av parametern Session ). Om du använder en PSSession behåller PSSession data från tidigare kommandon och PSSession behåller alla data som genereras under den interaktiva sessionen för användning i senare kommandon.

När du avslutar den interaktiva sessionen förblir PSSession öppen och tillgänglig för användning.

Mer information finns i Enter-PSSession och Exit-PSSession.

Måste jag ta bort PSSessions?

Ja. En PSSession är en process som är en fristående miljö som använder minne och andra resurser även när du inte använder den. När du är klar med en PSSession tar du bort den. Om du skapar flera PSSessioner stänger du de som du inte använder och underhåller endast de som används för närvarande.

Om du vill ta bort PSSessioner använder du cmdleten Remove-PSSession . Den tar bort PSSessions och släpper alla resurser som de använde.

Du kan också använda parametern New-PSSessionOption IdleTimeOut för för att stänga en inaktiv PSSession efter ett intervall som du anger. Mer information finns i New-PSSessionOption.

Om du sparar ett PSSession-objekt i en variabel och sedan tar bort PSSession eller låter det överskrida tidsgränsen, innehåller variabeln fortfarande PSSession-objektet, men PSSession är inte aktiv och kan inte användas eller repareras.

Är alla sessioner och PSSessioner likadana?

Nej. Utvecklare kan skapa anpassade sessioner som endast innehåller valda leverantörer och cmdletar. Om ett kommando fungerar i en session men inte i en annan kan det bero på att sessionen är begränsad.

Se även