Создание элементов массива с помощью Read-Host, как я могу переместить элемент в другой ArrayList, используя переменную ситуационного массива? - PullRequest
0 голосов
/ 15 мая 2018

Я очень новичок в написании сценариев, но нигде не смог найти ответ на этот вопрос.Это может быть потому, что я не знаю правильных терминов, чтобы использовать для формулировки вопроса.Пожалуйста, простите мою неопытность и терпите меня ..

В начале моего сценария я создаю массив имен компьютеров, основанных на вводе пользователя:

$computerarray = @()
do {
 $ComputerName = (Read-Host "Please enter the computer name")
 if ($Computername -ne '') {$computerarray += $Computername}
}
until ($Computername -eq '')

Я использую переменные массива всюду поскрипт в циклах foreach, использующий переменную $ ComputerName для вызова каждого элемента массива.

После того, как я определил $ computerarray, я затем тестирую соединение для каждого из них, чтобы определить, какие хосты находятся в сети, и моя цель - получитьизбавиться от хостов, которые не могут подключиться.После некоторых исследований я обнаружил, что обычные элементы массива нельзя удалить, но ArrayLists можно изменить и разрешить элементам перемещаться в другой массив.

После изучения этого я изменяю свой исходный код, чтобы установить set $ computerarray в качестве массива:

[System.Collections.ArrayList]$computerarray = @()
do {
 $ComputerName = (Read-Host "Please enter the computer name")
 if ($Computername -ne '') {$computerarray += $Computername}
}
until ($Computername -eq '')

Затем создайте другой список массивов для перемещения хостов, которые не подключаются,

$ComputersToDelete = @()

Затем запустите блок Test-Connection:

foreach ($Computername in $computerarray) 
{
  If (Test-Connection -computername $ComputerName -ErrorAction SilentlyContinue)
    {
      Write-Host "`nConnected to $Computername"
    } 
      Else 
        {
         Write-Host "`nCannot connect to $Computername" -forgroundcolor white -BackgroundColor red

В остальной части этого последнего блока я пытаюсь переместить выбранный $ ComputerName в массив $ ComputersToDelete здесь:

$ComputersToDelete += $computerarray.$Computername

И, наконец, я следую за этим блоком с помощью:

foreach ($ComputersToDelete in $ComputersToDelete) {
  $ComputersToDelete.Delete()
}

Я читал, что для перемещения элемента массива он будет выглядеть примерно так:

$ComputersToDelete += $computerarray[1]

Однако, поскольку я ссылаюсь только на элемент с $ ComputerNames, он, похоже, не работает.Я хочу удалить хосты, которые не подключены, поэтому остальная часть сценария не тратит время, пытаясь подключиться к ним каждый раз.

Спасибо за ваши будущие ответы, и я, наконец, рад быть частьюсообщество!

1 Ответ

0 голосов
/ 15 мая 2018

Вы можете использовать командлет Group-Object для разделения массива на те, которые могут и не могут подключаться:

$Computers = $computerArray |Group-Object { Test-Connection -ComputerName $_ -ErrorAction SilentlyContinue } -AsHashtable

$ToKeep    = $Computers[$true]
$ToDelete  = $Computers[$false]

Или (в PowerShell 4.0 и новее), используйте метод .Where() вSplit режим:

$ToKeep,$ToDelete = $computerArray.Where({Test-Connection $_ -Count 1 -Quiet},'Split')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...