在过去的 6 个月里,我一直在运行密码过期脚本,没有任何问题。该脚本将读取静态 html 文件并更改内存中的一些内容,然后将 html 电子邮件发送给所有密码到期的用户。
剧本似乎在过去一周左右就坏了。经过进一步调查,我已将错误范围缩小到 Powershell 应该创建新 ComObject 并将该 HTML 文件写入 ComObject 的部分。
我现在得到错误:
No coercion operator is defined between types 'System.Array' and 'System.String'
At line:1 char:1
+ $html.write($source);
+ ~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : OperationStopped: (:) [], InvalidOperationException
+ FullyQualifiedErrorId : System.InvalidOperationException
当我运行以下代码行时会发生上述错误:
$html = New-Object -ComObject "HTMLFile"
$src = Get-Content -path "./passwordreminder.html" -Raw
$html.write($src)
当我调用该write()
方法时,我得到了错误。
自从过去 6 个月一直运行良好以来,我能想到的唯一改变的是我的 powershell 版本。我相信当我开始运行这个脚本时,我使用的是 Powershell v4.0,但在 Windows 更新之后,我猜 Powershell 现在是 v5.0。见下文 :
Name Value
---- -----
PSVersion 5.0.10105.0
WSManStackVersion 3.0
SerializationVersion 1.1.0.1
CLRVersion 4.0.30319.34209
BuildVersion 10.0.10105.0
PSCompatibleVersions {1.0, 2.0, 3.0, 4.0...}
PSRemotingProtocolVersion 2.3
该脚本在 Windows Server 2012 R2 操作系统上运行。
有人有想法么?
我在其他问题中看到了一些建议,要求IHTMLDocument2_write()
在 ComObject 上使用该方法,但是当我尝试调用它时该方法不存在。
更新 :
我能够确认这在我的 Powershell 版本中确实被破坏了。
我只能在具有相同操作系统但低于 Powershell 版本的不同服务器上测试相同的代码:
Name Value
---- -----
PSVersion 4.0
WSManStackVersion 3.0
SerializationVersion 1.1.0.1
CLRVersion 4.0.30319.34014
BuildVersion 6.3.9600.17090
PSCompatibleVersions {1.0, 2.0, 3.0, 4.0}
PSRemotingProtocolVersion 2.2
并且代码按预期工作。
有人知道这个新版本的 Powershell 可以使用什么吗?