Как сделать переключатель между способами передачи параметра в функцию: переключатель для [ref]

Для автоматизации обработки документов использую скрипт Powershell и готовые документы Excel,Word с макросами. Пример кода вызывающего нужный макрос:

    switch($type) {
        'docx'{ 
                $app = new-object -comobject word.application
                $doc=$app.Documents
                $macros="procedureDoc"
            }
    
        'xlsx'{ 
                $app = new-object -comobject excel.application
                $doc=$app.Workbooks
                $macros="procedureXls"
            }           
        }

$doc.open($macros_file)     # открытие документа

$app.run ($macros, $param1) # запуск макроса с передачей параметра

$doc.close                  # закрытие документа

$app.quit()                 # закрытие приложения

При передаче параметра в VBA-процедуру в Word нужно использовать [ref]

$app.run ($macros, [ref]$param1) # запуск макроса с передачей параметра

Без этого возникает ошибка:

Аргумент "2" должен быть System.Management.Automation.PSReference. Используйте [ref].

Кроме этого, в одних версиях MS Office нужно использовать эту опцию, а в других - нет.

Как решить задачу: в коде скрипта переопределять класс ref, менять параметр $param1 или др.?

P.S. Код $param1=[ref]$param1 - не рабочий. Можно конечно добавить ещё одну проверку switch, но хотелось бы попроще.


Ответы (1 шт):

Автор решения: Алексей Семенов

А если все в switch вставить

PS C:\Users\alHaos> $useRef = $true
PS C:\Users\alHaos> .($useRef ? {Write-Warning "[ref] used"} : {Write-Warning "[ref] not used"})
WARNING: [ref] used
PS C:\Users\alHaos> $useRef = $false
PS C:\Users\alHaos> .($useRef ? {Write-Warning "[ref] used"} : {Write-Warning "[ref] not used"})
WARNING: [ref] not used
PS C:\Users\alHaos>
→ Ссылка