2013-10-22 15 views
0

以下是我的代碼示例:的PowerShell:在多頭排列出口-CSV書寫性能


$logpath = @(gci -path "c:\logs") 
foreach ($i in $logpath)  
     { 
     [array]$n += ($i.tostring()).trimend(".log") 
    [array]$t += ($i.tostring()).lastwritetime 
    } 
$obj = new-object psobject 
$obj | Add-Member -MemberType NoteProperty -Name Logname -Value $n 
$obj | Add-Member -MemberType NoteProperty -Name LastWriteTime -Value $t 
$i | export-csv c:\temp\logs.csv 

以下是輸出的樣子:

Name,LastWriteTime 
----,------------- 
Value1...,Value1 

以下是我想要的樣子:

Name,LastWriteTime 
Value1,Value1 
Value2,Value2 

回答

1

只是爲了用你的代碼,你可以試試這個:

$logpath = @(gci -path "c:\logs") 
$objects = @() # Empty array 
foreach ($i in $logpath)  
{ 
    $n = ($i.tostring()).trimend(".log") 
    $t = ($i.tostring()).lastwritetime 

    $obj = new-object psobject 
    $obj | Add-Member -MemberType NoteProperty -Name Logname -Value $n 
    $obj | Add-Member -MemberType NoteProperty -Name LastWriteTime -Value $t 
    $objects += $obj 
} 

$objects | export-csv c:\temp\logs.csv 

我只是使用對象的數組的循環中。

0

你太努力了。只需使用一個管道,select所需的性能,然後將結果導出爲CSV:

$logFolders = 'C:\logs', 'D:\more\logs', 'H:\some\other\logs' 
gci -Path $logFolders ` 
    | select @{n='Logname';e={$_.Name.TrimEnd(".log")}}, LastWriteTime ` 
    | Export-Csv 'C:\temp\logs.csv' 
+0

很好的建議。但是,我從三個不同的位置收集至少三種不同的日誌文件,我需要將它們全部放在同一個csv中。我會怎麼做呢? – user2905175

+0

@ user2905175 Get-ChildItem'接受一個包含路徑的數組。查看更新的答案。 –

1

有可以代替修剪過的文件擴展名的使用基本名稱屬性:

gci -path "c:\logs" | 
select @{l='Name';e={$_.basename}},Lastwritetime | 
export-csv c:\temp\logs.csv