首页 > 解决方案 > 将序列号与给定的计算机名匹配

问题描述

我希望将我的计算机重命名为特定的计算机名。该脚本应识别我的序列号并匹配给定的计算机名。

例如,我有一个带有特定计算机名的序列号列表。

txt.file

$COMPUTERNAME01;$SERIALNUMBER
$COMPUTERNAME02;$SERIALNUMBER
$COMPUTERNAME03;$SERIALNUMBER
$COMPUTERNAME04;$SERIALNUMBER
rename.ps1

$serial = gwmi win32_bios | select -ExpandProperty Serialnumber
$pos = $name.IndexOf(";")
$leftPart = $name.Substring(0,$pos)
$rightPart = $name.Substring($pos +1)
$newName = $leftPart WHERE $righPart eq $serial
rename-computer -newname $newName

我猜错误出在 WHERE 命令上,但我真的不知道该放什么

标签: powershellcmd

解决方案


假设您拥有的文本文件是一个 csv 文件,;其分隔符为不带标题的分隔符。

在这种情况下,您可以这样做:

$names   = Import-Csv -Path 'X:\PcNamesAndNumbers.csv' -Header 'ComputerName','BiosSerial' -Delimiter ';'
$serial  = Get-WmiObject -Class Win32_Bios | Select-Object -ExpandProperty Serialnumber
$newName = $names | Where-Object { $_.BiosSerial -eq $serial } | Select-Object -First 1

if ($newName) {
    Rename-Computer -NewName $newName.ComputerName -Force -WhatIf
}

确保您将-WhatIf开关保持在适当的位置,直到您通过阅读控制台中写入的任何内容来确定是否正确为止。删除该开关以实际执行重命名。


推荐阅读