首页 > 解决方案 > 如何使用 PowerShell 将可选参数传递给对象方法?

问题描述

我想调用一个对象的方法。此方法有许多可选参数,但我只想使用一个。如何在 PowerShell 中做到这一点?

示例:对象Workbooks有方法OpenText链接),它有许多可选参数,但我只想传递参数的值DecimalSeparator,所有其他我不想指定。

在其他语言中,我会这样做:

$App.Workbooks.OpenText($path, DecimalSeparator=$decSeparator)

请告诉我如何在 PowerShell 中执行此操作?

标签: powershell

解决方案


你有没有试过,或者你说你试过但没有用?

如果 API 或 DOM 需要传递一个或多个参数,即使它是空白/null,也必须传递它。PowerShell 无法控制这一点。

您已经提供了 DOM / 方法的链接,它应该明确说明它允许和不允许的内容。

快速浏览一下文章,说只有一个参数是必需的,所有其他参数都是可选的。链接的文档中没有任何内容表明它们是位置的,除了必需的。因此,您可以按任何顺序传递,也可以根据需要传递任意数量/数量。

关于是否可以在 Office 文档中执行 X 或 Y 的最简单方法是在 Office 中打开文件,启用宏记录器,正常执行 GUI 中的步骤,允许记录器捕获所有操作,然后查看生成的 VBA 并将其转换为在 PowerShell 中使用。

转换 VBA 以在 PowerShell 中使用是一个陈旧的问答。

将代码从 Excel 宏转换为 PowerShell

   lrow = Range("G" & Rows.Count).End(xlUp).Row
    Set MR = Range("G2:G" & lrow)
    For Each cell In MR
        If UCase(Trim(cell.Value)) = "FALSE" Then
            cell.Interior.ColorIndex = 3
        End If
    Next


$objExcel = New-Object -ComObject Excel.Application

$objExcel.Visible = $true
$objExcel.DisplayAlerts = $false

$filePath = "c:\logs\2015-04-23.csv"

$xlsFilePath = Get-Item -Path $filePath | % { Join-Path (Split-Path $_ -Parent) "$($_.BaseName).xls" } 

$workBook = $objExcel.Workbooks.Open($filePath)
$workSheet = $WorkBook.sheets | select -First 1

$xlup = -4162

$lrow = $workSheet.cells.Range("G" + $workSheet.Rows.Count).End($xlup).Row

$workSheet.cells.Range("G2:G" + $lrow) | % { 
    $value = $_.Text
    if($value.ToUpper() -eq "TRUE"){
       $_.Interior.ColorIndex = 3 
    }
}

$WorkBook.SaveAs($xlsFilePath, 18) 
$objExcel.Quit()

我只是把它放在这里作为提醒,但根据您的帖子片段,我假设您已经知道这一点。然而,这是以防万一。


推荐阅读