【发布时间】:2014-11-17 21:06:34
【问题描述】:
所以在 PowerShell 中,我终于弄清楚了如何读取两个变量、执行 WMI 查询以及将三个变量写入 CSV 文件。我希望在当前工作目录中创建导出的 csv 文件,但我在 C:\Windows\system32 中找到它。我相信这些是我的代码中的相关行;如果您需要更多信息,请告诉我:
$resultfile = ".\Check-Results.csv"
$csv = "<$server>,<$service>,<$status>`r`n"
<ping check, foreach loop, wmi query here, etc...>
$csv +=$server + "," + $service + "," + $status + "`r`n"
$fso = New-Object -ComObject scripting.filesystemobject
$file = $fso.CreateTextFile($resultfile,$true)
$file.write($csv)
$file.close()
我的理解是点斜杠将是在 PWD 中获取结果文件所需的全部内容,但我猜不是。顺便说一句,我的脚本必须兼容 PS 2.0,所以我不能只执行 Export-CSV -append。
对于 alroc:我的脚本正在做的是使用 Import-CSV 从 csv 文件中获取服务器名称和 PortWWN。然后我在 foreach 循环中遍历服务器列表以查询 WMI 以查找与 PortWWN 匹配的 Emulex 端口,然后提取端口状态(链路关闭、操作等)
所以我从 Import-CSV 中的两个变量 $server 和 $wwn 开始,并以三个变量 $server、$wwn 和 $status 结束。这三个变量需要写入一个新的 CSV 文件。我知道 PS 2.0 有 Export-CSV,但它没有 -append 参数——这是 3.0 的功能。所以我早期的结果只显示了循环中的最后一个结果。
我从The Scripting Guy 获得了 fsobjects 的想法,并且很高兴看到结果完美运行,除了文件不在我预期的位置。这个脚本必须由相对缺乏经验的 PS 用户运行,所以它必须是相当安全的。他们会将脚本和源 CSV 文件复制到装有 PS 2.0 的计算机上,运行脚本,然后查看结果文件,我希望所有内容都在一个地方。
【问题讨论】:
-
我对 PowerShell 知之甚少,但我认为那是 PWD,您需要更改它:Managing Current Location。或者明确给出路径而不是使用`.`。
-
忘记使用 COM 对象在 PowerShell 中处理文件。你有 get-content、set-content 等等。
标签: powershell csv