![协助编写 PowerShell 脚本以在 Active Directory 中搜索计算机名称](https://linux22.com/image/682642/%E5%8D%8F%E5%8A%A9%E7%BC%96%E5%86%99%20PowerShell%20%E8%84%9A%E6%9C%AC%E4%BB%A5%E5%9C%A8%20Active%20Directory%20%E4%B8%AD%E6%90%9C%E7%B4%A2%E8%AE%A1%E7%AE%97%E6%9C%BA%E5%90%8D%E7%A7%B0.png)
我正在编写一个脚本来自动化一些 AWS 启动的 Windows 服务器实例。我已经完成了 DNS 更改和加入域部分,但我在迭代命名空间时遇到了麻烦……例如;
机器使用自动生成的名称启动:WIN-JDK2349DFJR 我希望脚本检查 AD 并查看名称(比如 imagesN)是否已被使用,如果已被使用,则将机器命名为 imagesN+1。
服务器启动,使用自动名称 (WIN-JDK2349DFJR)。脚本调用-脚本检查 AD:三台服务器分别名为“images1、images2、images3”。脚本将 DNS 更改为本地 DC,将名称更改为“images4”,加入域,然后重新启动。
我不确定如何编写 PowerShell 脚本来检查 Active Directory 中的计算机名称 imageN,并且如果 Active Directory 中存在名称为 imageN 的带有 N 的机器帐户,则增加 N。
答案1
特洛伊,
我认为从操作顺序的角度来看存在一些问题。
您的问题(“迭代命名空间时遇到问题”)的答案如下。听完我的回答后,您就会明白为什么我认为您会遇到其他问题。
回答如何编写 PowerShell 脚本来迭代命名空间。
import-module ActiveDirectory
$counter = 0
$nameselected = "no"
$server = "image$counter"
$ErrorActionPreference = 'SilentlyContinue'
Do {
Write-Host "Checking for existance of $server."
if (Get-ADComputer -Identity $server) {
Write-Host "Count is $counter."
$global:counter++
$server = "image$counter"
Write-Host "New count is $counter."
}
}
Until ( ( -not $( Get-ADComputer -Identity $server)) )
$nameslected = "yes"
Write-Host "The name will be $server."
Write-Host "Replace this line with the with your function for changing DNS or joining the domain."
您在尝试执行此操作时可能会遇到的问题。
- 在将计算机加入域之前,您必须更改计算机的名称。
- 更改计算机名称后,必须重新启动计算机,然后才能将计算机加入域。
- 要运行 PowerShell 脚本,计算机需要安装 .NET Framework 3.5.1https://technet.microsoft.com/en-us/magazine/gg413289.aspx
- 您描述了在未加入域的计算机上运行此 PowerShell 脚本的过程。解决此问题的一个可能方法是使用远程 PowerShell 连接到已加入域且已安装 .NET Framework 3.5.1 和 RSAT 的计算机,然后从该 PowerShell 会话中获取可用的计算机名称,并在本地 PowerShell 会话中在本地计算机上使用它。