1

Я написал сценарий 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, но я занимался другим программированием и знаю разницу между передачей переменной по ссылке и по значению.

1 ответ1

1

Как только я отправил это, я думал о вероятном ответе. Я проверил и достаточно уверен, что 2, которые требуют ref, являются офисом 2010, и тот, который не хочет, это 2007.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .