Разбор csv для пользовательского ввода Read-Host
Итак, вот моя проблема... Я экспортировал список (файл CSV) имен компьютеров, MAC-адресов и IP-адресов для пробуждения по локальной сети через скрипт PowerShell. Я хотел бы иметь опцию read-host вверху, спрашивая пользователя имя хоста компьютера, который они хотят разбудить. Эта часть достаточно проста с простым Read-Host.
Вот мой вопрос: как я могу найти в экспортированном CSV пользовательский ввод, введенный пользователем?
Вот пример моего CSV:
Hostame MAC IP Address
Computer 1 00-15-60-97-5B-8E 192.168.0.1
etc etc etc
поэтому, если пользователь указывает, что он хочет разбудить computer1, введя computer1@domain.com, установив переменную Read-Host, как я могу получить сценарий для поиска компьютера, который хочет разбудить пользователь, а затем захватить mac и ip для использования в комбинация с WOLCMD.exe (средство командной строки Wake on LAN)
3 ответа
Вот мое проверенное решение. Это должно работать как талисман и будет транслироваться для MAC-адреса, если цель не находится в вашей таблице arp.
$csvpath = <<modify this with the path to the csv file>>
$comp = read-host -prompt "Enter the target computer name: "
$dataset = import-csv -path $csvpath
$row = ($dataset | where{$_.hostname -eq $comp})
$mac = $row.mac
wolcmd $mac 255.255.255.255 255.255.255.255
Обязательно укажите полный путь к CSV-файлу в первой строке перед запуском
Если у ваших пользователей версия V3 или выше, вы также можете использовать Out-GridView для получения пользовательского ввода:
Import-Csv c:\somedir\computerlist.csv | sort computername
Out-GridView -Title 'Select a computer, and press OK to send Wake command:' -OutputMode Single |
foreach { & "wolcmd $_.mac 255.255.255.255 255.255.255.255" }
Это представит сетку CSV для использования, и они смогут выбрать один компьютер из сетки для перезагрузки.
Если пользователь указывает имя компьютера, вам необходимо отфильтровать CSV-файл по имени этого компьютера и получить MAC-адрес и IP-адрес.
$ComputerName = Read-Host -Prompt 'Please enter a computer name.';
$Csv = Import-Csv -Path c:\test\test.csv;
$Record = $Csv | Where-Object -FilterScript { $PSItem.Computer -eq $ComputerName; };
Write-Host -Object ("Computer's IP address is: {0} and MAC address is: {1}" -f $Record.'IP Address', $Record.MAC);