Arraylist не позволяет вводить только одно имя хоста для проверки связи в PowerShell - PullRequest
0 голосов
/ 05 мая 2020

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

  param(
#Arralist zum Aufnehmen der Hosts.
#[parameter(Mandatory = $true, Position = 0)][System.Collections.ArrayList]$Hosts = @(),
[parameter(Mandatory = $true, Position = 0)][System.String]$Hosts,
#Anzahl Wiederholung pro Host, Standard 10 Jahre
[parameter(Mandatory = $false,Position = 1)][double]$Repetition = 315360000,
#solange wird nichts unternommen, standard 0
[parameter(Mandatory = $false,Position = 1)][double]$Pause = 5,
#Speicherort des Logfile, standard C:\Temp
[parameter(Mandatory = $false,Position = 2)][string]$LogPath = 'C:\Temp\Ping Tool'
)

, если я вызываю скрипт, используя имя скрипта и необходимые параметры, например script.ps1 -hosts www.google.ch, www.youtube.com -repetition 2 скрипт будет пинговать два хоста 2 раза, а затем остановится. Это так хорошо. Но проблема возникает, если у меня есть только один хост (экзамен www.google.ch) для пинга. Там написано: The argument transformation for the parameter "Hosts" can't be processed. The value "www.google.ch" of type "System.String" can't be converted to the type "System.Collections.ArrayList".

Что я могу сделать, чтобы скрипт работал, даже если я пингую только один хост? Проблема здесь в том, что я определил Arraylist в параметрах, поэтому он не позволяет мне вводить только один хост для проверки связи.

1 Ответ

1 голос
/ 05 мая 2020

Удалите приведение ArrayList или System.String для параметра $Hosts и используйте foreach в своем коде для итерации каждого элемента, он будет обрабатывать его самостоятельно ...

См. Пример :

function Test-Input {
param(
$hosts
)
Write-Host The Input is: [ $hosts.GetType().FullName ]

    foreach ($item in $hosts) {
    Write-Host Item: [ $item ]
    }
}

Посмотреть результаты:

PS > Test-Input -hosts www.google.ch
The Input is: [ System.String ]
Item: [ www.google.ch ]

PS > Test-Input -hosts www.google.ch,www.google.com
The Input is: [ System.Object[] ]
Item: [ www.google.ch ]
Item: [ www.google.com ]
...