PowerShell Direct – Running PowerShell inside a virtual machine from the Hyper-V host

Server Man

Well-Known Member
May 17, 2015
At Ignite we announced PowerShell Direct, and briefly demoed it’s capabilities in the “What’s New in Hyper-V” session. This is a follow up so you can get started using PowerShell Direct in your own environment.

What is PowerShell Direct?


It is a new way of running PowerShell commands inside a virtual machine from the host operating system easily and reliably.

There are no network/firewall requirements or configurations.
It works regardless of Remote Management configuration.
You still need guest credentials.


For people who want to try it out immediately, go ahead and (as Administrator) run either of these commands on a Windows10 Hyper-V host where VMName refers to a VM running Windows10:

Enter-PSSession -VMName VMName
Invoke-Command -VMName VMName -ScriptBlock { commands }


*** Note: This only works from Windows 10/Windows Server Technical Preview Hosts to Windows 10/Windows Server Technical Preview guests.
Please let me know what guest/host operating system combinations you’d like to see and why.


Here is why I think this is really cool


Honestly, because it’s incredibly convenient. I’ve been using PowerShell Direct for everything from scripted virtual machine configuration and deployment where each virtual machine has different roles and requirements through checking the state of my virtual machine (aka, has the guest operating system booted yet?).

Today, Hyper-V administrators rely on two categories of tools for connecting to a virtual machine on their Hyper-V host:


  • Remote management tools such as PowerShell or Remote Desktop


  • Hyper-V Virtual Machine Connection (VM Connect)

Both of these technologies work well but have tradeoffs as the Hyper-V deployment grows. VMConnect is reliable but hard to automate while remote PowerShell is a brilliant automation and scripting tool but can be difficult to maintain/setup in some cases. I sometimes hear customers lament domain security policies, firewall configurations, or a lack of shared network preventing the Hyper-V host from communicating with the virtual machines running on it.
I’m also sure we’ve all had that moment where you're using PowerShell to modify a network setting and accidently make it so you can no longer connect to the virtual machine in the process…I know I have.


PowerShell Direct provides the scripting and automation experience available with PowerShell but with the zero configuration experience you get through VMConnect. Because PowerShell Direct runs between the host and virtual machine, there is no need for a network connection (shared or otherwise) and no need to enable remote management. Like VMConnect, you do need guest credentials to connect to the virtual machine.

With that said, there are some PowerShell remote management tools not available yet in PowerShell Direct today. We’re working on it, this is the first step. If you expected something to work and it didn’t, leave a comment.

Getting started and a few common issues


I decided to make a picture of the most basic usage imaginable.



.5 – Dependencies
You must be connected to a Windows 10/Windows Server Technical Preview Host with Windows 10/Windows Server Technical Preview virtual machines.
You need to be running as Hyper-V Administrator.
You need user credentials in the virtual machine.


The virtual machine you want to connect to must be running locally (on this host) and booted.
I use Get-VM as a sanity check.


1 – Enter-PSSession -VMName works. So does Enter-PSSession –VMGuid
Enter-PSSession -VMName VMName
Notice this is an interactive session. I am running PowerShell commands on the virtual machine directly (same behavior as Enter-PSSession usually has).


2 – Invoke-Command -VMName works. So does Invoke-Command -VMGuid
Invoke-Command -VMName VMName -ScriptBlock { commands }
Notice this locally interprets the command(s) or script you pass in then performs those actions on the virtual machine (same behavior as Invoke-Command usually has).


It's that easy.



I look forward to seeing what you all build with this tool! Happy scripting.


Cheers,
Sarah



770ceee70c4a9dfb3b28e53348b57a93._.gif


Continue reading...
 
Back
Top Bottom