如何将powershell查询的输出写入txt或csv文件?

时间:2015-04-22 02:37:41

标签: powershell

我有一个查询来保留批量IP地址,但无法找到将输出写入txt或csv文件的方法。我尝试使用export-csv和out-file cmdlet但它不起作用。

Foreach ($line in (Import-Csv -header Scope,IP,MAC,Hostname  -Path C:\temp\NewDHCP.csv))
{
    Add-DhcpServerv4Reservation -ComputerName dhcp server-ScopeId $line.scope -IPAddress $line.IP -ClientId $line.MAC -HostName $line.hostname -Description "Reservation for Printer"| outfile c:\temp\result.txt
} 

Result.txt文件为空。

希望看到输出成功完成预订或是否有错误。

由于 萨姆

3 个答案:

答案 0 :(得分:1)

Out-File移到foreach括号外:

Foreach($line in $stuff) {Do-Stuff $line} | Out-File c:\temp\result.txt

如果将Out-File留在foreach循环内,默认行为将在每次迭代时覆盖该文件。

此外,如果删除Out-File

,请确保脚本确实将数据返回到控制台

修改

迈克是对的,上一个命令不会被删除。 我通常这样做,这确实有效:

$stuff | %{Do-Stuff $_} | Out-File c:\temp\result.txt

答案 1 :(得分:1)

大部分只是一个FYI,但你所拥有的应该有效,但可能有两点值得一提:

  1. 我希望它只是一个错字,但问题是OutFile应该只是Out-File
  2. 在循环外部移动日志记录是一个好主意,但对于你的方式,只需添加-Append开关可能会得到你正在寻找的结果。另外-Encoding ASCII取决于您的输出。
  3. 我不熟悉cmdlet Add-DhcpServerv4Reservation,但只要将结果发送到标准输出,这一切都会起作用。

答案 2 :(得分:0)

@Jon很接近,但你不能像这样管道一个foreach循环。

但是你可以将它括在$()中。这看起来很讨厌,但它确实有效。

$(Foreach ($line in (Import-Csv -header Scope,IP,MAC,Hostname  -Path C:\temp\NewDHCP.csv))
{
    Add-DhcpServerv4Reservation -ComputerName dhcp server-ScopeId $line.scope -IPAddress $line.IP -ClientId $line.MAC -HostName $line.hostname -Description "Reservation for Printer" 
} ) | out-file c:\temp\result.txt