RunOnce在重新引导时使用随机名称重命名Computername

时间:2014-02-10 14:07:03

标签: windows batch-file powershell hostname runonce

我们是一个学习中心,有时我们无法根据不同的原因对这些机器进行sysprep。当我没有对机器进行sysprep时,我最终使用相同的计算机名称克隆了一台机器25次。

然后我必须在每个工作站上手动操作并更改计算机名称并在之后重新启动它们。

我想知道我是否可以使用批处理文件或PowerShell脚本来关闭我的机器(预先克隆)。然后,在下次重启(仅一次)时,计算机将随机更改计算机名称,因此节省了大量时间。

我在Windows XP下执行此操作到Windows Server 2012R2。在所有这些操作系统下工作的独特解决方案将是神奇的,但我主要在Server 2008+上执行此操作。我不介意使用WinXP-Win7的批处理文件和Windows 2008到2012的powershell!

谢谢大家!

2 个答案:

答案 0 :(得分:4)

您可以使用Get-Random cmdlet生成随机名称。

# Set allowed ASCII character codes to Uppercase letters (65..90), 
$charcodes = 65..90

# Convert allowed character codes to characters
$allowedChars = $charcodes | ForEach-Object { [char][byte]$_ }

$LengthOfName = 10
# Generate computer name
$pw = ($allowedChars | Get-Random -Count $LengthOfName) -join ""

您可以使用cmdlet重命名计算机更改计算机名称。要将其设置为运行一次,最简单的方法是在注册表项中添加一个条目

HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce   

将使用您的脚本调用PowerShell。

答案 1 :(得分:1)

我想添加两种方法来生成包含所有允许字符的名称,为方便起见,以大写字母和15个字符的长度开头

批量

@Echo off&SetLocal EnableExtensions EnableDelayedExpansion
Set "Chars=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"
Call :RandChar 26 Name
For /L %%A in (1,1,14) Do Call :RandChar 62 Name
Echo %Name%
Goto :Eof
:RandChar Range Var
Set /A Pnt=%Random% %% %1 & Set %2=!%2!!Chars:~%Pnt%,1!

PowerShell的

$chars = [char[]]"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"
[string](($chars[0..25]|Get-Random)+(($chars|Get-Random -Count 14) -join ""))