У меня есть сеть с серверами Windows 2003, 2008 и 2008r2. У меня есть сценарий powershell, который я написал для исправления локального компьютера с помощью com-объектов «Microsoft.Update». (Аналогично Windows Update PowerShell Remoting .) Мой скрипт прекрасно работает локально, но я бы хотел использовать его функции удаленно, так как у меня есть достаточное количество серверов для управления. В этом случае он падает (аналогично тому другому посту, который не был решен).
Однако я смог сократить количество ошибок до двух методов в конкретном классе.
(New-Object -ComObject "Microsoft.Update.Session").CreateUpdateDownloader()
(New-Object -ComObject "Microsoft.Update.Session").CreateUpdateInstaller()
Если вы запускаете их в PowerShell локально как администратор, у вас не возникнет проблем. Если вы попытаетесь использовать команду invoke (или 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 - это то, что я пытаюсь не использовать, поскольку оно оказалось ненадежным. Я также хотел бы чистого решения 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.
Как он узнал, что я на удаленном компьютере?