У меня есть два файла 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