将信息写入现有的 csv

Write Informations into existing csv

我现有的 csv 如下所示:

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

现在,我想检查主机是否在线,并将一个名为 "Status" 的新列和结果写入我的 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 中?

您可以在 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

您可以使用 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

您必须使用 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
    }

}