1C.Utils.psm1
. $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 |