Попробуйте установить надстройку powerpoints с помощью сценария powershell

#powershell #powerpoint #add-in

#powershell #powerpoint #надстройка

Вопрос:

Я создал надстройку для PowerPoint и нашел скрипт для установки powershell. Это сценарий:

 [CmdletBinding()]
Param(
    [Parameter(Position=0,Mandatory=$true)]
        [String]$AddinPath,
    [Parameter(Mandatory=$false)]
        [Switch]$Reinstall,
    [Parameter(Mandatory=$false)]
        [Switch]$NoCopy
)

# Ensure that any errors we receive are considered fatal
$ErrorActionPreference = 'Stop'

# The path to the default folder to copy Excel add-ins
$ExcelAddinsPath = Join-Path $env:APPDATA 'MicrosoftAddIns'

if (Test-Path -Path $AddinPath -PathType Leaf) {
    $Addin = Get-ChildItem -Path $AddinPath
    if ($Addin.Extension -NotIn ('.ppam')) {
        Write-Error 'The file does not appear to be a Power Point add-in.'
    }
} else {
    Write-Error 'The add-in file path does not appear to be valid.'
}

try {
    Add-type -AssemblyName office
    $Application = New-Object -ComObject powerpoint.application
    $Application.visible = [Microsoft.Office.Core.MsoTriState]::msoTrue
    $slideType = "microsoft.office.interop.powerpoint.ppSlideLayout" -as [type]

    $blanklayout = $slideType::ppLayoutTitleOnly

    $presentation = $application.Presentations.add()

    $slide = $Presentation.Slides.Add($presentation.Slides.Count   1, 15)
} catch {
    Write-Error 'Microsoft Excel does not appear to be installed.'
}

try {

    $PowerPointAddins = $Application.Addins

    $AddinInstalled = $PowerPointAddins | ? { $_.Name -eq $Addin.Name }


    if (!$AddinInstalled -or $Reinstall) {
        if (!(Test-Path -Path $ExcelAddinsPath -PathType Container)) {
            New-Item -Path $ExcelAddinsPath -ItemType Directory  
        }

        if (!$NoCopy) {
            Copy-Item -Path $Addin.FullName -Destination $ExcelAddinsPath -Force
            $Addin = Get-ChildItem -Path (Join-Path $ExcelAddinsPath $Addin.Name)
            $Addin.IsReadOnly = $true
        }
        
     
        $NewAddin = $presentation.Application.AddIns.Add('C:UsersAdminAppDataRoamingMicrosoftAddInsAddinthatIcreated.ppam', $true)
        $NewAddin.Installed = $true
        Write-Host ('Add-in "'   $Addin.BaseName   '" successfully installed!')
    } else {
        Write-Host ('Add-in "'   $Addin.BaseName   '" already installed!')
    }
} finally {
    $Application.Quit()
}
 

Этот скрипт берет файл .ppam и помещает в AddinFile, но выдает ошибку и это сообщение:

Не удается найти перегрузку для «Добавить» и количество аргументов: «2»

это сообщение появляется, когда сценарий выполняет эту инструкцию (строка 60):

 $NewAddin = $presentation.Application.AddIns.Add('C:UsersAdminAppDataRoamingMicrosoftAddInsAddinthatIcreated.ppam', $true)
 

в чем источник проблемы и как я могу ее решить? Спасибо за помощь!

Комментарии:

1. Где вы взяли скрипт? Согласно документам, AddIns.Add имеет только один параметр.

2. Я взял с этой страницы powershellgallery.com/packages/PSWinGlue/0.3.1/Content /… но проблема в том, что этот скрипт предназначен для добавления в Excel

3. Как и выше — он принимает только один аргумент. Попробуйте удалить ,$true из этой строки, хотя это может не сработать в любом случае; вам нужно будет проверить, что весь скрипт работает для Powerpoint, а не для методов Excel.

Ответ №1:

Проблема вызвана смешиванием методов Excel и PowerPoint. Хотя имена совпадают, прототипы функций — нет. Приемлемые версии можно найти в Google excel addins.add и powerpoint addins.add , которые предоставят ссылки на страницы документации Microsoft.

Для Powerpoint AddIns.Add() метод принимает один параметр — имя файла.

Для Excel AddIns.Add() метод принимает два параметра: имя файла и копировать файл.

В качестве разрешения измените вызов, чтобы в нем был только один параметр, например,

 $NewAddin = $presentation.Application.AddIns.Add('C:UsersAdminAppDataRoamingMicrosoftAddInsAddinthatIcreated.ppam')