Using PowerShell for Remote Server Administration in Windows 10 RTM without the RSAT tools

You’ve updated to the RTM version of Windows 10 only to learn that the remote server administration tools aren’t available as of yet:


Let’s say for example the Active Directory PowerShell module is something that you use on a daily basis and it’s necessary to perform your day to day responsibilities. Well, you’re out of luck because the RSAT tools aren’t available yet, but before you consider using RDP or the GUI to perform your duties, let’s take a look at a viable solution in PowerShell.

Create a PSSession to one of your domain controllers, specifying alternate credentials if necessary:


If the specified domain controller is running PowerShell version 2, you’ll need to import the Active Directory module, but if it’s running PowerShell version 3 or higher, you can skip this step:


Import the PSSession and specify the Active Directory module:


What we’ve done is to use implicit remoting to create shortcuts of the Active Directory cmdlets on the local computer from the domain controller that was previously specified. When the active directory cmdlets are executed, they run on the domain controller through the PSSession that was created but it will seem as if they exist locally. The problem though is this has to be recreated each time PowerShell is restarted. Or does it? Wouldn’t it be awesome to be able to make these shortcuts to the Active Directory cmdlets persistent so they exist each time PowerShell is opened on your local computer?

All that’s required to accomplish this is a pinch of pixie dust that can be retrieved from a Leprechaun at the end of the rainbow. Although it does seem like magic, all we really need to do to accomplish this is to simply use the Export-PSSession cmdlet to save the module:


I’ve now closed my PowerShell console and reopened it. Now when I try to use one of the cmdlets that’s part of the Active Directory module, the PSSession is automatically recreated without having to jump through the hoops of setting up implicit remoting again:


When the RSAT tools become available, I’ll remove the local Active Directory module that was created with the Export-PSSession cmdlet, but until then, this works like a charm.

Note: PowerShell remoting must be enabled on the domain controller that you’re attempting to use with implicit remoting as shown in this blog article, but if it’s running Windows Server 2012 or higher, PowerShell remoting is already enabled by default.



  1. chris king

    Awesome, finally a nice article I can post to answer all the whiners out there. 🙂 lol

    Really, I want the RSAT tools as much as anyone but if someone ‘really’ needs them, they are fully capable of working around the lack of them.

    I remote daily to Office 365 and you don’t see anyone complaining about that, right?

  2. Proxx

    is this possible with the Exchange 2013 CmdLets?

  3. Peter Jurgens

    Without having tried using export-pssession, simply using implicit remoting, I find that I run into issues with deserialization and the cmdlets won’t work well together like piping get-adgroup | get-adgroupmember gives me a type error. Do you encounter similar? Or perhaps it could be due to the fact that my DC is still running v2 PoSh? Another option I haven’t been successful with yet was implicit remoting to another 2012 r2 server that I have with RSAT installed. Last time I tried I encountered issues with delegated credentials. But then I didn’t attempt to resolve that issue yet either… Maybe I have some testing to do and get back…

    • Mike F Robbins

      That does seems to be a problem. I had to manipulate those two cmdlets more than usual when used with implicit remoting:
      Get-ADGroup -Identity GroupName | Select-Object -ExpandProperty DistinguishedName | Get-ADGroupMember

  4. Kevin Pinel

    The issue I’ve had has been around piping. Each, and every, pipe has resulted in the following error:
    The input object cannot be bound to any parameters for the command either because the command does not take pipeline input or the input and its properties do not match any of the parameters that take pipeline input.
    The command, in this case, was a get-aduser -filter {…} | set-aduser
    The get-aduser gets me what I need but piping it to any other command fails
    The same commands work fine on PS4

  5. Lee Gartside

    Awesome. Great article! The script had me up and running using AD with win 10 and Powershell in a couple of minutes.



Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.

%d bloggers like this: