使用PowerShell

时间:2017-03-15 02:25:51

标签: powershell csv

我尝试做的是每分钟从4个文件中读取文件大小,然后将结果输出到CSV文件。我想将每个文件大小写入自己的列。我已尝试使用下面的代码,但我没有得到我需要的结果。当文件大小写入CSV时,它们会被添加到单个列中,每个列都在自己的行上。 如果我将我的数组($ Process)扩展为两个记录,它会强制第一个记录中的所有文件长度到第一行,每个文件都在它们自己的列中(这就是我想要的)。 第二条记录也是如此。 有没有办法通过调整代码强制单个记录到一行及其值在自己的列中?我感谢您的帮助。谢谢。

$Csv = 'c:\users\rob\LogFileSize.csv'
$today = get-date -f "ddd"
$day = $today.ToLower()
$date = Get-Date
$numColstoExport=5

$a = dir C:\RTscada\bin\ErrorLogs\error1_Log_$day.txt
$a | Add-Member -MemberType AliasProperty -Name FileLength -Value Length
$b = dir C:\RTscada\bin\ErrorLogs\error2_Log_$day.txt
$b| Add-Member -MemberType AliasProperty -Name FileLength -Value Length
$c = dir C:\RTscada\bin\ErrorLogs\error3_Log_$day.txt
$c | Add-Member -MemberType AliasProperty -Name FileLength -Value Length
$d = dir C:\RTscada\bin\ErrorLogs\error4_Log_$day.txt
$d | Add-Member -MemberType AliasProperty -Name FileLength -Value Length


$error1 = $a.Length
$error2 = $b.Length
$error3 = $c.Length
$error4 = $d.Length

# Array of date and file lengths
$Process = @($date, $error1, $error2, $error3, $error4)

$holdarr=@()
$pNames=@("Date", "Error1", "Error2","Error2","Error4")
foreach ($row in $Process){
    $obj = new-object PSObject
    for ($i=0;$i -lt $numColstoExport; $i++){
        $obj | Add-Member -MemberType NoteProperty -Name $pNames[$i] -Value $row[$i]
        }
    $holdarr+=$obj
    $obj=$null
}

$holdarr | export-csv $Csv -NoTypeInformation -Append

2 个答案:

答案 0 :(得分:1)

这应该可以解决问题:

function MonitorLogFiles  {

    Param(
        $LogFiles,
        $Csv
    )

    $FirstCsvLine = 'Date'

    foreach ($LogFile in $LogFiles) {
        $FirstCsvLine = $FirstCsvLine + ",$(Split-Path $LogFile -leaf)"
    }

    $FirstCsvLine | Out-File $Csv  -Encoding UTF8


    while ($True) {

            $CurrentCsvLine = (Get-Date -format "dd-MMM-yyyy HH:mm").ToString()

            foreach ($LogFile in $LogFiles) {

                $Size = (Get-Item $LogFile).Length / 1KB

                $CurrentCsvLine = $CurrentCsvLine + ",$Size KB"

             }

            $CurrentCsvLine | Out-File $Csv  -append  -Encoding UTF8
            Start-Sleep -Seconds 60
           }

}

MonitorLogFiles -LogFiles C:\test.txt,C:\Test2.txt -Csv c:\test.csv

答案 1 :(得分:0)

您可以这样做:

$holdarr|Select-Object -Property Name, Value | Export-Csv $Csv -NoTypeInformation -Append

注意:无论您想要选择哪个列,都可以在 select-object 中选择所有列。

希望它有所帮助。