Powershell Hyper-V:制作一个脚本,提取计算机名的最后6位数字,将其转换为十六进制,然后插入为VM';s MAC地址(最后8位)

Powershell Hyper-V:制作一个脚本,提取计算机名的最后6位数字,将其转换为十六进制,然后插入为VM';s MAC地址(最后8位),powershell,hyper-v,mac-address,Powershell,Hyper V,Mac Address,我目前正在使用Hyper-V,我想将静态MAC地址更改为计算机名称的最后6位数字。MAC地址是十六进制的。计算机名是由另一个脚本生成的随机字母和随机数字的组合 到目前为止,我有: $lastSixChar = $env:COMPUTERNAME.Substring($env:COMPUTERNAME.Length - 6) $convertHex = $test | Format-Hex 这只需要将计算机的名称转换为十六进制。我不确定这是不是最聪明的方法,但至少它能打印出正确的数字。我真的不知

我目前正在使用Hyper-V,我想将静态MAC地址更改为计算机名称的最后6位数字。MAC地址是十六进制的。计算机名是由另一个脚本生成的随机字母和随机数字的组合

到目前为止,我有:

$lastSixChar = $env:COMPUTERNAME.Substring($env:COMPUTERNAME.Length - 6)
$convertHex = $test | Format-Hex
这只需要将计算机的名称转换为十六进制。我不确定这是不是最聪明的方法,但至少它能打印出正确的数字。我真的不知道该如何使用我提取的信息,并将其放入Hyper-V中MAC的最后8位

什么都行!谢谢

编辑:
发现:Set-VMNetworkAdapter-VMName SRV01-StaticMacAddress“0011223344556”

您发布的代码似乎没有生成十六进制字符串。因此,下面是这样做的。[grin]因为您没有发布如何生成前两个MAC地址块,并且没有响应关于该主题的评论,所以我忽略了这一点

我没有任何虚拟机的东西,所以我会留下你的问题,作为这部分问题的答案

# fake reading in a text file
#    in real life, use Get-Content
#    or use one of the AD or VM cmdlets and filter out all but the system name values
$SystemNameList = @'
pc1234567890
pc2a3s4d5f6g
pc3z4x5c6v7b
'@ -split [System.Environment]::NewLine

$Results = foreach ($SNL_Item in $SystemNameList)
    {
    $HexList = @()
    # the "-replace" strips out all but the last 6 chars in the string
    foreach ($SB_Item in ($SNL_Item  -replace '.+(.{6})$', '$1').ToCharArray())
        {
        # this uses the string format operator to convert the int to hex
        $HexList += '{0:x0}' -f [int]$SB_Item
        }

    $HexList -join '-'
    }

$Results
输出

35-36-37-38-39-30
34-64-35-66-36-67
35-63-36-76-37-62

[1]
$Test
从何而来?[grin][2]您的
$ConvertHex
变量将有一个
字节集合
对象,而不是十六进制字符串。[3]您打算如何生成MAC值的前缀部分?我忘了从以前的脚本中删除它。我还不太确定。我相信Microsoft对所有虚拟机都使用自己的前缀00-15。我仍在试图找出如何通过Powershell将MAC地址插入Hyper-V。看起来我需要下载一些Hyper-V到向我们的管理服务器发送ols。感谢您的帮助。我想这是指第[1][grin]项……那么,第2项和第3项呢?我已经在上面编辑了我的评论谢谢您添加的信息![grin]是的,您需要访问正确的powershell模块才能使用您列出的cmdlet。祝您好运!