【问题标题】:Powershell function not receiving parametersPowershell函数未接收参数
【发布时间】:2019-12-13 06:51:21
【问题描述】:

我有一个 Powershell 脚本。我的最终目标是比较两个 Excel 文件并突出显示两个版本的差异。我的部分“准备代码”是这样的:

    function DefineVars () {
        Clear-Host

        # Define some basic variables
        $Directory = Split-Path -Parent $PSCommandPath
        $FilePath = $Directory + "\xlsx\"
        $FileName1 = $FilePath + "Firewallv2.xlsx"
        $FileName2 = $FilePath + "Firewallv3.xlsx"
        $OutFile1 = $FilePath + "file1_raw.csv"
        $OutFile2 = $FilePath + "file2_raw.csv"

        # Create an Object Excel.Application using Com interface
        $Excel = New-Object -ComObject Excel.Application
        $Excel.Visible = $false
        $Excel.DisplayAlerts = $false

        # Generate the Workbook Objects
        $WorkBook1 = $Excel.Workbooks.Open($FileName1)
        $WorkBook2 = $Excel.Workbooks.Open($FileName2)

        return $Directory, $FilePath, $FileName1, $FileName2, $OutFile1, $OutFile2, $Excel, $WorkBook1, $WorkBook2

    }

    function GenerateData ($WorkBook, $OutFile) {

        $Results = @()
        Write-Host $OutFile

        foreach ($CurrentWorkSheet in $WorkBook.Worksheets) {

            $CurrentWorkSheetName = $CurrentWorkSheet.Name
            $CurrentWorkSheetRows = $CurrentWorkSheet.UsedRange.Rows.Count
            $CurrentWorkSheetColumns = $CurrentWorkSheet.UsedRange.Columns.Count

            $CurrentWorkSheet.Activate()

            for ($CurrentColumn = 1; $CurrentColumn -le $CurrentWorkSheetColumns; $CurrentColumn++) {

                for ($CurrentRow = 1; $CurrentRow -le $CurrentWorkSheetRows; $CurrentRow++) {

                    $CurrentCell = $CurrentWorksheet.Cells.Item($CurrentRow, $CurrentColumn)
                    $CurrentCellContent = $CurrentCell.Text

                    if ([System.IO.File]::Exists($OutFile)) {

                        Write-Host "true"
                        #","+$CurrentCellContent | Out-File $OutFile -Append

                    } else {

                        Write-Host "false"
                        #$CurrentCellContent | Out-File $OutFile

                    }
                }
            }
        }
        return $Results
    }

    function CloseExcel () {

    $WorkBook1.Close($true)
    $WorkBook2.Close($true)
    $Excel.Quit()
    spps -n Excel

    }

$Directory, $FilePath, $FileName1, $FileName2, $OutFile1, $OutFile2, $Excel, $WorkBook1, $WorkBook2 = DefineVars

$ResultsFile1 = GenerateData($WorkBook1, $OutFile1)
$ResultsFile2 = GenerateData($WorkBook2, $OutFile2)
CloseExcel 

我的问题是对 $OutFile 变量的 GenerateData 函数的参数调用由于某种原因不起作用。所有其他参数似乎都已成功传递,例如工作簿。但是如果我在 GenerateData 函数的开头插入Write-Host $OutFile,则字符串为空(如果我没记错的话,这意味着它不会通过)。

我确信这很容易解释,但我似乎无法弄清楚这一点。

谢谢,最好的

西蒙

【问题讨论】:

    标签: powershell parameters arguments


    【解决方案1】:

    我明白了。我的问题是主要方法中的语法。被其他语言所困扰,我认为我需要括号和逗号来传递参数。然而,使用 Powershell 会简单得多:

    $ResultsFile1 = GenerateData $WorkBook1 $OutFile1
    $ResultsFile2 = GenerateData $WorkBook2 $OutFile2
    CompareObjects $ResultsFile1 $ResultsFile2
    CloseExcel
    

    这成功了!唯一奇怪的是,如果您坚持使用括号逗号编码风格,Powershell 不会引发错误。参数根本没有通过。

    【讨论】:

      猜你喜欢
      • 2020-12-01
      • 2019-01-22
      • 2014-05-11
      • 2017-02-10
      • 1970-01-01
      • 2014-12-28
      • 2014-05-19
      • 2021-09-05
      • 2020-11-01
      相关资源
      最近更新 更多