【问题标题】:Parsing a csv for Read-Host user input解析读取主机用户输入的 csv
【发布时间】:2014-04-15 01:00:51
【问题描述】:

所以这是我的问题...我已经通过 PowerShell 脚本导出了计算机名称、MAC 地址和 IP 地址的列表(CSV 文件)以用于 LAN 唤醒。我想在顶部有一个读取主机选项,询问用户他们想要唤醒的计算机的主机名。使用简单的 Read-Host,这部分就很容易了。

这是我的问题:如何在导出的 CSV 中搜索用户输入的用户输入?

这是我的 csv 示例:

Hostame              MAC               IP Address

Computer 1     00-15-60-97-5B-8E       192.168.0.1
etc                    etc                 etc

所以如果用户通过输入 computer1@domain.com 设置 Read-Host 变量来指定他们想要唤醒计算机 1,我怎样才能让脚本找到用户想要唤醒的计算机,然后获取 mac 和 ip与 WOLCMD.exe(局域网唤醒命令行工具)结合使用

【问题讨论】:

  • 什么版本的 Powershell?

标签: powershell csv wake-on-lan


【解决方案1】:

如果您的用户有 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 的网格视图供用户使用,他们将能够从网格中选择一台计算机来重新启动。

【讨论】:

  • 使用 Out-GridView 作为管道操作的一部分从用户中选择列表成员的方式非常巧妙。
【解决方案2】:

这是我经过测试的解决方案。这应该像一个魅力,并且会广播 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 文件的完整路径放在第一行

【讨论】:

    【解决方案3】:

    如果用户指定了计算机名,那么您需要过滤该计算机名的 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);
    

    【讨论】:

      猜你喜欢
      • 2019-11-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-14
      • 2012-06-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多