Många IT-administratörer älskar Enter-PSSession för att det låter dem arbeta på fjärrservrar utan RDP. Men många använder det på helt fel sätt — och behöver sedan RDP ändå.
Låt oss gå igenom vad Enter-PSSession faktiskt är, när det är användbart, när du bör välja något annat — och de vanliga misstag du kommer göra.
Enter-PSSession skapar en interaktiv PowerShell-session på en fjärrserver. Du loggar in och får en PowerShell-prompt direkt — exakt som om du öppnade PowerShell lokalt på den servern.
Det skiljer sig helt från Invoke-Command. Invoke-Command skickar ett kommando, får resultat, och är klar. Enter-PSSession håller sessionen öppen och låter dig skriva flera kommandon efter varandra — precis som en SSH-session på en Linux-server.
Enter-PSSession -ComputerName SERVER01
Det är allt. Du är nu inloggad på SERVER01 och kan skriva kommandon direkt. Prompten ändras till något som [SERVER01]: PS> för att visa att du är på en fjärrserver.
$cred = Get-Credential Enter-PSSession -ComputerName SERVER01 -Credential $cred
Om du behöver logga in med ett annat användarkonto använder du parametern -Credential.
Exit-PSSession # eller bara: exit
För att lämna sessionen och gå tillbaka till din lokala PowerShell skriver du Exit-PSSession.
$session = New-PSSession -ComputerName SERVER01 # Senare — använd samma session Enter-PSSession -Session $session # Lämna sessionen (men den fortfarande öppen i bakgrunden) Exit-PSSession # Anslut igen senare Enter-PSSession -Session $session # Till slut — stäng den Remove-PSSession $session
Om du behöver logga in på samma server flera gånger kan du spara sessionen och återanvända den. Det är snabbare än att skapa nya sessioner varje gång.
1. Felsöka eller diagnostisera problem: Du behöver undersöka en server i realtid — se loggfiler, kontrollera processer, testa kommandon interaktivt. Enter-PSSession är perfekt för detta.
2. Köra flera relaterade kommandon i följd: Du behöver köra 10 kommandon som bygger på varandra. Istället för 10 separata Invoke-Command-anrop öppnar du en session och gör allt i rad.
3. Du jobbar på Linux-servrar via PowerShell: Du kan använda Enter-PSSession med WSMan på Windows — eller öppna SSH-sessioner via PowerShell på Linux.
4. Snabb manual konfigurering: Du behöver bara göra en liten ändring på en server — en registry-nyckel, en fil, något litet. Enter-PSSession är enkelt och direkt.
Du behöver grafiska program eller GUI: Microsoft Word, en webbläsare, Windows Update, något visuellt — då behöver du RDP. Enter-PSSession är bara kommandorad.
Du behöver ett grafiskt IDE: Visual Studio, SQL Server Management Studio, PowerShell ISE — alla dessa behöver RDP eller fjärrskrivbord.
Du behöver göra något på många servrar: Inte 2-3, utan 50 eller 100. Då är Invoke-Command mycket bättre. Enter-PSSession är för en server åt gången.
Du jobbar med en långsam eller instabil anslutning: Om anslutningen bryts mitt i en Enter-PSSession-kommando kan allt havereras. En batch-körning via Invoke-Command är säkrare.
Du behöver automatisering som körs utan din närvaro: Schemalagda jobb, övervakningsscript, deployment-pipelines — använd Invoke-Command eller DSC istället.
Misstag 1: Glömma att sessionen är interaktiv
Du kan inte köra Enter-PSSession i ett PowerShell-skript och förvänta dig att det fungerar. Sessioner kan inte skrivas in i batch-jobb.
# Det här i en .ps1-fil funkar INTE! Enter-PSSession -ComputerName SERVER01 Get-Process Exit-PSSession
# I ett skript använder du Invoke-Command
Invoke-Command -ComputerName SERVER01 -ScriptBlock {
Get-Process
}Misstag 2: Låta sessionerna ligga öppna för länge
Varje öppen session använder minne på servern. Om du öppnar 20 sessioner och glömmer dem kan servern bli långsam.
# Visa alla dina öppna sessioner Get-PSSession # Stäng en specifik session Remove-PSSession -Id 1 # Stäng ALLA sessioner på en gång (var försiktig!) Get-PSSession | Remove-PSSession
Misstag 3: Tro att Enter-PSSession fungerar utan WinRM
Precis som Invoke-Command kräver Enter-PSSession Windows Remote Management (WinRM) på fjärrservern. Det måste vara aktiverat redan.
# På fjärrservern, kör detta: Get-Service WinRM | Select Status # Om den är "Stopped" — starta den: Start-Service WinRM # Och sätt den att starta automatiskt: Set-Service WinRM -StartupType Automatic
Misstag 4: Hoppa över säkerhetskontroller
Du är på en fjärrserver med dina behörigheter. Vad du gör spelar roll — om du av misstag raderar något kritiskt kan det vara ett problem.
WinRM är krypterat per default: Din trafik är säker mellan din dator och fjärrservern.
Din session kryper in med dina behörigheter: Om du är admin kan du göra admin-saker på fjärrservern. Var försiktig.
Loggning och granskning: PowerShell-kommandon på fjärrservern loggas ofta. Var medveten om att dina handlingar kan granskas.
Använd begränsade konton när du kan: Om du bara behöver läsa loggfiler — använd inte ett full admin-konto. Använd ett konto med minimal åtkomst.
# Kontrollera vad du körde i sessionen # I Windows Event Viewer, gå till: # Windows Logs > Application > Windows PowerShell # Eller via PowerShell: Get-EventLog -LogName "Windows PowerShell" -Newest 10
| Scenario | Enter-PSSession | RDP |
| PowerShell-kommandon | ✓ Perfekt | ✓ Fungerar |
| GUI-program | ✗ Funkar inte | ✓ Perfekt |
| Snabbt och lätt | ✓ Ja | Lite långsammare |
| Låg bandbredd | ✓ Bra | ✗ Behöver mycket |
| Instabil anslutning | Okej | Okej |
| Många servrar | ✗ En i taget | ✗ En i taget |
# 1. Logga in på servern
Enter-PSSession -ComputerName PROD-APP-01
# 2. Se vilka tjänster som körs
Get-Service | Where-Object {$_.Name -like "*MyService*"}
# 3. Kontrollera systemloggen för fel
Get-EventLog -LogName System -Source "MyService" -Newest 20 | Format-Table TimeGenerated, EventID, Message -AutoSize
# 4. Kontrollera processen
Get-Process -Name "MyService*" | Select ProcessName, Threads, Memory
# 5. Kolla AppData-mappen för loggar
Get-ChildItem "C:\ProgramData\MyService\" -Recurse
# 6. Om du behöver — starta om tjänsten
Restart-Service -Name "MyService"
# 7. Verifiera att den körs
Get-Service -Name "MyService"
# 8. Lämna sessionen
Exit-PSSessionDet här skulle vara omfattande och slitsamt via RDP. Men med Enter-PSSession är det snabbt och rakt.
✓ Fördelar
- Snabb och enkel att öppna
- Perfekt för PowerShell-arbete
- Låg bandbreddskonsumtion
- Säker krypterad anslutning
- Interaktiv och responsiv
- Enkel att scriptera (session-sparande)
- Fungerar över långsamma nätverk
✗ Nackdelar
- Ingen GUI — bara kommandorad
- Kan inte köra grafiska program
- En server i taget
- WinRM måste vara aktiverat
- Sessioner kan timeout-a
- Kan inte hålla öppet länge
- Inte lämpligt för batch-jobb
// SNABB-GUIDE: NÄR SKA DU ANVÄNDA ENTER-PSSESSION?
- Behöver du interaktivt arbete på en server? → JA, använd Enter-PSSession
- Är det bara kommandorad-arbete? → JA, Enter-PSSession är bättre än RDP
- Behöver du ett grafiska program? → NEJ, använd RDP istället
- Jobbar du på många servrar? → NEJ, använd Invoke-Command istället
- Är det ett automatiserat skript? → NEJ, använd Invoke-Command istället
- Behöver du bara köra ett kommando? → KANSKE Invoke-Command är snabbare
- Är du på en långsam anslutning? → Enter-PSSession är bättre än RDP
1. Spara sessioner för senare bruk:
# Öppna och spara session $prod = New-PSSession -ComputerName PROD-SERVER-01 -Name "ProdServer" # Du kan nu använda den senare Enter-PSSession -Name "ProdServer" # Och senare ännu Exit-PSSession # Ta upp den igen nästa dag Enter-PSSession -Name "ProdServer" # Till slut stäng den Remove-PSSession -Name "ProdServer"
2. Se alla dina öppna sessioner:
# Lista alla sessioner Get-PSSession # Lista sessioner på en specifik server Get-PSSession -ComputerName PROD-SERVER-01 # Stäng alla öppna sessioner Get-PSSession | Remove-PSSession
3. Öppna en session med en timeout:
$session = New-PSSession -ComputerName SERVER01 -IdleTimeoutSec 3600 # Sessionen stängs automatiskt efter 1 timme av inaktivitet Enter-PSSession -Session $session
Behöver du många kommandon på en server? → Enter-PSSession
Samma kommando på många servrar? → Invoke-Command
GUI eller grafiska verktyg? → RDP
// CHECKLIST: INNAN DU ANVÄNDER ENTER-PSSESSION
- Är WinRM aktiverat på fjärrservern?
- Har jag rätt behörighet att logga in?
- Är det bara kommandorad-arbete jag behöver?
- Eller är det ett grafiskt program? (då behövs RDP)
- Behöver jag detta på många servrar? (då använd Invoke-Command)
- Är detta något som bör automatiseras? (då använd ett skript med Invoke-Command)
- Kommer jag att behöva sessionen flera gånger? (då spara den med New-PSSession)