Dela via


Om PSSession-information

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 styr och hanterar du de PSSessioner som du skapar.

PSSessions 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). Ur ett Windows-perspektiv är en session en Windows-process på måldatorn.

Varje session konfigureras oberoende av varandra. Den innehåller egna egenskaper, en egen körningsprincip och egna profiler. Den miljö 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 någon av dem 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 parametern Session 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 en 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 Skapa 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 dator eller en fjärrdator.

Kan jag Skapa en PSSession på någon 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 PSSessions 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 ansluta till en PSSession från en annan dator?

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

Du kan 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 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 är frånkopplade oavsiktligt, till exempel genom 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 parametern ComputerName ) eller i en PSSession (med 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 asjob-parametern 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 parametern ComputerName ) eller i en PSSession (med 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 PSSessioner?

Ja. En PSSession är en process som är en självständig 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-PSSessionOptionIdleTimeOut 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 PSSessionen eller låter den överskrida tidsgränsen, innehåller variabeln fortfarande PSSession-objektet, men PSSessionen ä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 utvalda 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

about_Jobs

about_PSSessions

about_Remote

about_Remote_Disconnected_Sessions

about_Remote_Requirements

Invoke-Command

Enter-PSSession

Exit-PSSession

Get-PSSession

New-PSSession

Remove-PSSession