Лучше всего снова преобразовать текст в объект со свойствами.
Это довольно просто, так как в первых двух столбцах нет пробелов в значениях,
, так что этот один вкладыш:
gc .\file.txt|?{$_ -notmatch '^[ -]+$'}|%{$_.trim(' ') -split ' +',3 -join ','}|convertfrom-csv
дает такой вывод:
Name Enabled Description
---- ------- -----------
administrator1 True
Azureuser True Built-in account for administering the computer/domain
DefaultAccount False A user account managed by the system.
Guest False Built-in account for guest access to the computer/domain
Выглядит знакомо?
Да, но хранится в переменной, т. Е. $ Data = ...,
позволяет напрямую получить доступ ко 2-му имени (индекс начинается с нуля) с помощью
> $Data[1].Name
Azureuser
> $Data[2].Description
A user account managed by the system.
Для улучшенияОбъясните, что делает скрипт, здесь версия с умыслом:
$Data = Get-Content .\file.txt | Where-Object {$_ -notmatch '^[ -]+$'} |
ForEach-Object{
$_.trim(' ') -split ' +',3 -join ','
} | ConvertFrom-Csv
Where-Object {$_ -notmatch '^[ -]+$'}
удаляет строку только с тире и пробелами
$_.trim(' ')
удаляет пробелы в строках
-split ' +',3
разбивает строку при любом количестве пробелов> 1 ровно на 3 части
, которые склеиваются вместе с -join ','
, образуя действительный csv-файл с заголовком
Окончательный вариант| ConvertFrom-Csv
делает работу.