PowerShell: файл с разделителями в виде вкладок фрагментов и кубиков

У меня есть текстовый файл с разделителями табуляции, созданный моей программой резервного копирования. Я хочу иметь возможность импортировать его как массив PowerShell с помощью Import-CSV.

Проблема в том, что первые 5 строк экспортируемого файла не позволяют PowerShell распознать его как массив:

#List of Media
#Cell Manager: hpdp.domain.local
#Creation Date: 11/08/2018 9:36:09 AM
# Headers
# Medium ID Label   Location    Status  Protection  Used [MB]   Total [MB]  Last Used   Last Used_t Pool    Type

Я могу это исправить, используя блокнот, чтобы удалить первые четыре строки и удалить первый # из строки заголовка. Файл тогда выглядит так:

Medium ID   Label   Location    Status  Protection  Used [MB]   Total [MB]  Last Used   Last Used_t Pool    Type
id1:id2:id3:id5 [hostname] labelname_31 [Library:     5]    Good    13/08/2018 10:01:41 PM  762699.50   762699.50   14/07/2018 10:00:36 PM  1531828836  Tape Drive Pool LTO-Ultrium

Я пытаюсь найти способ заставить PowerShell внести это изменение. Например, я пытаюсь удалить первые четыре строки в качестве первого шага, используя эту строку:

(Get-Content $file | Select-Object -Skip 4) | Set-Content $file

Кажется, что файл теряет свои вкладки, поэтому он больше не разделяется.

Как я могу удалить строки, а также первый #, не теряя вкладки? Заранее спасибо!

1 ответ

Решение

Это может быть сделано что-то вроде этого

$data = Get-Content $file | Select-Object -Skip 4 
$data[0] = $data[0] -replace '^#\s*', ''

Теперь вы можете перезаписать файл, если хотите:

$data | Set-Content $file -Force

или используйте его непосредственно как объект в Powershell (объект csv представляет собой массив объектов PSObject)

$csv = ($data -join [environment]::NewLine) | ConvertFrom-Csv -Delimiter "`t"

или используйте этот преобразованный объект, чтобы снова записать файл

$csv | Export-Csv -Path $file -Delimiter "`t" -NoTypeInformation -Force
Другие вопросы по тегам