cmdlets/Read-iBases.ps1
. $PSScriptRoot\CommonUtils\CommonUtils.ps1 New-Alias -Name 'Parse-iBases' -Value 'Read-iBases' #---------------------------------------------------------------------------------------- # возвращает путь к файлу iBases.v8i function Get-iBasesFullName { <# .SYNOPSIS Возвращает полный путь по умолчанию к файлу iBases.v8i. .DESCRIPTION Проверяет наличие и возвращает полный путь к файлу iBases.v8i. Если файл не существует, то возвращается $null. Расположение файла iBases.v8i по умолчанию: - Для ОС Windows: %APPDATA%\1C\1CEStart\ #> $Result = $null if (Test-Path("$env:APPDATA\1C\1CEStart\iBases.v8i")){$Result = "$env:APPDATA\1C\1CEStart\iBases.v8i"} $Result }# end of Get-iBasesFullName #---------------------------------------------------------------------------------------- # получает файл списка объектов для захвата из отчета сравнения function Read-iBases { <# .SYNOPSIS Преобразует содержимое файла iBases.v8i в массив хэш-таблиц. .DESCRIPTION Преобразует текстовый файл настроек запуска баз iBases.v8i в массив хэш-таблиц, где в каждой хэш-таблице перечисленны все указаные для одной базы параметры. .PARAMETER FilePath Полный путь к файлу iBases.v8i, если не указан будет взят из профиля текущего пользователя. Для ОС Windows: %APPDATA%\1C\1CEStart\iBases.v8i. .EXAMPLE #Получить список файловых баз запускаемых на платформе 8.3: $FileBases = Read-iBases | where {$_.Connect -macth 'File*' -and $_.Version -match '8.3*'} .EXAMPLE #Показать идентификаторы и имена баз запускаемых на платформе 8.3: Read-iBases | where {$_.Version -match '8.3*'} | foreach{Write-Host ("{0} {1}" -f $_.ID, $_.Name)} .EXAMPLE #Сформировать файл Descript.ion (для любителей Far): #в каталог ...\APPDATA\Local\... (кэш метаданых) Read-iBases | foreach{"{0} {1}" -f $_.ID, $_.Name} > $env:LOCALAPPDATA\1C\1cv8\Descript.ion #в каталог ...\APPDATA\Roaming\... (настройки пользователя) Read-iBases | foreach{"{0} {1}" -f $_.ID, $_.Name} > $env:APPDATA\1C\1cv8\Descript.ion #> [CmdletBinding()] param( [string]$FilePath # полный путь к файлу iBases.v8i ) if ($FilePath -eq '') {$FilePath = Get-iBasesFullName} Write-Verbose "FilePath = $FilePath" $BufferBases = @{} switch -Regex -File $Filepath { "^\[(.+)\]$" { Write-Verbose ("`n`t Секция '{0}'" -f $matches[1]) $NameBase = $matches[1] $Section = @{Name = $NameBase} $BufferBases[$NameBase] = $Section } "^([^=]+)=(.*)$" { Write-Verbose ("Ключ '{0}' = '{1}'" -f $matches[1], $matches[2]) $Section[$matches[1]] = $matches[2] } } $iBases = @() $BufferBases.Keys | Sort-Object | foreach{ if ($null -ne $BufferBases[$_]['Connect']){$iBases += $BufferBases[$_]} } $iBases }# end of Read-iBases |