对阵列的每100个元素进行操作

时间:2018-02-09 09:14:37

标签: powershell

我正在使用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,所以我可以这样做,也可以拆分数组?

最好的方法是什么?

2 个答案:

答案 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: $_"
    }
}