![PS 脚本 [ref] 在某些计算机上有效,但在其他计算机上无效](https://linux22.com/image/1534861/PS%20%E8%84%9A%E6%9C%AC%20%5Bref%5D%20%E5%9C%A8%E6%9F%90%E4%BA%9B%E8%AE%A1%E7%AE%97%E6%9C%BA%E4%B8%8A%E6%9C%89%E6%95%88%EF%BC%8C%E4%BD%86%E5%9C%A8%E5%85%B6%E4%BB%96%E8%AE%A1%E7%AE%97%E6%9C%BA%E4%B8%8A%E6%97%A0%E6%95%88.png)
我为我支持的一家公司编写了一个 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 还不熟悉,但我做过一些其他编程,而且我知道通过引用和通过值传递 var 之间的区别。
答案1
我一发布它,就想到了可能的答案。我检查了一下,果然需要引用的两个是 Office 2010,不需要引用的是 2007。