Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » PowerShell - [решено] скрипт отрабатывает только через PS ISE

Ответить
Настройки темы
PowerShell - [решено] скрипт отрабатывает только через PS ISE

Пользователь


Сообщения: 102
Благодарности: 8

Профиль | Отправить PM | Цитировать


Здравствуйте!

скрипт корректно отрабатывает только через 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
}#<--доп инфа из ЕГРН

Отправлено: 06:41, 23-08-2017

 

Пользователь


Сообщения: 102
Благодарности: 8

Профиль | Отправить PM | Цитировать


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

Отправлено: 09:42, 24-08-2017 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » PowerShell - [решено] скрипт отрабатывает только через PS ISE

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
PowerShell - скрипт отключения пользователей из Exel в AD через PS yuriy.nepomnyashchiy.3@fb Скриптовые языки администрирования Windows 31 12-07-2017 17:25
Разное - [решено] Не отрабатывает скрипт создания точки восстановления. sonyas75 Microsoft Windows 10 16 22-07-2016 09:35
2008 R2 - [решено] Не отрабатывает logon скрипт nokogerra Windows Server 2008/2008 R2 10 15-08-2014 14:11
Не отрабатывает logoff скрипт в групповой политике FreedomF2000 Microsoft Windows NT/2000/2003 0 30-12-2010 11:21
[решено] Некорректно отрабатывает скрипт финализации saavaage AutoIt 4 01-08-2010 14:28




 
Переход