Вложенный Foreach в PowerShell - PullRequest
       3

Вложенный Foreach в PowerShell

0 голосов
/ 06 апреля 2020

У меня есть два файла CSV. Один содержит список адресов MA C, а другой содержит список IP-адресов.

У меня также есть функция Send-WOL, которая принимает данные

Send-WOL -mac (MAC address) -ip (IP address)

и отправляет команда Wake on LAN.

Мне нужен сценарий PS, чтобы взять один адрес MA C из файла CSV и запустить его для каждого адреса в файле CST IP-адреса.

Send-WOL -mac AAAAAAAAAAAA -ip 192.168.1.1
Send-WOL -mac AAAAAAAAAAAA -ip 192.168.1.2
Send-WOL -mac AAAAAAAAAAAA -ip 192.168.1.3

Когда он проходит по всем IP-адресам из файла CSV, он переходит к следующему адресу MA C в списке:

Send-WOL -mac AAAAAAAAAAAB -ip 192.168.1.1
Send-WOL -mac AAAAAAAAAAAB -ip 192.168.1.2
Send-WOL -mac AAAAAAAAAAAB -ip 192.168.1.3

Это прекрасно работает, если я использую данные c IP

. C:\Send-WOL.ps1
$MACAddresses = Get-Content "C:\MACAddresses.csv"

foreach ($MACAddress in $MACAddresses) {
   Send-WOL -mac $MACAddress -ip 192.168.1.1
}

Это не так.

. C:\Send-WOL.ps1
$MACAddresses = Get-Content "C:\MACAddresses.csv"
$IPAddresses = Get-Content "C:\IPAddresses.csv"

Foreach ($MACAddress in $MACAddresses) {
    Foreach ($IPAddress in $IPAddresses) {
        Send-WOL -mac $MACAddress -ip $IPAddress
    }
}

Полный сценарий PS, если кому-то еще это нужно.

$MACAddresses = Get-Content "C:\MACAddresses.csv"
$IPAddresses = Get-Content "C:\IPAddresses.csv"

function Send-WOL
{
[CmdletBinding()]
param(
[Parameter(Mandatory=$True,Position=1)]
[string]$mac,
[string]$ip="255.255.255.255", 
[int]$port=9
)
$broadcast = [Net.IPAddress]::Parse($ip)

$mac=(($mac.replace(":","")).replace("-","")).replace(".","")
$target=0,2,4,6,8,10 | % {[convert]::ToByte($mac.substring($_,2),16)}
$packet = (,[byte]255 * 6) + ($target * 16)

$UDPclient = new-Object System.Net.Sockets.UdpClient
$UDPclient.Connect($broadcast,$port)
[void]$UDPclient.Send($packet, 102) 
}

Foreach ($MACAddress in $MACAddresses) {
Foreach ($IPAddress in $IPAddresses) {
   Send-WOL -mac $MACAddress -ip $IPAddress
   }
   }

Кредит для сценария WOL : https://gallery.technet.microsoft.com/scriptcenter/Send-WOL-packet-using-0638be7b

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...