Нужна помощь по фильтрации в скрипте PowerShell

У меня есть массив с некоторыми данными сервера и следующий скрипт:

      Write-Host "`nRemoving servers' accounts from AD:" -ForegroundColor Green

for ($j=0; $j-le $screenObj.Length; $j++)
{if (($screenObj[$j].Domain -ne "Unknown") -and ($screenObj.Where({$_ -ne ""})))
 {Try {Remove-ADComputer $screenObj[$j].ServerName -Server $screenObj[$j].Domain -Confirm:$false -WhatIf
  Write-Host $screenObj[$j].ServerName "deleted." -ForegroundColor DarkYellow}
  Catch {Write-Host $screenObj[$j].ServerName ":" $_.Exception.InnerException.Message -ForegroundColor Red}
 }
 }

Это дает мне следующий результат:

      Removing servers' accounts from AD:
What if: Performing the operation "Remove" on target "CN=Server1,OU=Application - With WINS,OU=Application,OU=W2K3,OU=Servers,OU=MY,DC=corp,DC=mycorp,DC=net".
Server1 deleted.
What if: Performing the operation "Remove" on target "CN=Server2,OU=Application - With WINS,OU=Application,OU=W2K3,OU=Servers,OU=MY,DC=corp,DC=mycorp,DC=net".
Server2 deleted.
What if: Performing the operation "Remove" on target "CN=Server3,OU=IIS,OU=W2K8,OU=Servers,OU=Europe,DC=TKMAXX,DC=mycorp,DC=net".
Server3 deleted.
What if: Performing the operation "Remove" on target "CN=Server4,OU=IIS,OU=W2K8,OU=Servers,OU=Europe,DC=TKMAXX,DC=mycorp,DC=net".
Server4 deleted.
 : The argument is null or empty. Provide an argument that is not null or empty, and then try the command again.


Я не мог определить, почему последняя строка вывода выглядит как
: The argument is null or empty. Provide an argument that is not null or empty, and then try the command again.

Может ли кто-нибудь объяснить это и помочь мне устранить это неизвестное предупреждение?
Кроме того, дайте мне знать, есть ли более эффективные способы достижения желаемого результата.
Примечание: я использую -WhatIf вариант, чтобы серверы фактически не удалялись.

1 ответ

Ваш for условие цикла отсчитывается от 0 до $screenObj.Length, что означает, что на последней итерации цикла $screenObj[$i] всегда решит $null - изменить -le оператор к -lt починить это:

      for ($j = 0; $j -lt $screenObj.Length; $j++)
{ 
  # ...
}
Другие вопросы по тегам