57 lines
2.3 KiB
PowerShell
57 lines
2.3 KiB
PowerShell
param (
|
|
[string]$share_name = $(throw "-share_name is required."),
|
|
[string]$guest_path = $(throw "-guest_path is required."),
|
|
[string]$guest_ip = $(throw "-guest_ip is required."),
|
|
[string]$username = $(throw "-username is required."),
|
|
[string]$password = $(throw "-password is required."),
|
|
[string]$host_ip = $(throw "-host_ip is required."),
|
|
[string]$host_share_username = $(throw "-host_share_username is required."),
|
|
[string]$host_share_password = $(throw "-host_share_password is required.")
|
|
)
|
|
|
|
# Include the following modules
|
|
$presentDir = Split-Path -parent $PSCommandPath
|
|
$modules = @()
|
|
$modules += $presentDir + "\utils\create_session.ps1"
|
|
$modules += $presentDir + "\utils\write_messages.ps1"
|
|
|
|
forEach ($module in $modules) { . $module }
|
|
|
|
try {
|
|
function Mount-File($share_name, $guest_path, $host_path, $host_share_username, $host_share_password) {
|
|
try {
|
|
# TODO: Check for folder exist.
|
|
# Use net use and prompt for password
|
|
$guest_path = $guest_path.replace("/", "\")
|
|
# Map a network drive to the guest machine
|
|
$result = net use * $host_path /user:$host_share_username $host_share_password /persistent:yes
|
|
$mapped_drive = (($result -match "\w:") -split (" "))[1]
|
|
Write-Host cmd /c mklink /d $guest_path $mapped_drive
|
|
# If a folder exist remove it.
|
|
if (Test-Path $guest_path) {
|
|
$junction = Get-Item $guest_path
|
|
$junction.Delete()
|
|
}
|
|
cmd /c mklink /d $guest_path $mapped_drive
|
|
} catch {
|
|
return $_
|
|
}
|
|
}
|
|
|
|
$response = Create-Remote-Session $guest_ip $username $password
|
|
|
|
if (!$response["session"] -and $response["error"]) {
|
|
Write-Error-Message $response["error"]
|
|
return
|
|
}
|
|
$host_path = "\\$host_ip\$share_name"
|
|
$host_share_username = "$host_ip\$host_share_username"
|
|
$result = Invoke-Command -Session $response["session"] -ScriptBlock ${function:Mount-File} -ArgumentList $share_name, $guest_path, $host_path, $host_share_username, $host_share_password -ErrorAction "stop"
|
|
Remove-PSSession -Id $response["session"].Id
|
|
Write-Error-Message $result
|
|
}
|
|
catch {
|
|
Write-Error-Message "Failed to mount files VM $_"
|
|
return
|
|
}
|