3

我们是一个学习中心,有时由于不同的原因我们无法对机器进行系统准备。当我不对机器进行 sysprep 时,我最终会使用相同的计算机名克隆机器 25 次。

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

我想知道是否可以在关闭机器(预克隆)之前使用批处理文件或 powershell 脚本。然后,在下次重新启动时(仅一次),计算机会随机更改计算机名称,从而为我节省大量时间。

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

谢谢大家!

4

2 回答 2

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 Rename-Computer 更改计算机名称。并将其设置为运行一次,最简单的方法是向注册表项添加一个条目

HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce   

这将使用您的脚本调用 PowerShell。

于 2014-02-10T19:34:34.707 回答
2

我想添加两种方法来生成具有所有允许字符的名称,为方便起见,以大写字母开头,长度为 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!

电源外壳

$chars = [char[]]"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"
[string](($chars[0..25]|Get-Random)+(($chars|Get-Random -Count 14) -join ""))
于 2016-11-23T17:55:57.690 回答