Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] скрипт отрабатывает только через PS ISE (http://forum.oszone.net/showthread.php?t=329276)

firstarey 23-08-2017 06:41 2760117

скрипт отрабатывает только через PS ISE
 
Здравствуйте!

скрипт корректно отрабатывает только через PS ISE. При запуске самого скрипта двойным щелчком черное окно PS открывается и тут же закрывается. При запуске через открытое окно - зависает.
при этом другие скрипты отрабатывают как положено.
такая же проблема и у другого скрипта, где есть создание формы выбора файла (хотя раньше на вин xp работало).
проверил на другой машине (терминал вин серв 2008) черное окно ps открывается и висит.

сам же скрипт открывает xml файл и извлекает из него данные и записывает в ексель.

сам скрипт
Код:

<#
.SYNOPSIS
        обработка XML росреестра
.DESCRIPTION
        читает XML файл росреестра ЕГРН и сохраняет записи о частях в ексель
.NOTES
        Автор:                Александр Анатольевич
        Почта:               
        Телефон:       
#>

param (
#        создаем форму для запроса файла
        [string]$Title,
        [string]$Directory,
        [string]$Filter="All Files (*.xml)|*.xml"
)

[System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms") | Out-Null
$objForm = New-Object System.Windows.Forms.OpenFileDialog
$objForm.InitialDirectory = $Directory
$objForm.Filter = $Filter
$objForm.Title = $Title
$Show = $objForm.ShowDialog()
If ($Show -eq "OK"){
        $path=$objForm.FileName
} Else {
        read-host "Файл не выбран. выход."
        start-sleep 8
        break
}

#        создаем новый объект как xml
$oXmlDocument = New-Object -TypeName System.Xml.XmlDocument
#        загружаем текущий файл в переменную обработки
$oXmlDocument.load($path)
$OutNameXlsx=$path -Replace "xml","xlsx"

#---#-------------------------------------------------------------------------------------------------------
#-->Функция оформления строки в екселе
function Excel_format_1 { #оформляем шапку
        $lineStyle  = "microsoft.office.interop.excel.xlLineStyle"  -as [type]
        $colorIndex = "microsoft.office.interop.excel.xlColorIndex" -as [type]
        #---по центру, рамка, выделить жирным
        $selection.Interior.ColorIndex = 40
        $selection.VerticalAlignment  = -4108        #по центру
        $selection.HorizontalAlignment = -4108        #по центру
        # Выделяем таблицу (рамка)
        $selection.borders.LineStyle  = $lineStyle::xlContinuous
        $selection.borders.ColorIndex  = $colorIndex::xlColorIndexAutomatic
        # Разукрашиваем
        $selection.Font.Size          = 12
        $selection.Font.ColorIndex    = 55
        $selection.Font.Color          = 8210719
        # Выделяем жирным
        $selection.Font.Bold          = $true
        # Ровняем ширину столбцов
        $UsedRange = $ws.UsedRange
        $UsedRange.EntireColumn.AutoFit() | Out-Null
}
function Excel_format_2 { #оформляем основное содержимое
        $lineStyle  = "microsoft.office.interop.excel.xlLineStyle"  -as [type]
        $colorIndex = "microsoft.office.interop.excel.xlColorIndex" -as [type]
        #---по центру, по лево
        $selection.VerticalAlignment  = -4108        #по центру
        $selection.HorizontalAlignment = -4131        #по лево
        # Ровняем ширину столбцов
        $UsedRange = $ws.UsedRange
        $UsedRange.EntireColumn.AutoFit() | Out-Null
}
#--<Функция оформления строки в екселе


#---#-------------------------------------------------------------------------------------------------------
#href="https://portal.rosreestr.ru/xsl/EGRP/Reestr_Extract_Big/ZU/07/Common.xsl"
if (!($oXmlDocument."xml-stylesheet".split("/")[6] -eq "Reestr_Extract_Big")) {
        Read-Host "Схема файла не соответствует Reestr_Extract_Big"
        break
} else {
        Write-Host "Созаем таблицу координат.."
        #-->Создаем эксель-файл, форматируем
        #-->Первый лист
        $ex = New-Object -Com Excel.Application
        #-----------------$ex.visible = $true
        #-----------------$ex.DisplayAlerts = $False
        $wb = $ex.Workbooks.Add()
        $ws = $wb.Worksheets.Add()
        $ws = $wb.Worksheets.Item(1)
        # получить листы
        $s1 = $wb.worksheets | where {$_.name -eq "лист1"}
        $s1.activate()
        $s1.Name = 'Учетный номер части'
        $Row=1
        # Заполняем ячейки - шапку таблицы
        $s1.Cells.Item($Row,1) = "Учетный номер части"
        $s1.Cells.Item($Row,2) = "Учетный номер части и номер"
        # Оформляем
        $selection = $s1.Range(("A{0}" -f $Row),("B{0}" -f $Row))
        Excel_format_1
        # Ровняем ширину столбцов
        $UsedRange = $s1.UsedRange
        $UsedRange.EntireColumn.AutoFit() | Out-Null
        $selection = $null
        $wb.SaveAs("$OutNameXlsx")
        Write-Host "таблица создана"
        Write-Host "заполняем таблицу.."
        start-sleep -s 2
        #<--Таблица создана
        #-->Заполнение 1 листа ()

        $Row = $s1.Range("A65536").End(-4162).Row + 1
        $CadastralNumber = $oXmlDocument.KVZU.Parcels.Parcel.CadastralNumber
        #-->Прогресс-бар
        $КоличествоЧастей = 0
        foreach ($item in $oXmlDocument.KVZU.Parcels.Parcel.SubParcels.SubParcel) {
                $КоличествоЧастей++
        }
        $percent=$КоличествоЧастей/100
        $c = 0
        Write-Host "Будет обработано $КоличествоЧастей записей"
        #<--Прогресс-бар
        $oXmlDocument.KVZU.Parcels.Parcel.SubParcels.SubParcel |`
        ForEach-Object -Process {
                #-->Прогресс-бар
                $c++;[int]$a = $c/$percent
                Write-Progress -Activity "Идет обработка…"`
                        -PercentComplete $a -CurrentOperation    "$a% завершено" `
                        -Status "Пожалуйста подождите"
                #<--Прогресс-бар
                        # Заполняем
                        $s1.Cells.Item($Row,1) = $_.NumberRecord
                        #$Detailedname = $User.LastName + " " + $User.FirstName + " " + $User.MiddleName
                        $s1.Cells.Item($Row,2) = $CadastralNumber + "/" + $_.NumberRecord
                        $Row++
        }

        Write-Progress -Activity "Идет обработка…" `
                -Completed `
                -Status "готово"
        # Оформляем
        $selection = $s1.Range(("A{0}" -f $Row),("F{0}" -f $Row))
        Excel_format_2
        # Ровняем ширину столбцов
        $UsedRange = $s1.UsedRange
        $UsedRange.EntireColumn.AutoFit() | Out-Null
        $selection = $null
        $wb.Save()
        Write-Host "таблица координат заполнена"
        start-sleep -s 2
        $wb.Close($true)
        $ex.Quit()
       
        Write-Host "Готово!"
        start-sleep -s 8
}#<--доп инфа из ЕГРН


firstarey 24-08-2017 09:42 2760385

так и не понял в чем проблема. обновил PS до 5-й версии и все работает (была 2, хотя ранее на ней работало)


Время: 10:58.

Время: 10:58.
© OSzone.net 2001-