Windows 2003、2008、2008r2サーバーのネットワークがあります。「Microsoft.Update」comオブジェクトを使用してローカルマシンにパッチを当てるために書いたPowerShellスクリプトがあります。(Windows Update PowerShell Remotingに似てい ます。)私のスクリプトはローカルでうまく機能しますが、管理するサーバーの数がかなり多いため、リモートでその機能を使用したいと思います。その場合は落ちます(解決されなかった他の投稿と同様)。
ただし、失敗を特定のクラスの2つのメソッドに絞り込むことができました。
(New-Object -ComObject "Microsoft.Update.Session").CreateUpdateDownloader()
(New-Object -ComObject "Microsoft.Update.Session").CreateUpdateInstaller()
これらを管理者としてローカルでPowerShellで実行しても、問題はありません。invoke-command(またはenter-session、またはwinrs)を使用しようとすると、次のエラーが発生します。(これはlocalhostでテストしていますが、どのホストでも実行できます。credsspやkerberosなどのさまざまな認証方法も試しました。)
PS C:\> Invoke-Command -ComputerName localhost -ScriptBlock { (New-Object -ComObject "microsoft.update.session").createUpdateDownloader()}
Exception calling "CreateUpdateDownloader" with "0" argument(s): "Access is denied. (Exception from HRESULT: 0x80070005
(E_ACCESSDENIED))"
+ CategoryInfo : NotSpecified: (:) [], MethodInvocationException
+ FullyQualifiedErrorId : ComMethodTargetInvocation
これはブログでバグとして言及されているのを見たことがありますが、その主張に対するバックアップはありません。2つの回避策があり、どちらも私を幸せにしません。
- psexecを使用して、システムユーザーとしてコマンドを実行します。PSExecは、信頼できないことが判明したため、使用しないようにしています。純粋なpowershellソリューションも必要です。
- スケジュールされたタスクを作成し、システムユーザーとしてスクリプトを実行するように指示します。(この投稿を介して)これは厄介なだけでなく、更新結果がありません。ファイルにログを記録するか、データベースなどを更新する必要があります。
多くの人が直面している問題のように思えるので、リモートでホスト上で更新を実行する他の方法を利用できます。
メッセージを説明しているが、理由や回避策は説明していないドキュメントが見つかりました。
戻り値成功した場合、S_OKを返します。それ以外の場合は、COMまたはWindowsエラーコードを返します。
This method can also return the following error codes. Return code Description E_INVALIDARGA parameter value is invalid. E_ACCESSDENIED This method cannot be called from a remote computer.
リモートコンピューターを使用していることはどのようにしてわかりますか?