cmdlets/Parse-iBases.ps1
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 |
. $PSScriptRoot\CommonUtils\CommonUtils.ps1 #---------------------------------------------------------------------------------------- # возвращает путь к файлу 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 Parse-iBases { <# .SYNOPSIS Преобразует содержимое файла iBases.v8i в массив хэш-таблиц. .DESCRIPTION Преобразует текстовый файл настроек запуска баз iBases.v8i в массив хэш-таблиц, где в каждой хэш-таблице перечисленны все указаные для одной базы параметры. .PARAMETER FilePath Полный путь к файлу iBases.v8i, если не указан будет взят из профиля текущего пользователя. Для ОС Windows: %APPDATA%\1C\1CEStart\iBases.v8i. .EXAMPLE #Получить список файловых баз запускаемых на платформе 8.3: $FileBases = Parse-iBases | where {$_.Connect -macth 'File*' -and $_.Version -match '8.3*'} .EXAMPLE #Показать идентификаторы и имена баз запускаемых на платформе 8.3: Parse-iBases | where {$_.Version -match '8.3*'} | foreach{Write-Host ("{0} {1}" -f $_.ID, $_.Name)} .EXAMPLE #Сформировать файл Descript.ion (для любителей Far): #в каталог ...\APPDATA\Local\... (кэш метаданых) Parse-iBases | foreach{"{0} {1}" -f $_.ID, $_.Name} > $env:LOCALAPPDATA\1C\1cv8\Descript.ion #в каталог ...\APPDATA\Roaming\... (настройки пользователя) Parse-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]) if ($Section -ne $null){$BufferBases[$NameBase] = $Section} $NameBase = $matches[1] $Section = @{Name = $NameBase} } "^([^=]+)=(.*)$" { Write-Verbose ("Ключ '{0}' = '{1}'" -f $matches[1], $matches[2]) $Section[$matches[1]] = $matches[2] } } $iBases = @() $BufferBases.Keys | Sort-Object | foreach{ if ($BufferBases[$_]['Connect'] -ne $null){$iBases += $BufferBases[$_]} } $iBases }# end of Parse-iBases |