enter-pssession invoke-command, when to use?

21,819

Enter-PSSession - Since this is an interactive session you type what you want at the console and immediately see the results in the console.(just like CMD). If its just 2 servers then you can use enter-pssession but it is always going to be serial meaning you do something on one server then you move onto another.

New-PSSession - creates a persistent connection to a remote server and is generally used when you have a series of commands to run on multiple servers at various stages of a larger script\workflow.

Example:

$s1, $s2 = New-PSSession -ComputerName Server1,Server2
Get-Service -Name Bits                #on localhost
Invoke-Command -session $s1 -scriptblock { # remote commands here }
Get-Process                           #on localhost
Invoke-Command -session $s1 -scriptblock { # remote commands here }
Remove-pSSession -session $s1 #on localhost

if you just want to stop\start a couple of services then you can do this without opening a persistent connection.

Example:

Invoke-Command -ComputerName (Get-Content Machines.txt) -ScriptBlock {Stop-Service -Name Bits}
Share:
21,819
Ninja
Author by

Ninja

Updated on January 06, 2020

Comments

  • Ninja
    Ninja over 4 years

    I am writing a script to stop and start services in two remote servers. Here's my question,

    in my script I did new-pssession and used invoke-command to stop and start services.

    Do I need to use enter-pssession?

    Updates: Here's what my script needs to do.

    on server1, I need to stop and start two services. on server2, I need to stop and start just one service.

    # foreach for server 1 since I need to stop and start two services. created a session for server 1
    foreach($service in $services){
    
        $session = New-PSSession -ComputerName $serverName -Credential $cred
        Invoke-Command -Session $session -ScriptBlock {param($service) Stop-Service -Name $service} -ArgumentList $service
        remove-pssession -session $session
    
    }
    
    # created a session for server 2. I need to stop and start just one service in server 2
    $session = New-PSSession -ComputerName $serverName -Credential $cred
    Invoke-Command -Session $session -ScriptBlock {param($service) Stop-Service -Name $service} -ArgumentList $service
    remove-pssession -session $session
    

    is this the right way to do it?