Bird
Raised Fist0
PowerShellscripting~10 mins

PSSession management in PowerShell - Step-by-Step Execution

Choose your learning style10 modes available

Start learning this pattern below

Jump into concepts and practice - no test required

or
Recommended
Test this pattern10 questions across easy, medium, and hard to know if this pattern is strong
Concept Flow - PSSession management
Create PSSession
Use PSSession to run commands
Check session status
Remove PSSession
End
This flow shows how to create a PowerShell session, use it to run commands, check its status, and then remove it to clean up.
Execution Sample
PowerShell
$s = New-PSSession -ComputerName localhost
Invoke-Command -Session $s -ScriptBlock { Get-Process }
Remove-PSSession -Session $s
Creates a session to localhost, runs Get-Process inside it, then removes the session.
Execution Table
StepActionCommandResultSession State
1Create session$s = New-PSSession -ComputerName localhostSession created with Id 1Opened
2Run command in sessionInvoke-Command -Session $s -ScriptBlock { Get-Process }List of processes returnedOpened
3Remove sessionRemove-PSSession -Session $sSession removedClosed
4Check session state$s.StateClosedClosed
💡 Session removed and closed, no longer available for commands.
Variable Tracker
VariableStartAfter Step 1After Step 2After Step 3Final
$snullPSSession object (Id 1, Opened)Same session (Opened)Session removed (Closed)Closed
Key Moments - 3 Insights
Why do we need to remove a PSSession after using it?
Removing the session frees resources and closes the connection. See execution_table step 3 where Remove-PSSession closes the session.
Can we run commands on a session after it is removed?
No, once removed, the session state is Closed and commands cannot run. See execution_table step 4 showing session state Closed.
What does New-PSSession do exactly?
It creates a persistent connection to a remote or local computer to run commands later. See execution_table step 1 where session is created and state is Opened.
Visual Quiz - 3 Questions
Test your understanding
Look at the execution_table, what is the session state right after creating the session?
ADisconnected
BClosed
COpened
DNot created
💡 Hint
Check execution_table row 1, column 'Session State' shows 'Opened'.
At which step is the session removed?
AStep 1
BStep 3
CStep 2
DStep 4
💡 Hint
See execution_table row 3 where Remove-PSSession command is run.
If we skip Remove-PSSession, what would happen to the session state?
AIt stays Opened
BIt becomes Closed automatically
CIt becomes Disconnected immediately
DIt is deleted automatically
💡 Hint
Refer to variable_tracker showing session state remains Opened until removed.
Concept Snapshot
PSSession management:
- Use New-PSSession to create a session
- Run commands with Invoke-Command -Session
- Check session state with $session.State
- Remove session with Remove-PSSession to free resources
- Sessions keep connection open until removed
Full Transcript
This lesson shows how to manage PowerShell sessions called PSSessions. First, you create a session using New-PSSession to connect to a computer. Then you run commands inside that session with Invoke-Command. You can check the session's state anytime. When done, you remove the session with Remove-PSSession to close the connection and free resources. The execution table traces these steps showing session creation, command execution, removal, and final state. Variables track the session object state changes. Key moments clarify why removing sessions is important and what happens if you don't. The quiz tests understanding of session states and lifecycle. This helps beginners see how sessions open, work, and close step-by-step.

Practice

(1/5)
1. What is the primary purpose of a PSSession in PowerShell?
easy
A. To store variables locally on your computer
B. To create a persistent connection to a remote computer for running commands
C. To display graphical user interfaces
D. To compile PowerShell scripts into executables

Solution

  1. Step 1: Understand what PSSession does

    A PSSession creates a persistent connection to a remote computer, allowing you to run commands there without reconnecting each time.
  2. Step 2: Compare options to this definition

    Only To create a persistent connection to a remote computer for running commands describes this purpose. Other options describe unrelated tasks.
  3. Final Answer:

    To create a persistent connection to a remote computer for running commands -> Option B
  4. Quick Check:

    PSSession = persistent remote connection [OK]
Hint: PSSession = persistent remote connection [OK]
Common Mistakes:
  • Confusing PSSession with local variable storage
  • Thinking PSSession creates GUIs
  • Assuming PSSession compiles scripts
2. Which of the following is the correct syntax to create a new PSSession to a computer named 'Server01'?
easy
A. Get-PSSession -ComputerName Server01
B. Invoke-Command -ComputerName Server01
C. New-PSSession -ComputerName Server01
D. Remove-PSSession -ComputerName Server01

Solution

  1. Step 1: Identify the cmdlet to create a session

    The cmdlet to create a new session is New-PSSession.
  2. Step 2: Check the syntax for specifying the remote computer

    The parameter -ComputerName followed by the computer's name is correct for New-PSSession.
  3. Final Answer:

    New-PSSession -ComputerName Server01 -> Option C
  4. Quick Check:

    Create session = New-PSSession [OK]
Hint: New-PSSession creates sessions; use -ComputerName for target [OK]
Common Mistakes:
  • Using Invoke-Command instead of New-PSSession to create session
  • Using Remove-PSSession to create session
  • Confusing Get-PSSession with creation
3. What will be the output of this PowerShell code?
 $session = New-PSSession -ComputerName localhost
Invoke-Command -Session $session -ScriptBlock { Get-Process | Select-Object -First 1 }
Remove-PSSession -Session $session 
medium
A. Displays the first process running on the local computer
B. Creates a session but does not display any output
C. Throws an error because Remove-PSSession is called too early
D. Displays all processes running on the local computer

Solution

  1. Step 1: Understand the commands

    The code creates a session to localhost, runs a command to get the first process, then removes the session.
  2. Step 2: Analyze the Invoke-Command output

    The Invoke-Command runs Get-Process | Select-Object -First 1 remotely, so it outputs the first process object.
  3. Final Answer:

    Displays the first process running on the local computer -> Option A
  4. Quick Check:

    Invoke-Command outputs first process [OK]
Hint: Invoke-Command outputs scriptblock result before Remove-PSSession [OK]
Common Mistakes:
  • Thinking Remove-PSSession stops output
  • Assuming no output from Invoke-Command
  • Confusing output with all processes
4. You run this script:
 $session = New-PSSession -ComputerName Server01
Invoke-Command -Session $session -ScriptBlock { Get-Date }
Remove-PSSession -Session 

But it throws an error: "Remove-PSSession : Cannot bind argument to parameter 'Session' because it is null." What is the problem?
medium
A. Invoke-Command syntax is incorrect
B. New-PSSession failed to create a session
C. Get-Date cannot run inside a PSSession
D. Remove-PSSession is missing the -Session parameter with the session variable

Solution

  1. Step 1: Identify the error cause

    The error says Remove-PSSession has a null argument for -Session, meaning it was called without specifying which session to remove.
  2. Step 2: Check the Remove-PSSession command usage

    The script calls Remove-PSSession -Session without the $session value, so PowerShell doesn't know which session to close.
  3. Final Answer:

    Remove-PSSession is missing the -Session parameter with the session variable -> Option D
  4. Quick Check:

    Remove-PSSession needs -Session argument [OK]
Hint: Always specify -Session when removing sessions [OK]
Common Mistakes:
  • Forgetting to pass the session variable to Remove-PSSession
  • Assuming Remove-PSSession closes all sessions by default
  • Blaming Invoke-Command or New-PSSession incorrectly
5. You want to run a command on multiple remote computers and keep the sessions open for later use. Which approach correctly creates sessions for 'Server01' and 'Server02' and stores them for reuse?
hard
A. $sessions = New-PSSession -ComputerName Server01 $sessions += New-PSSession -ComputerName Server02 Invoke-Command -Session $sessions -ScriptBlock { hostname }
B. $sessions = New-PSSession -ComputerName Server01, Server02 Invoke-Command -ComputerName Server01, Server02 -ScriptBlock { hostname }
C. Invoke-Command -ComputerName Server01, Server02 -ScriptBlock { hostname } $sessions = $null
D. $sessions = New-PSSession -ComputerName Server01 Invoke-Command -Session $sessions -ScriptBlock { hostname } Remove-PSSession -Session $sessions

Solution

  1. Step 1: Recall how to create persistent sessions for multiple computers

    New-PSSession can take multiple ComputerName values or create separately and collect into an array with +=. Invoke-Command must use -Session $sessions (array) to run on persistent sessions.
  2. Step 2: Evaluate each option

    A creates sessions but uses -ComputerName on Invoke-Command, creating temporary connections instead of using persistent ones. B builds the array explicitly and uses -Session. C uses temporary only. D removes sessions.
  3. Final Answer:

    $sessions = New-PSSession -ComputerName Server01 $sessions += New-PSSession -ComputerName Server02 Invoke-Command -Session $sessions -ScriptBlock { hostname } -> Option A
  4. Quick Check:

    Build session array with +=, use -Session [OK]
Hint: Create and store sessions in a variable array for reuse [OK]
Common Mistakes:
  • Removing sessions immediately before reuse
  • Not storing sessions in a variable
  • Using Invoke-Command without sessions for reuse