У мене є мережа з серверами Windows 2003, 2008 та 2008r2. У мене є скрипт powerhell, який я написав, щоб виправити локальну машину, використовуючи ком-об’єкти "Microsoft.Update". (Подібно до Windows Update PowerShell Remoting .) Мій сценарій працює чудово локально, але я хотів би використовувати його функції віддалено, оскільки у мене є достатня кількість серверів для управління. У такому випадку він падає вниз (подібно до тієї іншої посади, яка не була вирішена).
Однак мені вдалося звузити збій до двох методів у певному класі.
(New-Object -ComObject "Microsoft.Update.Session").CreateUpdateDownloader()
(New-Object -ComObject "Microsoft.Update.Session").CreateUpdateInstaller()
Якщо ви запускаєте їх у локальній області як адміністратор, у вас проблем не виникне. Якщо ви спробуєте використати команду 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
Я бачив це в блогах як помилку, але без резервного копіювання цього твердження. Є два обхідні шляхи, і обидва не роблять мене щасливим.
- Використовуйте psexec для запуску команд як користувач системи. PSExec - це те, що я намагаюся не використовувати, оскільки він виявився ненадійним. Мені б також хотілося чистого рішення щодо повноважень.
- Створіть заплановане завдання і скажіть, що запустити ваш скрипт як користувач системи. (через t його повідомлення ) Це не тільки безладно, але тоді я не буду мати результати оновлення. Мені доведеться увійти у файл або оновити базу даних чи щось.
Я відкритий для інших способів дистанційного запуску оновлень на хості, оскільки це, здається, є проблемою, з якою стикаються багато людей.
Я знайшов деякі документи, які пояснюють повідомлення, але не причину чи рішення.
Повернене значення повертає 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.
Як дізнатися, що я на віддаленому комп’ютері?