@Rubicon12

Почему powershell выдаёт разные результаты на команду из консольного ввода и из ScriptProperty?

Решил сделать инструментарий для работы с INI файлами в powershell

PS D:\> $path = "D:\test.ini"
PS D:\> $file = Get-Content $path
#Добавляю свойство HeadlPrint которое должно напечатать все заголовки
PS D:\> $file | Add-Member -MemberType ScriptProperty -Name "HeadlPrint" -Value {$this | Select-String "^\[(.+)\]" }

#Сначало пробую из консольного ввода
PS D:\> $a=$file | Select-String "^\[(.+)\]"
#Вывожу все заголовки
PS D:\> $a

[Headl1]
[Headl2]
[Headl3]

#Вывожу 2й заголовок
PS D:\> $a[1].Line
[Headl2]

#Вывожу номер строки в файле занимаемый 2ым заголовком
PS D:\> $a[1].LineNumber
83

#Пробую из свойства
PS D:\> $file.HeadlPrint

[Headl1]
[Headl2]
[Headl3]

PS D:\> $file.HeadlPrint[1].Line
[Headl2]

#А вот тут почему-то выдаёт не правильно
PS D:\> $file.HeadlPrint[1].LineNumber
1

Готовое решение на основе function Get-IniContent и function Out-IniFile не предлагать, оно путает порядок заголовков и ключей
Другие готовые решения которые я перепробовал не хотят работать с пустыми ключами ... то-есть на вот такой структуре крашется

[Headl1]
Key1=123
Key2=abc
Key3=Headl2
Key4=Headl3

[Headl2]
KeyX1
KeyX2
KeyX3

[Headl3]
KeyY1
KeyY2
KeyY3
  • Вопрос задан
  • 74 просмотра
Пригласить эксперта
Ответы на вопрос 1
@MaxKozlov Куратор тега PowerShell
Самое простое, если вас не устраивает Get-IniContent - поправить его, чтобы не путал :)
...
$ini = [ordered]@{}
...
$ini[$section] = [ordered]@{}
...


Или взять класс на c# Отсюда
и вкрячить его в свой powershell скрипт
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы