10 votos

Problemas con el parcheo de los servidores de forma remota mediante winrm y Microsoft.La actualización.Sesión

Tengo una red con windows 2003, 2008 y 2008r2 servidores. Tengo un script de powershell que escribí a la revisión de un equipo local con el "de Microsoft.Actualización de" objetos com. (Similar a la Actualización de Windows PowerShell Remoting.) Mi script funciona de maravilla a nivel local, pero me gustaría utilizar las funciones de forma remota como tengo un buen número de servidores para gestionar. En ese caso se cae abajo (de forma similar a los otros post, el cual no fue resuelto).

Yo era, sin embargo, capaces de reducir el fracaso a dos métodos en una clase en particular.

(New-Object -ComObject "Microsoft.Update.Session").CreateUpdateDownloader()
(New-Object -ComObject "Microsoft.Update.Session").CreateUpdateInstaller()

Si ejecuta estas en un powershell localmente como un admin, no tendrás problemas. Si intenta utilizar invocar el comando (o entrar a la sesión, o winrs) obtendrá el siguiente error. (Esto es de prueba con localhost, pero cualquier máquina que se va a hacer. También he intentado con diferentes métodos de autenticación, tales como credssp y 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

He visto mencionado en blogs como un error, pero con ninguna copia de seguridad. Existen dos soluciones y tanto no me hacen feliz.

  • Uso psexec para ejecutar comandos como el usuario del sistema. PSExec es lo que soy tratando de no usar, ya que ha demostrado ser poco fiables. También me gustaría un puro powershell solución.
  • Crear una tarea programada y que se lo diga a ejecutar la secuencia de comandos como el usuario del sistema. (a través de la tde su post) Esto no es sólo desordenado pero entonces ya no quiero tener la actualización de los resultados. Voy a tener que iniciar una sesión en un archivo o actualización de una base de datos o algo.

Estoy abierto a otras formas de ejecutar las actualizaciones en un host de forma remota ya que este parece ser un tema un montón de personas que están golpeando.

He encontrado algo de documentación que explica el mensaje, pero no de la razón o de la solución.

Valor De Retorno Devuelve S_OK en caso de éxito. De lo contrario, devuelve un COM o código de error de 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.

¿Cómo sé que estoy en un equipo remoto?

6voto

River Puntos 21

Usted simplemente no puede hacerlo mate, ser causa de MS no permite hacerlo a través de WUApi.

Los detalles se pueden encontrar aquí: http://msdn.microsoft.com/en-us/library/windows/desktop/aa387288(v=vs.85).aspx

Puedes probar a utilizar tarea Programada para hacer esto.

2voto

motobói Puntos 377

La orden tiene que ser ejecutado con privilegios en la máquina remota, de ahí la necesidad de que se ejecute como un administrador de dominio de usuario o de administrador en la máquina remota.

Si el tuyo es el primer caso, no tengo ninguna ayuda, pero son solo de administración local, no remota, el uso de get-credential como esta.

$cred = get-credential

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

Una alternativa y la más directa, es dejar Invoke-Command pedir credenciales:

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

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by: