PowerShell В операторе Try отсутствует блок Catch или, наконец, - PullRequest
0 голосов
/ 11 июня 2018

Я очень новичок в PowerShell и только недавно обнаружил этот драгоценный камень инструмента.Я собрал несколько разных скриптов, чтобы я мог найти на диске файлы Excel и посмотреть, содержат ли они набор символов.Я думаю, что у меня есть все, что мне нужно, однако я получаю сообщение об ошибке с фигурными скобками (насколько я могу судить).

Имеет ли смысл часть моего сценария, содержащая REGEX?Будет ли двух строк ниже достаточно для определения того, соответствует ли каждое значение ячейки предписанному шаблону?

$formula = $workSheet.cells.item($row,$column).value
if($formula -match [regex]$REGEX)

В отдельном сообщении я продолжаю получать сообщение об ошибке (см. Подробности в коде) при попытке запустить скрипт.Я попытался добавить и удалить фигурные скобки, так как это то, о чем мне постоянно говорит сообщение, если проблема.

Мой скрипт написан так:

Function Search-Files-For-Patterns {
    [cmdletbinding()]
    Param (
        [parameter(Mandatory)]
        [ValidateScript({
            Try {
                If (Test-Path -Path $_) {$True}
                Else {Throw "$($_) is not a valid path!"}
            }
            Catch {
                Throw $_
            }
        })]
        [String]$Source,       
        [parameter(Mandatory)]
        [string]$SearchText
    )
    $LogCSV = "X:\PowerShell\Scrape.csv"
    $Filelist =  Get-ChildItem $Source -Filter '*.xls*' -Recurse
    $Excel = New-Object -ComObject Excel.Application
    $DisableAutomationSecurity = [Microsoft.Office.Core.MsoAutomationSecurity]::msoAutomationSecurityForceDisable
    $EnableAutomationSecurity = [Microsoft.Office.Core.MsoAutomationSecurity]::msoAutomationSecurityByUI
    $REGEX = "\d\d\d-\d\d\d-\d\d\d"

    $Excel.Application.AutomationSecurity = $DisableAutomationSecurity
    Remove-Item $LogCSV -ErrorAction SilentlyContinue

    Out-File -FilePath $LogCSV -InputObject "File;Count;NAS"
    #"File;Count" > $LogCSV                    
    foreach ($File in $Filelist) {
        $password = ""
        try {
            $Workbook = $Excel.Workbooks.Open($File.FullName, 0, 0, 5, $password)
            $Numbers = New-Object System.Collections.ArrayList
            $NumberCount = 0
            ForEach ($Worksheet in @($Workbook.Sheets)) {
                $rowMax = ($Worksheet.usedRange.rows).count
                $columnMax = ($Worksheet.usedRange.columns).count
                For($row = 1 ; $row -le $rowMax ; $row ++) {
                    For($column = 1 ; $column -le $columnMax ; $column ++) {
                        $formula = $workSheet.cells.item($row,$column).value
                        #[string]$formula = $workSheet.cells.item($row,$column).value
                        if($formula -match [regex]$REGEX) {
                            $Numbers.Add("$($formula.Text);")
                            $NumberCount++
                            if ($NumberCount -eq 25) {break}
                        } #end for if $formula 
                    } #end for $column
                } #end for $row            
                if ($NumberCount -ge 10) {
                    Out-File -FilePath $LogCSV -InputObject "$($File.FullName);$NumberCount;$Numbers" -Append
                } #end if $numbercount >= 10
                $workbook.close($false)
            } #end foreach worksheet
            catch {
                Out-File -FilePath $LogCSV -InputObject "$($File.FullName);File is password protected - skipped;" -Append
            } #end catch
        } #end try <--ERROR OCCURS HERE
    } #end for each file

    $Excel.Application.AutomationSecurity = $EnableAutomationSecurity
    [void][System.Runtime.InteropServices.Marshal]::ReleaseComObject([System.__ComObject]$excel)
    [gc]::Collect()
    [gc]::WaitForPendingFinalizers()
    Remove-Variable excel -ErrorAction SilentlyContinue
} #end function
Search-Files-For-Patterns "X:\SomeFolder" "\d\d\d-\d\d\d-\d\d"

Сообщение об ошибке, которое я получаю, когдаЯ пытаюсь запустить это:

At X:\PowerShell\ScrapeG\Search-Files-For-Patterns.ps1:58 char:10
+         } #end try
+          ~
The Try statement is missing its Catch or Finally block.
    + CategoryInfo          : ParserError: (:) [], ParentContainsErrorRecordException
    + FullyQualifiedErrorId : MissingCatchOrFinally

Любое направление / помощь будет принята с благодарностью.

Заранее спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...