将计算机名重命名为序列号



我试图让我的unattend.xml文件使新映像的主机名成为BIOS的Serial。我真的不在乎它是用什么语言写成的。我已经走了这么远,但我被困住了。

$Serial = Get-WMIObject -Class "Win32_BIOS" | Select -Expand SerialNumber
Rename-Computer $Serial

I Get this error

Rename-Computer : Fail to rename computer 'test-B' to 'R9Z1EBP' due to the following exception: Access is denied.
At C:UsersxiuhtecuhtliDesktoprename.ps1:2 char:1
+ Rename-Computer -NewName ($Serial)
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : OperationStopped: (test-B:String) [Rename-Computer], InvalidOperationException
    + FullyQualifiedErrorId : FailToRenameComputer,Microsoft.PowerShell.Commands.RenameComputerCommand

$Serial在您为其赋值之前不会返回任何内容。您可以通过WMI呼叫获取序列号

$Serial = Get-WMIObject -Class "Win32_BIOS" | Select -Expand SerialNumber

那么您的重命名-计算机cmdlet应该可以正常工作(您不需要在$Serial周围加上括号,尽管在那里加上括号不会有任何影响)。对于这个问题,如果您要重命名本地计算机,您唯一需要提供的就是新名称。所以这应该可以工作:

Rename-Computer $Serial

既然你标记了vbscript,这里是一个未经测试的vbs解决方案。这允许您远程重命名计算机。您可以修改它,并在映像完成后或第一次重新启动时执行它。

Const AdminAcc = "Administrator"
Const AdminPwd = "Administrator Password"
Sub RenameComputerBySerial()
    RenameWithSerial "." ' Local Computer that runs the script
End Sub
Sub RenameWithSerial(sComputer)
    On Error Resume Next
    Dim oWMIService, colItems, oItem, sSerial
    '--[ Connect to computer ]--
    Set oWMIService = GetObject("winmgmts:{impersonationLevel=impersonate,authenticationLevel=pktPrivacy}!\" & sComputer & "rootcimv2")
    '--[ Extract Serial number from BIOS ]--
    Set colItems = oWMIService.ExecQuery("SELECT SerialNumber FROM Win32_BIOS")
    For Each oItem In colItems
        sSerial = Trim(oItem.SerialNumber)
    Next
    Set colItems = Nothing
    '--[ Rename Computer if Serial is non zero length ]--
    If Len(sSerial) > 0 Then
        Set colItems = oWMIService.ExecQuery("Select * from Win32_ComputerSystem")
        For Each oItem In colItems
            oItem.Rename sSerial, AdminPwd, AdminAcc
        Next
        Set colItems = Nothing
        '--[ Reboot the computer ]--
        Set colItems = oWMIService.ExecQuery("Select * from Win32_OperatingSystem")
        For Each oItem In colItems
            Select Case oItem.reboot
                Case 0: Wscript.Echo "Computer renamed to """ & sSerial & """ and rebooted"
                Case Else:  Wscript.Echo "Computer Renamed but not rebooted"
            End Select
        Next
        Set colItems = Nothing
    End If
    Set oWMIService = Nothing
    If Err.Number <> 0 Then
        Wscript.Echo "ERR(" & Err.Number & "):" & Err.Description
    End If
End Sub

我喜欢One-Liner(可能是因为我从批处理中使用它....)

powershell重命名-computer (gwmi win32_bios).serialnumber

它当然需要一个Boot

由于最初的错误规定序列号已从GWMI查询传递到restart-computer cmdlet,因此我怀疑该命令是在没有正确凭证的情况下执行的。因此,您可以尝试使用已知的本地计算机管理用户/通行证添加-localcredential。

$Serial = (gwmi win32_bios).serialnumber
Rename-computer $Serial -localcredential localhostadministrator

将提示您输入凭据。如果您喜欢自动将凭据传递给cmdlet,还有各种其他脚本示例。

最新更新