将所有输出写入文件

时间:2014-03-27 19:09:44

标签: powershell

我使用以下代码获取具有IP地址的计算机列表。它打印出主机名和IP地址。如果主机处于脱机状态,则表示" $ computername处于脱机状态。"这是代码:

$csv = Get-Content TEST_MACHINES.csv

foreach ($computer in $csv)
{
    try
    {
         Test-Connection $computer -Count 1 -ErrorAction Stop | Select Address, IPV4Address 
    }
    catch
    {
         "$computer is offline" 
    }
 }

效果很好并输出如下数据:

地址IPV4Address

------- -----------

TESTMACHINE 192.168.1.1

TESTMACHINE2 192.168.1.2

TESTMACHINE3处于离线状态。

然而,没有多少技巧允许我将所有这些写入文件,即使它在控制台中显示如此。它写入空白文件或仅写入异常。

如何完全按原样捕获此输出?

3 个答案:

答案 0 :(得分:2)

您可以使用与所选测试连接字段相同的字段名称创建自定义PowerShell对象,然后将成功和失败导出为CSV。请参阅下面的示例:

$csv = Get-Content TEST_MACHINES.csv

foreach ($computer in $csv)
{
    try
    {
        Test-Connection $computer -Count 1 -ErrorAction Stop | Select Address, IPV4Address | Export-Csv -Path .\ConnectionTest.csv -Append
    }
    catch
    {
        $Output = New-Object PSObject -Property @{
            Address = $computer
            IPV4Address = "Offline"
        }

        $Output | Export-Csv -Path .\ConnectionTest.csv -Append
    }
 }

答案 1 :(得分:1)

在我编写脚本的方式中,我使用简单的if..then..else循环。这对我来说似乎最合乎逻辑。你确实尝试过" Out-File"在管道之后切换,不是吗?...我刚刚在localhost和一些随机名称上运行了以下内容,并且工作得很好......

$csv = Get-Content TEST_MACHINES.csv

foreach ($computer in $csv)
{
    if (Test-Connection $computer -Count 1 -Quiet)
    {
    Test-Connection $computer -Count 1 -ErrorAction Stop | Select Address, IPV4Address | Out-file -append "SomeFile.txt"
    }
    else
    {
    "$computer is offline" | Out-File -Append "SomeFile.txt"
    }
 }

答案 2 :(得分:1)

试试这个:

$csv = Get-Content TEST_MACHINES.csv
'' > foo.log
foreach ($computer in $csv)
{
    try
    {
         Test-Connection $computer -Count 1 -ErrorAction Stop | Select Address, IPV4Address >> foo.log
    }
    catch
    {
         "$computer is offline" >> foo.log
    }
 }