パスの 6 か月間、問題なくパスワード有効期限スクリプトを実行しています。スクリプトは静的な html ファイルを読み取り、メモリ内のコンテンツの一部を変更します。その後、有効期限が切れるパスワードを持つすべてのユーザーに html メールが送信されます。
このスクリプトは、過去 1 週間程度で壊れたようです。さらに調査した結果、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 Update の後、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 OS で実行されています。
誰にもアイデアはありますか?
ComObject でメソッドを使用するように呼び出す他の質問でいくつかの提案を見てきましたIHTMLDocument2_write()
が、このメソッドを呼び出そうとすると存在しません。
アップデート :
私のバージョンの Powershell では、これがINDEED BROKENであることを確認できました。
同じOSで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 で何が使用できるか知っている人はいますか?