在 Powershell 中找到 Excel-addin 的路径

Find the Path for Excel-addin in Powershell

我需要创建一个 Powershell 脚本来搜索我们创建的自定义安装的 Excel-Addin。然后我需要获取插件所在的路径,然后将支持文件复制到该路径。

问题是我不知道 Addin 的安装路径,它可能因机器而异,所以我需要能够按名称获取 Addin 对象,然后检索 Addin 的路径和然后将支持文件复制到该路径。

我找到的所有示例都使用路径+名称:

try {
       $Excel = New-Object -ComObject Excel.Application
} catch {
          Write-Error 'Microsoft Excel does not appear to be installed.'
}

try {
      $ExcelAddins = $Excel.Addins
      $AddinInstalled = $ExcelAddins | ? { $_.Name -eq "MyAddinName" } // this doesnt work, needs path

      if (!$AddinInstalled ) {        
        Write-Host ('Add-in "' + $Addin.BaseName + '" Not installed!')
      } else {
         // now get the path and copy supporting file to the path
         ...
         ...
         Write-Host ('Add-in "' + $Addin.BaseName + '" supporting file copied successfully!')
      }
  } finally {
              $Excel.Quit()
  }

上面的代码不起作用,因为我没有提供路径。有没有一种方法可以按名称获取插件或循环遍历插件并检查名称,直到找到我需要的插件,然后获取路径以便我可以将支持文件复制到该路径?

$Excel.Addins returns 对象具有比名称更多的属性,但名称 属性 是插件文件名并包括扩展名,如 .XLL.XLAM.

您可以探查的另一个 属性 是 .Title

尝试

try {
    $Excel = New-Object -ComObject Excel.Application

    $Excel.Visible = $false
    # you may also try Where-Object { $_.Title -match 'MyAddinName' }
    $myAddIn = $Excel.Addins | Where-Object { $_.Name -match 'MyAddinName' }

    if ($myAddIn) {
        Write-Host "AddIn '$($myAddIn.Name)' found in '$($myAddIn.Path)'"
        # copy the supporting file to the Addin's path
        Copy-Item -Path 'X:\YourSupportingFile' -Destination $myAddIn.Path
    }
    else {
        Write-Warning "Addin 'MyAddinName' not found"
    }
}
catch {
    Write-Warning "Error:`r`n$($_.Exception.Message)"
}
finally {
    if ($Excel) {
        # close and cleanup COM object
        $Excel.Quit()
        $null = [System.Runtime.Interopservices.Marshal]::ReleaseComObject($Excel)
        [System.GC]::Collect()
        [System.GC]::WaitForPendingFinalizers()
    }
}

这假设只找到一个具有该名称的插件..
您还可以使用使用通配符

-like '*MyAddinName*' 而不是正则表达式 -match 运算符