Powershell为每个新行添加文件名(add-content)

时间:2018-03-22 17:44:13

标签: powershell get-childitem

我正在尝试从azuread导出Groupmembers列表,我的整个脚本运行得相当好,但我需要在最终文件中的每个新行都有它要导入的文件的名称(以及它导入的内容) )

我用来执行此操作的脚本部分如下

(在此处找到此代码

Merging multiple CSV files into one using PowerShell

get-childItem "C:\Users\user\Documents\Azure\Intune\management\*.csv" | foreach {

    $filePath = $_

    $lines =  $lines = Get-Content $filePath | Select -Skip 1
    $linesToWrite = switch($getFirstLine) {
           $true  {$lines}
           $false {$lines | Select -Skip 1}

    }

    $getFirstLine = $false
       Add-Content "C:\Users\user\Documents\Azure\Intune\management\master_list.csv" $linesToWrite
    }

2 个答案:

答案 0 :(得分:0)

我可能会这样做:

$files = Get-ChildItem -Path "C:\Users\user\Documents\Azure\Intune\management\*.csv"

ForEach ($file in $files) {
    Import-Csv -Path $File.FullName | 
        Select-Object -Property *, @{n='FileName';e={$file.Name}} | 
        Export-Csv -Path "C:\Users\user\Documents\Azure\Intune\management\master_list.csv" -NoTypeInformation -Append

}

请注意,您需要v3或更高版本的PowerShell才能获得-Append的{​​{1}}标记。

答案 1 :(得分:0)

另一种方法。如果文件很大,这种方式可能会占用大量内存,但我喜欢这种方法,它很适合我大脑的工作方式。

$result = New-Object System.Collections.ArrayList
foreach($file in Get-ChildItem 'C:\Users\User\Documents\Azure\InTune\Management\*.csv'){
  $result.AddRange((Import-CSV $file | Add-Member -InputObject $_ -Name 'File' -MemberType NoteProperty -Value $file.Name))
}
$result | Export-CSV 'C:\Users\user\Documents\Azure\Intune\management\master_list.csv' -NoTypeInformation

我认为这与版本无关,但我总是忘记在哪个版本中发生了哪些功能。实际上我认为Add-Member会把它放在v3 +。