在 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
运算符
我需要创建一个 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
运算符