cmdlets/Load-ToBase1C.ps1

. $PSScriptRoot\CommonUtils\CommonUtils.ps1

function Load-ToBase1C
{
<#
    .SYNOPSIS
        Загружает dt-файл в базу 1С.
    .DESCRIPTION
        Загружает dt-файл в базу 1С. dt-файл может быть задан как параметр или помещен в буфер обмена перед запуском скрипта.
        В случае если dt-файл расположен в локальной сети (начинается на \\),
        то перед загрузкой в базу он будет скопирован на локальный компьютер.
        Если указаная локальная база и имеются запущенные клиенты или конфигуратор к этой базе,
        то перед загрузкой будет предпринята попытка завершить все рабочие процессы.
    .PARAMETER FilePath
        Путь к dt-файлу.
        Псевдоним: dt
    .PARAMETER IBName
        Имя базы как оно задано в окне запуска предприятия.
        Псевдоним: ib
    .PARAMETER UserName
        Имя пользователя базы. Если не указан, то Администратор.
        Псевдоним: u
    .PARAMETER Password
        Пароль пользователя базы.
        Псевдоним: p
    .PARAMETER DirTemp
        Каталог приемник куда будут копироваться файлы из сети.
        Если не задан то файл копируется во временный каталог пользователя и после загрузки в базу удаляется.
        Если каталог указан, то файл после загрузки не удаляется.
        Псевдоним: tmp
    .PARAMETER OpenEnterprise
        После загрузки dt-файла запустить базу в режиме предприятия.
        Если параметр не задан, то база открывается в режиме конфигуратора.
        Псевдоним: ent
    .PARAMETER Wait
        После выполнения дождаться нажатия любой клавиши.
        Псевдоним: w
#>

[CmdletBinding()]
    param(
    [Alias("dt")][string]$FilePath, # Путь к Dt файлу
    [Alias("ib")][string]$IBName, # имя базы как оно указано в окне запуска предприятия
    [Alias("u")][string]$UserName='Администратор', # имя пользователя базы
    [Alias("p")][string]$Password, # пароль пользователя базы
    [Alias("tmp")][string]$DirTemp, # Каталог приемник куда копировать файлы из сети
    [Alias("ent")][switch]$OpenEnterprise, # после загрузки запустить в режиме предприятия (по умолчанию открывается конфигуратор)
    [Alias("w")][switch]$Wait # Ожидать нажатия любой клавиши (параметр переключатель)
    )

$TotalWatch = [System.Diagnostics.Stopwatch]::StartNew() # глобальный секундомер
$Watch = [System.Diagnostics.Stopwatch]::StartNew() # секундомер операции

if ('' -eq $FilePath){
    $FileSource = Get-Clipboard
}else{
    $FileSource = $FilePath
}
$FileSource = $FileSource.Trim().Trim('`"')
if ($null -eq $FileSource -or '' -eq $FileSource -or !(Test-Path $FileSource)){
    Write-Warning "В буфере обмена не обнаружен путь к DT-файлу"
    return
}
if ('' -eq $DirTemp){
    $DirTemp = $Env:TMP
}
$DirTemp = $DirTemp.TrimEnd('\')

$FileFromNetwork = $false
if ($FileSource[1] -eq '\') {

    $FileSource = $FileSource.Replace('/', '\')
    Write-Host ('Файл источник: {0}' -f $FileSource)
    $PartPath = $FileSource -split "\\"
    $NewFile = "$DirTemp\{0}" -f ($PartPath[-1])
    Write-Host ('Файл получатель: {0}' -f $NewFile)

    Copy-Item $FileSource $NewFile
    $FileFromNetwork = $true

    $Watch.Stop() #Остановка секундомера операции
    Write-Host ("Затрачено на копирование: {0:hh}:{0:mm}:{0:ss}" -f $Watch.Elapsed) -ForegroundColor White
    ''
} else {
    $NewFile = $FileSource
}

Stop-1C $IBName -Force
''
$Designer1C = New-Designer1C -IBName $IBName -User $UserName -PasswordUser $Password
$Designer1C.RestoreIB($NewFile)
if ($OpenEnterprise) {
    $Designer1C.RunEnterprise()
} else {
    $Designer1C.Open()
}

if ($FileFromNetwork -and $DirTemp -eq $Env:TMP){
    Remove-Item $NewFile
}

$TotalWatch.Stop() #Остановка глобального секундомера
Write-Host("`nВсего затрачено: {0:hh}:{0:mm}:{0:ss}" -f $TotalWatch.Elapsed) -ForegroundColor White

if ($Wait) { Wait-PressAnyKey }

} # end of Load-ToBase1C