如何使用powershell从主机设置虚拟机名称?

问题描述 投票:0回答:6

我找到了一篇关于“重命名来宾操作系统以匹配 Hyper-V 上的虚拟机名称”的文章,以重命名计算机名称以匹配虚拟机的名称。问题是这个脚本必须附加在虚拟机上,如果我想更改它会很困难。 是否可以从主机重命名虚拟机计算机的名称?

powershell hyper-v
6个回答
2
投票

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
投票
Rename-Computer

cmdlet:


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

Rename-Computer

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

文档


0
投票

$oldname = 'foo' $newname = 'bar' (Get-WMIObject Win32_ComputerSystem -Computer $oldname).Rename($newname) Restart-Computer $oldname



0
投票

(gwmi win32_computersystem).Rename("NewName");关闭-r -t 0


0
投票

Invoke-Command -VMName“此处为虚拟机名称”-ScriptBlock { 重命名-计算机-NewName“此处为新名称” }


0
投票
PowerShell Direct

功能可以轻松实现这一点,该功能允许:

无论网络配置或远程管理设置如何,都可以从 Hyper-V 主机在 Windows (...) 虚拟机中运行任意 PowerShell。

如:

带有 Invoke-Command 的 PowerShell Direct 非常适合您需要在虚拟机上运行一个命令或一个脚本但不需要在该点之后继续与虚拟机交互的情况。

首先,在主机上,使用目标虚拟机上管理员用户的凭据创建凭据对象,或者提示输入详细信息

$credential = Get-Credential

或手动填充对象:

$username = "Administrator" # administrator user on target VM $password = "Secr3tPa$$w0rd" # of administrator user on target VM $passwordSecureString = New-Object -TypeName System.Security.SecureString $password.ToCharArray() | ForEach-Object { $passwordSecureString.AppendChar($_) } $credential = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList $username, $passwordSecureString

最后,在主机上,运行命令重命名虚拟机:

$vmName = 'vm-mywin' $vmNewComputerName = 'worker1' Invoke-Command -VMName $vmName -Credential $credential -ScriptBlock { ` Rename-Computer -NewName $vmNewComputerName; ` Restart-Computer -Force; }

© www.soinside.com 2019 - 2024. All rights reserved.