$keyword = 'Off'
$vms = Get-VM | Where-Object { $_.Name -like "*$keyword*" }
if (-not $vms) {
Write-Host "找不到 VM 名稱包含 '$keyword' 的虛擬機。" -ForegroundColor Yellow
return
}
$vmResults = @()
$grandTotalBytes = 0
foreach ($vm in $vms) {
$hdds = Get-VMHardDiskDrive -VMName $vm.Name -ErrorAction SilentlyContinue
if (-not $hdds) {
$vmResults += [pscustomobject]@{
VMName = $vm.Name
VhdCount = 0
TotalSizeGB = 0.0
Detail = "<無掛載虛擬硬碟>"
}
continue
}
無掛載虛擬硬碟>
2026-03-06
Get VM's Virtual Hard Disk Size with Keyword
2024-11-18
將 Hyper-V VM 的 GUID 寫到 Notes 裡方便查詢
將 Hyper-V VM 的 GUID 寫到 Notes 裡方便查詢:
$VMs = (Get-VM | Select-Object VMName,VMId);
foreach ($VM in $VMs) {
Set-VM -Name $VM.VMName -Notes ('GUID: ' + $VM.VMId)
};
2020-12-01
在不支援 Hyper-V 虛擬化技術的機器上使用指令安裝 Hyper-V Role
只不過想用個 Resize-VHD 指令
被罵說沒有 Hyper-V Role,但這台機器 (Azure VM) 又不支援巢狀虛擬化 (懶得去設定)
只好用指令裝起來,但要記得裝好重開機之前用第二行指令設定開機時不要跑 Hypervisor
不然應該會壞掉
dism /online /enable-feature /featurename:Microsoft-Hyper-V
bcdedit /set hypervisorlaunchtype off
2020-11-03
Hp Server Windows Server CPU Loading 0%
遇到了莫名其妙的問題來記錄一下
因為 VM 效能突然變得超差,幾乎無反應無法運作
檢查發現 Hyper-V Host 出現 CPU Loading 0% 的情況
這台是 HP Server 運作 Windows Server
2018-12-17
取得 Hyper-V Host 上 VM 的 CPU、Memory、HDD Size 等基本資訊
取得 Hyper-V Host 上 VM 的 CPU、Memory、HDD Size 等基本資訊
$VMs = Get-VM
$Result = "Hyper-V Host,VM Name,CPU Count,Mem Min (MB),Mem Max (MB),HDD Path,HDD FileSize (MB),HDD Size (MB)`r`n";
foreach ($VM in $VMs) {
$CPU = $VM | Get-VMProcessor
$Mem = $VM | Get-VMMemory
$HDDs = $VM | Select-Object VMId | Get-VHD | select path,filesize,size
foreach ($HDD in $HDDs) {
$Result += $env:computername+","+$VM.Name+","+$CPU.Count+","+$Mem.Minimum/1024/1024+","+$Mem.Maximum/1024/1024+","+$HDD.path+","+$HDD.filesize/1024/1024+","+$HDD.size/1024/1024+"`r`n";
};
};
$Result | Out-File -filepath "$env:computername VMs.txt"
$VMs = Get-VM
$Result = "Hyper-V Host,VM Name,CPU Count,Mem Min (MB),Mem Max (MB),HDD Path,HDD FileSize (MB),HDD Size (MB)`r`n";
foreach ($VM in $VMs) {
$CPU = $VM | Get-VMProcessor
$Mem = $VM | Get-VMMemory
$HDDs = $VM | Select-Object VMId | Get-VHD | select path,filesize,size
foreach ($HDD in $HDDs) {
$Result += $env:computername+","+$VM.Name+","+$CPU.Count+","+$Mem.Minimum/1024/1024+","+$Mem.Maximum/1024/1024+","+$HDD.path+","+$HDD.filesize/1024/1024+","+$HDD.size/1024/1024+"`r`n";
};
};
$Result | Out-File -filepath "$env:computername VMs.txt"
2018-03-30
How to Kill a Hanging Hyper-V VM
$VMName = Read-Host "Enter VM Name"
$VM = $(Get-VM | where {$_.Name -eq "test"} | select-object -ExpandProperty VMId).Guid
if ($VM.Count -ne 1) {
write-host "Not Found"
} else {
$ProcessId = $(Get-WmiObject win32_process -Filter "name like '%vmwp%'" | where {$_.CommandLine -like "*$($VM)*"} | select ProcessId).ProcessId
$ForceKill = Read-Host "Found ProcessID: $ProcessId, Force Kill? (Y/N)"
if ($ForceKill -eq "y" -or $ForceKill -eq "Y") {
Stop-Process $ProcessId -Force
}
}
2018-02-23
各種版本的 Hyper-V Integration Services KB List
Hyper-V Integration Services: List of Build Numbers
https://social.technet.microsoft.com/wiki/contents/articles/33796.hyper-v-integration-services-list-of-build-numbers.aspx
Get KB Number and Search to Download here:
http://www.catalog.update.microsoft.com
https://social.technet.microsoft.com/wiki/contents/articles/33796.hyper-v-integration-services-list-of-build-numbers.aspx
Get KB Number and Search to Download here:
http://www.catalog.update.microsoft.com
2017-12-06
VMWare .vmdk Convert to .vhd / .vhdx
因需要將 VMWare 的 VM 轉到 Hyper-V
祭出 MVMC 3.0 (Microsoft Virtual Machine Converter 3.0)
但因為一些原因只能從 DataStore 直接 Download .vmdk 出來, 不能讓他關機進行 Convert
而直接 Download 下來的 .vmdk 沒有簡單的小程式能直接轉檔
原本微軟有提供一個 Command Line 工具叫 vmdc.exe, 但現在也已經 404 了
查找了一陣子之後發現原來裝好 MVMC 後只要 Import 他的 Module 就能用 PowerShell 來處理了
祭出 MVMC 3.0 (Microsoft Virtual Machine Converter 3.0)
但因為一些原因只能從 DataStore 直接 Download .vmdk 出來, 不能讓他關機進行 Convert
而直接 Download 下來的 .vmdk 沒有簡單的小程式能直接轉檔
原本微軟有提供一個 Command Line 工具叫 vmdc.exe, 但現在也已經 404 了
查找了一陣子之後發現原來裝好 MVMC 後只要 Import 他的 Module 就能用 PowerShell 來處理了
Compact VHD / VHDx
有時候你會發現, Dynamic 的 VHD / VHDx 怎麼 Compact 都還是一樣大
一個 100GB 的 VHD 裡面明明只有 20GB 卻無法縮小
在許多年前我就有發現這個問題並自己摸索找到方法解決
只要進行以下步驟就可以縮小了
一個 100GB 的 VHD 裡面明明只有 20GB 卻無法縮小
在許多年前我就有發現這個問題並自己摸索找到方法解決
只要進行以下步驟就可以縮小了
- 以唯讀模式將 vhd mount 起來
- Compact
- unmount
- 再 Compact 一次
2017-07-18
Windows 2000 實體機轉 Hyper-V 的虛擬化作業
有一台老掉牙的 Windows 2000 Server
由於上面的系統已經沒有人會維護了, 而該系統能轉的功能也都已經轉到別的系統上但仍有一些資料無法轉出, 需要在上面查詢, 故不能下線也不能壞掉
但是也無法移機, 因為那個系統早已沒有簽維護, 廠商也早已不支援那古代的版本
所以唯一避免他一步一步走上硬體損壞的絕路之前能做的僅有虛擬化一途
由於 Windows 2000 不支援 Volume Shadow Copy, 所以不能線上用 Disk2vhd 來轉
如果從光碟開機進一般的 WinPE 等工具系統, 也因為 RAID Card Driver 的關係沒辦法讀到磁碟
在這困難重重的情況下還好仍有一線生機
雖然自己常用的是 Hyper-V, 但對 VMWare 也是不排斥的
此時祭出 VMware vCenter Converter Standalone 來進行線上移轉是再適合不過了
畢竟在那個年代, VMWare 絕對是虛擬化技術的王者
果然一切順利地轉到 VMWare vSphere 免費板上面去一點問題也沒有
為了利用便宜的即時移轉、複寫等功能, 我們的虛擬化平台 95% 都是 Hyper-V
所以接下來的挑戰就是再從 VMWare 轉到 Hyper-V
在這裡吃足了苦頭, 以下是實戰說明:
2017-01-20
Nested Virtualization on Windows (Hyper-V) Server 2016
Windows Server 2016 的 Hyper-V 開始支援 Nested Virtualization (巢狀虛擬化)
據說以前不提供這個功能是因為微軟認為不需要
但 Windows Server 2016 要開始支援 Container, 所以不得不提供巢狀虛擬化的功能
要使用巢狀虛擬化, 必須滿足/留意以下條件:
據說以前不提供這個功能是因為微軟認為不需要
但 Windows Server 2016 要開始支援 Container, 所以不得不提供巢狀虛擬化的功能
要使用巢狀虛擬化, 必須滿足/留意以下條件:
- 實體 Virtualization Host 的 CPU 必須支援 VT-x 、EPT
- Guest Hypervisor VM 必須啟用 vCPU Virtualization Extensions
- Guest Hypervisor VM 提供給 Guest VM 的網卡必須啟用 MAC Address Spoofing
- Guest Hypervisor VM 必須為 Generational 2
- Guest Hypervisor VM Configuration Version 必須為 8.0
- Guest Hypervisor VM 不可使用 Dynamic Memory
- Guest Hypervisor VM 無法進行 Runtime Memory Resize
2016-11-25
Hyper-V vSwitch VLAN ID 與 Cisco Switch
Hyper-V vSwitch VLAN ID 在一般無網管功能的 Switch 上直接就能用
不同 Hyper-V Host 之間只要 VLAN ID 相同就能通, 沒有什麼問題
但若是使用 Cisco 這類網管交換器就頭大了, 接上去完全不通
因為自己沒學過 CCNA, 也不懂 Cisco Switch
經過同事的研究與朋友經驗分享後
經過同事的研究與朋友經驗分享後
得知要照以下這樣的設定方式才會通
2016-11-18
Microsoft VDI User Profile Disk ACL Fix
User Profile Disk 如果有需要更換存放的 File Server
將檔案以複製的方式遷移後, 需要修改檔案的權限
除了基礎結構中 Share / NTFS Permission 一定要給的 Computer Account 等以外
還必須給予該 User Profile Disk 所屬 User Account Full Control 的權限
這個權限在 User 第一次正常登入時會自動設定
但因為檔案複製的關係, 所以這個權限會遺失, 需要手動加進去
如果每個檔案要一個一個去加權限就太累了, 萬一 User Profile Disk 有數百個不就昏倒
因此以 Power Shell Script 代勞來處理這件事情
以下為程式碼, 依需求輸入要處理的 User Profile Disk Path ($UPDPath)
將檔案以複製的方式遷移後, 需要修改檔案的權限
除了基礎結構中 Share / NTFS Permission 一定要給的 Computer Account 等以外
還必須給予該 User Profile Disk 所屬 User Account Full Control 的權限
這個權限在 User 第一次正常登入時會自動設定
但因為檔案複製的關係, 所以這個權限會遺失, 需要手動加進去
如果每個檔案要一個一個去加權限就太累了, 萬一 User Profile Disk 有數百個不就昏倒
因此以 Power Shell Script 代勞來處理這件事情
以下為程式碼, 依需求輸入要處理的 User Profile Disk Path ($UPDPath)
2015-10-02
Hyper-V Ethernet Resource Pool 乙太網路資源集區設定
- 虛擬機器連接到虛擬交換器才能取得網路連線
- 虛擬交換器是在 Hyper-V 主機上建立
- 當虛擬機器移轉到另一台 Hyper-V 主機時會發生問題
- 乙太網路資源集區允許虛擬機器連接到集區中的一個或多個虛擬交換器
- 虛擬交換器預設會放在原始 (Primordial) 的集區
- 使用 PowerShell 指令建立
- 設定虛擬機器的虛擬網路卡連接到集區
- 當虛擬機器移轉後允許自動重新連線
以上文字來源:
曹祖聖 虛擬化基礎 – Hyper-V 與 System Center 2012 R2 Virtual Machine Manager
https://www.microsoftvirtualacademy.com/zh-tw/training-courses/-system-center-2012-r2-virtual-machine-manager-vmm--12525?l=C7pRcjYPB_6700115888
以下為相關設定圖片與相關詳細指令
*. 想要做網路備援的話, 這個機制並不能取代 NIC Teaming
2014-09-22
Hyper-V VM Backup 方式, Replica 的替代方案 (自行撰寫 PowerShell 程式)
環境:
可達到的目標:
1. 可進行 VM 線上差異化備份, 不用每次備份都 Export, 佔用大量 I/O
2. 可以在允許 Down Time 較久的前提下手動做不停機 Migration
與 Export 後再 Import 是一樣的道理, 只是使用的是差異化磁碟
歷史:
2014.09.24 加入備份檔案檢查機制
2014.10.25 1. 程式開始時先檢查備份路徑如果不能存取就結束
(先嘗試建立, 不能建立就是失敗, 目標如果是網路磁碟機, 可能連線失敗)
2. 程式開始時先檢查指定的 VM 如果不存在就結束
1. 唯一一台 Hyper-V, 無法做複寫或叢集
2. 只有一座 Hyper-V 叢集, 沒有其他 Hyper-V 主機
描述:
上述狀況都無法進行 Hyper-V 複寫來作為備份策略
如果用 Export-VM 的話, 若 VM 的 vhd 很大則會佔用大量 Disk I/O
解決方式:
自行撰寫 PowerShell 程式, 利用 CheckPoint 功能土砲差異化備份 (與 Replica 雷同)
預設條件:
VM 本身除了備份 Powershell 所建立的 CheckPoint 外不可以有其他 CheckPoint
註: Production 環境的 VM 本來就不該有 CheckPoint, 會影響運作效率
程式運作邏輯:
1. 建立 CheckPoint 使 VM 原始 vhd 停止寫入, 新的變更都會寫在 CheckPoint 所建立的差異磁碟 avhd
且該 CheckPoint 會將當時的記憶體寫入成檔案, 等於 VM Pause
2. 將上述 CheckPoint 資料複製出來作為備份, 未來就還原該 CheckPoint, 達到備份還原目的
可達到的目標:
1. 可進行 VM 線上差異化備份, 不用每次備份都 Export, 佔用大量 I/O
2. 可以在允許 Down Time 較久的前提下手動做不停機 Migration
與 Export 後再 Import 是一樣的道理, 只是使用的是差異化磁碟
歷史:
2014.09.24 加入備份檔案檢查機制
2014.10.25 1. 程式開始時先檢查備份路徑如果不能存取就結束
(先嘗試建立, 不能建立就是失敗, 目標如果是網路磁碟機, 可能連線失敗)
2. 程式開始時先檢查指定的 VM 如果不存在就結束
訂閱:
文章 (Atom)
