Pages - Menu

2018年8月31日 星期五

HyperV 主體機複製檔案(資料夾)給客體 Use Copy-VMFile

今天碰到個奇耙的要求,說軟體無法安裝是因為要在獨立網路上安裝。

好…你這樣說我照這樣做。

hyperV的複寫完成,網路全部封掉。

但重點來了,我還有資料夾要複製過去怎麼複製?

實體機還能插usb,但虛擬機阿…..

以前VM能夠直接在實體機上用複製貼上的方式將檔案丟過去,

所幸HyperV也有類似的功能,叫做客體服務。


開啟方式,

虛擬機->設定->整合服務->客體服務(打勾)

實體機->HyperV設定->加強的工作階段模式原則->允許加強工作階段模式(打勾)

參考 ITHome網管人

重開機後到虛擬機的服務裡面 看 『Hyper-V客體服務介面』 的服務是不是為已啟動。

網管人裡面的那招檔案總管的複製貼上,我一直都沒試成功

(剛剛看到才發現是不是只能丟單檔?)。最好只好用指令的方式將資料夾丟過去。

copy-VMFile   -Name   "虛擬機 "   -SourcePath   來源路徑 
  -DestinationPath   來源路徑 -FileSource Host

copy-VMFile 指令參考 安逸悠嫻學習筆記

但這只有單檔…整個資料夾檔案那麼多一個一個打真的會起校。

最後發現 GitHubGist 有人丟了一篇 複製整個資料夾的。

小改一下後,收工。



function copy-foldertovirtualmachine {
param(
[parameter (mandatory = $true, valuefrompipeline = $true)]
[string]$VMName,
[string]$Folder = 'E:\M030_service information manager-CPS11'
)
     foreach ($File in (Get-ChildItem $Folder -recurse | ? Mode -ne 'd-----'))
     {
         #$File2 = $File.Replace("E:\","C:\123\")
         Copy-VMFile -VM (Get-VM $VMName) -SourcePath $File.fullname -DestinationPath $File.fullname.Replace("E:\","C:\123\") -FileSource Host -CreateFullPath -Force
     }
}

copy-foldertovirtualmachine



使用方式,開啟power shell ISE

把指令放上去,後直接執行,會要求你輸入 『虛擬機的名稱』

要複製的資料夾位置 請更改  $Folder  後面的位置

  #$File2 = $File.Replace("E:\","C:\123\")

這一段是錯的,所以mark掉,因為$File已經變成路徑的物件,

所以不能取代字串,執行會發生錯誤。

但虛擬機上面沒有E槽怎辦,DestinationPath的後面 指的是 目標的路徑,

加上.fullname會變成字串,

此時就可以用replace 將位置取代。

沒有留言:

張貼留言