【问题标题】:Powershell Script loop output to txt filePowershell脚本循环输出到txt文件
【发布时间】:2012-06-18 06:03:20
【问题描述】:

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

【问题讨论】:

    标签: excel powershell text


    【解决方案1】:

    好的,现在有新的答案。最简单的方法是将您的 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 then 是格式运算符,它在左侧接受格式字符串,在右侧接受占位符的参数。借助 Import-Csv,您还可以看到可以按名称访问各个列。

    【讨论】:

    • 那么请在您的问题中添加您的输入是什么样的以及您需要用它做什么。仅仅从非工作代码开始有点困难。
    • 如果可能更容易解释,如果您有时间,我可以通过 webex 甚至电子邮件向您展示。我真的很感激你的帮助
    • 刚刚编辑希望这更有意义。感谢您的帮助
    • 它有点工作,它没有输入变量......我想更好地解释一下,我将如何从 excel 中提取数据并写入 txt 文件。有关更多信息,请参阅原始帖子...
    • 我非常接近得到这个,但由于某种原因我无法输入变量。我让它运行,但由于某些原因,每个变量在输出中都是空白的。
    猜你喜欢
    • 1970-01-01
    • 2020-07-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-06
    • 2021-11-22
    • 2017-07-17
    • 2019-03-22
    相关资源
    最近更新 更多