Powershell Script循环输出到txt文件

时间:2012-06-18 06:03:20

标签: excel powershell text

我正在使用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中的每一行

1 个答案:

答案 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。