我尝试做的是每分钟从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
答案 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 中选择所有列。
希望它有所帮助。