如何使用PowerShell从主机设置vm计算机的名称?

时间:2013-12-09 04:45:38

标签: powershell hyper-v

我发现了一篇关于Rename the guest OS to match the virtual machine name on Hyper-V的文章,要重命名计算机名称以匹配vm的名称。问题是这个脚本必须附加在虚拟机上,如果我想改变它,那将很难。

是否可以从主机重命名vm计算机的名称?

5 个答案:

答案 0 :(得分:2)

尝试一下,你可以在主机上运行它。目前它只打印旧的和新的vm名称的消息。我在代码中留下了两个选项(注释掉)来重命名机器。请记住,计算机应该是可解析的,最好是域的一部分(您可能需要从vm名称中删除域扩展名)。

Get-WmiObject -Namespace root\virtualization\v2 -Class Msvm_ComputerSystem | Where-Object {$_.ElementName -ne $env:COMPUTERNAME} | ForEach-Object { 

    $newName = $_.ElementName

    $_.GetRelated('Msvm_KvpExchangeComponent').GuestIntrinsicExchangeItems | ForEach-Object {  

        if($_ -as [xml])
        {    
            $GuestExchangeItemXml = ([XML]$_).SelectSingleNode("/INSTANCE/PROPERTY[@NAME='Name']/VALUE[child::text()='FullyQualifiedDomainName']") 

            if ($GuestExchangeItemXml -ne $null) 
            {
                $vmName = $GuestExchangeItemXml.SelectSingleNode("/INSTANCE/PROPERTY[@NAME='Data']/VALUE/child::text()").Value -replace '\W','_'
                $vmName = $vmName.Substring(0,[System.Math]::Min(15,$vmName.Length))

                #(Get-WmiObject Win32_Computersystem -ComputerName $vmName).Rename($newName); shutdown -r -t 0 
                #Rename-Computer -ComputerName $vmName -NewName $newName -Restart -Force -WhatIf 

                Write-Host "Renaming $vmName to $newName"           
            }  
        } 
    }
}

答案 1 :(得分:1)

使用Rename-Computer cmdlet:

Rename-Computer -ComputerName OldServerName -NewName NewServerName -Restart -Force

Rename-Computer不使用Powershell远程处理,因此即使没有启用远程命令也可以运行。请参阅docs

答案 2 :(得分:0)

如果您能够通过网络连接到远程主机,则可以更改guest虚拟机中的主机名。

$oldname = 'foo'
$newname = 'bar'

(Get-WMIObject Win32_ComputerSystem -Computer $oldname).Rename($newname)

Restart-Computer $oldname

答案 3 :(得分:0)

这是简单的命令,通过power shell执行它

(gwmi win32_computersystem)。重命名(“NewName”); shutdown -r -t 0

答案 4 :(得分:0)

这里很短

  

调用命令-VMName “VM名称这里” -ScriptBlock {   重命名计算机-NewName“此处输入新名称”   }