2017-10-11 21 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 
    } 

}