Êîìïüþòåðíûé ôîðóì OSzone.net  

Êîìïüþòåðíûé ôîðóì OSzone.net (http://forum.oszone.net/index.php)
-   Ñêðèïòîâûå ÿçûêè àäìèíèñòðèðîâàíèÿ Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   Excel (http://forum.oszone.net/showthread.php?t=298075)

firstarey 08-04-2015 06:45 2493046

Excel
 
Âëîæåíèé: 1
Ñóòü:
ñêðèïò ÷àñòü ëîãîâ îòïèñûâàåò â åêñåëü.
âñå îòðàáàòûâàåò êîððåêòíî, íî â äèñïåò÷åðå çàäà÷ âñåãäà âèñèò îäèí ïðîöåññ EXCEL.EXE, êîòîðûé íå óõîäèò äîæå ïîñëå çàêðûòèÿ ñêðèïòà.

Âîïðîñ:
Êàêèì îáðàçîì êîððåêòíî ýòî èñïðàâèòü. íàïðÿãàåò :)

ñàì ñêðèïò
Êîä:


# Ðàçðåøàåì âûïîëíåíèå ñêðèïòà
Set-ExecutionPolicy remotesigned

#-->Îïèñûâàåì âñå ïåðåìåííûå áëîêà
#        ïóòè:
$PathPrefix = "D:\test"
#$PathPrefix = "\\serv\Otdely\ZUR\ÃÊÍ"        # ïîâòîðÿþùèéñÿ ýëåìåíò ïóòè
$PathIn    = "$PathPrefix"                                # êàòàëîã, îòêóäà áðàòü ZIP ôàéëû
$PathOut    = "$PathPrefix"                                # êàòàëîã, êóäà ïîìåùàåì ðåçóëüòàò ðàáîòû ñêðèïòà
$PathBase  = "$PathPrefix\base"                # êàòàëîã, ãäå ðàñïîëîæåíû ôàéëû áàçû
#        çàäàåì äàòó è âðåìÿ:
$d=get-date -uformat "%Y-%m-%d"
$t=get-date -uformat "%H:%M"
#        èìÿ ïîëüçîâàòåëÿ: (à íàäî ëè?)
$UserName  = "$env:username"
$ErrorSleep = 5
$NoError    = "íåò"
#        êîëè÷åñòâî ñðàáàòûâàíèé
$activation=0
$watcher_start_d = get-date -uformat "%Y-%m-%d"
$watcher_start_t = get-date -uformat "%H:%M"
#<--Îïèñûâàåì âñå ïåðåìåííûå áëîêà
#---#-------------------------------------------------------------------------------------------------------
#-->Ôóíêöèÿ ôîðìàòèðîâàíèÿ ñòðîêè â åêñåëå
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
}
#--<Ôóíêöèÿ ôîðìàòèðîâàíèÿ ñòðîêè â åêñåëå
#-->Ôóíêöèÿ ëîãà ïåðåìåùåíèé
function moves_log {
        $ex = new-object -com Excel.Application
        $wb = $ex.Workbooks.Open("$PathOut\moves_log.xlsx")
        $ws = $wb.Worksheets.Item(1)
        $Row = $ws.Range("A65536").End(-4162).Row + 1
        # Çàïîëíÿåì
        $ws.Cells.Item($Row,1) = $d
        $ws.Cells.Item($Row,2) = $t
        $ws.Cells.Item($Row,3) = $FileZipCurrent.name
        $ws.Cells.Item($Row,4) = $FileXmlCurrent.name
        $ws.Cells.Item($Row,5) = $DocTypeRus
        $ws.Cells.Item($Row,6) = $CadastralNumber
        $ws.Cells.Item($Row,7) = $DateCreateDoc
        $ws.Cells.Item($Row,8) = "->"
        $ws.Cells.Item($Row,9) = "`=ÃÈÏÅÐÑÑÛËÊÀ(`"$OutPath`";`"$OutPath`")"
        $ws.Cells.Item($Row,10) = $OutName
        # Îôîðìëÿåì
        $selection = $ws.Range(("A{0}" -f $Row),("J{0}" -f $Row))
        #$selection.Select() | Out-Null
        Excel_format_2
        # çàêðûâàåì
        $selection = $null
        $wb.Save()
        $wb.Close($false)
        $ex.Quit()
        $excel = $null
}
#--<Ôóíêöèÿ ëîãà ïåðåìåùåíèé
#-->Ôóíêöèÿ ëîãà îøèáîê
function error_log {
        $ex = new-object -com Excel.Application
        $wb = $ex.Workbooks.Open("$PathOut\moves_log.xlsx")
        $ws = $wb.Worksheets.Item(2)
        $Row = $ws.Range("A65536").End(-4162).Row + 1
        # Çàïîëíÿåì
        $ws.Cells.Item($Row,1) = $d
        $ws.Cells.Item($Row,2) = $t
        $ws.Cells.Item($Row,3) = $FileXmlCurrent.name
        $ws.Cells.Item($Row,4) = $ErrorText
        $ws.Cells.Item($Row,5) = $ErrorHelp
        # Îôîðìëÿåì
        $selection = $ws.Range(("A{0}" -f $Row),("E{0}" -f $Row))
        #$selection.Select() | Out-Null
        Excel_format_2
        # çàêðûâàåì
        $selection = $null
        $wb.Save()
        $wb.Close($false)
        $ex.Quit()
        $excel = $null
}
#--<Ôóíêöèÿ ëîãà îøèáîê
#-->Ôóíêöèÿ ôîðìèðîâàíèÿ ïóòè è èìåíè ôàéëà
function Out_PathAndName ($CadastralNumber) {
        # ðàçáèòü êàäàñòðîâûé íîìåð íà ïîäñòðîêè ïî ":" â èòîãå èìååì ñëåäóþùèå ïåðåìåííûå:
        $Cad_Region      = $CadastralNumber.split(":")[0]
        $Cad_Rayion      = $CadastralNumber.split(":")[1]
        $Cad_Kvartal    = $CadastralNumber.split(":")[2]
        $Cad_Uchastok    = $CadastralNumber.split(":")[3]
        # âûðîâíÿåì çíà÷åíèå ó÷àñòêà äî 4 çíàêîâ
        Switch ($Cad_Uchastok.length) {
                1 {$Cad_Uchastok = "000$Cad_Uchastok"}
                2 {$Cad_Uchastok = "00$Cad_Uchastok"}
                3 {$Cad_Uchastok = "0$Cad_Uchastok"}
        }
        if ($Cad_Region -eq $null) {
                $ErrorCode = "04-01"
                $ErrorText = "íå óäàëîñü îïðåäåëèòü ðåãèîí ($Cad_Region)"
                $ErrorHelp = 'âîîáùå òî òàêîé îøèáêè áûòü íå äîëæíî'
                #error_log ($d, $t, $FileXmlCurrent.name, $ErrorText, $ErrorHelp)
        }
        # çàãðóçèì ðåãèîíû â ìàññèâ:
        if (test-path "$PathBase\regions.txt") {
                $BaseRegions = Get-Content "$PathBase\regions.txt" | %{ConvertFrom-StringData -StringData $_}
                $Region = $BaseRegions[$Cad_Region]."r$Cad_Region" # ðåãèîí Ðóññêìè áóêâàìè $Region (çíà÷åíèå [ñòðîêè] ïîñëå "rÐÅÃÈÎÍ=")
        } else {
                $ErrorCode = "04-02"
                $ErrorText = "îòñóòñòâóåò ïåðå÷åíü ðåãèîíîâ"
                $ErrorHelp = "ïîìåñòèòå ôàéë regions.txt â êàòàëîã $PathPrefix\base"
                #error_log ($d, $t, $FileXmlCurrent.name, $ErrorText, $ErrorHelp)
        }
        # çàãðóçèì ðàéîíû â ìàññèâ:
        if (test-path "$PathBase\$Cad_Region`_rayion.txt") {
                $BaseRayions = Get-Content "$PathBase\$Cad_Region`_rayion.txt" | %{ConvertFrom-StringData -StringData $_}
                $Rayion = $BaseRayions[$Cad_Rayion]."r$Cad_Rayion" # ðàéîí Ðóññêìè áóêâàìè $Rayion
                # êàòàëîã è èìÿ ôàéëà-ðåçóëüòàòà:
                $OutPath = "$PathOut\$Cad_Region $Region\$Cad_Region-$Cad_Rayion $Rayion\$Cad_Region-$Cad_Rayion-$Cad_Kvartal"
                if ($Cad_Uchastok -ne $null) {
                        $OutName = "$DocTypeRus íà $Cad_Region`-$Cad_Rayion`-$Cad_Kvartal`-$Cad_Uchastok îò $DateCreateDoc`.xml"
                }else{
                        $OutName = "$DocTypeRus íà $Cad_Region`-$Cad_Rayion`-$Cad_Kvartal îò $DateCreateDoc`.xml"
                }
        } else {
                $ErrorCode = "04-03"
                $ErrorText = "îòñóòñòâóåò ïåðå÷åíü ðàéîíîâ ïî $Cad_Region ðåãèîíó ($Region)"
                $ErrorHelp = "ïîìåñòèòå ôàéë $Cad_Region`_rayion.txt â êàòàëîã $PathPrefix\base"
                #error_log ($d, $t, $FileXmlCurrent.name, $ErrorText, $ErrorHelp)
        }
        #íà âûõîäå:
        $ErrorCode
        $ErrorText
        $ErrorHelp
       
        $Cad_Region
        $Cad_Rayion
        $Cad_Kvartal
        $Cad_Uchastok
       
        $Region
        $Rayion
       
        $OutPath
        $OutName
}
#--<Ôóíêöèÿ ôîðìèðîâàíèÿ ïóòè è èìåíè ôàéëà
#---#-------------------------------------------------------------------------------------------------------
#-->Åñëè òàáëèöû íåò, ñîçäàåì
if (!(test-path "$PathOut\moves_log.xlsx")) {
#-->Ïåðâûé ëèñò
        $ex = New-Object -Com Excel.Application
        $wb = $ex.Workbooks.Add()
        $ws = $wb.Worksheets.Item(1)
        $ws.Name = 'ÎÒ×ÅÒ'
        $Row=1
        # Çàïîëíÿåì
        $ws.Cells.Item($Row,1) = "äàòà"
        $ws.Cells.Item($Row,2) = "âðåìÿ"
        $ws.Cells.Item($Row,3) = "èìÿ àðõèâà"
        $ws.Cells.Item($Row,4) = "èìÿ ôàéëà"
        $ws.Cells.Item($Row,5) = "òèï äîêóìåíòà"
        $ws.Cells.Item($Row,6) = "êàäàñòðîâûé íîìåð"
        $ws.Cells.Item($Row,7) = "àêòóàëüíîñòü"
        $ws.Cells.Item($Row,8) = "->"
        $ws.Cells.Item($Row,9) = "íîâîå õðàíèëèùå"
        $ws.Cells.Item($Row,10) = "íîâîå èìÿ"
        # Îôîðìëÿåì
        $selection = $ws.Range(("A{0}" -f $Row),("J{0}" -f $Row))
        #$selection.Select() | Out-Null
        Excel_format_1
#-->Âòîðîé ëèñò
        $ws = $wb.Worksheets.Item(2)
        $ws.Name = 'ÎØÈÁÊÈ'
        $Row=1
        # Çàïîëíÿåì
        $ws.Cells.Item($Row,1) = "äàòà"
        $ws.Cells.Item($Row,2) = "âðåìÿ"
        $ws.Cells.Item($Row,3) = "èìÿ ôàéëà"
        $ws.Cells.Item($Row,4) = "òåêñò îøèáêè"
        $ws.Cells.Item($Row,5) = "ïðè÷èíà"
        # Îôîðìëÿåì
        $selection = $ws.Range(("A{0}" -f $Row),("E{0}" -f $Row))
        #$selection.Select() | Out-Null
        Excel_format_1
        $selection = $null
        $wb.SaveAs("$PathOut\moves_log.xlsx")
        $wb.Close($false)
        $ex.Quit()
        $excel = $null
}
#--<Åñëè òàáëèöû íåò, ñîçäàåì
#---#-------------------------------------------------------------------------------------------------------
#-->Íàáëþäàòåëü çà ïàïêîé. ïðè ïîÿâëåíèè ôàéëà, îáðàáàòûâàåò åãî:
while($TRUE){
        Clear-Host
        Write-Host "íàáëþäàåì çà`t$PathIn\"
        Write-Host "íàáëþäàåì ñ`t$watcher_start_d  $watcher_start_t"
        Write-Host "ñðàáàòûâàíèé`t$activation"
        if ($DocTypeRus -ne $null) {
                Write-Host "-----------------------------------------"
                if ($AText1 -ne $null) {Write-Host "$AText1"}
                if ($AText2 -ne $null) {Write-Host "$AText2"}
                if ($AText3 -ne $null) {Write-Host "$AText3"}
                if ($AText4 -ne $null) {Write-Host "$AText4"}
                if ($AText5 -ne $null) {Write-Host "$AText5"}
                Write-Host "-----------------------------------------"
        }
        Remove-Variable FilesZip,FilesXml -ErrorAction SilentlyContinue
        $FilesZip = Get-ChildItem $PathIn\* -Include *.zip
        $FilesXml = Get-ChildItem $PathIn\* -Include *.xml
        # øàïêà
        $WinTitle=(get-host).UI.RawUI
        $WinTitle.WindowTitle="XML-ÃÊÍ ($activation)"
        if (($FilesZip -eq $null) -and ($FilesXml -eq $null)) {
                start-sleep 10 # çàäåðæêà ïåðåä ñëåäóþùèì ïðîõîäîì
                continue
        } else {
#-->        ñòàðò îñíîâíîìó ôàéëó
                Clear-Host
                #-->Îáðàáîòêà àðõèâîâ
                if ($FilesZip -ne $null) {
                        Remove-Variable FileZipCurrent_count,FilesZip_count -ErrorAction SilentlyContinue
                        ForEach        ($FileZipCurrent in $FilesZip) {        #êàæäîå çíà÷åíèå $FilesZip äåëàåì ñ $FileZipCurrent:
                                if ($FilesZip.count -ge "2") {                        #ïðîâåðêà íà ïóñòîå çíà÷åíèå (åñëè 1 ôàéë, òî íå çàïèñûâàåòñÿ)
                                        $FilesZip_count = $FilesZip.count
                                } else {
                                        $FilesZip_count = 1
                                }
                                $FileZipCurrent_count++
#-->                        #        èçâëåêàåì èç àðõèâà:
                                $PathZip="$PathIn\"
                                [string]$zipfilename = $FileZipCurrent
                                [string]$destination = $PathZip
                                if(test-path($FileZipCurrent)) {
                                        $shellApplication = new-object -com shell.application
                                        $zipPackage = $shellApplication.NameSpace($zipfilename)
                                        $destinationFolder = $shellApplication.NameSpace($destination)
                                        $destinationFolder.CopyHere($zipPackage.Items())
                                }
                                #        óäàëÿåì àðõèâ:
                                Remove-Item "$FileZipCurrent"
                        }#<--Îáðàáîòêà zip
                } else {        #        íå íàéäåíû zip
                        Write-Host "íå íàéäåíû zip-àðõèâû. èùåì xml..." -ForegroundColor Yellow
                        start-sleep 1
#-->                #        Îáðàáîòêà xml
                        $FilesXml = Get-ChildItem $PathIn\* -Include  *.xml
                        if ($FilesXml -ne $null) {
                                Remove-Variable FileXmlCurrent_count,FilesXml_count -ErrorAction SilentlyContinue
                                ForEach ($FileXmlCurrent in $FilesXml) {        #        êàæäîå çíà÷åíèå $FilesXml äåëàåì ñ $FileXmlCurrent:
                                        Remove-Variable ErrorCode,ErrorText,ErrorHelp -ErrorAction SilentlyContinue
                                        Remove-Variable info,DocNumber,DateCreateDoc,CadastralNumber,Cad_Region,Cad_Rayion,Cad_Kvartal,Cad_Uchastok,Region,Rayion -ErrorAction SilentlyContinue
                                        Remove-Variable DocTypeRus,DocType,DocVers,OutPath,OutName -ErrorAction SilentlyContinue
                                        if ($FilesXml.count -ge "2") {                #        Ïðîâåðêà íà ïóñòîå çíà÷åíèå (åñëè 1 ôàéë, òî íå çàïèñûâàåòñÿ)
                                                $FilesXml_count = $FilesXml.count
                                        } else {
                                                $FilesXml_count = 1
                                        }
                                        $FileXmlCurrent_count++
                                        Clear-Host
                                        Write-Host "îáðàáàòûâàåì zip ôàéë: $FileZipCurrent_count èç $FilesZip_count `t($($FileZipCurrent.name))"
                                        Write-Host "îáðàáàòûâàåì xml ôàéë: $FileXmlCurrent_count èç $FilesXml_count `t($($FileXmlCurrent.name))"
                                        Write-Host "-------------------------------------------------------------------------------"
                        #-->        #---Îñíîâîíîå äåéñòâî---#
                                        $oXmlDocument = New-Object -TypeName System.Xml.XmlDocument #        ñîçäàåì íîâûé îáúåêò êàê xml
                                        $oXmlDocument.load($FileXmlCurrent) #        çàãðóæàåì òåêóùèé ôàéë â ïåðåìåííóþ îáðàáîòêè
                                        $DocType = $oXmlDocument."xml-stylesheet".split("/")[6]
                                        $DocVers = $oXmlDocument."xml-stylesheet".split("/")[7]
                                        if ($DocType -ne $null) {                # òèï äîêóìåíòà èç âòîðîé ñòðîêè xml
                                                Switch ($DocType) {                        # ïðîéäåìñÿ ïî èçâåñòíûì òèïàì äîêóìåíòîâ
                                                        KPT {                                        # ÊÏÒ
                                                                $DocTypeRus = "ÊÏÒ"
                                                                Write-Host "òèï äîêóìåíòà:" `t `t $DocTypeRus
                                                                Switch ($DocVers) {        # ïðîéäåìñÿ ïî èçâåñòíûì âåðñèÿì äîêóìåíòà (íà÷àë ñ 9, îñòàëüíûå ñòàðûå)
                                                                        "09" {                        # https://portal.rosreestr.ru/xsl/GKN/KPT/09/common.xsl
                                                                                Write-Host "âåðñèÿ äîêóìåíòà:" `t $DocVers
                                                                                # ïîëó÷àåì çíà÷åíèÿ â ïåðåìåííûå #--------------------------------------------------------------
                                                                                $DateCreateDoc  = $oXmlDocument.KPT.CertificationDoc.Date
                                                                                $CadastralNumber = $oXmlDocument.KPT.CadastralBlocks.CadastralBlock.CadastralNumber
                                                                                $info=Out_PathAndName ($CadastralNumber)
                                                                                if ($info[0]  -ne $null) {$ErrorCode    = $info[0]}
                                                                                if ($info[1]  -ne $null) {$ErrorText    = $info[1]}
                                                                                if ($info[2]  -ne $null) {$ErrorHelp    = $info[2]}
                                                                                if ($info[3]  -ne $null) {$Cad_Region  = $info[3]}
                                                                                if ($info[4]  -ne $null) {$Cad_Rayion  = $info[4]}
                                                                                if ($info[5]  -ne $null) {$Cad_Kvartal  = $info[5]}
                                                                                if ($info[6]  -ne $null) {$Cad_Uchastok = $info[6]}
                                                                                if ($info[7]  -ne $null) {$Region      = $info[7]}
                                                                                if ($info[8]  -ne $null) {$Rayion      = $info[8]}
                                                                                if ($info[9]  -ne $null) {$OutPath      = $info[9]}
                                                                                if ($info[10] -ne $null) {$OutName      = $info[10]}
                                                                        }                        # çàêîí÷èëè ñ 9 âåðñèåé ÊÏÒ
                                                                        Default {        # ÷òî äåëàòü, êîãäà âåðñèÿ ÊÏÒ íå îïèñàíà
                                                                                Write-Host "âåðñèÿ äîêóìåíòà:" `t $DocVers
                                                                                $ErrorCode = "03-01"
                                                                                $ErrorText = "$DocVers âåðñèÿ $DocTypeRus íå ìîæåò áûòü îáðàáîòàíà"
                                                                                $ErrorHelp = 'âûøëà íîâàÿ âåðñèÿ XML-ñõåìû'
                                                                        }                        # çàêîí÷èëè ñ âàðèàíòîì, êîãäà âåðñèÿ ÊÏÒ íå îïèñàíà
                                                                }                                # çàêîí÷èëè ñ ïðîõîäîì ïî âåðñèÿì ÊÏÒ
                                                        }                                        # çàêîí÷èëè ñ ÊÏÒ
                                                        Vidimus {                        # âûïèñêà
                                                                $DocTypeRus = "ÊÂÇÓ"
                                                                Write-Host "òèï äîêóìåíòà:" `t `t $DocTypeRus
                                                                Switch ($DocVers) {
                                                                        "06" { # https://portal.rosreestr.ru/xsl/GKN/Vidimus/06/common.xsl
                                                                                Write-Host "âåðñèÿ äîêóìåíòà:" `t $DocVers
                                                                                # ïîëó÷àåì çíà÷åíèÿ â ïåðåìåííûå #--------------------------------------------------------------
                                                                                $DateCreateDoc  = $oXmlDocument.KVZU.CertificationDoc.Date
                                                                                $CadastralNumber = $oXmlDocument.KVZU.Parcels.Parcel.CadastralNumber
                                                                                $info=Out_PathAndName ($CadastralNumber)
                                                                                if ($info[0]  -ne $null) {$ErrorCode    = $info[0]}
                                                                                if ($info[1]  -ne $null) {$ErrorText    = $info[1]}
                                                                                if ($info[2]  -ne $null) {$ErrorHelp    = $info[2]}
                                                                                if ($info[3]  -ne $null) {$Cad_Region  = $info[3]}
                                                                                if ($info[4]  -ne $null) {$Cad_Rayion  = $info[4]}
                                                                                if ($info[5]  -ne $null) {$Cad_Kvartal  = $info[5]}
                                                                                if ($info[6]  -ne $null) {$Cad_Uchastok = $info[6]}
                                                                                if ($info[7]  -ne $null) {$Region      = $info[7]}
                                                                                if ($info[8]  -ne $null) {$Rayion      = $info[8]}
                                                                                if ($info[9]  -ne $null) {$OutPath      = $info[9]}
                                                                                if ($info[10] -ne $null) {$OutName      = $info[10]}
                                                                        }                        # çàêîí÷èëè ñ 6 âåðñèåé ÊÂÇÓ
                                                                        Default {        # ÷òî äåëàòü, êîãäà âåðñèÿ ÊÂÇÓ íå îïèñàíà
                                                                                Write-Host "âåðñèÿ äîêóìåíòà:" `t $DocVers
                                                                                $ErrorCode = "03-01"
                                                                                $ErrorText = "$DocVers âåðñèÿ $DocTypeRus íå ìîæåò áûòü îáðàáîòàíà"
                                                                                $ErrorHelp = 'âûøëà íîâàÿ âåðñèÿ XML-ñõåìû'
                                                                        }                        # çàêîí÷èëè ñ âàðèàíòîì, êîãäà âåðñèÿ ÊÂÇÓ íå îïèñàíà
                                                                }                                # çàêîí÷èëè ñ ïðîõîäîì ïî âåðñèÿì ÊÂÇÓ
                                                        }                                        # çàêîí÷èëè ñ ÊÂÇÓ
                                                        Vidimus_KP {                # êàäàñòðîâûé ïàñïîðò
                                                                $DocTypeRus = "ÊÏÇÓ"
                                                                Write-Host "òèï äîêóìåíòà:" `t `t $DocTypeRus
                                                                Switch ($DocVers) {
                                                                        "03" { # https://portal.rosreestr.ru/xsl/GKN/Vidimus_KP/03/common.xsl
                                                                                Write-Host "âåðñèÿ äîêóìåíòà:" `t $DocVers
                                                                                $ÊÏÇÓ_ñ÷åò÷èê++
                                                                                # ïîëó÷àåì çíà÷åíèÿ â ïåðåìåííûå #--------------------------------------------------------------
                                                                                $DateCreateDoc  = $oXmlDocument.Region_Cadastr_Vidimus_KP.Package.Certification_Doc.Date
                                                                                $CadastralNumber = $oXmlDocument.Region_Cadastr_Vidimus_KP.Package.Federal.Cadastral_Regions.Cadastral_Region.Cadastral_Districts.Cadastral_District.Cadastral_Blocks.Cadastral_Block.Parcels.Parcel.CadastralNumber
                                                                                $info=Out_PathAndName ($CadastralNumber)
                                                                                if ($info[0]  -ne $null) {$ErrorCode    = $info[0]}
                                                                                if ($info[1]  -ne $null) {$ErrorText    = $info[1]}
                                                                                if ($info[2]  -ne $null) {$ErrorHelp    = $info[2]}
                                                                                if ($info[3]  -ne $null) {$Cad_Region  = $info[3]}
                                                                                if ($info[4]  -ne $null) {$Cad_Rayion  = $info[4]}
                                                                                if ($info[5]  -ne $null) {$Cad_Kvartal  = $info[5]}
                                                                                if ($info[6]  -ne $null) {$Cad_Uchastok = $info[6]}
                                                                                if ($info[7]  -ne $null) {$Region      = $info[7]}
                                                                                if ($info[8]  -ne $null) {$Rayion      = $info[8]}
                                                                                if ($info[9]  -ne $null) {$OutPath      = $info[9]}
                                                                                if ($info[10] -ne $null) {$OutName      = $info[10]}
                                                                        }                        # çàêîí÷èëè ñ 3 âåðñèåé ÊÏÇÓ
                                                                        Default {        # ÷òî äåëàòü, êîãäà âåðñèÿ ÊÏÇÓ íå îïèñàíà
                                                                                Write-Host "âåðñèÿ äîêóìåíòà:" `t $DocVers
                                                                                $ErrorCode = "03-01"
                                                                                $ErrorText = "$DocVers âåðñèÿ $DocTypeRus íå ìîæåò áûòü îáðàáîòàíà"
                                                                                $ErrorHelp = 'âûøëà íîâàÿ âåðñèÿ XML-ñõåìû'
                                                                        }                        # çàêîí÷èëè ñ âàðèàíòîì, êîãäà âåðñèÿ ÊÏÇÓ íå îïèñàíà
                                                                }                                # çàêîí÷èëè ñ ïðîõîäîì ïî âåðñèÿì ÊÏÇÓ
                                                        }                                        # çàêîí÷èëè ñ ÊÏÇÓ
                                                       
                                                       
                                                       
                                                       
                                                       
                                                       
                                                       
                                                       
                                                       
                                                       
                                                       
                                                       
                                                       
                                                        Default {                        # ÷òî äåëàòü, êîãäà òèï äîêóìåíòà íå îïèñàí
                                                                $ErrorCode = "02-01"
                                                                $ErrorText = "òèï äîêóìåíòà $DocType íå ìîæåò áûòü îáðàáîòàí"
                                                                $ErrorHelp = 'ñêîðåå âñåãî èçìåíèëîñü íàèìåíîâàíèå äîêóìåíòà($DocType) â xml'
                                                                #error_log ($d, $t, $FileXmlCurrent.name, $ErrorText, $ErrorHelp)
                                                                #rename-item -path "$FileXmlCurrent" -newname "$($FileXmlCurrent.name)`.ÎØÈÁÊÀ"
                                                                #break
                                                        }
                                                }                                                # çàêîí÷èëè ñ ïðîõîäîì ïî òèïàì äîêóìåíòîâ
                                        } else {                                        # íå óäàëîñü îïðåäåëèòü òèï äîêóìåíòà
                                                $ErrorCode = "01-01"
                                                $ErrorText = "íå óäàëîñü îïðåäåëèòü òèï äîêóìåíòà"
                                                $ErrorHelp = 'â xml âòîðàÿ ñòðîêà äîëæíà íà÷èíàòüñÿ ñ <?xml-stylesheet type="text/xsl" href="'
                                                #error_log ($d, $t, $FileXmlCurrent.name, $ErrorText, $ErrorHelp)
                                                #break
                                        }
                                        #-->âûøå îáðàáîòêà xml íèæå ïåðåìåùåíèå
                                        #
                                        #-->Îïèñûâàåì ïåðåìåííûå ïîëó÷åííûå â ðåçóëüòàòå ðàáîòû<-----#
                                        #                                                            #
                                        #        $FileXmlCurrent  îáðàáàòûâàåìûé xml ôàéë                #
                                        #                                                            #
                                        #        $ErrorCode        êîä îøèáêè                            #
                                        #        $ErrorText                                              #
                                        #        $ErrorHelp                                            #
                                        #                                                            #
                                        #        $Cad_Region      êàäàñòðîâûé ðåãèîí öèôðàìè            #
                                        #        $Cad_Rayion      êàäàñòðîâûé ðàéîí öèôðàìè              #
                                        #        $Cad_Kvartal      êàäàñòðîâûé êâàðòàë öèôðàìè            #
                                        #        $CadastralNumber  êàäàñòðîâûé íîìåð öèôðàìè ïîëíîñòüþ    #
                                        #                                                            #
                                        #        $Region          ðåãèîí áóêâàìè                        #
                                        #        $Rayion          ðàéîí áóêâàìè                          #
                                        #                                                            #
                                        #        $OutPath          ñôîðìèðîâàííûé ïóòü                    #
                                        #        $OutName          ñôîðìèðîâàííîå èìÿ                    #
                                        #                                                            #
                                        #<--Îïèñûâàåì ïåðåìåííûå ïîëó÷åííûå â ðåçóëüòàòå ðàáîòû----->#
                                        #
                                        if ($ErrorCode -ne $null) {        #        åñëè îøèáêè áûëè
                                                Clear-Host
                                                Write-Host "-------------------------------------------------------------------------------" -ForegroundColor Yellow
                                                Write-Host "â ïðîöåññå îáðàáîòêè xml âîçíèêëà îøèáêà:" -ForegroundColor Yellow
                                                Write-Host "-------------------------------------------------------------------------------" -ForegroundColor Yellow
                                                Write-Host "Êîä îøèáêè:" `t $ErrorCode
                                                Write-Host "Òåêñò:"    `t`t $ErrorText
                                                Write-Host "Äåéñòâèå:"  `t $ErrorHelp
                                                msg $UserName /TIME:9000 "$ErrorText"
                                                start-sleep $ErrorSleep
                                                $OutPath="$PathOut\ïðîáëåìíûå\$ErrorCode"
                                                if (!(test-path "$OutPath\")) {                                                # ïðîâåðêà íà ñóùåñòâîâàíèå êàòàëîà, åñëè íåò:
                                                        new-item -path $PathOut -name "ïðîáëåìíûå\$ErrorCode" -type directory -force | Out-Null
                                                }
                                                if (test-path "$OutPath\$($FileXmlCurrent.name)") {        # ïðîâåðêà íà ñóùåñòâîâàíèå ôàéëà â êàòàëîãå íàçíà÷åíèÿ, åñëè çàíÿòî:
                                                        Write-Host "îáðàòèòå âíèìàíèå: òàêîé ôàéë óæå èìååòñÿ" -ForegroundColor Yellow
                                                        Remove-Variable Flag_ReName,NamePlus -ErrorAction SilentlyContinue
                                                        $NamePlus=1
                                                        $OutNamePovtor = $(($FileXmlCurrent.name).Substring(0,($($FileXmlCurrent.name).Length -4)))
                                                        While ($Flag_ReName -eq $null) {                                # ïîêà ôëàã ïóñòîé ïðîâåðÿåì ñóùåñòâîâàíèå ôàéëà è äîáàâëÿåì 1 ê NamePlus
                                                                if (test-path "$OutPath\$OutNamePovtor ($NamePlus)`.xml") {
                                                                        $NamePlus++
                                                                } else {
                                                                        $OutName = "$OutNamePovtor ($NamePlus)`.xml"
                                                                        $Flag_ReName=$NamePlus
                                                                }
                                                        }
                                                }
                                                move-item -path "$FileXmlCurrent" -destination "$OutPath\$OutName"
                                                if (test-path "$FileXmlCurrent`.sig") {
                                                        $OutName = "$OutNamePovtor ($NamePlus)`.xml`.sig"
                                                        move-item -path "$FileXmlCurrent`.sig" -destination "$OutPath\$OutName"
                                                }
                                                error_log ($d, $t, $FileXmlCurrent.name, $ErrorText, $ErrorHelp)
                                                moves_log ($d, $t, $FileZipCurrent.name, $FileXmlCurrent.name, $DocTypeRus, $DateCreateDoc, $OutPath, $OutName)
                                        } else {        #                                        åñëè îøèáîê íå áûëî
                                                $NoError="äà"
                                                ###############------------------------------------------------------------------------------------#
                                                if ($DateCreateDoc -ne $null)    {Write-Host "äàòà ôîðìèðîâàíèÿ:" `t    $DateCreateDoc}
                                                if ($CadastralNumber -ne $null)  {Write-Host "êàäàñòðîâûé íîìåð:" `t    $CadastralNumber}
                                                if ($Region -ne $null)          {Write-Host "ðåãèîí:"        `t `t    $Region}
                                                if ($Rayion -ne $null)          {Write-Host "ðàéîí:"      `t `t `t    $Rayion}
                                                ###############------------------------------------------------------------------------------------#
                                                #-->ïåðåìåùàåì:
                                                if (!(test-path "$OutPath")) { #                                                ïðîâåðêà íà ñóùåñòâîâàíèå êàòàëîãà
                                                        new-item -path $OutPath -type directory -force | Out-Null
                                                }
                                                if (!(test-path "$OutPath\$OutName")) { #                                ïðîâåðêà íà ñóùåñòâîâàíèå ôàéëà â êàòàëîãå íàçíà÷åíèÿ, åñëè ïóñòî:
                                                        move-item -path "$FileXmlCurrent"                                        -destination "$OutPath\$OutName"
                                                        moves_log ($d, $t, $FileZipCurrent.name, $FileXmlCurrent.name, $DocTypeRus, $DateCreateDoc, $OutPath, $OutName)
                                                        if (test-path "$FileXmlCurrent`.sig") { #                        ïðîâåðêà íà íàëè÷èå öèôðîâîé ïîäïèñè
                                                                move-item -path "$FileXmlCurrent`.sig"                        -destination "$OutPath\$OutName`.sig"
                                                        }
                                                        # äåëàåì ôàéëû ñ êîîðäèíàòàìè è ÎÑÌ
                                                        if (($DocTypeRus -eq "ÊÏÒ") -and ($DocVers -eq "09") -and ($($FileXmlCurrent.Length / 1Mb) -ge 5)) {
                                                                Write-Host ""
                                                                Write-Host "äåëàåì ôàéë ñ êîîðäèíàòàìè"
                                                                $Sek=((Measure-Command {
                                                                        $FileOutCSV = "$OutPath\Êîîðäèíàòû ê $DocTypeRus íà $Cad_Region`-$Cad_Rayion`-$Cad_Kvartal îò $DateCreateDoc`.csv"
                                                                        # çàïîëíèì çàãîëîâîê
                                                                        "êàäàñòðîâûé íîìåð;íîìåð òî÷êè;X;Y;ïîãðåøíîñòü" | Out-File -FilePath $FileOutCSV -Encoding 'default'
                                                                        "1;2;3;4;5" | Out-File -Append -FilePath $FileOutCSV -Encoding 'default'
                                                                        $StrokKoordinat=0
                                                                        $oXmlDocument.KPT.CadastralBlocks.CadastralBlock.Parcels.Parcel |`
                                                                        ForEach-Object -Process {
                                                                                $CadNumUch = $_.CadastralNumber
                                                                                $_.EntitySpatial.SpatialElement.SpelementUnit |`
                                                                                ForEach-Object -Process {
                                                                                        if ($_.SuNmb -ne $null) {
                                                                                                $StrokKoordinat++
                                                                                                "$CadNumUch;$($_.SuNmb);$($_.Ordinate.X -replace "\.",",");$($_.Ordinate.Y -replace "\.",",");$($_.Ordinate.DeltaGeopoint -replace "\.",",")"`
                                                                                                | Out-File -Append -FilePath $FileOutCSV -Encoding 'default'
                                                                                        }
                                                                                }
                                                                        }
                                                                }).TotalSeconds.tostring("F00"))
                                                                # âñåãî ñåêóíä + ñêîëüêî îáðàáîòàíî ñòðîê
                                                                Write-Host "--------------------------"
                                                                Write-Host "ñåêóíä ïîòðà÷åíî:" `t $Sek
                                                                Write-Host "ñòðîê îáðàáîòàíî:" `t $StrokKoordinat
                                                                start-sleep $ErrorSleep
                                                                Write-Host "ñîçäàí ôàéë:" `t `t "Êîîðäèíàòû ê $DocTypeRus íà $Cad_Region`-$Cad_Rayion`-$Cad_Kvartal îò $DateCreateDoc`.csv"
                                                                # äåëàåì ôàéë ñ ÎÌÑ
                                                                if ($oXmlDocument.KPT.CadastralBlocks.CadastralBlock.OMSPoints.OMSPoint) {
                                                                        Write-Host ""
                                                                        Write-Host "äåëàåì ôàéë ñ ÎÌÑ"
                                                                        $Sek=((Measure-Command {
                                                                                $FileOutCSV = "$OutPath\ÎÌÑ ê $DocTypeRus íà $Cad_Region`-$Cad_Rayion`-$Cad_Kvartal îò $DateCreateDoc`.csv"
                                                                                # çàïîëíèì çàãîëîâîê
                                                                                "Íîìåð ïóíêòà îïîðíîé ìåæåâîé ñåòè íà ïëàíå;Íàçâàíèå è (èëè) íîìåð, òèï ïóíêòà îïîðíîé ìåæåâîé ñåòè;Êëàññ îïîðíîé ìåæåâîé ñåòè;X;Y" | Out-File -FilePath $FileOutCSV -Encoding 'default'
                                                                                "1;2;3;4;5" | Out-File -Append -FilePath $FileOutCSV -Encoding 'default'
                                                                                $StrokOMS=0
                                                                                $oXmlDocument.KPT.CadastralBlocks.CadastralBlock.OMSPoints.OMSPoint |`
                                                                                ForEach-Object -Process {
                                                                                        $StrokOMS++
                                                                                        "$($_.PNmb);$($_.PName -replace ";"," ");$($_.PKlass -replace ";"," ");$($_.OrdX -replace "\.",",");$($_.OrdY -replace "\.",",")"`
                                                                                        | Out-File -Append -FilePath $FileOutCSV -Encoding 'default'
                                                                                }
                                                                        }).TotalSeconds.tostring("F00"))
                                                                        # âñåãî ñåêóíä + ñêîëüêî îáðàáîòàíî ñòðîê
                                                                        Write-Host "--------------------------"
                                                                        Write-Host "ñåêóíä ïîòðà÷åíî:" `t $Sek
                                                                        Write-Host "ñòðîê îáðàáîòàíî:" `t $StrokOMS
                                                                        Write-Host "ñîçäàí ôàéë:" `t `t "ÎÌC ê $DocTypeRus íà $Cad_Region`-$Cad_Rayion`-$Cad_Kvartal îò $DateCreateDoc`.csv"
                                                                        start-sleep $ErrorSleep
                                                                }
                                                        }
                                                } else { #-->åñëè çàíÿòî
                                                        Write-Host "îáðàòèòå âíèìàíèå: òàêîé ôàéë óæå èìååòñÿ" -ForegroundColor Yellow
                                                        if (!(test-path "$PathOut\ïîâòîðû")) {
                                                                new-item -path "$PathOut\ïîâòîðû" -type directory -force | Out-Null
                                                        }
                                                        Remove-Variable Flag_ReName,NamePlus -ErrorAction SilentlyContinue
                                                        $NamePlus=1
                                                        $OutNamePovtor = $OutName.Substring(0,($OutName.Length -4)) # ñðåçàåì 4 ñèìâîëà ñ êîíöà
                                                        While ($Flag_ReName -eq $null) { # ïîêà ôëàã ïóñòîé ïðîâåðÿåì ñóùåñòâîâàíèå ôàéëà è äîáàâëÿåì 1 ê NamePlus
                                                                if (!(test-path "$PathOut\ïîâòîðû\$OutNamePovtor ($NamePlus)`.xml")) {
                                                                        $OutPath = "$PathOut\ïîâòîðû\"
                                                                        $OutName = "$OutNamePovtor ($NamePlus)`.xml"
                                                                        $Flag_ReName=$NamePlus
                                                                        move-item -path "$FileXmlCurrent" -destination "$OutPath\$OutName"
                                                                        moves_log ($d, $t, $FileZipCurrent.name, $FileXmlCurrent.name, $DocTypeRus, $DateCreateDoc, $OutPath, $OutName)
                                                                        if (test-path "$FileXmlCurrent`.sig") {
                                                                                $OutName = "$OutNamePovtor ($NamePlus)`.xml`.sig"
                                                                                move-item -path "$FileXmlCurrent`.sig" -destination "$OutPath\$OutName"
                                                                        }
                                                                } else {
                                                                        $NamePlus++
                                                                }
                                                        }
                                                } # /çàêîí÷èëè ñ ïåðåìåùåíèåì
                                        }
#-->                                #        ñîîáùåíèå ïîñëå îáðàáîòêè êàæäîãî ôàéëà
                                        Write-Host "-----------------------------------------"
                                        Write-Host "èùåì ñëåäóþùèé ôàéë..."
                                        Write-Host ""
                                        start-sleep 2
                                        $activation++
                                        if ($NoError -eq "äà") {
                                                if ($activation -eq 1) {$AText1 = "$activation`t$DocTypeRus`t$CadastralNumber"}
                                                if ($activation -eq 2) {$AText2 = "$activation`t$DocTypeRus`t$CadastralNumber"}
                                                if ($activation -eq 3) {$AText3 = "$activation`t$DocTypeRus`t$CadastralNumber"}
                                                if ($activation -eq 4) {$AText4 = "$activation`t$DocTypeRus`t$CadastralNumber"}
                                                if ($activation -eq 5) {$AText5 = "$activation`t$DocTypeRus`t$CadastralNumber"}
                                                if ($activation -gt 5) {
                                                        $AText1 = $AText2
                                                        $AText2 = $AText3
                                                        $AText3 = $AText4
                                                        $AText4 = $AText5
                                                        $AText5 = "$activation`t$DocTypeRus`t$CadastralNumber"
                                                }
                                        }
                                }        #        êàæäîå çíà÷åíèå $FilesXml äåëàåì ñ $FileXmlCurrent
                        } else {        #        íå íàéäåíû xml
                                Write-Host "íå íàéäåíû xml-ôàéëû..." -ForegroundColor Yellow
                                start-sleep $ErrorSleep
                                continue
                        }
                }#<--Îáðàáîòêà xml (åñëè íå íàéäåíû zip)
        }#<--Åñëè ñðàáîòàë àêòèâàòîð
}
 #/çàêîí÷èëè ñî ñðàáàòûâàíèåì íà ôàéë â $ZipPath



íà âñÿêèé ñëó÷àé, åñëè êòî ðåøèòüñÿ, ñêðèïò è ôàéëû êîòîðûå îí îáðàáàòûâàåò â àðõèâå

Kazun 08-04-2015 09:04 2493073

Êîä:

[System.Runtime.Interopservices.Marshal]::ReleaseComObject($ex)
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($wb)
Remove-Variable ex
Remove-Variable wb
Get-Process EXCEL | Stop-Process -Force

Get-Process EXCEL | Stop-Process -Force - Ìîæíî ïîïðîáîâàòü áåç íåå äëÿ íà÷àëà.

firstarey 08-04-2015 09:34 2493085

õì.. åñëè äîáàâèòü êîìàíäó exit òî ïîñëå âûõîäà ïðîöåññ EXCEL çàâåðøàåòñÿ ñàì.
à âîò åñëè ñêðèïò çàêðûòü íàæàòèåì íà "x" òî òî îñòàåòñÿ âèñåòü

Foreigner 08-04-2015 10:16 2493097

firstarey, À åñëè äîáàâèòü:
Êîä:

stop-process $pid
×åìó ýòî áîëüøå ñîîòâåòñòâóåò exit èëè "x"?

firstarey 08-04-2015 11:43 2493127

Öèòàòà:

Öèòàòà Foreigner
stop-process $pid »

íåìíîãî íå ïîíÿë Âàñ.
÷òî äîëæíî áûòü â $pid ?

Foreigner 08-04-2015 11:53 2493130

firstarey, Ýòî àâòîìàòè÷åñêàÿ ïåðåìåííàÿ, pid õîñòà, â êîòîðîì çàïóùåí ñêðèïò. Ïîäîçðåâàþ, ÷òî áóäåò àíàëîãè÷íî íàæàòèþ êíîïêè îêíà.

firstarey 08-04-2015 12:17 2493142

Öèòàòà:

Öèòàòà Foreigner
Ïîäîçðåâàþ, ÷òî áóäåò àíàëîãè÷íî íàæàòèþ êíîïêè îêíà »

äà, çàêðûâàåò îêíî, çàâåðøàÿ ïðîöåññ.
íî ýòî ñîâñåì íå òî ÷òî ìíå íóæíî.
ñêðèïò ðàáîòàåò âñå âðåìÿ â ðåæèìå íàáëþäåíèÿ çà ïàïêîé:
Êîä:

        if (($FilesZip -eq $null) -and ($FilesXml -eq $null)) {
                start-sleep 10 # çàäåðæêà ïåðåä ñëåäóþùèì ïðîõîäîì
                continue
        } else {# òóò ñàìî äåéñòâî

è çàâåðøàòü íóæíî íå ñêðèïò, à âûÿñíèòü ïðè÷èíó ïî÷åìó âèñèò ïðîöåññ excel è êàê ýòîãî èçáåæàòü

Foreigner 08-04-2015 12:25 2493147

firstarey, Ïîäîçðåâàþ, ÷òî excel com-object íå çàêðûâàåòñÿ, åñëè íå çàâåðøåí ñêðèïò. Ïîïðîáóéòå, ÷òî ïðåäëîæèë Kazun

firstarey 08-04-2015 12:34 2493154

Öèòàòà:

Öèòàòà Foreigner
Ïîïðîáóéòå, ÷òî ïðåäëîæèë Kazun »

Öèòàòà:

Öèòàòà Kazun
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($ex)
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($wb)
Remove-Variable ex
Remove-Variable wb
Get-Process EXCEL | Stop-Process -Force »

äàííûé âàðèàíò íå ïîäõîäèò ò.ê. âûðóáàåò ÂÅÑÜ ýêñåëü. à åñëè âäðóã ïî ðàáîòå ÷òî òî îòêðûòî?

Öèòàòà:

Öèòàòà Foreigner
excel com-object íå çàêðûâàåòñÿ, åñëè íå çàâåðøåí ñêðèïò »

ïîëó÷àåòñÿ ÷òî òàê è åñòü, íî âåäü ýòà ôóíêöèÿ ïðèñóòñòâóåò â ñêðèïòå òðèæäû, à âèñåòü îñòàåòñÿ ëèøü 1 ïðîöåññ. Âîçìîæíî ýòî çíà÷åíèÿ íå èìååò, à ïîä êîíêðåòíóþ ñåññèþ PS ñîçäàåòñÿ êîíêðåòíàÿ ñåññèÿ EXCEL

Kazun 08-04-2015 12:38 2493155

Íàó÷èòåñü ÷èòàòü èëè ïîïðîñèòå, êòî óìååò - Get-Process EXCEL | Stop-Process -Force - Ìîæíî ïîïðîáîâàòü áåç íåå .

firstarey 08-04-2015 12:57 2493161

Öèòàòà:

Öèòàòà Kazun
Íàó÷èòåñü ÷èòàòü èëè ïîïðîñèòå, êòî óìååò - Get-Process EXCEL | Stop-Process -Force - Ìîæíî ïîïðîáîâàòü áåç íåå . »

ÿ ïðîáîâàë ÎÁÀ âàðèàíòà.
äîáàâëåíèå ñòðîê
Êîä:

[System.Runtime.Interopservices.Marshal]::ReleaseComObject($ex)
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($wb)
Remove-Variable ex
Remove-Variable wb

ïåðåä çàêðûòèåì
Êîä:

$ex.Quit()
íå äàåò ðåçóëüòàò.
áóäòå âåæëèâû èëè ïðîõîäèòå ìèìî.

êàê óêàçàíî âûøå ïðîáëåìà â òîì, ÷òî excel com-object íå çàâåðøàåò ïðîöåññ excel ïîêà ñêðèïò íå áóäåò çàâåðøåí êîððåêòíûì îáðàçîì. Íî â ìîåì ñëó÷àå ñêðèïò ðàáîòàåò âñå âðåìÿ áåç çàâåðøåíèÿ.

Ýòî íå êðèòè÷íàÿ ïðîáëåìà, ÿ õîòåë âûÿñíèòü åñòü ëè âîçìîæíîñòü äàòü ïîíÿòü PS, ÷òî Excel ñâîå äåëî ñäåëàë è ìîæåò áûòü çàâåðøåí.

Kazun 08-04-2015 13:02 2493162

Ëîãè÷íî, ÷òî ýòè ñòðîêè äîëæíû âûïîëíÿòüñÿ ïîñëå êîìàíäû $ex.Quit() , à íå äî.

firstarey 08-04-2015 13:09 2493169

Öèòàòà:

Öèòàòà Kazun
ýòè ñòðîêè äîëæíû âûïîëíÿòüñÿ ïîñëå êîìàíäû $ex.Quit() »

ê ñîæàëåíèþ ñèòóàöèþ ýòî íå ñïàñëî:
ñêðèíøîò

firstarey 09-04-2015 09:06 2493521

èäåÿ ïîÿâèëàñü, íî ñ ðåàëèçàöèåé íå ïîëó÷èëîñü:

åñëè äîáàâèòü êíîïêó êîòîðàÿ îòâå÷àåò çà óñòàíîâêó ôëàãà âûõîäà èç öèêëà?
ïðîáëåìà â òîì, ÷òî ôîðìà è ñêðèïò ó ìåíÿ æèâóò îòäåëüíîé æèçíüþ - êàê èõ îáúåäèíèòü?

Êîä:

Add-Type -assembly System.Windows.Forms

while($TRUE){
        Clear-Host
        Write-Host "$i"
        start-sleep 1 # çàäåðæêà ïåðåä ñëåäóþùèì ïðîõîäîì
        #äîáàâëÿåì ôóíêöèþ êîòîðàÿ áóäåò âûïîëíÿòüñÿ ïîñëå íàæàòèÿ êëàâèøè:
        $i++
        if ($exit -eq 1) {
                exit
        }
}

#ñîçäà¸ì ôîðìó
$main_form = New-Object System.Windows.Forms.Form
$main_form.Text ='Âèäèìîå íàçâàíèå ôîðìû'
$main_form.Width = 100
$main_form.Height = 100
$main_form.AutoSize = $true

#ñîçäà¸ì êíîïêó
$button = New-Object System.Windows.Forms.Button
$button.Text = 'exit'
$button.Location = New-Object System.Drawing.Point(10,5)
#Ïðè íàæàòèè íà êíîïêó âûïîëíÿåòñÿ ôóíêöèÿ : Click_Button
$button.add_Click( {$main_form.Close(); $exit=1} );
$main_form.Controls.Add($button)
#îòîáðàæàåì ôîðìó
$main_form.ShowDialog()


corbis 21-04-2015 02:38 2498524

×òîáû ôîðìà è ñêðèïò "îáùàëèñü" ìåæäó ñîáîé, ó íèõ äîëæíî áûòü ÷òî-òî îáùåå. Îáû÷íî ýòî ïåðåìåííûå.
Íî, ïî óìîë÷àíèþ, âñå ïåðåìåííûå ëîêàëüíûå. Çàäàéòå ãëîáàëüíûå ïåðåìåííûå è âñ¸ ïîëó÷èòñÿ.

$global:x -áóäåò âèäåòü è ôîðìà, è ñêðèïò.

èíñïåêòîð 11-12-2020 00:47 2942582

Óáðàë âñïëûâàþùèé â êîíöå "MsgBox" - Excel ñòàë çàêðûâàòüñÿ â ïðîöåññàõ. "×óäíûé" microsoft.


Âðåìÿ: 21:25.

Âðåìÿ: 21:25.
© OSzone.net 2001-