我正在使用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数据:( Colums与“|”
分开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,字符串,组中的数据拉取数据,其中数据如下所示: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中的每一行
答案 0 :(得分: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}
等是占位符。 -f
然后是格式运算符,它在左侧采用格式字符串,在右侧采用占位符的参数。您还可以看到,您可以按名称访问各列,这要归功于Import-Csv。