1

我正在使用 Powershell 脚本写入文本文件。一位客户向我展示了这个 Powershell 脚本,用于替换我曾经使用的 excel 宏...

$computers= gc "C:\Users\Powershell\DeviceList.txt"
foreach ($computername in $computers)
{
write-output "<$computername>
      active = yes
      group = 
      interval = 5min
      name = $computername
      host = $computername
      community = 
      version = 1
      timeout = 0
      retries = default
      port = 161
      qos_source = 1
</$computername>"  | Out-File -filepath "C:\Users\Powershell\Cisco_Mon.txt" -append
}

它工作得很好,但现在我想在它的基础上添加额外的变量。在一个完美的世界里,我希望它从一个 excel 电子表格中读取,抓取每一行数据,每一列都被定义为一个变量。现在使用另一个文本文件也很好。这是我开始的(它不起作用),但你可以看到我要去哪里......

$computers= gc "C:\Users\Powershell\devicelist.txt"
$groups= gc "C:\Users\Powershell\grouplist.txt"
foreach ($computername in $computers) + ($groupname in $groups)
{
write-output "<$computername>
      active = yes
      group = $groupname
      interval = 5min
      name = $computername
      host = $computername
      community = 
      version = 1
      timeout = 0
      retries = default
      port = 161
      qos_source = 1
</$computername>"  | Out-File -filepath "C:\Users\Powershell\Cisco_Mon.txt" -append
}

当然它不起作用。从本质上讲,如果我可以将上述每个选项定义为来自 excel 电子表格的变量,例如 $community、$interval、$active 等,我会喜欢它。

对此的任何帮助都会非常感激。如果有人可以向我展示如何使用 Excel 电子表格,将每列定义为变量,并用变量编写上述文本,那就太好了!!!。

谢谢,

smt1228@gmail.com

这方面的一个例子如下......

Excel 数据:(以“|”分隔的列

IP | String | Group
10.1.2.3 | Public | Payless

期望的输出:

<10.1.2.3>
      active = yes
      group = Payless
      interval = 5min
      name = 10.1.2.3   
      host = 10.1.2.3   
      community = 
      version = 1
      timeout = 0
      retries = default
      port = 161
      qos_source = 1
</10.1.2.3>

添加:

从 CSV 中提取 IP、String、Group 的数据,其中 CSV 中的数据如下...

10.1.2.3,public,group1
10.2.2.3,default,group2
10.3.2.3,public,group3
10.4.2.3,default,group4

写入 .txt 文件为

IP = 10.1.2.3.
String = public
Group = Group1

并在 CSV 中查找每一行

4

1 回答 1

0

好的,现在有了新的答案。最简单的方法是将您的 Excel 文档另存为 CSV,使其看起来像这样(即与您在上面呈现数据的方式非常相似):

IP,String,Group
10.1.2.3,Public,Payless

您仍然可以在 Excel 中打开它(并且您不必使用 Office 互操作来尝试解析值)。

PowerShell 可以很好地解析 CSV:使用Import-Csv

Import-Csv grouplist.csv | ForEach-Object {
  "<{0}>
    active = yes
    group = {1}
    interval = 5min
    name = 10.1.2.3   
    host = 10.1.2.3   
    community = 
    version = 1
    timeout = 0
    retries = default
    port = 161
    qos_source = 1
  </{0}>" -f $_.IP, $_.Group
}

我在这里使用格式字符串,其中{0}等是占位符。-fthen 是格式运算符,它在左侧采用格式字符串,在右侧采用占位符的参数。由于 Import-Csv,您还可以看到可以按名称访问各个列。

于 2012-06-18T06:22:30.967 回答