Почему результат выполнения команды в PowerShell отличается при вводе ее в консоль и при использовании в ScriptProperty?

Как можно в PowerShell найти и вывести все заголовки в INI файле, применяя скрипт к переменной содержащей его содержимое, чтобы получить правильный порядок строк и номера строки для каждого заголовка, даже если в файле присутствуют пустые ключи?
  • 15 мая 2024 г. 7:00
Ответы на вопрос 2
1. Результат выполнения команды в PowerShell может отличаться при вводе ее в консоль и при использовании в ScriptProperty из-за контекста выполнения. Когда команда выполняется в консоли, она выполняется в текущем сеансе PowerShell с текущим окружением. А когда она используется в ScriptProperty, она выполняется в объеме выполнения сценария, который может иметь отличающееся окружение и параметры.

2. Чтобы найти и вывести все заголовки в INI файле в PowerShell, можно использовать следующий скрипт:

```
$iniData = Get-Content -Path "путь_к_файлу.ini"
$iniData | ForEach-Object {
    if ($_ -match "^\[(.+)\]") {
        $header = $matches[1]
        $lineNumber = $_.ReadCount
        Write-Output "Заголовок: $header, Номер строки: $lineNumber"
    }
}
```

Этот скрипт загружает содержимое файла INI в переменную `$iniData`, а затем проходит по каждой строке файла, ища строки, которые соответствуют шаблону `[заголовок]`. При обнаружении заголовка он выводит его название и номер строки. Таким образом, данный скрипт позволит найти все заголовки в INI файле и вывести их вместе с номерами строк, даже если в файле присутствуют пустые ключи.
Самое простое, если вас не устраивает Get-IniContent - поправить его, чтобы не путал :) 
...
$ini = [ordered]@{}
...
$ini[$section] = [ordered]@{}
...


Или взять класс на c# Отсюда
и вкрячить его в свой powershell скрипт
Похожие вопросы