############################################################################################################
# создаем функцию для известного документа, но не известной версии (не описанной в скрипте)
function YesDocType_NoDocVers {
Write-Host "--------------"
Write-Host "документ $DocTypeRus`_$DocVers не может быть обработан"
if (!(test-path "$pwd\$DocTypeRus\$DocVers\")) { #проверка на отсутствие каталога
new-item -path $pwd -name $DocTypeRus\$DocVers -type directory -force | Out-Null #создаем каталог
}
move-item -path "$sSourceFile" -destination "$pwd\$DocTypeRus\$DocVers\" #перемещаем
# рабочий лог:
"$d;$t;$UserName;$($sSourceFile.name);->;$pwd\$DocTypeRus\$DocVers\$sSourceFile" |`
Out-File -Append -FilePath $MovesLog -Encoding 'default'
}
############################################################################################################
# ----------------------------------------------------------------------------------------------------------
# сам скрипт. начнем:
# ----------------------------------------------------------------------------------------------------------
# обнуляем переменные:
Remove-Variable ErrorText,FilesEach,KPT_Each,Vidimus_Each,Vidimus_KP_Each,EGRP_Each,NoData_Each,OTKAZ_Each -ErrorAction SilentlyContinue
# задаем дату и время:
$d=get-date -uformat "%Y-%m-%d"
$t=get-date -uformat "%H-%M"
# задаем имя пользователя:
$UserName = $env:username
# задаем пути к папкам:
$BasePath = "\\serv\Otdely\ZUR\ПРОЕКТЫ\Поломошнов А.А\XML_sort_base_PS"
$RezultatPath = "D:\script\PowerShell\koordinat-1"
$DelayLog="$RezultatPath\log.csv"
$ErrorLog="$RezultatPath\error_log.csv"
$MovesLog="$RezultatPath\moves_log.csv"
# $RezultatPath = "\\serv\Otdely\ZUR\ГКН"
# создаем шапку лог-файла:
if (!(test-path "$ErrorLog")) {"дата;время;имя пользователя;исходный файл;сообщение об ошибке" | Out-File -FilePath $ErrorLog -Encoding 'default'}
if (!(test-path "$MovesLog")) {"дата;время;имя пользователя;исходный файл;->;результат файл" | Out-File -FilePath $MovesLog -Encoding 'default'}
# Получаем объекты представляющие файлы в переменную $files
$Files = Get-ChildItem * -Include "*.xml"
# Если нет XML, прерываем выполнение
if ($Files -eq $null) {
Write-Warning "не найден ни один xml файл в каталоге"
Write-Warning "$pwd"
Read-Host "выход"
break
}
# Проверка на пустое значение (если 1 файл, то не записывается)
if ($Files.count -ge "2") {$Files_count = $Files.count} else {$Files_count = 1}
Write-Host "найдено файлов xml:" $Files_count -BackgroundColor Cyan -ForegroundColor DarkBlue
Write-Host "-------------------------------------------------------------"
start-sleep 2
# Каждый объект из $Files по очереди помещяется в переменную $sSourceFile
ForEach ($sSourceFile in $Files) {
# обнуляем переменные:
Remove-Variable sSubParcels,sDocNumber,sDateCreateDoc,sCadastralNumber -ErrorAction SilentlyContinue
Remove-Variable Cad_Region,Cad_Rayion,Cad_Kvartal,Cad_Uchastok -ErrorAction SilentlyContinue
Remove-Variable DocType,DocVers,NoDocVers -ErrorAction SilentlyContinue
# выводим информацию на экран
Clear-Host
Write-Host "обрабатываем файл:" `t $($sSourceFile.name)
Write-Host "---------------------------------------------------------------"
# создаем новый объект как xml
$oXmlDocument = New-Object -TypeName System.Xml.XmlDocument
# загружаем файл в переменную обработки
$oXmlDocument.load($sSourceFile)
# разбить на подстроки по / и берем нужные подстроки
$DocTypeSplit = $oXmlDocument."xml-stylesheet" -split '/' # можно так же -split '[="/]'
# в итоге имеем тип документа и версию
$DocType = $DocTypeSplit[6]
$DocVers = $DocTypeSplit[7]
# Write-Host "DocType $DocType"
# Write-Host "DocVers $DocVers"
# проверка на допустимые типы документа
Switch ($DocType) {
############################################################################################################
KPT { # КПТ
$DocTypeRus = "КПТ"
Write-Host "тип документа: `t `t $DocTypeRus"
Switch ($DocVers) {
###############------------------------------------------------------------------------------------#
"01" { # https://portal.rosreestr.ru/xsl/GKN/KPT/01/common.xsl
$KPT_Each++
# получаем значения в переменные #--------------------------------------------------------------
$sDocNumber = $oXmlDocument.Region_Cadastr.Package.Certification_Doc.Number
$sDateCreateDoc = $oXmlDocument.Region_Cadastr.Package.Certification_Doc.Date
$sCadastralNumber = $oXmlDocument.Region_Cadastr.Package.Federal.Cadastral_Regions.Cadastral_Region.Cadastral_Districts.Cadastral_District.Cadastral_Blocks.Cadastral_Block.CadastralNumber
# ----------------------------------------------------------------------------------------------
# убираем пробелы в кажастровом номере
$sCadastralNumber = $sCadastralNumber -replace " ",""
# разбить кадастровый номер на подстроки по ":"
$sCadastralNumberSplit = $sCadastralNumber -split ':'
# в итоге имеем следующие переменные:
$Cad_Region = $sCadastralNumberSplit[0]
$Cad_Rayion = $sCadastralNumberSplit[1]
$Cad_Kvartal = $sCadastralNumberSplit[2]
# загрузим регионы в массив:
$BaseRegions = Get-Content "$BasePath\regions.txt" | %{ConvertFrom-StringData -StringData $_}
$Region = $BaseRegions[$Cad_Region]."r$Cad_Region" # регион Русскми буквами $Region (значение [строки] после "rРЕГИОН=")
# загрузим районы в массив:
if (!(test-path "$BasePath\$Cad_Region`_rayion.txt")) {
$ErrorText = "отсутствует перечень районов по $Cad_Region региону ($Region)"
} else {
$BaseRayions = Get-Content "$BasePath\$Cad_Region`_rayion.txt" | %{ConvertFrom-StringData -StringData $_}
$Rayion = $BaseRayions[$Cad_Rayion]."r$Cad_Rayion" # район Русскми буквами $Rayion
# каталог файла-результата:
$OutPath = "$RezultatPath\$Cad_Region $Region\$Cad_Region-$Cad_Rayion $Rayion\$Cad_Region-$Cad_Rayion-$Cad_Kvartal"
# имя файла-результата:
$OutName = "$DocTypeRus на $Cad_Region`-$Cad_Rayion`-$Cad_Kvartal от $sDateCreateDoc`.xml"
# рабочий лог:
"$sDocNumber;$DocTypeRus;$Cad_Region;:;$Cad_Rayion;:;$Cad_Kvartal;;;$sDateCreateDoc;;$OutPath\$OutName" |`
Out-File -Append -FilePath $DelayLog -Encoding 'default'
}
}
###############------------------------------------------------------------------------------------#
"07" { # https://portal.rosreestr.ru/xsl/GKN/KPT/07/common.xsl
$KPT_Each++
# получаем значения в переменные #--------------------------------------------------------------
$sDocNumber = $oXmlDocument.Region_Cadastr.Package.Certification_Doc.Number
$sDateCreateDoc = $oXmlDocument.Region_Cadastr.Package.Certification_Doc.Date
$sCadastralNumber = $oXmlDocument.Region_Cadastr.Package.Federal.Cadastral_Regions.Cadastral_Region.Cadastral_Districts.Cadastral_District.Cadastral_Blocks.Cadastral_Block.CadastralNumber
# ----------------------------------------------------------------------------------------------
# убираем пробелы в кажастровом номере
$sCadastralNumber = $sCadastralNumber -replace " ",""
# разбить кадастровый номер на подстроки по ":"
$sCadastralNumberSplit = $sCadastralNumber -split ':'
# в итоге имеем следующие переменные:
$Cad_Region = $sCadastralNumberSplit[0]
$Cad_Rayion = $sCadastralNumberSplit[1]
$Cad_Kvartal = $sCadastralNumberSplit[2]
# загрузим регионы в массив:
$BaseRegions = Get-Content "$BasePath\regions.txt" | %{ConvertFrom-StringData -StringData $_}
$Region = $BaseRegions[$Cad_Region]."r$Cad_Region" # регион Русскми буквами $Region (значение [строки] после "rРЕГИОН=")
# загрузим районы в массив:
if (!(test-path "$BasePath\$Cad_Region`_rayion.txt")) {
$ErrorText = "отсутствует перечень районов по $Cad_Region региону ($Region)"
} else {
$BaseRayions = Get-Content "$BasePath\$Cad_Region`_rayion.txt" | %{ConvertFrom-StringData -StringData $_}
$Rayion = $BaseRayions[$Cad_Rayion]."r$Cad_Rayion" # район Русскми буквами $Rayion
# каталог файла-результата:
$OutPath = "$RezultatPath\$Cad_Region $Region\$Cad_Region-$Cad_Rayion $Rayion\$Cad_Region-$Cad_Rayion-$Cad_Kvartal"
# имя файла-результата:
$OutName = "$DocTypeRus на $Cad_Region`-$Cad_Rayion`-$Cad_Kvartal от $sDateCreateDoc`.xml"
# рабочий лог:
"$sDocNumber;$DocTypeRus;$Cad_Region;:;$Cad_Rayion;:;$Cad_Kvartal;;;$sDateCreateDoc;;$OutPath\$OutName" |`
Out-File -Append -FilePath $DelayLog -Encoding 'default'
}
}
###############------------------------------------------------------------------------------------#
"08" { # https://portal.rosreestr.ru/xsl/GKN/KPT/08/common.xsl
$KPT_Each++
# получаем значения в переменные #--------------------------------------------------------------
$sDocNumber = $oXmlDocument.Region_Cadastr.Package.Certification_Doc.Number
$sDateCreateDoc = $oXmlDocument.Region_Cadastr.Package.Certification_Doc.Date
$sCadastralNumber = $oXmlDocument.Region_Cadastr.Package.Cadastral_Blocks.Cadastral_Block.CadastralNumber
# ----------------------------------------------------------------------------------------------
# убираем пробелы в кажастровом номере
$sCadastralNumber = $sCadastralNumber -replace " ",""
# разбить кадастровый номер на подстроки по ":"
$sCadastralNumberSplit = $sCadastralNumber -split ':'
# в итоге имеем следующие переменные:
$Cad_Region = $sCadastralNumberSplit[0]
$Cad_Rayion = $sCadastralNumberSplit[1]
$Cad_Kvartal = $sCadastralNumberSplit[2]
# загрузим регионы в массив:
$BaseRegions = Get-Content "$BasePath\regions.txt" | %{ConvertFrom-StringData -StringData $_}
$Region = $BaseRegions[$Cad_Region]."r$Cad_Region" # регион Русскми буквами $Region (значение [строки] после "rРЕГИОН=")
# загрузим районы в массив:
if (!(test-path "$BasePath\$Cad_Region`_rayion.txt")) {
$ErrorText = "отсутствует перечень районов по $Cad_Region региону ($Region)"
} else {
$BaseRayions = Get-Content "$BasePath\$Cad_Region`_rayion.txt" | %{ConvertFrom-StringData -StringData $_}
$Rayion = $BaseRayions[$Cad_Rayion]."r$Cad_Rayion" # район Русскми буквами $Rayion
# каталог файла-результата:
$OutPath = "$RezultatPath\$Cad_Region $Region\$Cad_Region-$Cad_Rayion $Rayion\$Cad_Region-$Cad_Rayion-$Cad_Kvartal"
# имя файла-результата:
$OutName = "$DocTypeRus на $Cad_Region`-$Cad_Rayion`-$Cad_Kvartal от $sDateCreateDoc`.xml"
# рабочий лог:
"$sDocNumber;$DocTypeRus;$Cad_Region;:;$Cad_Rayion;:;$Cad_Kvartal;;;$sDateCreateDoc;;$OutPath\$OutName" |`
Out-File -Append -FilePath $DelayLog -Encoding 'default'
}
}
###############------------------------------------------------------------------------------------#
Default {
YesDocType_NoDocVers $sSourceFile
$NoDocVers++
}
}
}
############################################################################################################
Vidimus { # выписка
$DocTypeRus = "КВЗУ"
Write-Host "тип документа: `t `t $DocTypeRus"
Switch ($DocVers) {
###############------------------------------------------------------------------------------------#
"04" { # https://portal.rosreestr.ru/xsl/GKN/Vidimus/04/common.xsl
$Vidimus_Each++ # счетчик
# получаем значения в переменные ---------------------------------------------------------------
$sDocNumber = $oXmlDocument.Region_Cadastr_Vidimus_KV.Package.Certification_Doc.Number
$sDateCreateDoc = $oXmlDocument.Region_Cadastr_Vidimus_KV.Package.Certification_Doc.Date
$sCadastralNumber = $oXmlDocument.Region_Cadastr_Vidimus_KV.Package.Federal.Cadastral_Regions.Cadastral_Region.Cadastral_Districts.Cadastral_District.Cadastral_Blocks.Cadastral_Block.Parcels.Parcel.CadastralNumber
# ----------------------------------------------------------------------------------------------
# убираем пробелы в кажастровом номере
$sCadastralNumber = $sCadastralNumber -replace " ",""
# разбить кадастровый номер на подстроки по ":"
$sCadastralNumberSplit = $sCadastralNumber -split ':'
# в итоге имеем следующие переменные:
$Cad_Region = $sCadastralNumberSplit[0]
$Cad_Rayion = $sCadastralNumberSplit[1]
$Cad_Kvartal = $sCadastralNumberSplit[2]
$Cad_Uchastok = $sCadastralNumberSplit[3]
# выровняем значение участка до 4 знаков
Switch ($Cad_Uchastok.length) {
1 {$Cad_Uchastok = "000$Cad_Uchastok"}
2 {$Cad_Uchastok = "00$Cad_Uchastok"}
3 {$Cad_Uchastok = "0$Cad_Uchastok"}
}
# загрузим регионы в массив:
$BaseRegions = Get-Content "$BasePath\regions.txt" | %{ConvertFrom-StringData -StringData $_}
$Region = $BaseRegions[$Cad_Region]."r$Cad_Region" # регион Русскми буквами $Region (значение [строки] после "rРЕГИОН=")
# загрузим районы в массив:
if (!(test-path "$BasePath\$Cad_Region`_rayion.txt")) {
$ErrorText = "отсутствует перечень районов по $Cad_Region региону ($Region)"
} else {
$BaseRayions = Get-Content "$BasePath\$Cad_Region`_rayion.txt" | %{ConvertFrom-StringData -StringData $_}
$Rayion = $BaseRayions[$Cad_Rayion]."r$Cad_Rayion" # район Русскми буквами $Rayion
# каталог файла-результата:
$OutPath = "$RezultatPath\$Cad_Region $Region\$Cad_Region-$Cad_Rayion $Rayion\$Cad_Region-$Cad_Rayion-$Cad_Kvartal\$Cad_Uchastok"
# имя файла-результата:
$OutName = "$DocTypeRus на $Cad_Region`-$Cad_Rayion`-$Cad_Kvartal`-$Cad_Uchastok от $sDateCreateDoc`.xml"
# рабочий лог:
"$sDocNumber;$DocTypeRus;$Cad_Region;:;$Cad_Rayion;:;$Cad_Kvartal;:;$Cad_Uchastok;$sDateCreateDoc;;$OutPath\$OutName" |`
Out-File -Append -FilePath $DelayLog -Encoding 'default'
}
}
###############------------------------------------------------------------------------------------#
"05" { # https://portal.rosreestr.ru/xsl/GKN/Vidimus/05/common.xsl
$Vidimus_Each++ # счетчик
# получаем значения в переменные ---------------------------------------------------------------
$sDocNumber = $oXmlDocument.Region_Cadastr_Vidimus_KV.Package.Certification_Doc.Number
$sDateCreateDoc = $oXmlDocument.Region_Cadastr_Vidimus_KV.Package.Certification_Doc.Date
$sCadastralNumber = $oXmlDocument.Region_Cadastr_Vidimus_KV.Package.Parcels.Parcel.CadastralNumber
# считаем сколько раз нам попадается .SubParcel (части участка)
if ($oXmlDocument.Region_Cadastr_Vidimus_KV.Package.Parcels.Parcel.SubParcels -ne $null) {
$oXmlDocument.Region_Cadastr_Vidimus_KV.Package.Parcels.Parcel.SubParcels | ForEach-Object -Process {
$_.SubParcel | ForEach-Object -Process {$sSubParcels++}
}
# выровняем значение частей до 4 знаков
Switch ($sSubParcels.length) {
1 {$sSubParcels = "000$sSubParcels"}
2 {$sSubParcels = "00$sSubParcels"}
3 {$sSubParcels = "0$sSubParcels"}
}
}
# ----------------------------------------------------------------------------------------------
# убираем пробелы в кажастровом номере
$sCadastralNumber = $sCadastralNumber -replace " ",""
# разбить кадастровый номер на подстроки по ":"
$sCadastralNumberSplit = $sCadastralNumber -split ':'
# в итоге имеем следующие переменные:
$Cad_Region = $sCadastralNumberSplit[0]
$Cad_Rayion = $sCadastralNumberSplit[1]
$Cad_Kvartal = $sCadastralNumberSplit[2]
$Cad_Uchastok = $sCadastralNumberSplit[3]
# выровняем значение участка до 4 знаков
Switch ($Cad_Uchastok.length) {
1 {$Cad_Uchastok = "000$Cad_Uchastok"}
2 {$Cad_Uchastok = "00$Cad_Uchastok"}
3 {$Cad_Uchastok = "0$Cad_Uchastok"}
}
# загрузим регионы в массив:
$BaseRegions = Get-Content "$BasePath\regions.txt" | %{ConvertFrom-StringData -StringData $_}
$Region = $BaseRegions[$Cad_Region]."r$Cad_Region" # регион Русскми буквами $Region (значение [строки] после "rРЕГИОН=")
# загрузим районы в массив:
if (!(test-path "$BasePath\$Cad_Region`_rayion.txt")) {
$ErrorText = "отсутствует перечень районов по $Cad_Region региону ($Region)"
} else {
$BaseRayions = Get-Content "$BasePath\$Cad_Region`_rayion.txt" | %{ConvertFrom-StringData -StringData $_}
$Rayion = $BaseRayions[$Cad_Rayion]."r$Cad_Rayion" # район Русскми буквами $Rayion
# каталог файла-результата:
$OutPath = "$RezultatPath\$Cad_Region $Region\$Cad_Region-$Cad_Rayion $Rayion\$Cad_Region-$Cad_Rayion-$Cad_Kvartal\$Cad_Uchastok"
# имя файла-результата:
$OutName = "$DocTypeRus на $Cad_Region`-$Cad_Rayion`-$Cad_Kvartal`-$Cad_Uchastok от $sDateCreateDoc`.xml"
# рабочий лог:
"$sDocNumber;$DocTypeRus;$Cad_Region;:;$Cad_Rayion;:;$Cad_Kvartal;:;$Cad_Uchastok;$sDateCreateDoc;;$OutPath\$OutName" |`
Out-File -Append -FilePath $DelayLog -Encoding 'default'
}
}
###############------------------------------------------------------------------------------------#
Default {
YesDocType_NoDocVers $sSourceFile
$NoDocVers++
}
}
}
############################################################################################################
Vidimus_KP {
$DocTypeRus = "КПЗУ"
Write-Host "тип документа: `t `t КПЗУ"
Switch ($DocVers) {
###############------------------------------------------------------------------------------------#
"03" { # https://portal.rosreestr.ru/xsl/GKN/Vidimus_KP/03/common.xsl
$Vidimus_KP_Each++ # счетчик
# получаем значения в переменные ---------------------------------------------------------------
$sDocNumber = $oXmlDocument.Region_Cadastr_Vidimus_KP.Package.Certification_Doc.Number
$sDateCreateDoc = $oXmlDocument.Region_Cadastr_Vidimus_KP.Package.Certification_Doc.Date
$sCadastralNumber = $oXmlDocument.Region_Cadastr_Vidimus_KP.Package.Federal.Cadastral_Regions.Cadastral_Region.Cadastral_Districts.Cadastral_District.Cadastral_Blocks.Cadastral_Block.Parcels.Parcel.CadastralNumber
# ----------------------------------------------------------------------------------------------
# убираем пробелы в кажастровом номере
$sCadastralNumber = $sCadastralNumber -replace " ",""
# разбить кадастровый номер на подстроки по ":"
$sCadastralNumberSplit = $sCadastralNumber -split ':'
# в итоге имеем следующие переменные:
$Cad_Region = $sCadastralNumberSplit[0]
$Cad_Rayion = $sCadastralNumberSplit[1]
$Cad_Kvartal = $sCadastralNumberSplit[2]
$Cad_Uchastok = $sCadastralNumberSplit[3]
# выровняем значение участка до 4 знаков
Switch ($Cad_Uchastok.length) {
1 {$Cad_Uchastok = "000$Cad_Uchastok"}
2 {$Cad_Uchastok = "00$Cad_Uchastok"}
3 {$Cad_Uchastok = "0$Cad_Uchastok"}
}
# загрузим регионы в массив:
$BaseRegions = Get-Content "$BasePath\regions.txt" | %{ConvertFrom-StringData -StringData $_}
$Region = $BaseRegions[$Cad_Region]."r$Cad_Region" # регион Русскми буквами $Region (значение [строки] после "rРЕГИОН=")
# загрузим районы в массив:
if (!(test-path "$BasePath\$Cad_Region`_rayion.txt")) {
$ErrorText = "отсутствует перечень районов по $Cad_Region региону ($Region)"
} else {
$BaseRayions = Get-Content "$BasePath\$Cad_Region`_rayion.txt" | %{ConvertFrom-StringData -StringData $_}
$Rayion = $BaseRayions[$Cad_Rayion]."r$Cad_Rayion" # район Русскми буквами $Rayion
# каталог файла-результата:
$OutPath = "$RezultatPath\$Cad_Region $Region\$Cad_Region-$Cad_Rayion $Rayion\$Cad_Region-$Cad_Rayion-$Cad_Kvartal\$Cad_Uchastok"
# имя файла-результата:
$OutName = "$DocTypeRus на $Cad_Region`-$Cad_Rayion`-$Cad_Kvartal`-$Cad_Uchastok от $sDateCreateDoc`.xml"
# рабочий лог:
"$sDocNumber;$DocTypeRus;$Cad_Region;:;$Cad_Rayion;:;$Cad_Kvartal;:;$Cad_Uchastok;$sDateCreateDoc;;$OutPath\$OutName" |`
Out-File -Append -FilePath $DelayLog -Encoding 'default'
}
}
###############------------------------------------------------------------------------------------#
Default {
YesDocType_NoDocVers $sSourceFile
$NoDocVers++
}
}
}
############################################################################################################
RefusalNoData {
$DocTypeRus = "Уведомление"
Write-Host "тип документа: `t `t $DocTypeRus"
Switch ($DocVers) {
###############------------------------------------------------------------------------------------#
"02" { # https://portal.rosreestr.ru/xsl/GKN/RefusalNoData/03/common.xsl
$NoData_Each++ # счетчик
# получаем значения в переменные----------------------------------------------------------------
$sDocNumber = $oXmlDocument.Refusal_GZK_Realty.Title.Rubric.Number
$sDateCreateDoc = $oXmlDocument.Refusal_GZK_Realty.Title.Rubric.Date
# ----------------------------------------------------------------------------------------------
# обрезать дату документа до года
$DateCreateDocYYYY = $sDateCreateDoc.Substring(0,($sDateCreateDoc.Length -6))
# заменить невозможные символы в имени файла
$DocNumber = $sDocNumber -replace "/","-"
# каталог файла-результата:
$OutPath = "$RezultatPath\отсутствие сведений\$DateCreateDocYYYY"
# имя файла-результата:
$OutName = "$DocTypeRus $DocNumber от $sDateCreateDoc`.xml"
# рабочий лог:
"$sDocNumber;$DocTypeRus;;;;;;;;$sDateCreateDoc;;$OutPath\$OutName" | Out-File -Append -FilePath $DelayLog -Encoding 'default'
}
###############------------------------------------------------------------------------------------#
"03" { # https://portal.rosreestr.ru/xsl/GKN/RefusalNoData/03/common.xsl
$NoData_Each++ # счетчик
# получаем значения в переменные----------------------------------------------------------------
$sDocNumber = $oXmlDocument.Refusal_GZK_Realty.Title.Rubric.Number
$sDateCreateDoc = $oXmlDocument.Refusal_GZK_Realty.Title.Rubric.Date
# ----------------------------------------------------------------------------------------------
# обрезать дату документа до года
$DateCreateDocYYYY = $sDateCreateDoc.Substring(0,($sDateCreateDoc.Length -6))
# заменить невозможные символы в имени файла
$DocNumber = $sDocNumber -replace "/","-"
# каталог файла-результата:
$OutPath = "$RezultatPath\отсутствие сведений\$DateCreateDocYYYY"
# имя файла-результата:
$OutName = "$DocTypeRus $DocNumber от $sDateCreateDoc`.xml"
# рабочий лог:
"$sDocNumber;$DocTypeRus;;;;;;;;$sDateCreateDoc;;$OutPath\$OutName" | Out-File -Append -FilePath $DelayLog -Encoding 'default'
}
###############------------------------------------------------------------------------------------#
Default {
YesDocType_NoDocVers $sSourceFile
$NoDocVers++
}
}
}
############################################################################################################
RefusalByDecision {
$DocTypeRus = "Отказ"
Write-Host "тип документа: `t `t $DocTypeRus"
$ErrorText = "скрипт не знает как обработать $DocTypeRus"
Switch ($DocVers) {
###############------------------------------------------------------------------------------------#
"03" { # https://portal.rosreestr.ru/xsl/GKN/RefusalNoData/03/common.xsl
$OTKAZ_Each++ # счетчик
}
###############------------------------------------------------------------------------------------#
Default {
YesDocType_NoDocVers $sSourceFile
$NoDocVers++
}
}
}
############################################################################################################
Reestr_Extract_Object {
$DocTypeRus = "ЕГРП"
Write-Host "тип документа: `t `t $DocTypeRus"
Switch ($DocVers) {
###############------------------------------------------------------------------------------------#
"02" { # https://portal.rosreestr.ru/xsl/EGRP/Reestr_Extract_Object/02/Common.xsl
$EGRP_Each++ # счетчик
# получаем значения в переменные----------------------------------------------------------------
$sDocNumber = $oXmlDocument.Reestr_Extract_Object.ReestrExtract.ExtractNumber
$sDateCreateDoc = $oXmlDocument.Reestr_Extract_Object.ReestrExtract.ExtractDate
$sCadastralNumber = $oXmlDocument.Reestr_Extract_Object.ReestrExtract.ExtractObjectRight.ObjectRight.CadastralNumber
# ----------------------------------------------------------------------------------------------
# убираем пробелы в кажастровом номере
$sCadastralNumber = $sCadastralNumber -replace " ",""
# разбить кадастровый номер на подстроки по ":"
$sCadastralNumberSplit = $sCadastralNumber -split ':'
# в итоге имеем следующие переменные:
$Cad_Region = $sCadastralNumberSplit[0]
$Cad_Rayion = $sCadastralNumberSplit[1]
$Cad_Kvartal = $sCadastralNumberSplit[2]
$Cad_Uchastok = $sCadastralNumberSplit[3]
# выровняем значение участка до 4 знаков
Switch ($Cad_Uchastok.length) {
1 {$Cad_Uchastok = "000$Cad_Uchastok"}
2 {$Cad_Uchastok = "00$Cad_Uchastok"}
3 {$Cad_Uchastok = "0$Cad_Uchastok"}
}
# загрузим регионы в массив:
$BaseRegions = Get-Content "$BasePath\regions.txt" | %{ConvertFrom-StringData -StringData $_}
$Region = $BaseRegions[$Cad_Region]."r$Cad_Region" # регион Русскми буквами $Region (значение [строки] после "rРЕГИОН=")
# загрузим районы в массив:
if (!(test-path "$BasePath\$Cad_Region`_rayion.txt")) {
$ErrorText = "отсутствует перечень районов по $Cad_Region региону ($Region)"
} else {
$BaseRayions = Get-Content "$BasePath\$Cad_Region`_rayion.txt" | %{ConvertFrom-StringData -StringData $_}
$Rayion = $BaseRayions[$Cad_Rayion]."r$Cad_Rayion" # район Русскми буквами $Rayion
# каталог файла-результата:
$OutPath = "$RezultatPath\$Cad_Region $Region\$Cad_Region-$Cad_Rayion $Rayion\$Cad_Region-$Cad_Rayion-$Cad_Kvartal\$Cad_Uchastok"
# имя файла-результата:
$OutName = "$DocTypeRus на $Cad_Region`-$Cad_Rayion`-$Cad_Kvartal`-$Cad_Uchastok от $sDateCreateDoc`.xml"
# рабочий лог:
"$sDocNumber;$DocTypeRus;$Cad_Region;:;$Cad_Rayion;:;$Cad_Kvartal;:;$Cad_Uchastok;$sDateCreateDoc;;$OutPath\$OutName" |`
Out-File -Append -FilePath $DelayLog -Encoding 'default'
}
}
###############------------------------------------------------------------------------------------#
"03" { # https://portal.rosreestr.ru/xsl/EGRP/Reestr_Extract_Object/03/Common.xsl
$EGRP_Each++ # счетчик
# получаем значения в переменные----------------------------------------------------------------
$sDocNumber = $oXmlDocument.Extract.ReestrExtract.DeclarAttribute.ExtractNumber
$sDateCreateDoc = $oXmlDocument.Extract.ReestrExtract.DeclarAttribute.ExtractDate
$sCadastralNumber = $oXmlDocument.Extract.ReestrExtract.ExtractObjectRight.ExtractObject.ObjectRight.ObjectDesc.CadastralNumber
# ----------------------------------------------------------------------------------------------
# убираем пробелы в кажастровом номере
$sCadastralNumber = $sCadastralNumber -replace " ",""
# разбить кадастровый номер на подстроки по ":"
$sCadastralNumberSplit = $sCadastralNumber -split ':'
# в итоге имеем следующие переменные:
$Cad_Region = $sCadastralNumberSplit[0]
$Cad_Rayion = $sCadastralNumberSplit[1]
$Cad_Kvartal = $sCadastralNumberSplit[2]
$Cad_Uchastok = $sCadastralNumberSplit[3]
# выровняем значение участка до 4 знаков
Switch ($Cad_Uchastok.length) {
1 {$Cad_Uchastok = "000$Cad_Uchastok"}
2 {$Cad_Uchastok = "00$Cad_Uchastok"}
3 {$Cad_Uchastok = "0$Cad_Uchastok"}
}
# загрузим регионы в массив:
$BaseRegions = Get-Content "$BasePath\regions.txt" | %{ConvertFrom-StringData -StringData $_}
$Region = $BaseRegions[$Cad_Region]."r$Cad_Region" # регион Русскми буквами $Region (значение [строки] после "rРЕГИОН=")
# загрузим районы в массив:
if (!(test-path "$BasePath\$Cad_Region`_rayion.txt")) {
$ErrorText = "отсутствует перечень районов по $Cad_Region региону ($Region)"
} else {
$BaseRayions = Get-Content "$BasePath\$Cad_Region`_rayion.txt" | %{ConvertFrom-StringData -StringData $_}
$Rayion = $BaseRayions[$Cad_Rayion]."r$Cad_Rayion" # район Русскми буквами $Rayion
# каталог файла-результата:
$OutPath = "$RezultatPath\$Cad_Region $Region\$Cad_Region-$Cad_Rayion $Rayion\$Cad_Region-$Cad_Rayion-$Cad_Kvartal\$Cad_Uchastok"
# имя файла-результата:
$OutName = "$DocTypeRus на $Cad_Region`-$Cad_Rayion`-$Cad_Kvartal`-$Cad_Uchastok от $sDateCreateDoc`.xml"
# рабочий лог:
"$sDocNumber;$DocTypeRus;$Cad_Region;:;$Cad_Rayion;:;$Cad_Kvartal;:;$Cad_Uchastok;$sDateCreateDoc;;$OutPath\$OutName" |`
Out-File -Append -FilePath $DelayLog -Encoding 'default'
}
}
###############------------------------------------------------------------------------------------#
Default {
YesDocType_NoDocVers $sSourceFile
$NoDocVers++
}
}
}
############################################################################################################
Default {
$ErrorText = "тип документа: `t $DocType не известен"
}
} # конец перебора типа документов
# проверяем на наличие ошибок
if ($ErrorText -ne $null) {
Write-Host "--------------"
Write-Host "ошибка:"
Write-Host "$ErrorText" -BackgroundColor Cyan -ForegroundColor DarkBlue
"$d;$t;$UserName;$($sSourceFile.name);$ErrorText" | Out-File -Append -FilePath $ErrorLog -Encoding 'default'
Write-Host ""
Read-Host "для продолжения нажмите Enter"
$OutPath = "$RezultatPath\проблемные"
}
# выводим информацию на экран
if ($NoDocVers -eq $null) {
if ($sDocNumber -ne $null) {Write-Host "номер документа:" `t $sDocNumber}
if ($sDateCreateDoc -ne $null) {Write-Host "дата формирования:" `t $sDateCreateDoc}
if ($sCadastralNumber -ne $null) {Write-Host "кадастровый номер:" `t $sCadastralNumber}
if ($Region -ne $null) {Write-Host "регион:" `t `t $Region}
if ($Rayion -ne $null) {Write-Host "район:" `t `t `t $Rayion}
if ($sSubParcels -eq "0") {Write-Host "частей у участка:" `t $sSubParcels}
start-sleep -m 700
# создаем каталог:
if (!(test-path "$OutPath")) {new-item -path $OutPath -type directory -force | Out-Null}
if (!(test-path "$OutPath\$OutName")) { # проверка на существование файла:
if (!(test-path "$sSourceFile`.sig")) { # проверка на наличие цифровой подписи:
Write-Host "файл цифровой подписи: `t отсутствует"
move-item -path "$sSourceFile" -destination "$OutPath\$OutName"
"$d;$t;$UserName;$($sSourceFile.name);->;$OutPath\$OutName" | Out-File -Append -FilePath $MovesLog -Encoding 'default'
} else {
Write-Host "файл цифровой подписи: `t есть"
move-item -path "$sSourceFile" -destination "$OutPath\$OutName"
move-item -path "$sSourceFile`.sig" -destination "$OutPath\$OutName`.sig"
"$d;$t;$UserName;$($sSourceFile.name);->;$OutPath\$OutName" | Out-File -Append -FilePath $MovesLog -Encoding 'default'
"$d;$t;$UserName;$($sSourceFile.name)`.sig;->;$OutPath\$OutName`.sig" | Out-File -Append -FilePath $MovesLog -Encoding 'default'
}
} else {
Write-Host "такой файл уже существует в каталоге назначения"
"$d;$t;$UserName;$($sSourceFile.name);такой файл уже существует в каталоге назначения" | Out-File -Append -FilePath $ErrorLog -Encoding 'default'
if (!(test-path "$RezultatPath\повторы")) {new-item -path "$RezultatPath\повторы" -type directory -force | Out-Null}
move-item -path "$sSourceFile" -destination "$RezultatPath\повторы"
}
}
# сделать файл с координатами ?
if (($DocTypeRus -eq "КПТ") -and ($DocVers -eq "08")) {
while (($collOk.Length -ne 1) -or ($collOk -inotmatch {[дн]})) {
$mess = "Создавать для КПТ файл с координатами? (Д/Н)"
$collOk = Read-Host -Prompt $mess
}
if ($collOk -ieq "д") {
$OutFileCSV = "$OutPath\$DocTypeRus на $Cad_Region`-$Cad_Rayion`-$Cad_Kvartal от $sDateCreateDoc`.csv"
# заполним заголовок
"кадастровый номер;номер точки;X;Y;погрешность" | Out-File -FilePath $OutFileCSV -Encoding 'default'
$oXmlDocument.Region_Cadastr.Package.Cadastral_Blocks.Cadastral_Block.Parcels.Parcel |`
ForEach-Object -Process {
$sCadastralNumber = $_.CadastralNumber
$_.Entity_Spatial.Spatial_Element.Spelement_Unit |`
# Строим результирующую объект-строку из переменной «$sCadastralNumber»
ForEach-Object -Process {"$sCadastralNumber;$($_.Su_Nmb);$($_.Ordinate.X-replace "\.",",");$($_.Ordinate.Y-replace "\.",",");$($_.Ordinate.Delta_Geopoint -replace "\.",",")"}
} | Out-File -Append -FilePath $OutFileCSV -Encoding ascii
Write-Host "--------------"
Write-Host "создан файл:" `t `t "$DocTypeRus на $Cad_Region`-$Cad_Rayion`-$Cad_Kvartal от $sDateCreateDoc`.csv"
}
}
$FilesEach++
Write-Host "---------------------------------------------------------------"
Write-Host "ищем следующий файл..."
start-sleep -m 700
}
# закончим:
Clear-Host
Write-Host "---------------------------------------------------------------"
Write-Host "обработано файлов: `t $FilesEach, из них:"
if ($KPT_Each -ne $null) {Write-Host "КПТ `t `t `t" $KPT_Each}
if ($Vidimus_Each -ne $null) {Write-Host "КВЗУ `t `t `t" $Vidimus_Each}
if ($Vidimus_KP_Each -ne $null) {Write-Host "КПЗУ `t `t `t" $Vidimus_KP_Each}
if ($EGRP_Each -ne $null) {Write-Host "ЕГРП `t `t `t" $EGRP_Each}
if ($NoData_Each -ne $null) {Write-Host "Уведомление `t `t" $NoData_Each}
if ($OTKAZ_Each -ne $null) {Write-Host "Отказ `t `t `t" $OTKAZ_Each}
Write-Host "---------------------------------------------------------------"
Read-Host "end..."