Проблеми з віддаленими серверами виправлення з використанням winrm та Microsoft.Update.Session


10

У мене є мережа з серверами 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.

Як дізнатися, що я на віддаленому комп’ютері?


Це здається набагато складнішим, ніж встати в екземпляр WSUS і пройти цей маршрут. Ви розглядали цей маршрут?
Driftpeasant

Ви не можете точно контролювати, коли буде куплений сервер, і гарантувати, що він буде завантажуватися тільки з WSUS. Ми використовуємо його для самих оновлень. Мені буде цікаво, чи можете ви спровокувати це зробити це на вимогу.
рекобата

У мене така ж проблема з використанням PowerShell Web Access на сервері 2012, за кулісами він також використовує видалення PowerShell. Та сама помилка.
Пітер Гандорф

1
Можливий відповідь тут serverfault.com/a/474031/23300
Nic

@reconbot Я знаю його дуже старе питання, але я також стикаюся з проблемою. Чи були у вас якісь виправлення чи альтернативний спосіб?
Машина обчислення

Відповіді:



0

Таку команду потрібно запускати з привілеями на віддаленій машині, звідки потрібно запускатись як користувач адміністратора домену або адміністратор на віддаленій машині.

Якщо ваш перший випадок, я не маю допомоги, але ви лише локальний адміністратор, а не віддалений, користуйтеся get-credentialтаким.

$cred = get-credential

Invoke-Command -ComputerName localhost -credential $cred -scriptblock {}

Інша та більш пряма форма нехай Invoke-Commandзапитає облікові дані:

Invoke-Command -scriptblock {$ENV:username} -Credential ""

Я працюю з обліковими записами облікового запису адміністратора, помилка вказує "Цей метод неможливо викликати з віддаленого комп'ютера."
рекобата

0

Мені вдалося це зробити, встановивши кінцеву точку JEA на віддаленому сервері для запуску як локальний віртуальний рахунок.

З https://docs.microsoft.com/en-us/powershell/jea/session-configurations :

Локальний віртуальний рахунок

Якщо ролі, що підтримуються цією кінцевою точкою JEA, використовуються для керування локальною машиною, а локального облікового запису адміністратора достатньо для успішного запуску команд, слід налаштувати JEA для використання локального віртуального облікового запису. Віртуальні акаунти - це тимчасові облікові записи, які є унікальними для конкретного користувача та тривають лише протягом їх сеансу PowerShell. На сервері або робочій станції-учасниці віртуальні облікові записи належать до групи адміністраторів місцевого комп’ютера і мають доступ до більшості системних ресурсів. У контролері домену Active Directory віртуальні облікові записи належать до групи домену адміністраторів домену.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.