2017-10-11 24 views
3

我现有的CSV看起来是这样的:写信息到现有的CSV

"Name","Surename","Workstation" 
"Doe","John","PC1" 
"Fonzarelli","Arthur","PC4" 
"Tribbiani","Joey","PC77" 

现在,我要检查主机是否在线与否,并写了一个名为新列的“状态”,结果到我的CSV 。

$file = Import-Csv "C:\Scripts\WS-Status.csv" 

Foreach ($ws in $file) { 

    If (Test-Connection $ws.Workstation -Count 1 -Quiet) { 

     Write-Host $ws.Workstation "is online" 
    } 

    Else {Write-Host $ws.Workstation "is offline"} 

} 

它工作正常,在控制台中,但我到底怎么可以将结果导出到我的CSV?

回答

2

您可以使用Add-Member cmdlet来的成员(状态)添加到您当前实体:

$file = Import-Csv "C:\Scripts\WS-Status.csv" 
Foreach ($ws in $file) 
{ 
    if (Test-Connection $ws.Workstation -Count 1 -Quiet) 
    { 
     Add-Member -InputObject $ws -NotePropertyName "Status" -NotePropertyValue "online" 
    } 
    else 
    { 
     Add-Member -InputObject $ws -NotePropertyName "Status" -NotePropertyValue "offline" 
    } 
} 

$file | Export-Csv "C:\Scripts\WS-Status.csv" -NoTypeInformation 
2

你可以创建你的ForEach环内的PSCustomObject

$file = Import-Csv "C:\Scripts\WS-Status.csv" 

Foreach ($ws in $file) { 

    if(Test-Connection $ws.Workstation -Count 1 -Quiet){ 
     Write-Host $ws.Workstation "is online" 
     $status = "Online" 
    }else{ 
     Write-Host $ws.Workstation "is offline" 
     $status = "Offline" 
    } 

    [array]$result += [PSCustomObject] @{ 
     Name  = $ws.Name 
     Surename = $ws.Surename 
     Workstation = $ws.Workstation 
     Status  = $status 
    } 

} 

$result | Export-Csv thing.csv -NoTypeInformation 
0

你必须使用Out-File cmdlet,使您可以将流水线输出直接发送到文本文件。

$file = Import-Csv "C:\Scripts\WS-Status.csv" 

Foreach ($ws in $file) { 

    If (Test-Connection $ws.Workstation -Count 1 -Quiet) { 
     $ws.Workstation + " is online" | Out-File -Append OutPutFile.csv 
    } 
    Else { 
     $ws.Workstation + ' is offline' | Out-File -Append OutPutFile.csv 
    } 

}