首页 > 解决方案 > 将“下一个可用的 AD 计算机”添加到 power-shell 脚本

问题描述

目前,我正在尝试向我的 powershell 脚本添加一个函数,其目标如下:

在尚未添加到域的计算机上,让它根据用户的输入在本地 AD 服务器(非天蓝色)中搜索下一个可用名称。

我过去尝试过使用数组但失败了,我想在其中使用 Get-ADComputer cmdlet,但我不确定如何实现它。

$usrinput = Read-Host 'The current PC name is $pcname , would you like to rename it? (Y/N)'
if($usrinput -like "*Y*") {
    Write-Output ""
    $global:pcname = Read-Host "Please enter the desired PC Name"
    Write-Output ""

    $userinput = Read-Host "You've entered $pcname, is this correct? (Y/N)"
    if($usrinput -like "*N*") {
    GenName
    #name of the parent function
}
Write-Output ""

上面的代码是一个更大的脚本的一部分,它解析一个计算机名并最终将其分配给正确的 OU。

我们的命名方案是这样的:BTS-ONE-LAP-000

所以它是:部门 - 位置 - 设备类型 - 设备计数

然后代码将获取第一部分“BTS-ONE”并解析它以找到它应该去的正确 OU,然后使用 Add-Computer cmdlet 分配它。它还将机器重命名为用户输入的任何内容($pcname)。

因此,在解析名称之前,我希望它搜索 AD 中的所有当前名称。

因此,用户可以输入:“BTS-ONE-LAP”,它会自动找到下一个可用的设备计数,并将其添加到名称中。因此,它会自动生成“BTS-ONE-LAP-041”。

补充说明:

我用过Get-ADComputer -Filter 'Name -like "BTS-ONE-LAP-*"' | FT Name,输出是

Name           
----           
BTS-ONE-LAP-001
BTS-ONE-LAP-002
BTS-ONE-LAP-006
BTS-ONE-LAP-007
BTS-ONE-LAP-009
BTS-ONE-LAP-010
BTS-ONE-LAP-022
BTS-ONE-LAP-024
BTS-ONE-LAP-025
BTS-ONE-LAP-028
BTS-ONE-LAP-029
BTS-ONE-LAP-030
BTS-ONE-LAP-031
BTS-ONE-LAP-032
BTS-ONE-LAP-034
BTS-ONE-LAP-035
BTS-ONE-LAP-036
BTS-ONE-LAP-037
BTS-ONE-LAP-038
BTS-ONE-LAP-039
BTS-ONE-LAP-040
BTS-ONE-LAP-041
BTS-ONE-LAP-050
BTS-ONE-LAP-051

我不知道如何解析它,所以代码知道 BTS-ONE-LAP-003 可用(我对数组很糟糕)。

标签: powershellactive-directory

解决方案


$list = (Get-ADComputer -Filter 'Name -like "BTS-ONE-LAP-*"' | Sort-Object Name[-1])

$i = 1
$found = $false
Foreach($Name in $list.Name)
{
    while($i -eq [int]$Name.Split("-")[3].Split("-")[0])
    {
        $i++
    }
}
$i

上面的代码将遍历列表中的每个名称,并在发现集合中的第 3 台计算机不是 #3 计算机时停止。

例子:

BTS-ONE-LAP-001 | $i = 1
BTS-ONE-LAP-002 | $i = 2
BTS-ONE-LAP-006 | $i = 3

它将 BTS-ONE-LAP-006 拆分为 006,并将其转换为整数,使其为 6。由于 6 不等于 3,因此我们知道 BTS-ONE-LAP-003 可用。


推荐阅读