Я застрял в этом: пользователю нужно ввести два имени компьютера, и я не знаю, как передать их на один вход (возможно, я неправильно спрашиваю), но вот код

elseif ($usersinput -eq 2) 
{
    $pingingtwopcs = Read-Host -Prompt "what are the names of the pc that >you want to ping? (please enter pc names in the next order with comma : >pc1,pc2)"
    foreach ($pcs in $pingingtwopcs)
    {
        Test-Connection -computername $pcs -Count 1
    }
}

Пожалуйста, не предлагайте решение, если это возможно, пожалуйста, направьте меня, чтобы я разобрался сам.

0
WebsGhost 14 Мар 2018 в 09:52

2 ответа

Лучший ответ

Вы можете сделать что-то вроде этого -

$pingingtwopcs = (Read-Host -Prompt "what are the names of the pc that >you want to ping? (please enter pc names in the next order with comma : >pc1,pc2)").split(',') | ForEach-Object {$_.trim()}

Вышеупомянутая строка принимает два значения, разделенных comma, за один раз. Поскольку Read-Host принимает входные данные в формате String, вам придется использовать метод Split(), чтобы разделить их и сохранить в $pingingtwopcs. Метод Trim() удалит лишнее пространство, введенное во время ввода.

0
Vivek Kumar Singh 14 Мар 2018 в 07:08

Не используйте Read-Host, это плохой дизайн и не позволяет автоматизировать. Вместо этого позвольте пользователю указать ComputerName (-а) в виде строки или массива.

function Write-ComputerName([System.Array]$ComputerName) {
    foreach($oneComputerName in $ComputerName){
        Write-Output $oneComputerName
    }
}

Затем пользователь может передать один или несколько:

Write-ComputerName 'Bob'
Write-ComputerName @('Bob','Alice')

Если вам по-прежнему нужно выполнить пользовательскую логику на основе количества ComputerNames, вы можете использовать $ComputerName.Count в своей функции.

1
bergmeister 14 Мар 2018 в 07:16