Sending a script file into the VM using PowerShell Direct
Okay, PowerShell Direct is cool - but sometimes you just want to copy a script (or set of scripts) into the virtual machine and run them there. How can you do that? Fortunately - PowerShell Direct comes to the rescue. Here is a simple snippet that will send any text file from the host to the virtual machine over PowerShell Direct:
# Pass in script file - array trick from https://powershell.com/cs/forums/t/4169.aspx
function copyTextFileIntoVM([string]$VMName, $cred, [string]$sourceFilePath, [string]$destinationFilePath){
$content = Get-Content $sourceFilePath
icm -VMName $VMName -Credential $cred {param($Script, $file)
$script | set-content $file} -ArgumentList (,$content), $destinationFilePath}
Once this is done - you can then use PowerShell Direct to kick off any processes you want.
Cheers,
Ben
Comments
Anonymous
July 29, 2015
The Using scope modifier will make your code a little simpler: icm -VMName $VMName -Credential $cred { $using:content | set-content $using:destinationFilePath }Anonymous
July 29, 2015
Ths is allright for small files but it would be great if you supported making psSessions with powershell direct so we could use the -toSession /-fromSession flags for copy item :)Anonymous
July 30, 2015
Wow, this is cool! I know Linux is not supported but think about Powershell Direct and a provider/converter which takes commands from invoke-command and spits them out in a SSH session on the Linux guest...