我想知道是否所有的PC都在列表中,如果一个不在列表中,脚本会说我,列表可以修改更多的PC。
$equipos= "equipo1","equipo2","equipo3","equipo5"
[char]$nequipos = 1
for($i=0;$i -lt $equipos.count;$i++){
[char]$num = $equipos[$i][6]
if($num -ne $nequipos){
write-host "equipo"$nequipos
}
[char]$nequipos= $i++
}
查找编号中的空白,并根据缺失的编号列出所有可用的名称:
# Extract all numbers contained in the names.
[int[]] $numbers = "equipo1", "equipo2", "equipo3", "equipo5" -replace 'D'
# Find the highest number.
$highestNumber = [Linq.Enumerable]::Max($numbers)
# Find all unused numbers.
$unusedNumbers = Compare-Object $numbers (1..$highestNumber) -PassThru
# Report results.
if ($unusedNumbers) {
Write-Verbose -Verbose "The following names are available: "
$unusedNumbers.ForEach({ 'equipo' + $_ })
} else {
Write-Verbose -Verbose "No gaps in numbering found."
}
输出:
VERBOSE: The following names are available:
equipo4
注意:
-replace
'D'
从名称中删除所有非数字(D
)字符,并将结果字符串强制转换为[int[]]
,以获得数字数组。[Linq.Enumerable]::Max($numbers)
找到其中的最大值。参见. net文档。Compare-Object
用于将提取的数字与从1
到最高的(1..$highestNumber
)的数字 (..
)的(无gap)范围进行比较。默认情况下,报告输入集合之间不同的元素,并且由于-PassThru
,从范围中缺少的那些提取的数字将直接输出。$unusedNumbers.ForEach({ 'equipo' + $_ })
使用.ForEach()
数组方法构造范围内未使用的号码的名称列表。
假设名称是唯一的,您可以选择序列中最大的数字并减去列表的长度-这将得到间隔的数量:
$equipos = "equipo1","equipo2","equipo3","equipo5" |Sort-Object {$_ -replace '^D+' -as [int]} -Unique -Descending
$highest = $equipos |Select -First 1
$number = $highest -replace '^D+' -as [int]
if($number -gt $equipos.Length){
"There are $($number - $equipos.Length) gap(s) in the list"
}
else {
"The list is contiguous"
}
对于给定的样本值,它将输出:
There are 1 gap(s) in the list