ToB企服应用市场:ToB评测及商务社交产业平台

标题: 使用 Power Shell 修改 Hyper-V 虚拟机 UUID 的解决方案 [打印本页]

作者: 瑞星    时间: 2024-2-23 04:06
标题: 使用 Power Shell 修改 Hyper-V 虚拟机 UUID 的解决方案
前言

在研究了一下午 k8s 文档的时候,正准备开干,万万没想到一个 uuid 的问题卡了我几个小时,一直想在系统中解决,没想到最后在外部使用PowerSheel解决了,分享记录一二
问题描述与尝试解决

需要确保每个节点上 MAC 地址和 product_uuid 的唯一性
可以使用命令 ip link 或 ifconfig -a 来获取网络接口的 MAC 地址
可以使用 sudo cat /sys/class/dmi/id/product_uuid命令对 product_uuid 校验

使用 PowerShell 查询虚拟机UUID

  1. Get-VM "devops04" | % { (gwmi -Namespace root\virtualization\v2 -Class msvm_computersystem -Filter ('ElementName="{0}"' -f $_.Name)).GetRelated('msvm_virtualsystemsettingdata') | select BIOSGUID }
复制代码

  1. (Get-WmiObject -Namespace root\virtualization\v2 -Class Msvm_VirtualSystemSettingData -Filter "ElementName='devops04'").BIOSGUID
复制代码
关闭虚拟机!

重要,尝试了两次,确认需要在虚拟机关闭的时候执行才有用
执行命令

  1. #这里假设虚拟机的VMname是devops01,自行替换即可
  2. $VMname="devops04"
  3. $vmx = Get-WmiObject -Namespace root\virtualization\v2 -Class msvm_virtualsystemsettingdata
  4. #每次操作选择一台虚拟机
  5. $CurrentSettingsData = $vmx | Where-Object { $_.ElementName -eq $VMname }
  6. #检查一下老的GUID
  7. $CurrentSettingsData.BIOSGUID
  8. #生成新GUID
  9. $GUID = [System.Guid]::NewGuid()
  10. #重新写入GUID,注意要带{},这是非常重要的细节
  11. $CurrentSettingsData.BIOSGUID = "{" + $GUID.Guid.ToUpper() + "}"
  12. #生成一个ModifySystemSettings的空对象
  13. $VMMS = Get-WmiObject -Namespace root\virtualization\v2 -Class msvm_virtualsystemmanagementservice
  14. $ModifySystemSettingsParams = $VMMS.GetMethodParameters('ModifySystemSettings')
  15. #配置这个属性,需要特殊的转换方式
  16. $ModifySystemSettingsParams.SystemSettings = $CurrentSettingsData.GetText([System.Management.TextFormat]::CimDtd20)
  17. #写入
  18. $VMMS.InvokeMethod('ModifySystemSettings', $ModifySystemSettingsParams, $null)
复制代码
结语

习惯了 ChatGPT 的便捷,发现 Google 的次数都变少了,关键词一开始没有找准走了一点弯路,找资料的过程发现挺多人遇到这个问题,遂再次记录。
参考文档


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4