使用Powershell获取与现有Active Directory计算机相关的可用主机名

时间:2019-04-29 11:23:53

标签: powershell active-directory

我想运行一个具有SCCM任务序列的Powershell脚本,在该序列中输入了一个按命名约定命名的特定主机名,在Active Directory中进行搜索并检查其可用性。

我在互联网上找到了以下代码:

$Prefix = $EnteredHostname -match '^(.*?)\d*$' | Out-Null # strip possibly trailing numbers
$Prefix = $Matches[1]

$Number = 0 # initialize last Number to zero
Get-ADComputer -Filter * |
Where-Object {$_.Name -match "^$Prefix(\d+)$" }|
   Select-Object @{n='UsedNumber';e={[int]$Matches[1]}} | Sort-Object UsedNumber |
      ForEach-Object {
         While ($Number +1 -lt $_.UsedNumber){"{0}{1}" -f $Prefix,++$Number}
         $Number = $_.UsedNumber
      }
# if there was no gap get the next one.
"{0}{1}" -f $Prefix,++$Number

它工作正常,但仅处理输入的文本后的最后一个数字。 (在运行该代码之前,将出现一个文本框,在其中输入所需的主机名(不带数字)并将其存储在变量$ enteredHostname中。)

我们公司的命名约定如下:“ HostnameXXXX”。例如:主机名0005,主机名0015,主机名0150等。但是此代码仅提供-> Hostname5,Hostname15,Hostname150,..

如何调整代码以符合我们的命名约定,以便正确显示主机名?

我自己还没弄清楚。我是Powershell的新手,仅使用了几个星期

任何建议都得到高度重视

1 个答案:

答案 0 :(得分:1)

格式运算符(-f)允许填充数字。在这种情况下,填充将在数字前提供额外的零。

"{0}{1:d4}" -f $Prefix,++$Number