76 lines
2.5 KiB
PowerShell
76 lines
2.5 KiB
PowerShell
[CmdletBinding()]
|
|
param(
|
|
[string]$DesignerPath = "C:\Program Files\1cv8\8.5.1.1236\bin\1cv8.exe",
|
|
[string]$ExpectedVersion = "8.5.1.1236",
|
|
[string]$ServerConnection = "wsr\upo_test",
|
|
[string]$Extension = "test2",
|
|
[Parameter(Mandatory = $true)]
|
|
[string]$OutputDirectory
|
|
)
|
|
|
|
$ErrorActionPreference = "Stop"
|
|
Set-StrictMode -Version Latest
|
|
|
|
if (-not (Test-Path -LiteralPath $DesignerPath -PathType Leaf)) {
|
|
throw "1C Designer executable not found: $DesignerPath"
|
|
}
|
|
|
|
$actualVersion = [System.Diagnostics.FileVersionInfo]::GetVersionInfo($DesignerPath).FileVersion
|
|
if ($actualVersion -ne $ExpectedVersion) {
|
|
throw "1C Designer version mismatch: expected $ExpectedVersion, found $actualVersion"
|
|
}
|
|
|
|
$resolvedOutput = [System.IO.Path]::GetFullPath($OutputDirectory)
|
|
if (Test-Path -LiteralPath $resolvedOutput) {
|
|
$existingItems = @(Get-ChildItem -LiteralPath $resolvedOutput -Force)
|
|
if ($existingItems.Count -gt 0) {
|
|
throw "Output directory must be empty: $resolvedOutput"
|
|
}
|
|
}
|
|
else {
|
|
New-Item -ItemType Directory -Path $resolvedOutput | Out-Null
|
|
}
|
|
|
|
$logPath = [System.IO.Path]::GetTempFileName()
|
|
try {
|
|
$designerArguments = @(
|
|
"DESIGNER",
|
|
"/S", $ServerConnection,
|
|
"/WA+",
|
|
"/DisableStartupMessages",
|
|
"/DisableStartupDialogs",
|
|
"/Out", $logPath,
|
|
"/DumpConfigToFiles", $resolvedOutput,
|
|
"-Extension", $Extension
|
|
)
|
|
|
|
& $DesignerPath @designerArguments
|
|
$designerExitCode = $LASTEXITCODE
|
|
$designerLog = Get-Content -LiteralPath $logPath -Raw -ErrorAction SilentlyContinue
|
|
if ($designerExitCode -ne 0) {
|
|
$details = if ($designerLog) { $designerLog.Trim() } else { "Designer did not write a diagnostic log." }
|
|
throw "1C Designer export failed with exit code ${designerExitCode}: $details"
|
|
}
|
|
|
|
$exportedFiles = @(Get-ChildItem -LiteralPath $resolvedOutput -File -Recurse)
|
|
if ($exportedFiles.Count -eq 0) {
|
|
$details = if ($designerLog) { $designerLog.Trim() } else { "No diagnostic log was written." }
|
|
throw "1C Designer reported success but exported no files: $details"
|
|
}
|
|
|
|
[pscustomobject]@{
|
|
status = "exported"
|
|
designer_version = $actualVersion
|
|
server_connection = $ServerConnection
|
|
extension = $Extension
|
|
output_directory = $resolvedOutput
|
|
exported_files = $exportedFiles.Count
|
|
access_mode = "operating_system_integrated"
|
|
} | ConvertTo-Json -Depth 3
|
|
}
|
|
finally {
|
|
if (Test-Path -LiteralPath $logPath -PathType Leaf) {
|
|
Remove-Item -LiteralPath $logPath -Force
|
|
}
|
|
}
|