Я написал сценарий powershell для одной из компаний, которую я поддерживаю (когда я говорю «написал», я имею в виду, конечно, то, что я собрал большую часть его из Интернета и изменил его). Он показывает селектор папок, и вы выбираете папку с документами Word, и он преобразует их в PDF, сохраняя имя. Я написал и протестировал все это на W10, и когда я решил развернуть его на пару пользователей с помощью W7, у него были проблемы. Я обновил их версию PS до 4, и на первом компьютере, который решил это, и он работает без нареканий. На втором после обновления начал жаловаться на эту строчку
$doc.saveas([ref] $path, [ref] $wdFormatPDF)
со следующим:
Argument: '1' should not be a System.Management.Automation.PSReference. Do
not use [ref].
At C:\Users\----\Desktop\word2pdf.ps1:50 char:2
+ $doc.saveas([ref] $path, [ref] $wdFormatPDF)
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [], MethodException
+ FullyQualifiedErrorId : RefArgumentToNonRefParameterMsg
Там написано Не используйте [ref], поэтому я удаляю его, и оно работает.
$doc.saveas($path, $wdFormatPDF)
Перейдите к третьему и возьмите с собой недавно измененный скрипт, обновите PS, и теперь я получаю противоположное сообщение:
Argument: '1' should be a System.Management.Automation.PSReference. Use [ref].
Добавьте его обратно, и он отлично работает.
Мой вопрос, что, черт возьми, здесь происходит? Я довольно новичок в PS, но я занимался некоторым другим программированием и знаю разницу между передачей переменной по ссылке и по значению.