我想运行一个具有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的新手,仅使用了几个星期
任何建议都得到高度重视
答案 0 :(得分:1)
格式运算符(-f)允许填充数字。在这种情况下,填充将在数字前提供额外的零。
"{0}{1:d4}" -f $Prefix,++$Number