【发布时间】:2019-05-28 04:13:50
【问题描述】:
我对我们在办公室使用的用于分配 eFax 号码的相当旧的脚本提出了问题。它的主人当然早就不在了。我已经修复了脚本的基本使用问题,但我正在尝试简化它。我要解决的当前问题是它如何检查未使用的号码。
我已破译当前版本的电话号码范围列在文本文件中,例如“236,4000,4199”,然后它会遍历该范围并根据 Active Directory 中的每个用户配置文件检查每个号码,因此它的当然慢。因此,我正在研究的是一种将电话号码数组(总共约 4k)提取并输入电子表格的方法,然后我只需使用单独的脚本对 AD 进行检查以删除正在使用的电话号码。这样,它只需要引用一个文档,而不是针对几千个用户的几千个数字。
我还没有将它放入 Excel 中的任何内容,因为我还没有完全理解用于验证电话号码的数组,而且我不知道如何将每个号码输出到 Excel 中。这是读取数字的数组相关的原始代码:
ipmo act*
$FaxNUmbersINuse = @()
$AvailableFaxNumbers = @()
$AllFaxNumbers = @()
# - WFM Fax Numbers
$FaxNumberRange = Get-Content "\\CEWP9023\Share\FaxNumberRange.txt"
# - Get all Fax numbers
Write-Host "Generating fax numbers..."
foreach ($FaxNumber in $FaxNumberRange) {
$inparray = $FaxNumber.Split(',')
$v1 = $inparray[0]
$v2 = $inparray[1]
$v3 = $inparray[2]
$AllFaxNumbers += $v2..$v3 | foreach {"512-"+$v1+"-"+$_}
}
$FaxNumbersList = $null
$FaxNumbersList = @{}
$TMwithFaxs = Get-ADUser -Filter 'Fax -like "512-*"' -SearchBase "OU=REGIONS,DC=wfm,DC=pvt" -Properties * | select DisplayName, Fax
foreach ($TM in $TMwithFaxs) {
$FaxNumbersList.Add($TM.DisplayName, $TM.Fax)
}
foreach ($AllFaxNumber in $AllFaxNumbers) {
if ($FaxNumbersList.ContainsValue($AllFaxNumber)) {
$FaxNUmbersINuse += $FaxNumbersList
【问题讨论】:
-
查看您的代码是不完整的。 1) 一个
foreach循环,没有关闭}。 2)$_在这行$AllFaxNumbers += $v2..$v3 | foreach{"512-"+$v1+"-"+$_}中来自哪里。 3) 不要使用-Properties *,如果您只需要显示名称和传真。 -
结束语 } 在我从中获取的完整脚本中。不幸的是,这是一个 4 年前的脚本,我正在努力改进,所以我无法说出 $_ 的来源或使用它或 -Properties 的原因
-
@Theo
$_是在管道之前指定的$v2..$v3范围内的值。以@BGlast 为例,4000 到 4199。 -
@gms0ulman 谢谢,现在我明白了。我把它误认为是
foreach ($var in $collection),而不是Foreach-Object。然后请忽略我的评论 2)
标签: arrays excel powershell