13 Remote control: One-to-one and one-to-many

 

Let’s take a look at the Invoke-Command command. Notice that it has a -ComputerName parameter. Hmmm . . . does that mean it can run commands on other hosts too? After a bit of experimenting, you’ll discover that’s exactly what it does. How many other commands have the ability to connect to remote machines? While there is not a way to obtain a concrete number to answer this question, there are quite a lot.

What we’ve realized is that PowerShell’s creators are a bit lazy—and that’s a good thing. Because they didn’t want to have to code a -HostName parameter for every single cmdlet, they created a shell-wide system called remoting. This system enables you to run any cmdlet on a remote computer. In fact, you can even run commands that exist on the remote computer but that don’t exist on your own computer—meaning you don’t always have to install every administrative cmdlet on your workstation. This remoting system is powerful, and it offers interesting administrative capabilities.

Note

Remoting is a huge, complex technology. We introduce you to it in this chapter and cover usage scenarios that you’ll deal with 80% to 90% of the time. But we can’t cover it all, so in the “Further exploration” section at the end of this chapter, we point you to a must-have resource that covers remoting’s configuration options.

13.1 The idea behind remote PowerShell

13.1.1 Remoting on Windows devices

13.1.2 Remoting on macOS and Linux devices

13.1.3 Cross-platform remoting

13.2 Setting up PSRP over SSH

13.2.1 macOS and Linux

13.2.2 Setting up SSH on Windows

13.3 PSRP over SSH overview

13.4 WinRM overview

13.5 Using Enter-PSSession and Exit-PSSession for one-to-one remoting

13.6 Using Invoke-Command for one-to-many remoting

13.7 Differences between remote and local commands

13.7.1 Deserialized objects

13.8 But wait, there’s more