Using PowerShell implicit remoting

Implicit remoting is an excellent way to get access to commands in modules that you don't have installed locally.

A commonly used feature in PowerShell is PowerShell remoting. Using cmdlets like Invoke-Command is commonplace when executing commands on a remote computer. For example, let's say you need to query some Active Directory users but haven't gone through the rigmarole to install Remote Server Administration Tools. You can run Get-AdUser on a domain controller by running Invoke-Command to find the users you're looking for.

It's clear when you run that command that you're running the Get-AdUser cmdlet on the remote computer LABDC. You could say that you're using PowerShell Remoting explicitly. PowerShell, though, has another way to run remote commands through a feature called implicit remoting. Implicit remoting, as the name implies, is a way to invoke remote commands in the background that makes it seem like the commands aren't being invoked remotely at all!

Instead of using the Invoke-Command command to find AD users, you could create a new session, import the necessary modules in that session, and then export the commands available in that session locally. This, in a sense, creates "proxy" commands which can then be run just as they would be if the commands were loaded locally. To do that, I first need to create the session using the New-PSSession cmdlet.

Next, I'll need to be sure that the modules I need are loaded in that remote session. In this case, I need the ActiveDirectory module, so I'll go ahead and import that.

Exporting cmdlets with Export PSSession

Exporting cmdlets with Export PSSession

At this point, I can then export all of the loaded commands in that remote session to my local session using the Export-PSSession cmdlet. Notice that I don't have to export all of the commands in that remote session. Instead, I'm specifying a wildcard search pattern to bring in only those commands that match -AD.

I'm also using the OutputModule parameter here so that I can define what local module these commands will be a part of. This module won't be an actual module, but instead will be a placeholder to contain all of these commands.

At this point, I can run Get-AdUser just as if that command were available on my local computer. When running Get-Command, you can't even tell that I don't have the ActiveDirectory module installed!

When you're done, it's always a good idea to remove your open session using Remove-PSSession.

Once you have the remoting session exported to your local session, the only way you can tell that the commands you're running aren't local is that they may take a few more seconds to run.

Other than that, and the occasional dependency such as a .NET assembly or some other ancillary file the commands may be referencing, implicit remoting is a great way to run commands without installing modules.

3+
avataravatar

Join the 4sysops PowerShell group!

Your question was not answered? Ask in the forum!

2 Comments
  1. Hi Adam!

    I use it sometimes. However, it changes the original output format.

    Do you have a trick for that other than selecting or excluding specific properties?

    0

  2. Robert Hale 2 years ago

    Will have to see if they have added this to power shals for Linux.  Needing to manage my windows stations from my Unix servers.

    0

Leave a reply

Your email address will not be published. Required fields are marked *

*

© 4sysops 2006 - 2020

CONTACT US

Please ask IT administration questions in the forums. Any other messages are welcome.

Sending

Log in with your credentials

or    

Forgot your details?

Create Account