1C.Utils.psm1
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 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 |
. $PSScriptRoot\cmdlets\Clear-Cache1C.ps1 . $PSScriptRoot\cmdlets\CommonUtils.ps1 . $PSScriptRoot\cmdlets\Set-DebugServer1C.ps1 . $PSScriptRoot\cmdlets\Start-1C.ps1 . $PSScriptRoot\cmdlets\Stop-1C.ps1 . $PSScriptRoot\cmdlets\Uninstall-1C.ps1 . $PSScriptRoot\cmdlets\Parse-iBases.ps1 #region Utis #---------------------------------------------------------------------------------------- # получает файл списка объектов для захвата из отчета сравнения function Get-ObjectsXML { <# .SYNOPSIS Формирует xml-файл объектов метаданных для захвата в хранилище 1С. .DESCRIPTION Преобразует текстовый отчет сравнения в xml-файл списка объектов как требует платформа 1С для захвата объектов в хранилище 1С (см. справку ключа запуска платформы /ConfigurationRepositoryLock или /ConfigurationRepositoryUnLock). .PARAMETER ReportOfCompare Полный путь к тектовому отчету сравнения. .EXAMPLE #Получить список объектов метаданных для захвата в хранилище 1С: Get-ObjectsXML C:\ReportOfCompare.txt | Out-File C:\Objects.xml #> [CmdletBinding()] param( [string]$ReportOfCompare # отчет о сравнении полный в текстовом виде ) $Name = "" $NameFactor = @{} Write-Verbose "<--Прочитанные строки-->" $Text = Get-Content $ReportOfCompare | where {$_ -match "^\t{2,4}\- (\*{3})?(\w+\.\w+|\w|<--|-->)"} | foreach { if ($_ -match "^\t{2,3}\- \*{3}\w+\.\w+" -and $_ -notmatch "ТабличнаяЧасть") { $Name = $_.Trim().TrimStart("- ***") $NameFactor[$Name] = 0 Write-Verbose $Name } elseif ($_ -match "\- (\*{3})?(\w+|<--|-->)" -and $_ -notmatch "Справочная") { $NameFactor[$Name] += 1 Write-Verbose $_ } } $XML = "<Objects xmlns=`"http://v8.1c.ru/8.3/config/objects`" version=`"1.0`">`n" $NameFactor.GetEnumerator() | Sort-Object -Property Key | foreach {if ($_.Value -gt 0) {$XML += "`t<Object fullName = {0} includeChildObjects= `"false`" />`n" -f $_.Key}} $XML += "</Objects>" if ($VerbosePreference -eq 'Continue') { Write-Host "" Write-Verbose "<--Количество измененных подчиненных элементов-->" $NameFactor.GetEnumerator() | Sort-Object -Property Key | foreach{Write-Verbose ("{0} {1}" -f $_.Value, $_.Key)} Write-Host "" Write-Verbose "<--Результирующий XML-->" $XML | foreach{Write-Verbose $_} } Return $XML }# end of Get-ObjectsXML #---------------------------------------------------------------------------------------- # получает файл списка ролей для захвата из текста сообщений конфигуратора function Get-RolesXML { <# .SYNOPSIS Формирует xml-файл объектов метаданных для захвата в хранилище 1С. .DESCRIPTION Преобразует список сообщений конфигуратора в xml-файл списка объектов как требует платформа 1С для захвата объектов в хранилище 1С. Список сообщений выдается в окне сообщений конфигуратора при не удачной попытке удаления объектов метаданных в хранилище конфигурации 1С. .PARAMETER File Путь к файлу содержащий список сообщений конфигуратора при не удачном удалении метаданных. .PARAMETER Clipboard Сообщения конфигуратора взять из буфера обмена. .EXAMPLE #Получить список объектов метаданных для захвата в хранилище 1С: Get-ObjectsXML C:\ReportOfCompare.txt | Out-File C:\Objects.xml #> [CmdletBinding()] param( [string]$File, # файл содержащий список ролей которые требуется захватить (выдается в окне сообщений конфигуратора при не удачном удалении) [switch]$Clipboard # Если истина значит в буфер скопирован текст содержащий роли (из окна сообщений конфигуратора при не удачном удалении) ) if($Clipboard) { $TextClipboard = Get-Clipboard $tmp = New-TemporaryFile $TextClipboard | Out-File $tmp.FullName $File = $tmp.FullName } $ListRole = @{} $Text = Get-Content $File | where {$_ -match "(Роль\.|Role\.)"} | foreach { $Role = $_.Trim() # обрежем все перед Роль. $IndexRole = $Role.IndexOf("Роль.") $Role = $Role.Substring($IndexRole, $Role.Length-$IndexRole) # Вырежем от начала строки до первого TAB если есть $IndexTab = $Role.IndexOf("`t") if ($IndexTab -gt 0) {$Role = $Role.Substring(0, $IndexTab)} # Вырежем от начала строки до первого Пробела если есть $IndexSpace = $Role.IndexOf(" ") if ($IndexSpace -gt 0) {$Role = $Role.Substring(0, $Role.Length-$IndexSpace)} #Write-Verbose ("{0} {1} {2} {3} {4}" -f $Role, $IndexRole, $IndexSpace, $IndexTab, $Role.Length) $ListRole[$Role] = 0 } $XML = "<Objects xmlns=`"http://v8.1c.ru/8.3/config/objects`" version=`"1.0`">`n" $ListRole.GetEnumerator() | Sort-Object -Property Key | foreach {$XML += "`t<Object fullName = {0} includeChildObjects= `"false`" />`n" -f $_.Key} $XML += "</Objects>" if ($VerbosePreference -eq 'Continue') { Write-Host "" Write-Verbose "<--Прочитанные роли-->" $ListRole.GetEnumerator() | Sort-Object -Property Key | foreach{Write-Verbose ("{0}" -f $_.Key)} Write-Host "" Write-Verbose "<--Результирующий XML-->" $XML | foreach{Write-Verbose $_} } if($Clipboard) { Remove-Item $File } Return $XML }# end of Get-RolesXML #endregion Utils |