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つの回避策があり、どちらも私を幸せにしません。
多くの人が直面している問題のように思えるので、ホスト上でリモートで更新を実行する他の方法を利用できます。
一部のドキュメント が見つかりましたが、メッセージは説明されていますが、理由や回避策は説明されていません。
戻り値成功した場合、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.
リモートコンピューターを使用していることはどのようにしてわかりますか?
MSがWUApi経由でそれを行うことを許可していないので、あなたはそれを一致させることはできません。
詳細はここにあります: http://msdn.Microsoft.com/en-us/library/windows/desktop/aa387288(v = vs.85).aspx
これを行うには、スケジュールされたタスクを使用してみてください。
このようなコマンドは、リモートマシン上で特権を使用して実行する必要があり、ドメイン管理ユーザーまたはリモートマシンの管理者として実行する必要があります。
あなたが最初のケースである場合、私は助けがありませんが、あなたはローカル管理者であり、リモートではありません。get-credential
このような。
$cred = get-credential
Invoke-Command -ComputerName localhost -credential $cred -scriptblock {}
別のより直接的な形式はlet Invoke-Command
認証情報を要求:
Invoke-Command -scriptblock {$ENV:username} -Credential ""
リモートサーバーでJEAエンドポイントをローカル仮想アカウントとして実行するように設定することで、これを機能させることができました。
https://docs.Microsoft.com/en-us/powershell/jea/session-configurations から:
ローカル仮想アカウント
このJEAエンドポイントでサポートされている役割がすべてローカルマシンの管理に使用され、ローカル管理者アカウントでコマンドを正常に実行できる場合は、ローカル仮想アカウントを使用するようにJEAを構成する必要があります。仮想アカウントは、特定のユーザーに固有の一時的なアカウントであり、PowerShellセッションの期間だけ持続します。メンバーサーバーまたはワークステーションでは、仮想アカウントはローカルコンピューターのAdministratorsグループに属しており、ほとんどのシステムリソースにアクセスできます。 Active Directoryドメインコントローラでは、仮想アカウントはドメインのDomain Adminsグループに属しています。