Разбор 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);
Другие вопросы по тегам