PS скрипт [ref] работает на одном компьютере, а не на других


2

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

Ответы:


1

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


ОП добавил цитату в исходное сообщение. Я переместил это в ответ
Дейв
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.