Сила сокращения в Powershell

#powershell

#powershell

Вопрос:

когда я начал выполнять запрос ping для большой области, я сначала начал «записывать» все IP-адреса на листе Excel, чтобы иметь вывод csv для импорта в powershell.

Затем я подумал о том, чтобы упростить эти вещи в powershell с меньшим объемом выполняемой работы.

 $range = 1..254

$ips1 = ForEach-Object -Process {'10.10.1.'   $Range}
$ips2 = ForEach-Object -Process {'10.10.2.'   $Range}
$ips3 = ForEach-Object -Process {'10.10.3.'   $Range}
$ips4 = ForEach-Object -Process {'10.10.4.'   $Range}
$ips5 = ForEach-Object -Process {'10.10.5.'   $Range}
$ips6 = ForEach-Object -Process {'10.10.6.'   $Range}
$ips7 = ForEach-Object -Process {'10.10.7.'   $Range}
$ips8 = ForEach-Object -Process {'10.10.8.'   $Range}
$ips9 = ForEach-Object -Process {'10.10.9.'   $Range}
$ips10 = ForEach-Object -Process {'10.10.10.'   $Range}
$ips11 = ForEach-Object -Process {'10.10.11.'   $Range}
$ips12 = ForEach-Object -Process {'10.10.12.'   $Range}
$ips13 = ForEach-Object -Process {'10.10.13.'   $Range}
$ips14 = ForEach-Object -Process {'10.10.14.'   $Range}
$ips15 = ForEach-Object -Process {'10.10.15.'   $Range}
$ips16 = ForEach-Object -Process {'10.10.16.'   $Range}
$ips17 = ForEach-Object -Process {'10.10.17.'   $Range}
$ips18 = ForEach-Object -Process {'10.10.18.'   $Range}
$ips19 = ForEach-Object -Process {'10.10.19.'   $Range}
$ips20 = ForEach-Object -Process {'10.10.20.'   $Range}
$ips21 = ForEach-Object -Process {'10.10.21.'   $Range}
$ips22 = ForEach-Object -Process {'10.10.22.'   $Range}
$ips23 = ForEach-Object -Process {'10.10.23.'   $Range}
$ips24 = ForEach-Object -Process {'10.10.24.'   $Range}
$ips25 = ForEach-Object -Process {'10.10.25.'   $Range}
$ips26 = ForEach-Object -Process {'10.10.26.'   $Range}
$ips27 = ForEach-Object -Process {'10.10.27.'   $Range}
$ips28 = ForEach-Object -Process {'10.10.28.'   $Range}
$ips29 = ForEach-Object -Process {'10.10.29.'   $Range}
  

итак, я добрался до этого момента, но теперь я застрял, как я могу сделать это еще короче без ошибок, поэтому впоследствии у меня есть одна большая переменная, которая хранит все IP-адреса в одном

Ответ №1:

Вот более короткое решение с тем же результатом, что и ваш код:

 ForEach ($Network in 1..29) {
    $IPAddresses = ForEach ($IP in 1..254) {
        "10.10.$Network.$IP"
    }

    New-Variable -Name IPs$Network -Value $IPAddresses
}
  

Чтобы получить единую переменную со всеми IP-адресами:

 $AllIPs = ForEach ($Network in 1..29) {
    ForEach ($IP in 1..254) {
        "10.10.$Network.$IP"
    }   
}
  

Комментарии:

1. Это делает именно то, что я хотел сделать, поскольку я пытался разобраться в этом, я получал ошибки, поскольку я пытался сделать это только в одном foreach, должно было быть проще, спасибо 🙂