我正在使用Get-ADComputer
返回Active Directory中的所有计算机。
我们打算致电DELL Warranty网络服务API并检索每台计算机的保修信息。
DELL Warranty网络服务采用管道分隔的服务标签列表,最多100个,我们有1483台计算机......
所以我需要对我的代码填充的数组的每100个元素执行操作,但遇到了麻烦。
clear-host
$Counter=0
$ServiceTag::Empty
$ServiceTagsMasterList=@()
(Get-ADComputer `
-properties OperatingSystem -filter {(operatingsystem -like "*Windows 7*")} `
|Where-Object {$_.name -like "*-*"}`
|Where-Object {$_.name -NotLike "V7-*"})`
| Select -Exp Name|ForEach-Object{
$ServiceTag = $_.substring(3) #remove w7- l7- etc....
if ($ServiceTag.Length -eq "7"){
#write-host "service tag:" $ServiceTag
$ServiceTagsMasterList += $ServiceTag + ','
$Counter+=1
}
}
write-host $ServiceTagsMasterList.length, $Counter, $Counter % 100
write-host $ServiceTagsMasterList
我无法获得Mod
权利 - 我希望$Counter % 100
返回14,其余为83,但输出 1483%100
我需要能够为100个服务标签的每个块调用DELL Warranty api,所以我可以这样做,也可以拆分数组?
最好的方法是什么?
答案 0 :(得分:3)
你必须像这样编写它来计算:
write-host $ServiceTagsMasterList.length, $Counter, $($Counter % 100)
和%是余数不是模数 http://www.madwithpowershell.com/2016/11/powershell-modulus-operator-is.html
答案 1 :(得分:3)
gpunktschmitz already mentioned您的代码中有错误。这就是您的批次的样子:
$computer = Get-ADComputer -properties OperatingSystem -filter {(operatingsystem -like "*Windows 7*")} |
Where-Object {$_.name -like "*-*"} |
Where-Object {$_.name -NotLike "V7-*"} |
Select-Object -Expand
for ($i = 0; $i -lt $computer.length; $i+=100)
{
$computer | Select-Object -Skip $i -First 100 | ForEach-Object {
# your code here
}
}
这是您的1483台计算机的示例:
$computer = 1 .. 1483 | ForEach-Object { "DellPc$($_)" }
for ($i = 0; $i -lt $computer.length; $i+=100)
{
$computer | Select-Object -Skip $i -First 100 | ForEach-Object {
Write-Host "batch: $i computer: $_"
}
}